Tutoriel | Dokploy : Le PaaS qui veut réconcilier l’Admin Linux avec le déploiement moderne

Article publié le 19 Janvier 2026

 

À l’heure où les notions de cloud souverain et d’écosystème « Auto-hébergé » reviennent en force, utiliser Dokploy sur votre infrastructure « on-premise » devient de plus en plus pertinent.

Dokploy est une solution open source qui permet de déployer en 10 minutes un PaaS sur des serveurs classiques, qu’ils soient sur votre cloud privé ou chez un cloud provider public (AWS, GCP ou Azure).

 

1) Installation

Pour ce tuto, j’ai utilisé une VM sous Debian 12 avec 4 vCPU et 16 Go de RAM afin d’être peinard.

L’installation est une formalité, même pour un admin débutant. Il suffit d’exécuter ce script avec l’utilisateur root :

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

 

Que fait ce script?

  • Vérification des dépendances : Il installe curl, sudo et git.

  • Setup Docker : S’il n’est pas présent, il installe Docker Engine.

  • Swarm Mode : Il exécute docker swarm init (si ce n’est pas déjà fait). C’est crucial car Dokploy utilise les services Swarm pour la gestion du réseau. (Même si je ne suis pas fan de Docker Swam il faut admettre que c’est bien pratique)

  • Pull & Run : Il télécharge l’image Docker de Dokploy et lance le service.

Une fois terminé, vérifiez que l’interface web est dispo sur le port 3000 et enregistrez votre premier utilisateur.

 

Sous le capot, un petit docker ps -a vous confirmera que tout tourne proprement.

 

2) Prise en main

Nous voici sur l’interface d’admin qui me parait fort sympathique. On est loin des usines à gaz surchargées : ici, c’est propre, sombre (le mode Dark par défaut, merci pour nos yeux d’admin) et surtout très structuré.

Voici ce qu’on retrouve dans la barre latérale et qui va devenir notre quotidien :

Le pilotage opérationnel (Home)

C’est ici que l’on gère le « Run ».

  • Projects : C’est le cœur du réacteur. On y crée des groupes pour nos apps (par exemple « Prod », « Staging » ou « Blog »).

  • Monitoring & Schedules : Pour garder un œil sur la charge CPU/RAM et gérer les tâches cron sans avoir à éditer la crontab du host à la main.

  • Traefik File System & Docker/Swarm : La partie que j’apprécie particulièrement. Dokploy ne vous cache rien. Vous avez un accès direct aux fichiers de config du reverse proxy et à l’état de votre cluster Swarm. C’est transparent.

La configuration fine (Settings)

C’est là qu’on sent que l’outil est pensé pour la prod « on-premise » :

  • Remote Servers & Cluster : Dokploy n’est pas limité à un seul nœud. On peut piloter d’autres serveurs et gérer son cluster directement depuis cette interface.

  • Registry & S3 Destinations : Indispensable ! On peut lier son propre registre Docker et surtout configurer ses backups de bases de données vers du S3 (AWS, Minio ou autre).

  • Certificates : La gestion du SSL (Let’s Encrypt) est automatisée, mais vous pouvez aussi importer vos propres certificats si vous avez des contraintes de sécurité spécifiques.

Le petit plus : L’onglet AI

On notera la présence d’un menu AI. À l’heure actuelle, cela permet de configurer un modèle (type OpenAI) pour vous aider à générer des Dockerfiles ou des fichiers de configuration si vous avez un trou de mémoire sur une syntaxe. Gadget pour certains, gain de temps pour d’autres.

3) Déploiement d’un workload.

On va maintenant déployer un site wordpress via Dokploy pour voir comment tout cela fonctionne:

3.1) Déploiement de la base de données

– Créons un projet en cliquant sur « Create Project » depuis l’onglet « Projects »:

– Une fois le projet créé, nous allons déployer ce dont nous avons besoin pour faire tourner un site wordpress: une application et une database

– Commencons pas la base de donnée: cliquez sur « service » et « database. »

