Prérequis
- Un serveur sous Ubuntu 24.04 ou Debian 13 : voir nos VPS au Canada
- Une connexion SSH ouverte en root : Se connecter en SSH à votre VPS
- Un serveur vierge, sans serveur web, base de données ni serveur de courriel déjà installés
- 4 Go de RAM et 10 Go d'espace disque libre
- Un nom d'hôte complet pour le serveur, comme serveur.exemple.ca, avec un enregistrement DNS A qui pointe déjà sur son adresse IP : le panneau ne répond qu'à ce nom
- L'adresse IP publique de votre poste, pour lui réserver l'accès au panneau
Froxlor est un panneau d'hébergement libre et léger : depuis un navigateur, il crée des clients avec leurs domaines, leurs bases de données, leurs boîtes de courriel et leurs comptes FTP. Ce guide l'installe depuis son dépôt officiel, lance son installateur en ligne de commande, réserve le panneau à votre adresse, et crée un premier client avec son domaine. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.
1Nommer le serveur et le mettre à jour
Remplacez 203.0.113.42 par l'adresse IP de votre serveur.
hostnamectl set-hostname serveur.exemple.ca
echo '203.0.113.42 serveur.exemple.ca serveur' >> /etc/hosts
hostname -fserveur.exemple.ca
apt update && apt upgrade -y2Ajouter le dépôt Froxlor et installer le paquet
Le paquet installe Apache, MariaDB, PHP et les serveurs de courriel et FTP. Enchaînez tout de suite avec l'étape 3 : tant que l'installation n'est pas terminée, la page d'installation répond à tout Internet.
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
curl -sSLo /usr/share/keyrings/deb.froxlor.org-froxlor.gpg https://deb.froxlor.org/froxlor.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.froxlor.org-froxlor.gpg] https://deb.froxlor.org/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/froxlor.list'
apt update && apt install -y froxlor... Setting up froxlor (2.3.14-1) ... ...
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
curl -sSLo /usr/share/keyrings/deb.froxlor.org-froxlor.gpg https://deb.froxlor.org/froxlor.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.froxlor.org-froxlor.gpg] https://deb.froxlor.org/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/froxlor.list'
apt update && apt install -y froxlor... Setting up froxlor (2.3.14-1) ... ...
3Créer l'utilisateur MariaDB de Froxlor
Froxlor crée lui-même les bases et les utilisateurs de vos clients : il lui faut pour ça un utilisateur MariaDB avec tous les droits. Choisissez un mot de passe sans espace ni guillemet.
read -s -p 'Mot de passe de froxroot : ' MDP; echo
mysql -e "CREATE USER 'froxroot'@'localhost' IDENTIFIED BY '$MDP'; GRANT ALL PRIVILEGES ON *.* TO 'froxroot'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"
mysql -e "SELECT user, host FROM mysql.user WHERE user LIKE 'frox%';"User Host froxroot localhost
4Lancer l'installateur
L'installateur pose ses questions en trois sections ; Entrée garde la valeur entre crochets. Il vous faut le mot de passe de froxroot, un mot de passe pour l'utilisateur froxlor de la base, et celui du compte admin du panneau. À la fin, répondez yes : il installe et configure les services, une minute environ.
cd /var/www/html/froxlor && bin/froxlor-cli froxlor:installFroxlor installation
====================
Use advanced installation mode? (yes/no) [no]:
>
System check
------------
[INFO] Your system is running with PHP 8.4.24
[WARNING] The following php extensions could not be found but are recommended
gnupg
Create database and user
------------------------
MySQL-Server [localhost]:
>
Privileged database user [froxroot]:
>
Password for privileged user:
>
Unprivileged database user [froxlor]:
>
Password for unprivileged user:
>
Database name [froxlor]:
>
Backup and overwrite database if exists? (yes/no) [yes]:
>
Let's create the main administrator user.
-----------------------------------------
Name [Administrator]:
>
Username [admin]:
>
Password:
>
Confirm password:
>
Email []:
> admin@exemple.ca
Use the email address above as sender address. If unchecked, please specify a sender address below. (yes/no) [yes]:
>
Sender []:
>
Details about your server
-------------------------
Distribution [Debian Trixie (13.x)]:
>
Primary IPv4 address (if applicable) [203.0.113.42]:
>
Primary IPv6 address (if applicable) []:
>
Server name (FQDN, no ip-address) [serveur.exemple.ca]:
>
Enable SSL usage (yes/no) [yes]:
>
Webserver [Apache 2.4]:
>
PHP backend [PHP-FPM]:
>
Enable the official newsfeed (external source: https://inside.froxlor.org/news/) (yes/no) [yes]:
>
One last step...
----------------
[OK] Run the following command to finish the installation:
/var/www/html/froxlor/bin/froxlor-cli froxlor:config-services -a '{"distro":"trixie", ...}' --yes-to-all
Execute command now? (yes/no) [no]:
> yes
Creating missing certificate /etc/ssl/froxlor_selfsigned.pem
--- Configuring: HTTP ---
Configuring 'apache24'
...
--- Configuring: SYSTEM ---
...
Configuring 'cron'
All services have been configured
(une minute environ ; sur Ubuntu, la distribution proposée est Ubuntu Noble (24.04))5Ouvrir le panneau
Le panneau répond au nom d'hôte du serveur, en http comme en https, pas à son adresse IP.
curl -sk -o /dev/null -w '%{http_code}\n' --resolve serveur.exemple.ca:443:203.0.113.42 https://serveur.exemple.ca/200
- Ouvrez https://serveur.exemple.ca dans votre navigateur, avec le nom d'hôte de votre serveur.
- Le navigateur avertit que le certificat n'est pas reconnu : Froxlor en a créé un lui-même pour le nom d'hôte. Cliquez sur Avancé, puis Continuer vers le site.
- Identifiant admin, avec le mot de passe donné à l'étape 4.
6Réserver le panneau à votre adresse et activer le pare-feu
Le panneau répond à tout Internet
Il partage les ports 80 et 443 avec les sites que vous hébergerez : un pare-feu ne peut pas le fermer sans fermer les sites. La réservation se fait dans Apache, avec une directive que Froxlor garde dans sa base et réécrit dans le vhost du panneau à chaque passage de son cron.
Remplacez 198.51.100.7 par l'adresse IP publique de votre poste, dans les deux commandes.
cd /var/www/html/froxlor
bin/froxlor-cli froxlor:api-call admin IpsAndPorts.update '{"id":1,"specialsettings":"<Location />\nRequire ip 198.51.100.7\n</Location>"}' > /dev/null
bin/froxlor-cli froxlor:api-call admin IpsAndPorts.update '{"id":2,"ssl_specialsettings":"<Location />\nRequire ip 198.51.100.7\n</Location>"}' > /dev/null
bin/froxlor-cli froxlor:cron --force
grep -A1 'Location />' /etc/apache2/sites-enabled/10_froxlor_ipandport_*.confChecking froxlor file permissions...OK Running "tasks" job (forced) /etc/apache2/sites-enabled/10_froxlor_ipandport_203.0.113.42.443.conf:<Location /> /etc/apache2/sites-enabled/10_froxlor_ipandport_203.0.113.42.443.conf-Require ip 198.51.100.7 -- /etc/apache2/sites-enabled/10_froxlor_ipandport_203.0.113.42.80.conf:<Location /> /etc/apache2/sites-enabled/10_froxlor_ipandport_203.0.113.42.80.conf-Require ip 198.51.100.7
curl -sk -o /dev/null -w '%{http_code}\n' --resolve serveur.exemple.ca:443:203.0.113.42 https://serveur.exemple.ca/403 (403 : Apache refuse l'adresse ; vos sites, eux, répondent à tout le monde)
Le pare-feu ferme le reste : la base de données, le courriel et FTP ne répondent plus qu'à ce que vous ouvrez. Si vous hébergez du courriel, ouvrez aussi 25, 465, 587, 993 et 995 ; pour FTP, 21.
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable... Firewall is active and enabled on system startup
7Créer un premier client et son domaine
Dans le panneau, c'est Customers, puis Create customer, puis Domains, puis Create domain. La même chose en deux commandes de l'API, avec le mot de passe du client :
read -s -p 'Mot de passe du client : ' MDP; echo
cd /var/www/html/froxlor
bin/froxlor-cli froxlor:api-call admin Customers.add "{\"new_loginname\":\"monsite\",\"new_customer_password\":\"$MDP\",\"email\":\"client@exemple.ca\",\"firstname\":\"Client\",\"name\":\"Exemple\",\"diskspace_ul\":1,\"traffic_ul\":1,\"subdomains_ul\":1,\"emails_ul\":1,\"email_accounts_ul\":1,\"email_forwarders_ul\":1,\"email_quota_ul\":1,\"ftps_ul\":1,\"mysqls_ul\":1,\"phpenabled\":1,\"allowed_phpconfigs\":[1]}" > /dev/null
bin/froxlor-cli froxlor:api-call admin Domains.add '{"domain":"monsite.exemple.ca","customerid":1,"phpsettingid":1}' > /dev/null
bin/froxlor-cli froxlor:cron --forceChecking froxlor file permissions...OK Running "tasks" job (forced)
stat -c '%n %U:%G %A' /var/customers/webs/monsite; ls /var/customers/webs/monsite; getent passwd monsite/var/customers/webs/monsite monsite:monsite drwxr-x--- goaccess monsite:x:10000:10000:Client Exemple:/var/customers/webs/monsite/:/bin/false
Vos fichiers vont dans ce dossier, au nom de l'utilisateur monsite. Tant qu'il est vide, le domaine répond 403.
echo '<h1>monsite</h1>' > /var/customers/webs/monsite/index.html
chown monsite:monsite /var/customers/webs/monsite/index.html
curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: monsite.exemple.ca' http://203.0.113.42/200
8Les commandes du quotidien
Toutes les commandes froxlor-cli se lancent depuis /var/www/html/froxlor.
bin/froxlor-cli froxlor:api-call admin Domains.listingbin/froxlor-cli froxlor:api-call admin Customers.add -sbin/froxlor-cli froxlor:cron --forcebin/froxlor-cli froxlor:install --show-sysinfoapt update && apt upgrade -yufw status verbosess -ltnss -ltn | awk 'NR>1{print $4}' | sed 's/.*://' | sort -n -u | tr '\n' ' '21 22 25 53 80 110 143 443 465 587 953 993 995 3306 4190 11332 11333 11334 (Debian ajoute 2000, un port de Dovecot, et 5355, un service du système)
La base de données (3306) et les services internes sont dans cette liste mais ne répondent pas depuis l'extérieur : le pare-feu de l'étape 6 ne les ouvre pas.
Erreurs fréquentes
L'image du serveur a été construite sur un autre disque et GRUB demande où se réinstaller : choisissez le disque de la machine (celui que lsblk affiche, en général /dev/sda) ; la mise à jour continue ensuite.
L'installateur ne se relance pas une fois Froxlor en place. Les mises à jour passent par apt, comme le reste du système.
L'extension ne sert qu'à chiffrer les sauvegardes des clients avec une clé PGP. Sans elle, tout le reste fonctionne.
Le panneau répond au nom d'hôte du serveur, pas à son adresse. Ouvrez https://serveur.exemple.ca, avec un enregistrement DNS A qui pointe sur le serveur.
L'identifiant est admin et le mot de passe est celui donné à l'étape 4, pas celui de froxroot ni celui de root.
L'adresse IP publique de votre poste a changé, ou ce n'est pas celle de l'étape 6. Retrouvez-la dans votre session SSH avec echo $SSH_CLIENT, puis rejouez les deux commandes IpsAndPorts.update et le cron avec cette adresse.
Un client avec PHP doit recevoir au moins une configuration PHP : allowed_phpconfigs, avec 1 pour la configuration par défaut.
Chaque compte, admin compris, a une adresse de courriel qui lui est propre. Donnez au client une autre adresse que celle de l'administrateur.
Son dossier /var/customers/webs/monsite est vide. Déposez-y un fichier index.html, ou index.php, au nom de l'utilisateur monsite.
Froxlor en service
Le panneau répond à son nom d'hôte, réservé à votre adresse, et votre premier domaine est servi. Pour un panneau plus complet avec le DNS géré, voyez Installer ISPConfig ; pour un panneau qui gère aussi les domaines en ligne de commande, Installer Virtualmin.