Files
maintenance_page/docker-compose.test.yml
fzarifian b968ec8aa5 feat: implémentation initiale du reverse proxy de maintenance
Reverse proxy Nginx (image stable-alpine) qui sert l'app upstream ou une
page de maintenance 503 selon l'IP du client.

- Modes whitelist/blacklist commutables via MAINTENANCE_MODE
- Liste IPv4 via MAINTENANCE_IP_LIST (séparée par virgules, validée au boot)
- Logique en directives Nginx natives (geo + map), zéro Lua/njs
- Page statique sobre HTML+CSS inline, zéro JS, zéro réseau sortant
- Log dédié /var/log/nginx/maintenance.log pour les requêtes bloquées
- Validation des env vars dans /docker-entrypoint.d/10-init.sh
- Stack Docker + docker-compose pour dev local et tests
- 6 cas de tests d'intégration (whitelist/blacklist x autorisée/bloquée + log + nginx -t)
- Lint shellcheck propre sur tous les scripts shell
2026-05-05 13:52:13 +02:00

44 lines
1.1 KiB
YAML

# Stack de tests d'intégration. Le réseau est fixé pour que l'IP du
# conteneur 'client' soit déterministe (172.28.5.50), ce qui permet
# de jouer scénarios whitelist/blacklist relatifs à cette IP connue.
services:
proxy:
build: .
image: maintenance-proxy:test
networks:
testnet:
ipv4_address: 172.28.5.10
environment:
MAINTENANCE_MODE: "${MAINTENANCE_MODE:-whitelist}"
MAINTENANCE_IP_LIST: "${MAINTENANCE_IP_LIST:-172.28.5.50}"
UPSTREAM_HOST: "upstream:80"
LISTEN_PORT: "8080"
SERVER_NAME: "_"
depends_on:
- upstream
upstream:
image: nginx:stable-alpine
networks:
testnet:
ipv4_address: 172.28.5.20
volumes:
- ./tests/fixtures/upstream:/usr/share/nginx/html:ro
client:
image: alpine:3
networks:
testnet:
ipv4_address: 172.28.5.50
entrypoint: ["/bin/sh", "-c", "apk add --no-cache curl >/dev/null && sleep infinity"]
depends_on:
- proxy
networks:
testnet:
driver: bridge
ipam:
config:
- subnet: 172.28.5.0/24