Pourquoi self-héberger une interface de déploiement sur un VPS
Un VPS nu livré avec Docker vous expose à une seule interface : la ligne de commande. C'est suffisant pour une machine, laborieux pour cinq, et ingérable pour une équipe. Une interface web centralise les logs, les mises à jour d'images, les variables d'environnement et les certificats TLS — sans vous forcer à maintenir un pipeline CI/CD complet dès le premier jour.
Deux familles s'affrontent : les gestionnaires (Portainer, Yacht) qui exposent Docker comme il est, et les PaaS légers (Dokploy, Coolify, CapRover) qui ajoutent une couche de déploiement — branches Git, domaines automatiques, certificats Let's Encrypt. La frontière n'est pas cosmétique : elle détermine si vos développeurs peuvent déployer seuls ou s'ils ont besoin d'un accès SSH.
Ce que vous gagnez à déployer ce template sur votre VPS
- Déploiement depuis Git ou Docker Hub en quelques clics, sans SSH
- Gestion des certificats TLS automatique via Let's Encrypt
- Variables d'environnement versionnées et isolées par projet
- Logs centralisés et accès terminal web depuis le navigateur
- Tableau de bord de santé : CPU, RAM, statut des conteneurs
- Gestion des volumes et des réseaux Docker sans mémoriser les commandes
Situation de Portainer en 2026 : la fin de l'édition Community
Portainer CE (Community Edition) a été la référence du genre pendant six ans. En 2026, Portainer a restructuré son modèle de licence : l'édition Community est désormais limitée à Kubernetes ou devient payante (Portainer Business). Les instances Portainer 2.x déjà déployées continuent de fonctionner, mais elles n'évoluent plus sous CE.
Cette bascule a plusieurs conséquences pratiques. D'abord, les nouvelles installations qui cherchent une interface Docker gratuite se trouvent sans roadmap claire côté CE. Ensuite, les images portainer/portainer-ce:latest continuent d'exister et de se mettre à jour, mais le canal communautaire a perdu de sa visibilité. Enfin — et c'est le point critique — Portainer 2.x a accumulé deux CVEs de score 9.4 qui restent actives sur toute installation non patchée.
Si vous tournez encore sur Portainer 2.x, la question n'est pas « migrer ou rester » par principe : elle est « est-ce que mon instance est à jour, et est-ce que le risque est acceptable ? »
CVEs critiques Portainer 2.x : vérifier et patcher
Deux CVEs affectent les versions Portainer 2.33.0 à 2.40.x :
CVE-2026-44848 (CVSS 9.4) — Les endpoints /plugins/* ne sont pas protégés par authentification. Un attaquant non authentifié peut interroger et modifier les plugins Docker de votre hôte via l'API Portainer.
CVE-2026-44849 (CVSS 9.4) — Le mécanisme de restrictions Swarm peut être contourné : un utilisateur Portainer avec des droits réduits peut exécuter des actions normalement réservées à l'administrateur sur un cluster Swarm.
Versions corrigées : 2.33.8, 2.39.2, 2.41.0.
Pour vérifier votre version :
docker exec portainer /app/portainer --versionPour mettre à jour :
docker pull portainer/portainer-ce:latest
docker stop portainer
docker rm portainer
docker run -d \
--name=portainer \
--restart=always \
-p 8000:8000 -p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latestSi vous êtes en dessous de 2.33.8 ou de 2.39.2 selon votre branche, mettez à jour avant de continuer à utiliser l'instance. Portainer exposé sur Internet sans patch est un vecteur d'intrusion directe sur votre hôte Docker.
CVE Dokploy : le secret hardcodé (< 0.29.13)
Dokploy n'est pas exempt de vulnérabilités. CVE-2026-45631 (CVSS 10.0) affecte les versions antérieures à 0.29.13 : un secret d'authentification était hardcodé dans le code source, permettant à n'importe qui connaissant ce secret de s'authentifier sur n'importe quelle instance Dokploy.
Cette CVE est corrigée depuis la version 0.29.13. Pour vérifier et mettre à jour :
# Vérifier la version installée
docker exec dokploy dokploy --version
# Mettre à jour via le script officiel
curl -sSL https://dokploy.com/install.sh | shDokploy utilise BETTER_AUTH_SECRET comme clé de session. Sur une installation antérieure à 0.29.13, cette valeur était statique dans le code. Après mise à jour, vérifiez que votre docker-compose.yml Dokploy déclare bien une valeur aléatoire forte :
grep BETTER_AUTH_SECRET /etc/dokploy/docker-compose.ymlSi la variable est vide ou absente, générez une nouvelle valeur et redémarrez :
export BETTER_AUTH_SECRET=$(openssl rand -hex 32)Prérequis pour héberger Portainer ou Dokploy
Les deux outils tournent sur Docker. Dokploy demande légèrement plus de ressources car il embarque une base de données PostgreSQL et un proxy Traefik en plus du service principal.
Ressources minimales recommandées
- Portainer 2.x : 1 vCPU, 512 Mo RAM, Docker 20+ — tourne sur le plus petit VPS
- Dokploy : 2 vCPU, 2 Go RAM, Docker 24+ — PostgreSQL et Traefik ajoutent ~400 Mo au démarrage
- Un domaine ou sous-domaine pointant vers votre VPS (Dokploy en a besoin pour ses certificats automatiques)
- Port 80 et 443 ouverts si vous utilisez Let's Encrypt via Traefik (Dokploy)
- Accès SSH root ou sudo pour l'installation initiale
Déployer Dokploy sur un VPS (≥ 0.29.13)
Installation via le script officiel
La méthode la plus simple et la plus à jour :
curl -sSL https://dokploy.com/install.sh | shLe script installe Docker si nécessaire, génère un
docker-compose.ymldans/etc/dokploy/, crée unBETTER_AUTH_SECRETaléatoire et démarre l'ensemble.Vérifier le BETTER_AUTH_SECRET
Après installation, assurez-vous que la variable est bien générée :
grep BETTER_AUTH_SECRET /etc/dokploy/docker-compose.ymlVous devez voir une chaîne aléatoire de 64 caractères. Si la variable est vide, générez-en une et redémarrez :
sed -i "s/BETTER_AUTH_SECRET=/BETTER_AUTH_SECRET=$(openssl rand -hex 32)/" /etc/dokploy/docker-compose.yml docker compose -f /etc/dokploy/docker-compose.yml up -dAccéder à l'interface et créer le compte admin
Dokploy écoute sur le port 3000 par défaut. Ouvrez
http://<ip-de-votre-vps>:3000dans votre navigateur. La première visite vous invite à créer le compte administrateur. Faites-le immédiatement — l'interface est publique jusqu'à ce que ce compte existe.Configurer votre domaine et activer HTTPS
Dans les paramètres Dokploy → Server → Domain, renseignez le FQDN (
dokploy.votredomaine.com). Traefik récupère automatiquement un certificat Let's Encrypt via ACME HTTP-01. Votre DNS doit pointer vers le VPS avant cette étape.Mettre à jour Dokploy
Dokploy expose un bouton Update dans ses paramètres, ou utilisez le script :
curl -sSL https://dokploy.com/install.sh | shLe script est idempotent : il met à jour l'image sans écraser votre configuration ni vos projets.
Portainer en alternative — installation rapide
Si vous préférez rester sur Portainer (instance existante ou choix délibéré), la commande de référence :
docker run -d \
--name=portainer \
--restart=always \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latestAccès sur https://<ip>:9443. Remplacez latest par 2.41.0 pour fixer la version et éviter les mises à jour silencieuses.
Portainer 2.x vs Dokploy — comparatif complet 2026
Faites défiler le tableau
| Critère | Portainer 2.x | Dokploy |
|---|---|---|
| Licence | CE gratuite (Docker uniquement) | Open-source (Apache 2.0) |
| Futur CE | Limité — CE 3.0 Kubernetes/payant | Roadmap active, communauté croissante |
| CVEs actives | CVE-2026-44848 + 44849 (CVSS 9.4) si < 2.41.0 | CVE-2026-45631 (CVSS 10.0) si < 0.29.13 |
| RAM minimale | 512 Mo | 2 Go (PostgreSQL + Traefik inclus) |
| Déploiement Git | Non (images Docker uniquement) | Oui (GitHub, GitLab, Gitea, Bitbucket) |
| Certificats TLS | Manuel (reverse proxy externe) | Automatique Let's Encrypt via Traefik |
| Templates d'apps | Oui (bibliothèque intégrée) | Oui (Docker Compose importé) |
| Registry privé | Oui | Oui |
| CI/CD intégré | Non | Webhooks Git + notifications |
| Kubernetes | Oui (BE payant) | Non (Docker Compose / Swarm) |
| Multi-serveur | Oui (endpoints) | Oui (agents distants) |
| Interface | Mature, exhaustive | Moderne, orientée projets |
Quand rester sur Portainer, quand passer à Dokploy
Rester sur Portainer 2.x a du sens dans trois situations : vous gérez déjà un cluster Docker Swarm ou Kubernetes avec des configurations complexes ; vous avez des équipes qui maîtrisent l'interface et des runbooks documentés dessus ; ou vous avez besoin du niveau de détail sur les réseaux et volumes que Portainer expose nativement.
Dans ces cas, la condition non négociable est d'être sur une version patchée (2.33.8, 2.39.2 ou 2.41.0) et de restreindre l'accès à l'interface : ne jamais exposer le port 9000/9443 directement sur Internet, placer Portainer derrière un reverse proxy avec authentification supplémentaire si des utilisateurs non-admins y accèdent.
Migrer vers Dokploy est la bonne décision si : vous partez de zéro sur un nouveau VPS ; vous voulez que vos développeurs déploient depuis Git sans SSH ; vous gérez plusieurs domaines et ne voulez pas maintenir Nginx/Traefik à la main ; ou vous cherchez une alternative après la fin de CE 3.0 pour votre usage Docker.
Migration de Portainer vers Dokploy : étapes concrètes
Exporter votre inventaire Portainer
Avant de migrer, listez vos stacks et conteneurs actifs :
docker ps --format 'table {{.Names}} {{.Image}} {{.Status}}' docker volume ls docker network ls --filter driver=bridgePour chaque stack Portainer, récupérez le
docker-compose.ymldepuis l'interface (Stacks → votre stack → Editor) ou depuis le système de fichiers.Sauvegarder les volumes de données
Les volumes nommés contiennent vos données applicatives. Sauvegardez-les avant toute opération :
docker run --rm \ -v <nom_volume>:/data \ -v $(pwd):/backup \ alpine tar czf /backup/<nom_volume>.tar.gz /dataRépétez pour chaque volume critique.
Installer Dokploy sur le même VPS ou un VPS dédié
Si vous migrez sur le même hôte, arrêtez d'abord Portainer pour libérer les ports :
docker stop portainer && docker rm portainerPuis lancez l'installation Dokploy (voir la procédure ci-dessus). Dokploy utilise Traefik sur les ports 80/443 — vérifiez qu'aucun autre service ne les occupe.
Recréer vos projets dans Dokploy
Dans Dokploy, créez un Compose Project pour chaque stack Portainer :
1. Projets → Nouveau projet
2. Ajoutez un service de type Docker Compose
3. Collez votredocker-compose.ymlou pointez vers votre dépôt Git
4. Configurez les variables d'environnement depuis l'onglet Environment
5. Assignez un domaine — Dokploy configure Traefik automatiquementVérifier et basculer le DNS
Déployez d'abord sur un sous-domaine de test (
test.votredomaine.com). Une fois validé, mettez à jour vos entrées DNS pour pointer vers Dokploy. Traefik émet les certificats automatiquement dès que le DNS se propage.
Dépannage : erreurs courantes
Portainer — interface inaccessible après mise à jour
Vérifiez que le volume portainer_data est bien monté. Une mise à jour sans volume nommé repart sur une base vide et redemande la création du compte admin.
Portainer — TLS handshake error sur le port 9443
Portainer génère un certificat auto-signé. Votre navigateur l'avertit à juste titre. Placez Portainer derrière un reverse proxy (nginx, Caddy) avec un vrai certificat pour un accès sécurisé en production.
Dokploy — Traefik ne génère pas de certificat
Cause la plus fréquente : le DNS n'est pas encore propagé vers le VPS. Vérifiez avec dig +short votre-domaine.com. Traefik attend une réponse DNS valide avant de lancer le challenge ACME. Si le DNS est bon, vérifiez que le port 80 est ouvert (ufw allow 80).
Dokploy — déploiement Git qui échoue silencieusement
Vérifiez les logs du service dans l'interface (Deployments → onglet Logs). L'erreur la plus commune est un BETTER_AUTH_SECRET manquant ou une clé SSH non configurée pour les dépôts privés. Dokploy propose un bouton Generate SSH Key dans les paramètres du projet pour les dépôts privés GitLab/GitHub.
Les deux outils ne sont pas toujours exclusifs
Portainer peut gérer plusieurs endpoints Docker distants depuis une seule interface — y compris un VPS sur lequel Dokploy est installé. Certaines équipes maintiennent Portainer comme outil d'observation et Dokploy comme outil de déploiement. Ce n'est pas un antipattern si les rôles sont clairement séparés. Le coût : deux surfaces à patcher. Si vous avez choisi cette architecture, assurez-vous que les deux outils sont à jour — voir les CVEs en début d'article.
Pour aller plus loin : les alternatives à Portainer CE 3.0, guide complet de déploiement avec Dokploy et la mise à jour critique CVE Dokploy 2026.