Aller au contenu
TAAF-OPS --:-- UTC

Dokploy - Plateforme de Déploiement Self-Hosted

On ne fait pas de l’approximatif ici. L’objectif est de garantir que n’importe quel dev de l’équipe puisse monter un environnement Dokploy en local, en HTTPS, sur une stack ISO-Prod, en moins de 10 minutes.

Dokploy est une alternative open-source et self-hosted à Vercel/Heroku. Il permet de déployer des applications via Docker Compose avec un reverse proxy Traefik intégré, le tout managé via une interface web.

CritèreDokployAlternatives Cloud
SouverainetéDonnées on-premiseDonnées chez le provider
CoûtGratuit (self-hosted)Pay-per-use
ContrôleTotalLimité
ConformitéRGPD natifDépend du provider
graph TB
 subgraph HOST["Machine Hôte (Windows)"]
 subgraph WSL["WSL2"]
 VAGRANT[Vagrant CLI]
 MKCERT[mkcert]
 GIT[Git]
 end

 subgraph VMWARE["VMware Workstation"]
 subgraph VM["Ubuntu 22.04 VM
192.168.56.10"] BIND9["bind9
DNS :53"] DOKPLOY["Dokploy
:3000"] TRAEFIK["Traefik
:80/:443"] APPS[Applications] end end end VAGRANT -->|"vagrant up"|VM BIND9 -.->|"résolution DNS"|TRAEFIK DOKPLOY -->|"configure"|TRAEFIK TRAEFIK -->|"route"|APPS style HOST fill:#1a1a2e,stroke:#16213e,color:#fff style WSL fill:#0f3460,stroke:#16213e,color:#fff style VMWARE fill:#533483,stroke:#16213e,color:#fff style VM fill:#e94560,stroke:#16213e,color:#fff style BIND9 fill:#ff6f00,stroke:#16213e,color:#fff style DOKPLOY fill:#00c853,stroke:#16213e,color:#fff style TRAEFIK fill:#2196f3,stroke:#16213e,color:#fff style APPS fill:#9c27b0,stroke:#16213e,color:#fff

Avant de continuer, assurez-vous d’avoir configuré :

ComposantDocumentationStatus
Vagrant + VMwarevagrant-vmware.mdRequis
bind9 + mkcertdns-ssl-local.mdRequis
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-22.04"
config.vm.provider "vmware_desktop" do |v|
v.gui = false
v.allowlist_verified = true
v.vmx["memsize"] = "4096"
v.vmx["numvcpus"] = "2"
v.vmx["displayName"] = "KDS-Dokploy-Local"
end
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.hostname = "kds-dokploy-local"
config.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y \
curl git apt-transport-https ca-certificates \
software-properties-common gnupg lsb-release \
bind9 bind9utils bind9-doc
# Configuration bind9 (voir dns-ssl-local.md)
mkdir -p /etc/bind/zones
cat > /etc/bind/zones/db.domaine.local << 'EOF'
$TTL 604800
@ IN SOA ns1.domaine.local. admin.domaine.local. (
2024120701 604800 86400 2419200 604800 )
@ IN NS ns1.domaine.local.
@ IN A 192.168.56.10
ns1 IN A 192.168.56.10
* IN A 192.168.56.10
EOF
cat >> /etc/bind/named.conf.local << 'EOF'
zone "domaine.local" {
type master;
file "/etc/bind/zones/db.domaine.local";
};
EOF
sed -i 's/listen-on-v6 { any; };/listen-on-v6 { none; };/' /etc/bind/named.conf.options
sed -i '/directory/a\\tallow-query { any; };' /etc/bind/named.conf.options
sed -i '/directory/a\\tlisten-on { 192.168.56.10; 127.0.0.1; };' /etc/bind/named.conf.options
named-checkconf && named-checkzone domaine.local /etc/bind/zones/db.domaine.local
systemctl enable bind9 && systemctl restart bind9
# Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker vagrant
systemctl enable docker && systemctl start docker
# Dokploy
curl -sSL https://dokploy.com/install.sh | sh
echo ">>> DNS: 192.168.56.10 | Dokploy: http://192.168.56.10:3000"
SHELL
end

Démarrage :

Fenêtre de terminal
vagrant up

  1. Ouvrez http://192.168.56.10:3000
  2. Créez le compte administrateur (email + mot de passe fort)
  3. Connectez-vous à l’interface

Générez d’abord vos certificats avec mkcert (voir DNS & SSL Local) :

Fenêtre de terminal
mkdir -p certs && cd certs
mkcert -key-file key.pem -cert-file cert.pem domaine.local "*.domaine.local"

Puis dans Dokploy :

  1. Allez dans Settings > Certificates
  2. Cliquez sur Add New Certificate
  3. Remplissez le formulaire :
ChampValeur
Certificate NameKDS Local Wildcard
Certificate DataContenu de cert.pem
Private KeyContenu de key.pem

Récupérer le contenu :

Fenêtre de terminal
cat certs/cert.pem
cat certs/key.pem

Dans Settings > Server :

ParamètreValeur
Server Domaindomaine.local
Let’s Encrypt Email(vide en local)

graph TB
 CLIENT[Client HTTPS] --> TRAEFIK["Traefik
(Dokploy)"] TRAEFIK --> BACKEND["Backend
(Flask)"] BACKEND --> REDIS[Redis] BACKEND --> OLLAMA["Ollama
(host)"] style CLIENT fill:#4285f4,stroke:#16213e,color:#fff style TRAEFIK fill:#e94560,stroke:#16213e,color:#fff style BACKEND fill:#00c853,stroke:#16213e,color:#fff style REDIS fill:#ff6f00,stroke:#16213e,color:#fff style OLLAMA fill:#9c27b0,stroke:#16213e,color:#fff
  1. Dans Dokploy : Projects > Create Project
  2. Nom : KDS-RH
  3. Add Service > Compose
  4. Source : Git Repository
    • URL : https://git.kodetis.io/kds-rh/cv-analyzer.git
    • Branch : main
services:
backend:
build:
context: .
dockerfile: Dockerfile
container_name: kds-rh-backend
restart: unless-stopped
environment:
- FLASK_ENV=production
- FLASK_DEBUG=0
- ALLOWED_ORIGINS=https://cv.domaine.local
- OLLAMA_HOST=${OLLAMA_HOST:-http://host.docker.internal:11434}
- REDIS_URL=redis://redis:6379/0
- LOGS_ACCESS_TOKEN=${LOGS_ACCESS_TOKEN}
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- dokploy-network
- internal
labels:
- "traefik.enable=true"
- "traefik.http.routers.kdsrh-backend.rule=Host(`cv.domaine.local`)"
- "traefik.http.routers.kdsrh-backend.entrypoints=websecure"
- "traefik.http.routers.kdsrh-backend.tls=true"
- "traefik.http.services.kdsrh-backend.loadbalancer.server.port=5001"
- "traefik.docker.network=dokploy-network"
redis:
image: redis:7-alpine
container_name: kds-rh-redis
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- internal
volumes:
redis_data:
networks:
dokploy-network:
external: true
internal:
driver: bridge

Dans l’onglet Environment de Dokploy :

VariableValeurDescription
FLASK_ENVproductionMode production
FLASK_DEBUG0Debug désactivé
ALLOWED_ORIGINShttps://cv.domaine.localCORS
OLLAMA_HOSThttp://host.docker.internal:11434URL Ollama
LOGS_ACCESS_TOKEN<token>Accès logs

Générer un token :

Fenêtre de terminal
openssl rand -hex 32
  1. Cliquez sur Deploy
  2. Suivez les logs de build
  3. Vérifiez l’état : https://cv.domaine.local

L’application CV Analyzer nécessite Ollama avec le modèle gpt-oss:30b-32k. Pour l’installation et la configuration d’Ollama, voir Configurer son Espace de Travail.


EndpointDescriptionAuth
GET /healthHealthcheckNon
GET /nova-statusStatut NovaNon
GET /logs?lines=NLogsToken
Fenêtre de terminal
# Santé
curl -k https://cv.domaine.local/health
# Nova Framework
curl -k https://cv.domaine.local/nova-status
# Logs (avec token)
curl -k -H "Authorization: Bearer <TOKEN>" \
"https://cv.domaine.local/logs?lines=50"
# Test analyse CV
curl -k -X POST https://cv.domaine.local/compare \
-F "cv=@cv.pdf" \
-F "offer_url=https://kodetis.com/offre"

Fenêtre de terminal
vagrant ssh
docker ps | grep dokploy
docker logs dokploy -f
Fenêtre de terminal
# Vérifier les labels Traefik
docker inspect kds-rh-backend | grep -A 20 Labels
# Logs Traefik
docker logs $(docker ps -q -f name=traefik) -f
Fenêtre de terminal
docker exec -it kds-rh-redis redis-cli ping
# PONG
Fenêtre de terminal
curl http://localhost:11434/api/tags
# Depuis Docker, utiliser :
# OLLAMA_HOST=http://host.docker.internal:11434
Fenêtre de terminal
vagrant ssh
docker builder prune -f
# Dans Dokploy : Rebuild > Force rebuild

ActionCommande
VM : Démarrervagrant up
VM : SSHvagrant ssh
VM : Arrêtervagrant halt
DNS : Testnslookup cv.domaine.local 192.168.56.10
Certs : Générermkcert -key-file key.pem -cert-file cert.pem domaine.local "*.domaine.local"
Dokploy : UIhttp://192.168.56.10:3000
App : Healthcurl -k https://cv.domaine.local/health
Tokenopenssl rand -hex 32


Dernière mise à jour : 2025-12-07