Comme vous pouvez le voir, l’éventail de choix est large ; pour ce tuto, nous partons sur une base MySQL. Remplissez simplement les champs de configuration et validez en cliquant sur « Create ».

 

Il ne reste plus qu’à déployer la base de données en cliquant sur le bouton « Deploy »

C’est beau!!

En vérifiant on peut peut voir que le container est bien démarré (1er ligne)

 

3.) Déploiement de WordPress

Ca repart, on crée un nouveau service de type application que l’on va nommer « website »:

On clique sur le service que l’on vient de créer pour le configurer :

Arrétons nous un instant pour rentrer dans le détail de cette interface de configuration:

C’est ici que la magie du PaaS opère. Une fois votre projet créé (ici je l’ai nommé « WordPress »), on rentre dans le vif du sujet avec la configuration de notre service. L’interface de déploiement est un modèle du genre : complète mais sans fioritures.

Le pilotage du déploiement

En haut de page, on retrouve nos commandes de vol habituelles : Deploy, Reload, Rebuild ou encore Start. Mention spéciale pour le bouton Open Terminal qui permet de garder un pied dans le conteneur sans quitter son navigateur. On peut aussi activer l’Autodeploy pour que chaque push sur votre branche déclenche la mise à jour, ou forcer un Clean Cache si vous avez des doutes sur votre build.

Le choix de la source (Provider)

Dokploy est très souple sur l’origine du code :

  • Git pur jus : Intégration directe avec GitHub, GitLab, Bitbucket ou même une instance Gitea auto-hébergée (cohérent avec notre approche souveraine).

  • Docker : Vous pouvez aussi simplement tirer une image depuis un registre Docker.

  • Drop : Pour les plus pressés, on peut même envoyer directement un fichier.

La cuisine interne : Build Type

C’est là que l’admin va pouvoir choisir sa méthode préférée pour transformer le code en conteneur :

  • Dockerfile : Pour ceux qui aiment garder le contrôle total sur leur image.

  • Nixpacks (par défaut) : C’est l’option moderne qui analyse votre code et crée l’image optimale tout seul.

  • Heroku/Paketo Buildpacks : Pour rester compatible avec les standards du marché.

Petit conseil d’admin : Comme indiqué par l’alerte dans l’interface, le build peut être gourmand en ressources (CPU/RAM). Avec mes 16Go de RAM, je suis large, mais gardez un œil sur vos petites instances lors des phases de compilation.

On retrouve également des onglets cruciaux pour la prod : Environment pour vos variables secrètes, Domains pour le mapping DNS avec SSL automatique, et Volume Backups pour ne pas oublier que la donnée, c’est sacré.

 

Pour notre usecase nous allons déployer une image wordpress depuis le docker hub, pour cela cliquez sur le provider Docker:

Faisons un petit tour dans l’onglet environnement pour renseigner les informations de connexions à la base de donnée que nous venons de créer juste avant (cliquez sur le petit oeil en haut à droite pour activer le mode édition):

Cliquez sur « save »

L’astuce de sioux : Accéder au site sans DNS avec sslip.io

C’est le moment où l’admin a fini sa conf et veut voir le résultat, mais n’a pas forcément envie d’aller modifier ses zones DNS chez son registrar pour un simple test.

C’est là qu’intervient sslip.io. Pour ceux qui ne connaissent pas, c’est un service de « DNS Wildcard » génial : il résout n’importe quel nom de domaine contenant une adresse IP vers cette même adresse IP.

  • Si vous tapez 13.42.26.29.sslip.io, le service vous renvoie vers 13.42.26.29.

  • Pas de configuration, pas d’attente de propagation. C’est instantané.

La marche à suivre dans Dokploy :

Cliquez sur domain et « Add Domain »

