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:
+31
@@ -0,0 +1,31 @@
|
||||
FROM nginx:stable-alpine
|
||||
|
||||
# Limite envsubst aux seules variables explicitement utilisées dans le template,
|
||||
# pour préserver les variables Nginx natives ($remote_addr, $host, ...).
|
||||
ENV NGINX_ENVSUBST_FILTER='^(LISTEN_PORT|SERVER_NAME|UPSTREAM_HOST|MAINTENANCE_MODE)$'
|
||||
|
||||
# Le snippet de log est statique et copié une fois pour toutes.
|
||||
COPY nginx/snippets/maintenance-log.conf /etc/nginx/snippets/maintenance-log.conf
|
||||
|
||||
# Le template est traité par /docker-entrypoint.d/20-envsubst-on-templates.sh
|
||||
# fourni par l'image officielle, après notre hook 10-init.sh.
|
||||
COPY nginx/templates/default.conf.template /etc/nginx/templates/default.conf.template
|
||||
|
||||
# Page de maintenance statique.
|
||||
COPY public/maintenance.html /usr/share/nginx/html/maintenance.html
|
||||
|
||||
# Scripts utilitaires + hook d'initialisation.
|
||||
COPY scripts/build-ip-list.sh /usr/local/bin/build-ip-list.sh
|
||||
COPY scripts/entrypoint.sh /docker-entrypoint.d/10-init.sh
|
||||
RUN chmod +x /usr/local/bin/build-ip-list.sh /docker-entrypoint.d/10-init.sh
|
||||
|
||||
# Crée le fichier maintenance.log à l'avance (sinon Nginx ne logge pas tant
|
||||
# que le fichier n'existe pas) et délègue les logs standards à stdout/stderr.
|
||||
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
|
||||
&& ln -sf /dev/stderr /var/log/nginx/error.log \
|
||||
&& touch /var/log/nginx/maintenance.log
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD wget -qO- "http://127.0.0.1:${LISTEN_PORT:-8080}/" >/dev/null 2>&1 || exit 1
|
||||
Reference in New Issue
Block a user