ASOPS Homelab LogoASOPS Homelab

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: 64M

2. Sécurité (security_opt)

Interdiction systématique d'élever les privilèges dans le conteneur :

security_opt:
  - no-new-privileges:true

3. 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 service

4. 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: 15s

7. Profils Compose (profiles)

Chaque service dispose d'un profil dédié et du profil global all :

profiles:
  - <app>
  - all

8. 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.

On this page