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
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user