Scope : Ce runbook couvre l'ajout d'un nouveau service Docker exposé publiquement via Traefik avec certificat SSL Let's Encrypt automatique (DNS-01 Cloudflare). Valable pour les trois environnements principaux de l'infra LORVA.
| VM | Usage | Réseau |
|---|---|---|
lorva-public |
Services publics (sites, apps accessibles sur Internet) | traefik-public |
taskori-prod |
Services Taskori uniquement (API, workers, jobs) | traefik-public |
lorva-infra |
Outils internes (monitoring, dashboards, CI/CD) | traefik-public |
Se connecter via alias SSH depuis votre poste :
ssh lorva-public
# ou
ssh taskori-prod
# ou
ssh lorva-infra
Rappel : Ne jamais utiliser d'adresses IP directes pour se connecter aux VMs LORVA. Toujours passer par les aliases SSH.
Par convention, chaque service dispose de son propre répertoire sous /docker/ :
sudo mkdir -p /docker/monservice
cd /docker/monservice
Structure attendue :
/docker/monservice/
├── docker-compose.yml
├── .env # variables sensibles — ne JAMAIS committer en clair
└── data/ # volume persistant si besoin
myapp sur port 3000)services:
myapp:
image: monorg/myapp:latest
container_name: myapp
restart: unless-stopped
environment:
- NODE_ENV=production
volumes:
- ./data:/app/data
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp-http.rule=Host(`myapp.lorva.dev`)"
- "traefik.http.routers.myapp-http.entrypoints=web"
- "traefik.http.routers.myapp-http.middlewares=redirect-to-https"
- "traefik.http.routers.myapp.rule=Host(`myapp.lorva.dev`)"
- "traefik.http.routers.myapp.entrypoints=websecure"
- "traefik.http.routers.myapp.tls=true"
- "traefik.http.routers.myapp.tls.certresolver=cloudflare"
- "traefik.http.services.myapp.loadbalancer.server.port=3000"
- "traefik.docker.network=traefik-public"
networks:
traefik-public:
external: true
Le réseau traefik-public est externe et partagé. Vérifier qu'il existe :
docker network ls | grep traefik-public
# S'il n'existe pas :
docker network create traefik-public
cd /docker/monservice
docker compose up -d
docker compose ps
docker compose logs -f
Dashboard Traefik : HTTP > Routers > vérifier myapp avec statut Enabled.
docker logs traefik --tail 50 -f
DNS-01 Cloudflare uniquement. Délai : 20 à 60 secondes.
echo | openssl s_client -connect myapp.lorva.dev:443 2>/dev/null | openssl x509 -noout -dates -issuer
curl -I http://myapp.lorva.dev # → 301/302
curl -I https://myapp.lorva.dev # → 200
[ ] VM cible choisie
[ ] Répertoire /docker/monservice/ créé
[ ] docker-compose.yml avec labels Traefik complets
[ ] Réseau traefik-public déclaré external: true
[ ] Aucun secret en clair
[ ] docker compose up -d
[ ] Service visible dans Traefik
[ ] Certificat SSL émis
[ ] curl -I https://monservice.lorva.dev → 200 OK