Deploiement
Docker Compose, Traefik, certificats SSL, backups et procedures de mise en production.
Docker Compose
Toute l'infrastructure est definie dans un seul docker-compose.yml. Chaque service a son propre Dockerfile quand necessaire.
# Demarrer tous les services
docker compose up -d
# Stopper tous les services
docker compose down
# Rebuild un service specifique
docker compose build <service>
docker compose up -d <service>
# Voir les logs
docker compose logs -f <service>
# Status des services
docker compose ps
Traefik & SSL
Traefik v2.11 sert de reverse proxy pour tous les services. Les certificats SSL sont generes automatiquement via Let's Encrypt (ACME TLS Challenge).
Routage
Chaque service declare ses routes via des labels Docker :
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`myapp.d1dev.fr`)"
- "traefik.http.routers.myapp.entrypoints=websecure"
- "traefik.http.routers.myapp.tls.certresolver=myresolver"
- "traefik.http.services.myapp.loadbalancer.server.port=80"
- "traefik.docker.network=d1dev_web"
Middlewares disponibles
| Middleware | Role |
|---|---|
auth | Basic Auth (Traefik dashboard, Solr, Metabase) |
*-force-https | Redirection HTTP → HTTPS |
*-stripprefix | Strip prefix pour sous-chemins (Dozzle, Glances, Git) |
docuseal-headers | Headers securite (HSTS, CSP, XSS filter) |
docuseal-ratelimit | Rate limiting (100 req/s, burst 200) |
Health Checks
Les services critiques ont des health checks Docker integres :
# Verifier tous les health checks
docker compose ps
# Tester manuellement
curl -s https://drupal.d1dev.fr/healthz
curl -s https://api.d1dev.fr/healthz
curl -s https://kanban.d1dev.fr/healthz
curl -s https://prestadmin.d1dev.fr/healthz
curl -s https://api-gpa.d1dev.fr/healthz
| Service | Endpoint | Methode |
|---|---|---|
| Drupal | /healthz | curl HTTP |
| Symfony API | /healthz | curl HTTP |
| Kanban | /healthz | curl HTTP |
| PrestaAdmin | /healthz | curl HTTP |
| API GPA | /healthz | curl HTTP |
| DocuSeal | / | wget (port 3000) |
| Tika | /version | TCP check |
Magic Links (Auto-login)
# Symfony API
docker compose exec symfony-api bin/console app:login-token email@test.fr --ttl=600 --redirect=/admin
# API GPA
docker compose exec api-gpa php bin/console app:login-token email@test.fr --ttl=600 --redirect=/admin
Les magic links expirent apres 10 minutes et sont a usage unique. La reponse est un HTML 200 avec redirect JS (pas de 302 qui perd le cookie session).
Backups
Dump local (scripts/dump.sh)
./scripts/dump.sh all # Dump complet (MariaDB + PostgreSQL + Solr + Redis)
./scripts/dump.sh mariadb # MariaDB (drupal_db, symfony_api, kanban_db, prestadmin_db, api_gpa_db)
./scripts/dump.sh postgres # PostgreSQL (n8n_db, metabase_db, docuseal_db)
./scripts/dump.sh solr # Export JSON Solr
./scripts/dump.sh redis # Snapshot Redis RDB
./scripts/dump.sh list # Lister les backups
./scripts/dump.sh rotate # Garder les 5 derniers
Backup distant FTP (scripts/backup-remote.sh)
Rotation GFS (Grandfather-Father-Son) sur FTP dedie (100 Go) :
- Daily : 7 jours de retention
- Weekly : 4 semaines
- Monthly : 6 mois
./scripts/backup-remote.sh backup # Dump + upload FTP
./scripts/backup-remote.sh list # Lister backups distants
./scripts/backup-remote.sh status # Statut global
./scripts/backup-remote.sh test # Tester connexion FTP
Cron
| Planning | Commande | Description |
|---|---|---|
0 3 * * 0 | scripts/nutch-crawl.sh 3 | Crawl hebdo Nutch (dimanche 3h) |
0 4 * * * | scripts/backup-remote.sh backup | Backup FTP quotidien (GFS) |
0 * * * * | scripts/generate-git-dashboard.sh | Regeneration git dashboard |
Checklist : ajouter un nouveau service
- Creer le
Dockerfile.<service> - Creer le fichier
nginx-<service>.confsi nginx - Ajouter le service dans
docker-compose.ymlavec labels Traefik + Flame - Ajouter la variable
<SERVICE>_HOSTdans.env - Configurer les reseaux (
webpour Traefik,defaultsi BDD) - Ajouter un health check si service critique
- Si nouvelle BDD : creer le script init dans
init-mariadb/ouinit-db/ - Si cookie session Symfony : configurer
framework.session.nameunique - Mettre a jour
CLAUDE.mdet la documentation docker compose build <service> && docker compose up -d <service>- Verifier dans Flame dashboard (
all.d1dev.fr)
Conventions cookies de session
Toutes les apps Symfony partagent
*.d1dev.fr. Chaque app DOIT avoir un nom de cookie unique pour eviter les conflits.
| App | Cookie |
|---|---|
| Kanban | KANBAN_SESSID |
| Symfony API | SYMAPI_SESSID |
| PrestaAdmin | PRESTADMIN_SESSID |
| API GPA | APIGPA_SESSID |