Désactiver le préchargeur
Tutoriels Linux Panneaux de contrôle

Installer Froxlor sur Linux (Ubuntu, Debian)

Documentation / Tutoriels Linux / Panneaux de contrôle / Installer Froxlor sur Linux (Ubuntu, Debian)
Mis à jour le 20/09/2026
13 vues
Intermédiaire
40 minutes

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
Votre serveur :

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.

Poser le nom d'hôte
hostnamectl set-hostname serveur.exemple.ca
echo '203.0.113.42 serveur.exemple.ca serveur' >> /etc/hosts
hostname -f
Résultat attendu
serveur.exemple.ca
Mettre à jour le système
apt update && apt upgrade -y

2Ajouter 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.

UbuntuAjouter le dépôt et installer Froxlor
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
Résultat attendu
...
Setting up froxlor (2.3.14-1) ...
...
DebianAjouter le dépôt et installer Froxlor
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
Résultat attendu
...
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.

Lire le mot de passe, puis créer l'utilisateur froxroot
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%';"
Résultat attendu
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.

Lancer l'installateur en ligne de commande
cd /var/www/html/froxlor && bin/froxlor-cli froxlor:install
Résultat attendu
Froxlor 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.

Vérifier que le panneau répond
curl -sk -o /dev/null -w '%{http_code}\n' --resolve serveur.exemple.ca:443:203.0.113.42 https://serveur.exemple.ca/
Résultat attendu
200
  1. Ouvrez https://serveur.exemple.ca dans votre navigateur, avec le nom d'hôte de votre serveur.
  2. 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.
  3. 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.

Réserver le panneau à votre adresse, en http et en https
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_*.conf
Résultat attendu
Checking 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
Vérifier depuis une autre machine que le panneau ne répond plus
curl -sk -o /dev/null -w '%{http_code}\n' --resolve serveur.exemple.ca:443:203.0.113.42 https://serveur.exemple.ca/
Résultat attendu
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.

Activer ufw
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
Résultat attendu
...
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 :

Lire le mot de passe du client, puis créer le client et le domaine
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 --force
Résultat attendu
Checking froxlor file permissions...OK
Running "tasks" job (forced)
Ce qui a été créé sur le disque
stat -c '%n %U:%G %A' /var/customers/webs/monsite; ls /var/customers/webs/monsite; getent passwd monsite
Résultat attendu
/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.

Déposer une page, puis vérifier que le site répond, sans attendre le DNS
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/
Résultat attendu
200

8Les commandes du quotidien

Toutes les commandes froxlor-cli se lancent depuis /var/www/html/froxlor.

Les domaines hébergés
bin/froxlor-cli froxlor:api-call admin Domains.listing
Les paramètres d'une commande de l'API (ici, créer un client)
bin/froxlor-cli froxlor:api-call admin Customers.add -s
Appliquer tout de suite les changements du panneau, sans attendre le cron
bin/froxlor-cli froxlor:cron --force
La version, le nom d'hôte, la pile installée
bin/froxlor-cli froxlor:install --show-sysinfo
Mettre à jour Froxlor, comme le reste du système
apt update && apt upgrade -y
Les règles du pare-feu
ufw status verbose
Les ports en écoute
ss -ltn
Voir les ports en écoute
ss -ltn | awk 'NR>1{print $4}' | sed 's/.*://' | sort -n -u | tr '\n' ' '
Résultat attendu
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

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.

💬 Écrivez-nous sur Messenger !