Configuration d’un VPS Ubuntu 24.04 (OVH / IONOS) sécurisé et installation de Dokploy
Déployer ses applications (Node.js, Laravel, Vue, WordPress…) sur son propre serveur est plus simple qu'il n'y paraît, à condition de partir sur de bonnes bases. Dans ce tutoriel, nous allons configurer pas à pas un VPS sous Ubuntu 24.04 LTS (chez OVH, IONOS ou un autre hébergeur), le sécuriser, puis installer Dokploy, un PaaS auto-hébergé basé sur Docker.
1. Pré-requis
• Un VPS OVH ou IONOS avec Ubuntu 24.04 LTS
• Un accès root ou un utilisateur disposant des droits sudo
• Un accès SSH
• Un nom de domaine (facultatif mais recommandé pour activer le HTTPS)
2. Première connexion et mise à jour du système
Connectez-vous au serveur en remplaçant IP_DU_SERVEUR par l'adresse IP fournie par votre hébergeur :
ssh root@IP_DU_SERVEUR
Mettez ensuite le système à jour, puis redémarrez :
apt update && apt upgrade -y
reboot
Patientez quelques instants, puis reconnectez-vous.
3. Créer un utilisateur dédié (hors image OVH)
Travailler en root est à proscrire. Créez un utilisateur deploy et donnez-lui les droits sudo :
adduser deploy
usermod -aG sudo deploy
Testez la connexion avec ce nouvel utilisateur :
ssh deploy@IP_DU_SERVEUR
4. Sécuriser l'accès SSH
4.1 Mettre en place une clé SSH
Sur votre machine locale, générez une clé Ed25519 en la protégeant par une phrase secrète robuste (stockée dans un gestionnaire de mots de passe), puis copiez-la sur le serveur :
ssh-keygen -t ed25519
ssh-copy-id deploy@IP_DU_SERVEUR
4.2 Durcir la configuration SSH
sudo nano /etc/ssh/sshd_config
Modifiez ou vérifiez les directives suivantes :
Port 22
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
Si l'authentification par mot de passe reste active malgré cette configuration, vérifiez les fichiers du dossier sshd_config.d, notamment celui de cloud-init :
sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf
# Vérifier que la ligne suivante est présente :
PasswordAuthentication no
Redémarrez le service SSH :
sudo systemctl restart ssh
Important : avant de fermer votre session actuelle, ouvrez un second terminal et vérifiez que vous pouvez toujours vous connecter avec votre clé. Vous éviterez ainsi de vous enfermer dehors.
5. Configurer le pare-feu (UFW)
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status
6. Se protéger des attaques par force brute avec Fail2ban
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Vérifiez que le service tourne correctement :
sudo fail2ban-client status
7. Installer Docker
Docker est indispensable au fonctionnement de Dokploy.
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker deploy
newgrp docker
Installez le plugin Docker Compose, puis vérifiez les versions :
sudo apt install docker-compose-plugin -y
docker --version
docker compose version
8. Installer Dokploy
Dokploy est un PaaS auto-hébergé qui s'appuie sur Docker : il vous permet de déployer et gérer vos applications depuis une interface web, un peu à la manière d'un Heroku ou d'un Vercel privé.
curl -sSL https://dokploy.com/install.sh | bash
Le script installe les dépendances, lance Dokploy via Docker et expose l'interface sur le port 3000. Si nécessaire, ouvrez ce port temporairement :
sudo ufw allow 3000
L'interface est alors accessible à l'adresse http://IP_DU_SERVEUR:3000. Créez votre compte administrateur avec un mot de passe long et unique, de préférence généré par un gestionnaire de mots de passe.
⚠️ Ce port sera refermé dès que le HTTPS sera configuré (voir l'étape 11).
9. Sécuriser Dokploy avec un domaine et HTTPS
9.1 Configuration DNS
Chez votre registrar, créez un enregistrement de type A :
dokploy.mondomaine.fr → IP_DU_SERVEUR
9.2 Reverse proxy Traefik et Let's Encrypt
Dokploy intègre Traefik, qui gère automatiquement les certificats Let's Encrypt. Dans l'interface de Dokploy :
1. Ajoutez votre domaine
2. Activez le HTTPS (Let's Encrypt)
3. Forcez la redirection vers HTTPS
Les ports 80 (HTTP) et 443 (HTTPS) doivent rester ouverts.
10. Bonnes pratiques de sécurité Docker
• Ne jamais exposer le socket Docker publiquement
• Utiliser des variables d'environnement pour les secrets
• Activer les sauvegardes de Dokploy
• Privilégier les images officielles
11. Fermer le port 3000
Une fois Dokploy accessible via votre domaine en HTTPS, le port 3000 ne doit plus être exposé :
sudo ufw delete allow 3000
sudo ufw reload
sudo ufw status
Dokploy reste accessible uniquement à travers le reverse proxy sécurisé. Pensez à tester l'accès au port 3000 depuis l'extérieur : Docker publie ses ports en contournant parfois les règles UFW, il faut donc s'assurer que le port est réellement fermé.
12. Activer les mises à jour de sécurité automatiques
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
systemctl status unattended-upgrades
13. Configurer un fichier d'échange (swap)
Sur un VPS disposant de peu de RAM, un swap de 4 Go évite les plantages lors des builds Docker :
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
14. Notifications Telegram
Dokploy peut envoyer des notifications (déploiements, erreurs, sauvegardes) vers Telegram. Créez un bot avec @BotFather pour obtenir son jeton (Bot Token), récupérez l'identifiant de votre conversation (Chat ID), puis renseignez ces deux valeurs dans la section Notifications de Dokploy. Gardez ce jeton secret : il donne le contrôle total du bot.
15. Mettre à jour Dokploy
curl -sSL https://dokploy.com/install.sh | sh -s update
16. Bonnes pratiques complémentaires
• Sauvegardes automatiques (snapshots de l'hébergeur + stockage S3)
• Supervision avec Uptime Kuma ou Netdata
• Mises à jour régulières : sudo apt update && sudo apt upgrade -y
• Consultation des journaux d'un conteneur : docker logs nom_du_container
17. Récapitulatif des ports
• SSH : port 22 — Ouvert
• HTTP : port 80 — Ouvert
• HTTPS : port 443 — Ouvert
• Dokploy (interface) : port 3000 — Fermé après configuration du HTTPS
Conclusion
Vous disposez désormais d'un VPS sécurisé (accès SSH par clé, pare-feu, Fail2ban, mises à jour automatiques), d'un environnement Docker propre et d'un PaaS moderne pour déployer vos applications Node.js, Laravel, Vue et bien d'autres. Ce guide convient parfaitement à des environnements de production légère à moyenne.