Comme vous le voyez sur ma capture, la configuration est un jeu d’enfant :

  1. Host : On renseigne l’IP de notre VM suivie de .sslip.io (dans mon cas : 13.42.26.29.sslip.io).

  2. Container Port : Attention ici ! C’est le piège classique. Dokploy propose souvent le port 3000 par défaut. Mais notre image WordPress officielle, elle, écoute sur le port 80. Il faut donc impérativement changer cette valeur pour que Traefik sache où envoyer le trafic à l’intérieur du conteneur.

  3. HTTPS : Pour un test rapide sur sslip.io, on peut le laisser décoché. Si vous voulez du SSL, Traefik tentera de le générer, mais Let’s Encrypt peut parfois tiquer sur les domaines en sslip.io.

Une fois que c’est validé, on retourne dans l’onglet General, on clique sur Deploy, et on laisse la magie opérer.

Maintenant testons l’accès à l’interface de Wordpres:

 

Ca fonctionne!!

 

4) Le mot de la fin : Dokploy, on valide ou pas ?

Alors, après ce tour d’horizon, quel est le verdict pour un admin habitué à gérer ses propres serveurs ?

Soyons honnêtes : le « tout en ligne de commande », ça a son charme et c’est formateur. Mais à l’heure où l’on doit multiplier les environnements de test, les sites clients ou les outils de monitoring, on ne peut plus se permettre de passer 2 heures à configurer un reverse proxy ou à débugger un certificat SSL récalcitrant.

Dokploy réussit son pari : offrir une expérience PaaS moderne (le fameux « Heroku-like ») sans nous enfermer dans un cloud propriétaire. On garde nos données, on garde notre OS (Debian 12 dans mon cas), et surtout, on garde le contrôle sur ce qui tourne.

Ce qu’il faut retenir :

  • C’est rapide : L’installation « One-liner » et le déploiement via sslip.io permettent de voir son projet en ligne en quelques minutes.

  • C’est propre : On s’appuie sur des standards (Docker Swarm, Traefik, Nixpacks) que l’on peut auditer.

  • C’est souverain : Que votre VM soit chez vous, chez un hébergeur local ou sur un gros cloud public, c’est vous qui avez les clés du camion.

Mon conseil : Si vous avez une petite grappe de VPS qui traîne ou un serveur dédié qui ne demande qu’à être optimisé, testez Dokploy. C’est une excellente alternative à Coolify pour ceux qui cherchent une interface peut-être un peu plus légère et réactive.

Le cloud souverain ne se fera pas sans outils simples pour les admins. Dokploy est clairement un pas dans la bonne direction.




Tutoriel | Installation, configuration et utilisation d’un Docker Registry

Article publié le 13 Août 2018

Ce tutoriel complet expliquera comment installer, configurer, et utiliser un Docker Registry.

Pour suivre ce tutoriel, Docker doit-être installé sur votre machine. Un tutoriel vous expliquant comment installer Docker est disponible ici.

Nous allons travailler dans le répertoire /srv/myrepo.com et pour servir d’exemple l’adresse de notre repository sera myrepo.com. Le fichier host sera renseigné de tel manière à ce que l’IP de ma machine soit associé au nom myrepo.com.

– Dans notre répertoire de travail, nous allons créer deux répertoires:

mkdir -p /srv/myrepo.com/certs

mkdir -p /srv/myrepo.com/auth

– Nous allons ensuite généré dans le répertoire /srv/myrepo.com/certs un certificat TLS:

cd /srv/myrepo.com/certs && openssl req -x509 -newkey rsa:4096 -nodes -keyout myrepo.com.key -out myrepo.com.crt -days 365 -subj /CN=myrepo.com

– En faisans un « ls » vous devriez voir la clé privée plus le certificat:

– Copiez ensuite le crt dans le répertoire /etc/docker/certs.d/myrepo.com (pour rappel myrepo.com correspond au nom de votre repo)

sudo mkdir -p /etc/docker/certs.d/myrepo.com:5000 && cp /srv/myrepo.com/certs/myrepo.com.crt /etc/docker/certs.d/myrepo.com\:5000/

– Faites un pull de l’image Docker registry:

