Guide de déploiement

Portainer vs Dokploy : lequel déployer en 2026 ?

Déployer sur un VPS Cloud →

Comparatif

Portainer vs Dokploy : lequel déployer en 2026 ?

Portainer et Dokploy sont deux interfaces web pour gérer vos conteneurs Docker sur VPS. Portainer est l'outil historique — stable, documenté, mais bousculé en 2026 par la fin de l'édition Community et par des CVEs de score 9.4. Dokploy est le challenger open-source, PaaS-ready, qui adresse exactement ce que Portainer CE ne couvre plus. Ce guide tranche : architecture, licences, sécurité, migration.

12 min de lecture10 étapes
Sommaire· Pourquoi self-héberger une interface de déploiement sur un VPS1/14
  1. 01Pourquoi self-héberger une interface de déploiement sur un VPS
  2. 02Ce que vous gagnez à déployer ce template sur votre VPS
  3. 03Situation de Portainer en 2026 : la fin de l'édition Community
  4. 04CVEs critiques Portainer 2.x : vérifier et patcher
  5. 05CVE Dokploy : le secret hardcodé (< 0.29.3)
  6. 06Prérequis pour héberger Portainer ou Dokploy
  7. 07Ressources minimales recommandées
  8. 08Déployer Dokploy sur un VPS (≥ 0.29.13)
  9. 09Portainer en alternative — installation rapide
  10. 10Portainer 2.x vs Dokploy — comparatif complet 2026
  11. 11Quand rester sur Portainer, quand passer à Dokploy
  12. 12Migration de Portainer vers Dokploy : étapes concrètes
  13. 13Dépannage : erreurs courantes
  14. 14Les deux outils ne sont pas toujours exclusifs

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 des années. Avec Portainer 3, l'éditeur a arrêté l'édition Community : Portainer 3 n'a pas d'édition CE, et CE 2.45 est la dernière version Community publiée. Portainer 3 est livré en Business Edition (gratuite jusqu'à trois nœuds avec la licence « 3 Nodes Free »), donne la priorité à Kubernetes pour les nouvelles fonctions et conserve Docker, Swarm et Podman. Les instances CE 2.45 continuent de fonctionner et reçoivent les correctifs de la 2.45 LTS jusqu'en août 2027, mais plus aucune nouvelle fonction.

Cette bascule a plusieurs conséquences pratiques. D'abord, les nouvelles installations qui cherchent une interface Docker gratuite se trouvent sans roadmap côté CE. Ensuite, les images portainer/portainer-ce continuent d'exister et de recevoir les correctifs de la branche 2.45, mais n'évolueront plus. Enfin — et c'est le point critique — Portainer 2.x a accumulé des failles critiques, dont deux CVE de score 9.4, qui restent exploitables 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 CVE touchent toutes les branches de Portainer jusqu'aux versions correctives ci-dessous (les versions antérieures à 2.33.0, en fin de vie, ne seront pas corrigées) :

CVE-2026-44848 (CVSS 9.4) — Les endpoints /plugins/* de l'API Docker relayée par Portainer échappent au contrôle d'autorisation. Un utilisateur standard (non administrateur) ayant accès à un environnement Docker peut installer et activer un plugin Docker, qui s'exécute en root sur votre hôte.

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. D'autres failles critiques ont été publiées depuis, corrigées en 2.45.2 et 2.45.3 et sans correctif sur la branche 2.39 : visez la 2.45.3 LTS, dernière version publiée au 7 novembre 2026.

Pour vérifier votre version :

docker exec portainer /portainer --version

Pour mettre à jour :

docker pull portainer/portainer-ce:lts
docker stop portainer
docker rm portainer
docker run -d \
  --name=portainer \
  --restart=always \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

Si vous êtes en dessous de 2.45.3, mettez à jour avant de continuer à utiliser l'instance. Cette commande ne publie l'interface que sur 127.0.0.1 : accédez-y par un tunnel SSH (ssh -L 9443:127.0.0.1:9443 user@votre-vps, puis https://localhost:9443) ou via un reverse proxy. Ajoutez -p 8000:8000 uniquement si vous utilisez des agents Edge. Portainer exposé sur Internet sans patch est un vecteur d'intrusion directe sur votre hôte Docker.

CVE Dokploy : le secret hardcodé (< 0.29.3)

Dokploy n'est pas exempt de vulnérabilités. CVE-2026-45631 (CVSS 10.0) touchait les installations par défaut antérieures à 0.29.3 : quand la variable BETTER_AUTH_SECRET n'était pas définie — et le script d'installation ne la définissait pas —, le code retombait sur une valeur codée en dur, identique sur toutes les instances. N'importe qui pouvait alors forger un jeton et prendre le compte administrateur, sans authentification.

Le correctif est arrivé en 0.29.3, avec un script de migration à lancer après la mise à jour. De nombreuses autres failles critiques (injections de commandes, contrôles d'accès manquants) ont été corrigées jusqu'en 0.29.13 : ne restez pas en dessous, et visez la dernière version (0.31.0 au 7 novembre 2026). Pour vérifier et mettre à jour :

# Vérifier la version installée (tag de l'image du service)
docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'

# Mettre à jour via le script officiel
curl -sSL https://dokploy.com/install.sh | sh -s update

Depuis 0.29.3, Dokploy lit BETTER_AUTH_SECRET dans un secret Docker (variable BETTER_AUTH_SECRET_FILE). Après mise à jour, vérifiez que le service l'utilise bien :

docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

Si la ligne est absente, lancez le script de sécurité officiel publié avec la 0.29.3 : il génère un secret unique et met à jour le service.

curl -sSL https://dokploy.com/security/0.29.3.sh | bash

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 : l'éditeur ne publie pas de minimum matériel ; la 2.45.3 est validée avec Docker 28.5.1 et 29.8.1 — tourne sur un petit VPS
  • Dokploy : au moins 2 Go de RAM et 30 Go de disque selon la documentation officielle — PostgreSQL et Traefik tournent à côté du service principal
  • 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)

  1. Installation via le script officiel

    La méthode la plus simple et la plus à jour :

    curl -sSL https://dokploy.com/install.sh | sh

    Le script installe Docker si nécessaire, initialise Docker Swarm, crée les services dokploy et dokploy-postgres ainsi que le conteneur dokploy-traefik (configuration dans /etc/dokploy/), génère un BETTER_AUTH_SECRET aléatoire stocké dans un secret Docker et démarre l'ensemble.

  2. Vérifier le BETTER_AUTH_SECRET

    Après installation, assurez-vous que le service lit bien son secret :

    docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

    Vous devez voir une ligne BETTER_AUTH_SECRET_FILE=/run/secrets/... : la valeur (64 caractères hexadécimaux générés par openssl rand -hex 32) reste dans le secret Docker et n'apparaît jamais en clair. Si la ligne est absente (installation ancienne), lancez le script de sécurité officiel :

    curl -sSL https://dokploy.com/security/0.29.3.sh | bash
  3. Accéder à l'interface et créer le compte admin

    Dokploy écoute sur le port 3000 par défaut. Ouvrez http://<ip-de-votre-vps>:3000 dans 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.

  4. Configurer votre domaine et activer HTTPS

    Dans Settings → Web Server → 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. Une fois l'interface servie en HTTPS, fermez le port 3000 à Internet, comme le recommande le guide de durcissement de Dokploy : ufw seul ne filtre pas les ports publiés par Docker, passez par ufw-docker ou par le pare-feu de votre hébergeur.

  5. Mettre à jour Dokploy

    Dokploy expose un bouton de mise à jour dans Settings → Web Server, ou utilisez le script :

    curl -sSL https://dokploy.com/install.sh | sh -s update

    Avec l'argument update, le script tire l'image de la dernière version et met à jour le service dokploy sans écraser votre configuration ni vos projets. Sans cet argument, il relance une installation complète, qui échoue sur un serveur déjà installé (ports 80, 443 et 3000 occupés).

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 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

Accès par tunnel SSH (ssh -L 9443:127.0.0.1:9443 user@votre-vps, puis https://localhost:9443) ou via un reverse proxy. Remplacez lts par 2.45.3 pour fixer la version et éviter les mises à jour silencieuses.

Portainer 2.x vs Dokploy — comparatif complet 2026

Faites défiler le tableau

CritèrePortainer 2.xDokploy
LicenceCE gratuite (licence zlib)Apache 2.0 (hors dossier /proprietary)
Futur CECE arrêtée à 2.45 (correctifs jusqu'en août 2027)Roadmap active, communauté croissante
CVEs activesCVE-2026-44848 + 44849 (CVSS 9.4) et avis ultérieurs : viser 2.45.3CVE-2026-45631 (CVSS 10.0) si < 0.29.3 ; viser ≥ 0.29.13
RAM minimaleNon publiée (outil léger)2 Go (PostgreSQL + Traefik inclus)
Déploiement GitOui (stacks Compose depuis un dépôt Git)Oui (GitHub, GitLab, Gitea, Bitbucket)
Certificats TLSManuel (reverse proxy externe)Automatique Let's Encrypt via Traefik
Templates d'appsOui (bibliothèque intégrée)Oui (Docker Compose importé)
Registry privéOuiOui
CI/CD intégréMises à jour GitOps (polling ou webhook)Webhooks Git + notifications
KubernetesOui (CE et BE)Non (Docker Compose / Swarm)
Multi-serveurOui (endpoints)Oui (serveurs distants via SSH)
InterfaceMature, exhaustiveModerne, 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 à jour (2.45.3 au 7 novembre 2026) 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 (Portainer 3 n'a plus d'édition Community) pour votre usage Docker.

Migration de Portainer vers Dokploy : étapes concrètes

  1. 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=bridge

    Pour chaque stack Portainer, récupérez le docker-compose.yml depuis l'interface (Stacks → votre stack → Editor) ou depuis le système de fichiers.

  2. 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 /data

    Répétez pour chaque volume critique.

  3. 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 portainer

    Puis 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.

  4. 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 votre docker-compose.yml ou pointez vers votre dépôt Git
    4. Configurez les variables d'environnement depuis l'onglet Environment
    5. Assignez un domaine — Dokploy configure Traefik automatiquement

  5. Vé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). Sur un dépôt privé, une cause fréquente est une clé SSH absente ou non autorisée côté dépôt. Dokploy permet d'en créer une dans Settings → SSH Keys (bouton Create SSH Key), à ajouter comme clé de déploiement du dépôt ; pour GitHub, GitLab, Gitea ou Bitbucket, vous pouvez aussi connecter le fournisseur dans les paramètres Git de Dokploy.

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, guide complet de déploiement avec Dokploy et la mise à jour critique CVE Dokploy 2026.

Déployez Dokploy sur votre VPS en quelques minutes

Sur un VPS ServOrbit avec accès root, Dokploy s'installe manuellement et met en place Docker, Traefik et les certificats TLS. Installez une version ≥ 0.29.13, patchée et prête pour la production.