Prérequis
- Un serveur sous Ubuntu 24.04, Debian 13, AlmaLinux 9 ou Rocky Linux 9 : 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, qui n'est pas un domaine que vous hébergerez dessus
- L'adresse IP publique de votre poste, pour lui réserver l'accès au panneau
Virtualmin est un panneau d'hébergement libre bâti sur Webmin : depuis un navigateur, il crée des domaines avec leur site Apache, leur base de données, leur courriel et leur zone DNS. Ce guide l'installe, ouvre le panneau, le réserve à votre adresse, et crée un premier 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.
1Mettre à jour le système
apt update && apt upgrade -y... 225 upgraded, 8 newly installed, 0 to remove and 4 not upgraded. (les nombres dépendent de l'âge de l'image)
dnf upgrade -y... Complete!
2Lancer l'installateur
L'installateur reçoit tout en options et travaille seul pendant une quinzaine de minutes, en quatre phases. Il retire ufw et firewalld s'ils sont là, et pose son propre pare-feu.
sh -c "$(curl -fsSL https://download.virtualmin.com/virtualmin-install)" -- --bundle LAMP --hostname serveur.exemple.ca --yes▣◻◻◻ Phase 1 of 4: Check ... ▣▣◻◻ Phase 2 of 4: Setup ... ▣▣▣◻ Phase 3 of 4: Installation ... ▣▣▣▣ Phase 4 of 4: Configuration ... ▣▣▣ Cleaning up [SUCCESS] Installation Complete! [SUCCESS] If there were no errors above, Virtualmin is ready to be configured [SUCCESS] at https://serveur.exemple.ca:10000 (or [SUCCESS] https://203.0.113.42:10000). [WARNING] You will see a security warning in the browser on your first visit. [INFO] Extra Webmin modules are now provided as separate packages: [INFO] https://www.virtualmin.com/webmin-modules (entre 9 et 17 minutes selon le système)
--bundle LAMP- Apache. Mettez LEMP pour nginx ; le choix ne se change plus après.
--hostname serveur.exemple.ca- Le nom d'hôte complet du serveur. Pas un domaine que vous hébergerez dessus.
--yes- Aucune question.
3Ouvrir le panneau
curl -sk -o /dev/null -w '%{http_code}\n' https://127.0.0.1:10000/200
- Ouvrez https://203.0.113.42:10000 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 : Virtualmin en a créé un lui-même pour le nom d'hôte. Cliquez sur Avancé, puis Continuer vers le site.
- Identifiant root, avec le mot de passe root de votre serveur. Un utilisateur qui a sudo peut aussi se connecter avec le sien.
4Réserver le panneau à votre adresse
Tout Internet peut ouvrir votre panneau
Le pare-feu posé par l'installation ouvre les ports 10000 (Webmin, l'administration) et 20000 (Usermin, l'interface des utilisateurs) à toutes les adresses : ils répondent à n'importe qui sur Internet, avec pour seule barrière le mot de passe root.
Les règles sont dans /etc/webmin/nftables/rules.conf. La suite retire ces ports du jeu ouvert à tous, les réserve à une seule adresse, puis recharge le pare-feu. Remplacez 198.51.100.7 par l'adresse IP publique de votre poste.
grep -E 'elements = \{ 20|tcp dport' /etc/webmin/nftables/rules.conf elements = { 20, 21, 22, 25, 53, 80, 110, 143, 443, 465, 587, 853, 993, 995, 2222, 10000-10100, 20000, 49152-65535 }
tcp dport @profile_hosting_tcp_ports acceptsed -i 's/, 10000-10100, 20000//' /etc/webmin/nftables/rules.conf
sed -i '/tcp dport @profile_hosting_tcp_ports accept/i ip saddr 198.51.100.7 tcp dport { 10000-10100, 20000 } accept' /etc/webmin/nftables/rules.conf
/etc/webmin/nftables/apply-boot.plnft list table inet profile_hosting | grep -E 'elements = \{ 20|tcp dport' elements = { 20, 21, 22, 25, 53,
ip saddr 198.51.100.7 tcp dport { 10000-10100, 20000 } accept
tcp dport @profile_hosting_tcp_ports acceptVos sites, votre courriel et SSH ne sont pas touchés. Depuis votre adresse, le panneau répond ; depuis n'importe quelle autre, il ne répond plus. Le pare-feu est rechargé à chaque démarrage à partir de ce fichier.
curl -sk -o /dev/null -w '%{http_code}\n' --max-time 10 https://203.0.113.42:10000/000 (000 veut dire aucune réponse : c'est le résultat attendu depuis une adresse qui n'est pas la vôtre)
5Créer un premier domaine
Dans le panneau, c'est Create Virtual Server. La même chose en une commande, avec votre domaine ; le mot de passe est celui de l'utilisateur système du domaine :
read -s -p 'Mot de passe du domaine : ' MDP; echo
virtualmin create-domain --domain monsite.exemple.ca --pass "$MDP" --default-features... Re-loading Webmin .. .. done Re-starting Usermin .. .. done Restarting mail server .. .. done All done!
virtualmin list-domainsDomain Username Description ------------------------------ --------------- ------------------------------ monsite.exemple.ca monsite monsite.exemple.ca
stat -c '%n %U:%G %A' /home/monsite/public_html; ls /home/monsite/public_html/home/monsite/public_html monsite:monsite drwxr-x--- awstats-icon awstatsicons icon index.html
Vos fichiers vont dans ce dossier.
curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: monsite.exemple.ca' http://203.0.113.42/200
6Les commandes du quotidien
virtualmin list-domainsvirtualmin create-domain --domain monsite.exemple.ca --pass 'MotDePasse' --default-featuresvirtualmin delete-domain --domain monsite.exemple.cavirtualmin check-configpasswd rootsystemctl status webminsystemctl restart webminnft list table inet profile_hostingss -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 2222 3306 8461 8891 10000 10023 11000 20000 (Debian ajoute 5355 : un service du système)
ss -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 2222 3306 8891 10000 11000 20000 (Rocky ajoute 111 : 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 ne les ouvre pas.
Sur AlmaLinux et Rocky, l'installateur a désactivé SELinux.
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.
Votre système n'est pas dans la liste de l'installateur. CentOS Stream 9 et Fedora s'installent quand même en ajoutant --os-grade B à la commande de l'étape 2, avec un avertissement ; openSUSE et Alpine sont refusés même avec.
L'installateur a demandé un certificat Let's Encrypt pour le nom d'hôte et n'a pas pu l'obtenir, parce que ce nom ne pointe pas encore sur le serveur ; il en a posé un lui-même. Le chiffrement fonctionne quand même.
L'identifiant est root et le mot de passe est celui de root sur le serveur, le même qu'en SSH. S'il n'y en a pas, posez-en un avec passwd root.
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, remplacez l'adresse dans la ligne ip saddr de /etc/webmin/nftables/rules.conf, puis relancez /etc/webmin/nftables/apply-boot.pl.
L'installateur retire ufw et firewalld et pose son propre pare-feu nftables. Reportez vos règles dans /etc/webmin/nftables/rules.conf, puis relancez /etc/webmin/nftables/apply-boot.pl.
Une fois Virtualmin installé, l'installateur ne se relance pas. Les mises à jour passent par apt ou dnf, comme le reste du système.
Sur AlmaLinux et Rocky, l'installateur configure l'antivirus du courriel mais ne démarre pas son service ; virtualmin check-config le signale, parfois sous la forme « Could not connect to clamd on LocalSocket /run/clamd.scan/clamd.sock ». Lancez systemctl enable --now clamd@scan, puis relancez virtualmin check-config : il finit par « .. done ».
Virtualmin en service
Le panneau répond sur le port 10000, réservé à votre adresse, et votre premier domaine est servi. Pour un panneau plus léger sans courriel, voyez Installer CloudPanel ; pour Webmin seul, Installer Webmin.