dokploy-deploy
Skill0 starsChanged 27 days agoMITView on GitHub
Déployer des projets en production sur Dokploy : docker-compose, Dockerfile, connexion GitHub, domaines/Traefik, volumes, variables d'environnement, rollback (Swarm + registry) et vérifications post-déploiement. Utiliser quand l'utilisateur déploie, configure, diagnostique ou fait un rollback d'une application sur Dokploy (dokploy.applix.fr ou instance auto-héritée). Inclut les erreurs fréquentes (Bad Gateway, 404 domaine, mounts perdus, build trop gourmand). Ne PAS utiliser pour administrer l'instance Dokploy elle-même (upgrade, users, settings) ni pour d'autres plateformes de déploiement.
- Reads credentials
2 other projects use a version of this.
Adopted by
Most recently taken up by
- kreddevils18/dokploy-skillstheir own version, first seen Oct 15, 2026
- Fei2-Labs/skill-genietheir own version, first seen Sep 24, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- Fei2-Labs/skill-genie★ 12same name
- kreddevils18/dokploy-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository29 other files it gives its agents.
- AGENTS.mdAGENTS.md
- skills/laravel-core/templates/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- laravel-adminSkill
- laravel-aiSkill
- laravel-apiSkill
- laravel-coreSkill
- laravel-deploySkill
- laravel-inertiaSkill
- laravel-livewireSkill
- laravel-mcpSkill
- laravel-microserviceSkill
- laravel-multi-tenancySkill
- laravel-nuxtSkill
- laravel-performanceSkill
- laravel-queueSkill
- laravel-securitySkill
- laravel-testingSkill
- laravel-websocketSkill
- nuxt-coreSkill
- nuxt-uiSkill
- pestSkill
- project-definerSkill
- scribeSkill
- searxng-mcpSkill
- sentrySkill
- skill-creatorSkill
- skill-health-checkerSkill
- spatie-query-builderSkill
The file
Files
Dokploy Deploy — Déploiement production sur Dokploy
Tu es un expert en déploiement production sur Dokploy (PaaS auto-hérité, Docker Swarm + Traefik). Ton rôle : configurer et déployer des projets de façon fiable, avec rollback possible et vérifications systématiques.
Quand utiliser ce skill
- Déployer un nouveau projet (compose, Dockerfile, image pré-buildée)
- Brancher un repo GitHub avec auto-deploy / watch paths
- Configurer domaines, HTTPS, variables, volumes sur Dokploy
- Diagnostiquer un déploiement échoué ou un site inaccessible
- Mettre en place ou exécuter un rollback
- Durcir une config pour la production (voir
references/production-hardening.md)
Quand NE PAS utiliser ce skill
- Administrer l'instance Dokploy (upgrade, membres, settings, registres) hors périmètre d'un déploiement
- Déployer hors Dokploy (Vercel, Railway, Forge, VPS nu)
- Problème Docker/Traefik sans rapport avec Dokploy
Règles d'or (retenues de production)
- Ordre imposable : DNS d'abord, domaine Dokploy ensuite. Créer le domaine avant que le A record ne pointe vers le serveur = cert Let's Encrypt jamais généré (il faut recréer le domaine ou redémarrer Traefik).
- L'app doit écouter sur
0.0.0.0, jamais127.0.0.1(Vite/Astro/Nuxt en dev écoutent en localhost → Bad Gateway garanti). ports:en dur = conflits. En compose, utiliserexpose:(ouports: - 3000sans mapping) et laisser Traefik/router faire le routing.- Les variables de l'UI ne sont PAS injectées automatiquement dans les
containers : elles sont écrites dans un
.envà côté du compose. Il fautenv_file: - .envouenvironment: - VAR=${VAR}dans le compose. - Le dossier repo est ré-cloné à chaque auto-deploy : monter un fichier du
repo (
./config:...) fonctionne au 1er déploiement puis devient vide. Passer par les File Mounts (Advanced → Mounts) référencés en../files/.... - Build trop gourmand (> ~2 Go RAM, prerender/SSR lourd) = build bloqué indéfiniment en "running" sans erreur. Solution : builder en local, pousser l'image sur un registry, déployer en image pré-buildée.
- Images slim/alpine par défaut. Base images
alpineou*-slim(node:22-alpine,python:3.12-slim,php:8.4-fpm-alpine…) pour réduire la taille des images sur le serveur. Passer à la version complète (debian,node:22…) uniquement si nécessaire : dépendances système lourdes, glibc requis, outils absents de l'variant minimal. Penser à ajouter les binaires manquants en alpine (apk add --no-cache curl, etc.). - Rollback = healthcheck d'abord, registry ensuite. Sans healthcheck, aucun rollback automatique possible ; sans registry configuré, pas de rollback manuel vers n'importe quelle version.
Vue d'ensemble — choisir la méthode
| Situation | Méthode | Où configurer |
| Projet multi-services (app + BDD + worker) | Docker Compose | Onglet Compose, fichier du repo ou éditeur |
| App unique, build rapide (Dockerfile) | Application → Dockerfile | General → Provider: Dockerfile |
| App Node/Python simple sans Dockerfile | Application → Nixpacks | General → Provider: Nixpacks |
| Build lourd (>2 Go RAM, prerender, long) | Image pré-buildée (build local + registry) | General → Provider: Docker Registry |
| Haute dispo, replicas, multi-nœuds | Docker Stack (pas de build: !) | Onglet Stack + images registry |
Détail complet : references/methodes-deploiement.md.
Workflow de déploiement
Étape 1 — Prérequis
- Repo GitHub existant, branche maître identifiée (
main/master) - DNS : enregistrement A du domaine pointé vers l'IP du serveur (avant toute création de domaine)
- Port du service connu (Next/Nuxt : 3000, Laravel/Octane : 8000/…, static : 80 via serveur)
.dockerignoreprésent (pas de.env*, pas denode_modules)- Bases d'images slim/alpine sauf nécessité contraire (règle d'or 7)
Étape 2 — Créer le projet et brancher GitHub
- Project → Create Project → Create Application (ou Compose).
- Onglet General → GitHub App : sélectionner owner/repo, branche, build path (racine ou sous-dossier pour un monorepo).
- Auto Deploy : activer. Pour GitHub c'est automatique à chaque push sur la branche configurée. Pour GitLab/Bitbucket/Gitea : copier le Webhook URL depuis les logs de déploiement et l'ajouter dans les settings du repo.
- Watch Paths (optionnel) : ne redéployer que si certains chemins changent
(ex.
["apps/api/**"]en monorepo). Fonctionne out-of-the-box avec GitHub. - Piège : branche configurée ≠ branche poussée → erreur
Branch Not Match.
Étape 3 — Configurer le build
Dockerfile : Dockerfile à la racine du repo (ou build path), sinon
préciser le chemin. Vérifier que le service écoute sur 0.0.0.0. Bases
slim/alpine par défaut (règle d'or 7).
Nixpacks : forcer la version de Node via NIXPACKS_NODE_VERSION (dans
nixpacks.toml [variables] ou l'onglet Environment). NODE_VERSION seul
est ignoré → build sur nodejs_18 retiré de nixpkgs = échec. Diagnostic local :
nixpacks plan . | grep nixPkgs.
Image pré-buildée (quand le build VPS dépasse la RAM) :
docker build -t USER/app:v1 .
docker push USER/app:v1 # tag immuable, jamais :latestPuis Provider: Docker Registry dans Dokploy, tag explicite. Vérifier le digest
après pull (un :latest périmé qui traîne dans le registry sert du vieux contenu).
Étape 4 — Variables d'environnement
- Onglet Environment : format
.env(KEY=value). Multiline : entourer de doubles quotes'"-----BEGIN KEY-----..."'. - Injecter via
env_file: - .env(tout) ouenvironment: - VAR=${VAR}(ciblé) dans le compose. Pour une Application (non-compose), l'injection est automatique. - Aucun secret dans le repo ; valeurs prod uniquement dans Dokploy.
- Si un endpoint LLM/API est joignable depuis les containers, utiliser l'URL
directe ; un service bindé en 127.0.0.1 sur le VPS est injoignable depuis
les containers (utiliser
host.docker.internal+extra_hosts: host-gateway).
Étape 5 — Domaines
- Onglet Domains → Add Domain : Host, Container Port = port réel du service,
HTTPS activé, certificat
letsencrypt. - Pour compose, préférer le Domains natif (UI) : Dokploy injecte les labels
Traefik automatiquement. Alternative manuelle : labels Traefik + réseau
dokploy-network(voir template). - Toute modification de domaine sur un service Compose/Template exige un redeploy (labels lus au démarrage). Les Applications (file provider) n'ont pas besoin de redeploy.
- Ne pas utiliser l'onglet Advanced → Ports sauf besoin d'accès IP:port direct (cela interfère avec le domaine).
- Pour les apps derrière Path stripping : Path + Internal Path + Strip Path.
Étape 6 — Volumes et fichiers
| Besoin | Solution | Anti-pattern |
| Donnée persistante (BDD, uploads) | Named volume monvol:/var/lib/… | chemin absolu hôte ❌ |
| Backup automatisé S3 | Named volume obligatoire (Volume Backups) | bind mount ❌ |
| Config/fichier du repo | File Mount (Advanced → Mounts) → ../files/x | ./config:... ❌ (vide après re-deploy) |
| Persistance simple, accès fichier | Bind mount ../files/... | /folder:/path absolu ❌ (nettoyé) |
Structure interne : /application-name/code + /application-name/files.
Étape 7 — Rollback et santé
À faire avant le premier déploiement prod, pas après l'incident :
- Route
/health(ou équivalent) retournant 200. - Health Check + Update Config (
FailureAction: rollback,Order: start-first) dans Advanced → Swarm Settings. - Rollback Settings → activer le rollback registry (nécessite un registry configuré) pour pouvoir revenir à n'importe quelle version.
Détails, JSON exacts et procédure : references/rollback-verification.md.
Étape 8 — Vérification post-déploiement
Checklist complète dans references/rollback-verification.md.
En résumé :
- Déploiement en
done(pasrunningéternel = build qui bloque) - Logs du service : pas d'erreur au démarrage
curl -sI https://domaine.tld/→ 200/30x, certificat valide- Pages critiques testées (login, API health, flux principal)
- Rollback testé ou au moins disponible (bouton Rollback visible)
Erreurs courantes (top)
| Symptom | Cause racine | Fix |
| Bad Gateway | App sur 127.0.0.1 ou mauvais port | 0.0.0.0, port correct, redeploy |
| 404 domaine (compose) | Labels non appliqués | Redeploy après changement de domaine |
| Cert HTTPS absent | DNS non pointé avant création domaine | Recréer domaine / restart Traefik |
| Build "running" sans fin | RAM insuffisante (prerender, build lourd) | Image pré-buildée en local |
| Fichiers montés vides | Repo re-cloné à chaque deploy | File Mounts via ../files/ |
nodejs_18 EOL (Nixpacks) | NODE_VERSION ignoré | NIXPACKS_NODE_VERSION |
| Domaine KO après bonne infra | Healthcheck défaillant bloque le service | Réparer ou retirer le healthcheck |
| Stack: mounts invalides invisibles | Swarm refuse le service sans erreur visible | Onglet General Swarm → vrai message d'erreur |
Pièges complets et diagnostics : references/troubleshooting.md.
Durcissement production
Hôtes, Docker daemon, Traefik (HSTS, rate-limit), BDD (credentials internes,
backups S3 chiffrés, tests de restauration) : checklist dans
references/production-hardening.md.
Validation — comment savoir qu'on a fini
- Push sur la branche configurée déclenche un déploiement automatique
- Site joignable en HTTPS, redirect HTTP→HTTPS actif
- Variables lisibles par l'app (endpoint de santé qui les consomme OK)
- Données persistantes en named volume, backup configuré si BDD
- Rollback possible (healthcheck + registry activé)
- Post-deploy checklist passée
Règles générales
- Tag d'image immuable en prod, jamais
:latest. - Ne jamais exposer un port host sauf besoin réel ; Traefik route tout.
- Une seule source de vérité pour le routing : UI Domains (compose) ou Traefik File System (Applications). Ne pas mélanger labels manuels + UI.
- Annuler les déploiements en file (bouton cancel) quand on push beaucoup ; les déploiements en cours ne sont pas annulables.
- MCP
dokploydisponible (si installé) : API programmatique (application.deploy,rollback.rollback,project.all) avecx-api-key. Webhook et API documentés dansreferences/methodes-deploiement.md.
Doc officielle
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

