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
- 3 Go de RAM et 10 Go d'espace disque libre
- Un nom d'hôte pour le serveur, avec au moins deux points, comme serveur.exemple.ca
- L'adresse IP publique de votre poste, pour lui réserver l'accès au panneau
HestiaCP est un panneau d'hébergement libre : depuis un navigateur, il crée des sites, des bases de données, des comptes courriel, des comptes FTP, des zones DNS et des certificats, sur nginx et Apache. Ce guide l'installe, ouvre le panneau, le réserve à votre adresse, et crée un premier site. 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.
1Mettre à jour le système
apt update && apt upgrade -y... 212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded. (les nombres dépendent de l'âge de l'image)
2Retirer ufw
HestiaCP installe son propre pare-feu, iptables avec Fail2Ban, et refuse de s'installer tant que le paquet ufw est présent, même éteint. Sur Ubuntu, il l'est.
apt purge -y ufw... Purging configuration files for ufw (0.36.2-6) ...
Debian n'installe pas ufw : il n'y a rien à retirer. Si vous l'aviez ajouté vous-même, retirez-le avec apt purge -y ufw, sinon l'installateur s'arrête.
3Lancer l'installateur
L'installateur reçoit tout en options, ne pose aucune question, et travaille seul pendant une dizaine de minutes. Le mot de passe est d'abord lu au clavier, sans s'afficher, pour ne pas rester dans l'historique du terminal.
wget -q https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.shread -s -p 'Mot de passe du panneau : ' MDP; echo
bash hst-install.sh -u hestiaadmin -s serveur.exemple.ca -e admin@exemple.ca -p "$MDP" -y no==================================================================== Congratulations! You have successfully installed Hestia Control Panel on your server. Ready to get started? Log in using the following credentials: Admin URL: https://serveur.exemple.ca:8083 Backup URL: https://203.0.113.42:8083 Username: hestiaadmin Password: The password you chose during installation. ... [ ! ] IMPORTANT: You must restart the system before continuing!
-u hestiaadmin- Le nom du compte administrateur. Gardez-en un autre que admin : sur certaines images, un groupe admin existe déjà et l'installateur refuse ce nom.
-s serveur.exemple.ca- Le nom d'hôte du serveur, avec au moins deux points. Il devient aussi le premier site du panneau.
-e admin@exemple.ca- L'adresse de l'administrateur.
-p "$MDP"- Le mot de passe lu à la ligne du dessus.
-y no- Aucune question, et pas de redémarrage automatique à la fin.
4Redémarrer
L'installateur le demande à la fin : redémarrez, puis reconnectez-vous en SSH.
reboot5Ouvrir le panneau
curl -sk -o /dev/null -w '%{http_code}\n' https://127.0.0.1:8083/login/200
- Ouvrez https://203.0.113.42:8083 dans votre navigateur, avec l'adresse IP de votre serveur, en https, et le port.
- Le navigateur avertit que le certificat n'est pas reconnu : HestiaCP en a créé un lui-même. Cliquez sur Avancé, puis Continuer vers le site.
- Identifiant hestiaadmin, et le mot de passe que vous avez tapé à l'étape 3.
6Réserver le panneau à votre adresse
Tout Internet peut ouvrir votre panneau
L'installation ouvre le port 8083 à toutes les adresses : le panneau répond à n'importe qui sur Internet, avec pour seule barrière le mot de passe.
v-list-firewallRULE ACTION PROTO PORT IP SPND DATE ---- ------ ----- ---- -- ---- ---- 1 ACCEPT ICMP 0 0.0.0.0/0 no 2014-09-16 2 ACCEPT TCP 8083 0.0.0.0/0 no 2014-05-25 3 ACCEPT TCP 143,993 0.0.0.0/0 no 2014-05-25 4 ACCEPT TCP 110,995 0.0.0.0/0 no 2014-05-25 5 ACCEPT TCP 25,465,587 0.0.0.0/0 no 2018-11-07 6 ACCEPT TCP 53 0.0.0.0/0 no 2014-05-25 7 ACCEPT UDP 53 0.0.0.0/0 no 2014-05-25 8 ACCEPT TCP 21,12000-12100 0.0.0.0/0 no 2014-05-25 9 ACCEPT TCP 80,443 0.0.0.0/0 no 2014-09-24 10 ACCEPT TCP 22 0.0.0.0/0 no 2014-09-16
La règle 2 ouvre le panneau à 0.0.0.0/0, c'est-à-dire à tout le monde. La suite la retire, puis réserve le port à une seule adresse. Remplacez 198.51.100.7 par l'adresse IP publique de votre poste.
v-delete-firewall-rule 2v-add-firewall-rule ACCEPT 198.51.100.7 8083 TCP HESTIAv-list-firewallRULE ACTION PROTO PORT IP SPND DATE ---- ------ ----- ---- -- ---- ---- 1 ACCEPT ICMP 0 0.0.0.0/0 no 2014-09-16 2 ACCEPT TCP 143,993 0.0.0.0/0 no 2014-05-25 3 ACCEPT TCP 110,995 0.0.0.0/0 no 2014-05-25 4 ACCEPT TCP 25,465,587 0.0.0.0/0 no 2018-11-07 5 ACCEPT TCP 53 0.0.0.0/0 no 2014-05-25 6 ACCEPT UDP 53 0.0.0.0/0 no 2014-05-25 7 ACCEPT TCP 21,12000-12100 0.0.0.0/0 no 2014-05-25 8 ACCEPT TCP 80,443 0.0.0.0/0 no 2014-09-24 9 ACCEPT TCP 22 0.0.0.0/0 no 2014-09-16 10 ACCEPT TCP 8083 198.51.100.7 no 2026-09-19 (la date de la dernière ligne est celle du jour)
Les règles sont renumérotées après chaque suppression
La règle 3 est devenue la 2, et ainsi de suite. Avant de supprimer une autre règle, relisez la liste avec v-list-firewall pour prendre le bon numéro.
Vos sites et votre courriel ne sont pas touchés. Depuis votre adresse, le panneau répond ; depuis n'importe quelle autre, il ne répond plus, alors que SSH et vos sites restent joignables par tous.
curl -sk -o /dev/null -w '%{http_code}\n' --max-time 10 https://203.0.113.42:8083/login/000 (000 veut dire aucune réponse : c'est le résultat attendu depuis une adresse qui n'est pas la vôtre)
7Créer un premier site
Dans le panneau, c'est WEB, puis Add Web Domain. La même chose en une commande, avec votre domaine :
v-add-web-domain hestiaadmin monsite.exemple.cav-list-web-domains hestiaadminDOMAIN IP TPL SSL DISK BW SPND DATE ------ -- --- --- ---- -- ---- ----- serveur.exemple.ca 203.0.113.42 default no 0 0 no 2026-09-18 monsite.exemple.ca 203.0.113.42 default no 0 0 no 2026-09-19 (les dates sont celles de vos commandes)
stat -c '%n %U:%G %A' /home/hestiaadmin/web/monsite.exemple.ca/*/home/hestiaadmin/web/monsite.exemple.ca/cgi-bin hestiaadmin:hestiaadmin drwxr-x--x /home/hestiaadmin/web/monsite.exemple.ca/document_errors hestiaadmin:hestiaadmin drwxr-x--x /home/hestiaadmin/web/monsite.exemple.ca/logs hestiaadmin:hestiaadmin dr-xr-x--x /home/hestiaadmin/web/monsite.exemple.ca/private hestiaadmin:hestiaadmin drwxr-x--x /home/hestiaadmin/web/monsite.exemple.ca/public_html hestiaadmin:www-data drwxr-xr-x /home/hestiaadmin/web/monsite.exemple.ca/stats hestiaadmin:hestiaadmin dr-xr-x--x
Vos fichiers vont dans public_html.
curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: monsite.exemple.ca' http://203.0.113.42/200
8Changer le mot de passe administrateur
Le mot de passe du panneau se change depuis le serveur. Il prend effet tout de suite.
read -s -p 'Nouveau mot de passe : ' MDP; echo
v-change-user-password hestiaadmin "$MDP"9Les commandes du quotidien
v-list-sys-servicesv-list-firewallv-list-usersv-list-web-domains hestiaadminv-change-user-password hestiaadmin MotDePassesystemctl status hestiasystemctl restart hestiafail2ban-client statusss -ltnv-list-sys-servicesNAME STATE CPU MEM UPTIME ---- ----- --- --- ------ apache2 running 0 448 6 php8.5-fpm running 0 10 6 nginx running 0 40 6 bind9 running 0 353 6 exim4 running 0 17 6 dovecot running 0 0 6 clamav-daemon running 2.8 1027 6 spamd running 0.4 379 6 mariadb running 0.7 687 6 vsftpd running 0 0 6 cron running 0 0 6 ssh running 2 2 6 iptables running 0 0 0 fail2ban running 0.2 158 6 (les colonnes CPU, MEM et UPTIME varient)
ss -ltn | awk 'NR>1{print $4}' | sed 's/.*://' | sort -n -u | tr '\n' ' '21 22 25 53 80 110 143 443 465 587 783 953 993 995 3306 8080 8081 8083 8084 8443
ss -ltn | awk 'NR>1{print $4}' | sed 's/.*://' | sort -n -u | tr '\n' ' '21 22 25 53 80 110 143 443 465 587 783 953 993 995 3306 5355 8080 8081 8083 8084 8443
La base de données (3306), Apache (8080, 8443) et les services internes sont dans cette liste mais ne répondent pas depuis l'extérieur : le pare-feu 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.
Vous avez lancé bash hst-install.sh sans option. Relancez avec les options de l'étape 3 : le nom hestiaadmin ne touche pas au groupe admin.
L'installateur ne continue pas tant que ufw est installé, même s'il est éteint. Retirez-le avec apt purge -y ufw (étape 2), puis relancez l'étape 3.
L'installateur n'accepte que Debian 12 et 13, et Ubuntu 22.04, 24.04 et 26.04. AlmaLinux, Rocky, CentOS, Fedora, Alpine et openSUSE sont refusés avant que quoi que ce soit ne soit installé.
Un paquet du système était déjà cassé avant HestiaCP. dpkg --configure -a affiche lequel et pourquoi. Réglez-le, puis relancez l'étape 3.
C'est le certificat auto-signé posé par HestiaCP ; le chiffrement fonctionne quand même. Pour un certificat reconnu, il faut un nom de domaine qui pointe sur le serveur, puis la demande depuis le panneau.
L'adresse IP publique de votre poste a changé, ou ce n'est pas celle de la règle. Retrouvez-la dans votre session SSH avec echo $SSH_CLIENT, puis ajoutez-la : v-add-firewall-rule ACCEPT VOTRE_IP 8083 TCP HESTIA.
Posez-en un nouveau depuis le serveur avec v-change-user-password (étape 8).
Des lignes « ERROR 1045 (28000): Access denied for user 'root'@'localhost' » et « Warning: Failed to update Roundcube modules » peuvent apparaître sans empêcher l'installation d'aboutir. C'est le « Congratulations! » de la fin qui fait foi ; la base de données et le webmail fonctionnent.
Non. L'installateur les détecte et s'arrête. Repartez d'un serveur vierge.
HestiaCP en service
Le panneau répond sur le port 8083, réservé à votre adresse, et votre premier site est servi. Pour un panneau sur OpenLiteSpeed, voyez Installer CyberPanel ; pour un panneau plus léger, qui s'installe sur huit distributions, Installer Webmin.