diff --git a/modules/apps/gateway/cloud-init/service.yaml b/modules/apps/gateway/cloud-init/service.yaml index da6eee5..dc6af6c 100644 --- a/modules/apps/gateway/cloud-init/service.yaml +++ b/modules/apps/gateway/cloud-init/service.yaml @@ -22,8 +22,7 @@ packages: - git - nfs-common - curl - - python3-flask - - gunicorn + - nginx write_files: - path: /opt/environment/.env @@ -38,9 +37,18 @@ write_files: permissions: "0755" content: | ${traefik-service} - + - path: /usr/share/nginx/error-pages/502.html + permissions: "0644" + content: | + {nginx-error-502} + - path: /etc/nginx/sites-available/default + permissions: "0644" + content: | + {nginx-error-configuration} runcmd: - /opt/gateway/install-traefik.sh + - ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled + - systemctl start nginx.service final_message: | Base system ready for ${hostname} \ No newline at end of file diff --git a/modules/apps/gateway/lib/scripts/502.html b/modules/apps/gateway/lib/scripts/502.html new file mode 100644 index 0000000..59a637a --- /dev/null +++ b/modules/apps/gateway/lib/scripts/502.html @@ -0,0 +1,43 @@ + + + + + + Service unavailable + + + +
+

Le service n'est pas disponible.

+

+ Il est possible que le serveur soit éteint pour les raisons suivantes : +

+

+ +
+ + diff --git a/modules/apps/gateway/lib/scripts/default b/modules/apps/gateway/lib/scripts/default new file mode 100644 index 0000000..efb7cb4 --- /dev/null +++ b/modules/apps/gateway/lib/scripts/default @@ -0,0 +1,10 @@ +server { + listen 8090; + server_name localhost; + + error_page 502 /502.html; + + location / { + root /usr/share/nginx/error-pages; + } +} \ No newline at end of file diff --git a/modules/apps/gateway/main.tf b/modules/apps/gateway/main.tf index d4df235..c8933f5 100644 --- a/modules/apps/gateway/main.tf +++ b/modules/apps/gateway/main.tf @@ -25,7 +25,8 @@ module "vm" { proxmox_host_ip = var.proxmox_host_ip traefik-service = indent(6, file("${path.module}/lib/services/traefik.service")) install-traefik-script = indent(6, file("${path.module}/lib/scripts/install-traefik.sh")) - + nginx-error-configuration = indent(6, file("${path.module}/lib/scripts/default")) + nginx-error-502 = indent(6, file("${path.module}/lib/scripts/502.html")) env-file-content = indent(6, file("${path.module}/.env")) } ) diff --git a/templates/traefik.services.tpl b/templates/traefik.services.tpl index 6ee0342..2b10a7d 100644 --- a/templates/traefik.services.tpl +++ b/templates/traefik.services.tpl @@ -17,6 +17,8 @@ http: service: ${subservice.name} tls: certResolver: letsencrypt + middlewares: + - redirect-errors %{~ endfor } %{~ endfor } nextcloud: @@ -26,7 +28,8 @@ http: service: nextcloud tls: certResolver: letsencrypt - + middlewares: + - redirect-errors rocket: rule: "Host(`discussion.fefan.fr`)" entryPoints: @@ -34,7 +37,8 @@ http: service: rocket tls: certResolver: letsencrypt - + middlewares: + - redirect-errors wiki: rule: "Host(`benoit.mathieu.wiki`)" entryPoints: @@ -42,7 +46,8 @@ http: service: wiki tls: certResolver: letsencrypt - + middlewares: + - redirect-errors vaultwarden: rule: "Host(`vaultwarden.aldon.fr`)" entryPoints: @@ -50,7 +55,8 @@ http: service: vaultwarden tls: certResolver: letsencrypt - + middlewares: + - redirect-errors keycloak: rule: "Host(`keycloak.aldon.fr`)" entryPoints: @@ -58,6 +64,8 @@ http: service: keycloak tls: certResolver: letsencrypt + middlewares: + - redirect-errors services: %{~ for _, service in services } %{~ for _, subservice in service } @@ -100,7 +108,21 @@ http: servers: - url: "http://192.168.1.34:8080" + error-handler-service: + loadBalancer: + passHostHeader: true + servers: + - url: "http://127.0.0.1:8090" middlewares: redirect-to-https: redirectScheme: - scheme: https \ No newline at end of file + scheme: https + redirect-errors: + errors: + status: + - "500" + - "501" + - "503" + - "502" + service: error-handler-service + query: "/502.html"