docker pull registry:2

– Générez ensuite un fichier htpasswd contenant le login et le mot de passe qui permettra de vous authentifier:

docker run –entrypoint htpasswd registry:2 -Bbn votrelogin votrepassword > /srv/myrepo.com/auth/htpasswd

– Lancez le container Docker Registry:

docker run -d -p 5000:5000 -v /srv/myrepo.com/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/myrepo.com.key -v /srv/myrepo.com/auth:/auth -e REGISTRY_AUTH_HTPASSWD_REALM= »Registry Realm » -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2

– Authentifiez-vous sur votre registry

docker login

Si l’authentification se déroule bien vous devriez avoir quelque chose comme ceci:

– Testez que votre repository fonctionne correctement.

  • Pour cela, on va faire un pull d’une image (busybox):

docker pull busybox

  • Taggez ensuite l’image pour la faire pointer vers votre registry

docker tag busybox myrepo.com:5000/testimage

  • Pushez l’image vers votre registry

docker push busybox myrepo.com:5000/testimage

 

 Dans ce tuto, le certificat utilisé est un certificat auto-signé. Si vous voulez utiliser votre registry depuis un autre serveur (ce qui, je pense, sera forcément le cas) il sera nécessaire de copier le répertoire /etc/docker/certs.d/myrepo.com\:5000/ sur chaque machine qui devra se connecter à votre registry et redémarrer le service Docker. Si vous ne faites pas cela,  vous risquez d’avoir un vilain message d’erreur vous indiquant que votre certificat TLS n’est pas bon…

Lister les images de votre repository:

Pour lister et connaître le contenu de votre repository, utiliser la commande curl suivante:

curl –insecure -u « login password » <URL de votre repository>

–insecure à utiliser si vous utilisez un certificat auto-signé

 




Tuto Docker | Démarrer avec Docker

Article publié le 09/02/2017

Mis à jour le 22/08/2018

Après pas mal de temps, j’ai enfin décidé à me mettre à étudier Docker. Étant très hésitant au départ, je me suis vite aperçu que Docker est un outil extrêmement puissant, flexible avec un potentiel Devops incroyable.

La question que se posent beaucoup de personnes est: qu’est-ce que c’est Docker? Contrairement à la virtualisation classique ou vous virtualisez l’intégralité de la machine et tout se qu’elle héberge, Docker n’héberge  que les applications et les librairies!

I) Installation

Sous Debian: 

On ajoute les dépôts docker et on installe:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add –
sudo add-apt-repository « deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable »
sudo apt-get update
sudo apt-get install docker-ce

systemctl enable docker
systemctl start docker

Sous Centos:

On ajoute les dépôts docker et on installe:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
systemctl enable docker
systemctl start docker
Afin de nous faciliter la vie, on attribue les droits à notre utilisateur pour éviter de bosser avec root.
usermod -a -G docker  <votre user>

 II) Création d’un container

Dans l’exemple ci-dessous, on va chercher une image nginx:

docker search nginx

On rapatrie l’image sur notre machine :

docker pull nginx

On vérifie notre liste d’images:

docker images

On s’aperçoit que notre image nginx a bien été rapatrié:

On installe le container

docker run -d –name=ServeurNginx nginx:latest

On vérifie que le container est bien installé:

docker ps  -a

On démarre notre container:

docker start <container id>

docker start 1f8b15c5b642

Nous allons maintenant inspecter la configuration de notre container afin de déterminer l’adresse IP local du container:

docker inspect <id du container>

Vous verrez toutes les informations de votre container et notamment un élément qui nous intéresse:

  « IPAddress »: « 172.17.0.2 »,
« IPPrefixLen »: 16,

L’IP ci-dessus correspond à l’interface virtuel  de votre container. Si vous tentez de vous connecter en HTTP via l’adresse de votre container, le serveur nginx hébergé dans votre container va répondre:

elinks 172.0.0.2

Bon j’imagine que vous allez me poser la question suivante: « comment on fait pour que notre container soit accessible de l’extérieur? »

