Standards de Conteneurs
Règles d'or et directives obligatoires pour tout conteneur sur asops.fr
Afin de garantir la stabilité, la sécurité et la maîtrise des ressources sur le serveur ARM64 d'Oracle Cloud, chaque conteneur déployé dans /opt/docker doit impérativement respecter les standards suivants.
Règle d'Or
Tout conteneur ne respectant pas ces directives (absence de limites mémoire ou absence du middleware CrowdSec) est susceptible d'entraîner des dégradations de service ou des failles de sécurité.
🛡️ Les 8 Règles Obligatoires
1. Limites de Ressources (deploy.resources)
Pour éviter qu'un conteneur n'épuise la mémoire du VPS (11 GiB) ou ne sature les 2 cœurs ARM, des limites strictes doivent être déclarées :
deploy:
resources:
limits:
cpus: '0.75'
memory: 384M
pids: 100
reservations:
cpus: '0.05'
memory: 64M2. Sécurité (security_opt)
Interdiction systématique d'élever les privilèges dans le conteneur :
security_opt:
- no-new-privileges:true3. Délai d'Arrêt (stop_grace_period)
Pour permettre la fermeture propre des sockets, sessions et transactions de bases de données :
stop_grace_period: 15s # de 10s à 60s selon le service4. Rotation des Logs (logging)
Pour éviter que les disques de l'hôte ne se remplissent silencieusement :
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"5. Labels Traefik, CrowdSec & Diun
Chaque conteneur exposé au web doit intégrer le bouncer CrowdSec et le suivi Diun :
labels:
- "env=prod"
- "diun.enable=true"
- "diun.sort_tags=semver"
- "traefik.enable=true"
- "traefik.http.routers.<app>.entrypoints=websecure"
- "traefik.http.routers.<app>.rule=Host(`<app>.asops.fr`)"
- "traefik.http.routers.<app>.tls=true"
- "traefik.http.routers.<app>.tls.certresolver=letsencrypt"
- "traefik.http.routers.<app>.middlewares=crowdsec@docker"
- "traefik.http.services.<app>.loadbalancer.server.port=<port>"6. Healthcheck Explicite
Chaque conteneur doit posséder une sonde de santé fiable :
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/ || exit 1"]
interval: 15s
timeout: 5s
retries: 3
start_period: 15s7. Profils Compose (profiles)
Chaque service dispose d'un profil dédié et du profil global all :
profiles:
- <app>
- all8. Documentation Dédiée
Chaque application doit posséder son propre fichier apps/<app>/README.md décrivant son rôle, ses variables d'environnement, ses ports et les commandes utiles.
🚫 Règle Particulière : Wings (Pterodactyl/Pelican)
Alerte Port Conflict
Le démon wings.service s'exécute nativement sur l'hôte Linux via systemd et écoute sur le port 2022. Ne JAMAIS démarrer le conteneur Docker wings en parallèle pour éviter les conflits de port et de socket Docker.