Deliver the full Docker stack for Bloc 5 DevOps (Cr 7.c.3 and 7.c.4):
- docker/apache/ Custom httpd:2.4-alpine with hardened main config,
MPM event tuning and 3 vhosts (healthz, kiosk static,
admin reverse FCGI to wakdo-app:9000). Kiosk vhost
explicitly denies .php to enforce Bloc 1 isolation.
- docker/php-fpm/ Custom php:8.3-fpm-alpine3.20 with pdo_mysql, opcache,
intl, exif, zip and tini for signal handling.
Dynamic pool 3-10 workers listening on TCP 9000.
- docker/cron/ Custom alpine:3.20 with dcron, mariadb-client, gzip.
Nightly mysqldump at 03h00 with 14-day rotation and
512-byte sanity check. Purge and stats jobs templated.
- docker-compose.yml 4 services orchestrated on 2 networks (internal
bridge + external reverse-proxy). 2 named volumes
for DB and uploads, bind-mount for backups.
Traefik labels for 2 routers with HTTPS redirect.
Makefile adds `make backup` (manual dump) and `make backup-ls`.
.gitignore adds /var/ for backup bind-mount path.
docs/journal/2026-04-24--infra-docker.md documents 5 decisions with
alternatives, maps 16 RNCP criteria to artefacts and prepares 6 jury Q&A.
Validated: `docker compose config --quiet` passes. Smoke test deferred
to next session (requires server .env).
52 lines
2 KiB
Text
52 lines
2 KiB
Text
; Wakdo - pool PHP-FPM (surcharge le pool www par defaut)
|
|
; Charge en dernier via prefixe zz- pour avoir priorite sur www.conf officiel.
|
|
|
|
[www]
|
|
|
|
; --- Identite utilisateur ---
|
|
; L'image officielle cree l'utilisateur www-data (UID 82 en Alpine).
|
|
; On reste sur le default : on ne change pas l'UID pour eviter les soucis
|
|
; de permissions sur les uploads (volume wakdo_uploads geré par Docker).
|
|
user = www-data
|
|
group = www-data
|
|
|
|
; --- Socket d'ecoute ---
|
|
; TCP pour que wakdo-web (Apache) puisse reverse-proxy FastCGI via le reseau
|
|
; interne. Socket Unix serait plus performant mais exigerait un volume partage
|
|
; entre conteneurs, plus complexe a orchestrer.
|
|
listen = 0.0.0.0:9000
|
|
|
|
; Le socket reseau est volontairement ouvert. La securite est assuree par
|
|
; le fait que wakdo-app n'est attache qu'au reseau interne wakdo_internal
|
|
; (non expose a l'hote, non expose au proxy Traefik). Seul wakdo-web peut
|
|
; y acceder.
|
|
listen.allowed_clients = any
|
|
|
|
; --- Process manager (pm) ---
|
|
; Mode dynamic : ajuste le nombre de workers entre min et max selon la charge.
|
|
; Valeurs adaptees a une borne de commande en restauration rapide : pics courts
|
|
; a l'heure du repas, faible charge le reste du temps.
|
|
; Pour un VPS 2 vCPU / 4 Go RAM : chaque worker PHP consomme ~30-60 Mo.
|
|
; Avec max_children=10, pire cas ~600 Mo reserve a PHP, marge pour MariaDB.
|
|
pm = dynamic
|
|
pm.max_children = 10
|
|
pm.start_servers = 3
|
|
pm.min_spare_servers = 2
|
|
pm.max_spare_servers = 5
|
|
pm.max_requests = 500
|
|
|
|
; --- Status et ping pour monitoring / healthcheck ---
|
|
; /fpm-status et /fpm-ping ne sont accessibles qu'au sein du conteneur
|
|
; (le vhost Apache n'exposera pas ces endpoints publiquement).
|
|
pm.status_path = /fpm-status
|
|
ping.path = /fpm-ping
|
|
ping.response = pong
|
|
|
|
; --- Logs ---
|
|
; Redirection vers stderr du conteneur : agregation par docker logs.
|
|
access.log = /proc/self/fd/2
|
|
access.format = "%R - %u %t \"%m %r\" %s"
|
|
|
|
; Logs d'erreurs PHP : deja rediriges via error_log dans php.ini.
|
|
catch_workers_output = yes
|
|
decorate_workers_output = no
|