Pour cela rien de plus simple, nous allons créer un deuxième container depuis l’image nginx avec quelques arguments en plus:

 docker run -d -p 9876:80 –name=Webserver3 nginx:latest

Votre container sera joignable via le port 9876 depuis l’extérieur:

Allons encore un peu plus loin en mappant des répertoires internes de votre container directement sur un répertoire de votre serveur (par exemple pour mettre à jour le contenu d’un site web hébergé dans votre container).
docker run -d -p 9876:80 –name=WebServer4 -v /home/usr/www:/usr/share/nginx/html nginx:latest

III) DockerFile

Il est possible avec Docker de créer un container  à partir d’un fichier de configuration nommé Dockerfile.

Pour cela créer un fichier nommé Dockerfile.

Dans notre fichier nous allons créer un container Debian et installer un serveur apache2 accessible depuis l’extérieur.

Ci-dessous le contenu du Dockerfile

# Image
FROM debian:stable
#Information sur le propriétaire du container
MAINTAINER [email protected]
# Commande RUN utilisé uniquement lors de la creation du container (necessite un docker build)
RUN apt-get update && apt-get upgrade -y && apt-get install -y apache2 telnet  elinks openssh-server
# Creation variable
ENV VARIABLE ma-variable
# PORT 80 Ouvert
EXPOSE  80
# On expose le port SSH pour pouvoir se connecter sur la machine
EXPOSE 22
# Commande passé une fois le container créé (ne neccessite pas un docker build juste un run)
#     Commande               1er arg 2eme arg
CMD [« /usr/sbin/apache2ctl », »-D », »FOREGROUND »]
Reste plus qu’à créer notre container depuis le Dockerfile.
On crée notre image Docker:
docker build -t myapache .
On installe notre container:
docker run -d -P 9999:80 –name=Debianapache myapache:latest
Il ne reste plus qu’à vérifier via l’IP de votre serveur Docker si le serveur apache est accessible:

IV) Autre commandes utiles

Supprimer tout les container actifs:
docker rm `docker ps -a -q`
Démarrer ou arrêter un container :
docker start <container>
docker stop <container>
Supprimer tout les container actif:
docker rm `docker ps -a -q`
Supprimer une image docker (vérifier qu’aucun container n’est actif):
docker rmi <image>
Vous connecter directement sur votre container:
docker run -it <votre container> /bin/bash

VI) Repository

Le repository docker https://hub.docker.com/explore/ contient toutes les images dockers possible et imaginable. Vous pouvez aussi bien trouver des container apache que nginx voir même des images de distributions Linux comme Centos ou Debian. Je vous suggère de créer un compte et d’y  aller faire un tour.

Un tuto pour créer votre propre Registry Docker est disponible ici

VII) Docker Compose

Docker-compose est un outil officiel Docker  absolument génial qui permet de gérer à 100% vos container uniquement un fichier de configuration yml. Cet outil est d’autant plus pratique si vos applications nécessite l’installation de plusieurs containers pour fonctionner.

Le tutoriel sur docker-compose est disponible ici:

Tuto Docker | Gérer vos container avec Docker compose

VIII) Docker Swarm

Docker swarm est l’orchestrateur de container officiel Docker. Un tutoriel sur son déploiement est disponible:

Tutoriel | Installer et utiliser DockerSwarm

IX) Registry Privé

Un tutoriel sur l’installation d’un registry privé Docker est disponible:

Tutoriel | Installation, configuration et utilisation d’un Docker Registry

X) Kubernetes

Kubernetes est un puissant orchestrateur de container extrêmement utilisé aujourd’hui. Un tutoriel sur son déploiement est disponible:

Tutoriel | Installez facilement un cluster Kubernetes sous Debian ou Centos

XI) Portainer

Portainer est un outil puissant permettant de gérer vos environnement Docker via une interface Web extrêmement simple d’utilisation:

Tutoriel | Gérez vos container docker avec Portainer