Configuration d’un VPS Ubuntu 24.04 (OVH / IONOS) sécurisé et installation de Dokploy

« Créer, former, transmettre. »

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.