From f192e43374d8fc15857b59e7caf03153516169c2 Mon Sep 17 00:00:00 2001
From: David Beniamine <david.beniamine@tetras-libre.fr>
Date: Mon, 4 Nov 2024 11:28:38 +0100
Subject: [PATCH] Kill maintenance mode after timeout

---
 .env.sample          |  2 ++
 docker-compose.yml   |  4 +++-
 docker/Dockerfile    |  5 +++++
 docker/entrypoint.sh | 13 +++++++++++++
 4 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 docker/Dockerfile
 create mode 100755 docker/entrypoint.sh

diff --git a/.env.sample b/.env.sample
index 451e827..7a4a3bd 100644
--- a/.env.sample
+++ b/.env.sample
@@ -1,3 +1,5 @@
+# TIMEOUT in minutes after which the service will automatically stop, 90 minutes if not set
+TIMEOUT=
 # Hosts to put down ex `dev.tetras-lab.io`,`reporting.tetras-lab.io`
 HOSTS=
 # Hosts to put down ex `127.0.0.1`,`109.190.86.26`
diff --git a/docker-compose.yml b/docker-compose.yml
index b2478d2..5491139 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3'
 
 services:
   maintenance:
-    image: nginx
+    build: docker
     volumes:
       - "./www:/usr/share/nginx/html:ro"
       - "./nginx.conf:/etc/nginx/nginx.conf:ro"
@@ -16,6 +16,8 @@ services:
       - "traefik.http.routers.maintenance.entrypoints=web,websecure"
       - "traefik.http.routers.maintenance.middlewares=hardening@docker"
       - "traefik.http.routers.maintenance.priority=99999"
+    environment:
+      TIMEOUT:
 
 networks:
   traefik:
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..417ca0b
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,5 @@
+FROM nginx:latest
+
+COPY entrypoint.sh /entrypoint.sh
+
+ENTRYPOINT '/entrypoint.sh'
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
new file mode 100755
index 0000000..67a7d00
--- /dev/null
+++ b/docker/entrypoint.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+if [ -z "$TIMEOUT" ]; then
+    TIMEOUT=90
+fi
+
+/docker-entrypoint.sh $@ &
+while [[ $TIMEOUT -gt 0 ]]; do
+    echo "Maintenance system is up, timeout in $TIMEOUT minutes"
+    sleep 60
+    TIMEOUT=$(($TIMEOUT - 1))
+done
+exit
-- 
GitLab