add custom 502 error page

This commit is contained in:
2026-01-20 17:13:19 +01:00
parent 885bfe08eb
commit 83d6fe194b
5 changed files with 93 additions and 9 deletions

View File

@@ -22,8 +22,7 @@ packages:
- git - git
- nfs-common - nfs-common
- curl - curl
- python3-flask - nginx
- gunicorn
write_files: write_files:
- path: /opt/environment/.env - path: /opt/environment/.env
@@ -38,9 +37,18 @@ write_files:
permissions: "0755" permissions: "0755"
content: | content: |
${traefik-service} ${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: runcmd:
- /opt/gateway/install-traefik.sh - /opt/gateway/install-traefik.sh
- ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled
- systemctl start nginx.service
final_message: | final_message: |
Base system ready for ${hostname} Base system ready for ${hostname}

View File

@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=500, initial-scale=1.0">
<title>Service unavailable</title>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 70vh;
background-color: rgba(248, 241, 219, 0.801);
}
.box {
display: flex;
flex-direction: column;
align-items: center;
box-shadow: rgba(76, 76, 80, 0.2) 0px 7px 29px 0px;
width: 30vw;
padding: 2rem;
background-color: rgb(255, 255, 255);
}
</style>
</head>
<body>
<div class="box">
<h1>Le service n'est pas disponible.</h1>
<p>
Il est possible que le serveur soit éteint pour les raisons suivantes :
<ul>
<li>Maintenance hebdomadaire (mise à jour des services ou sauvegarde).</li>
<li>Le service n'est plus maintenu.</li>
</ul>
</p>
<aside>
Contactez l'administrateur ou patientiez quelques instant.
</aside>
</div>
</body>
</html>

View File

@@ -0,0 +1,10 @@
server {
listen 8090;
server_name localhost;
error_page 502 /502.html;
location / {
root /usr/share/nginx/error-pages;
}
}

View File

@@ -25,7 +25,8 @@ module "vm" {
proxmox_host_ip = var.proxmox_host_ip proxmox_host_ip = var.proxmox_host_ip
traefik-service = indent(6, file("${path.module}/lib/services/traefik.service")) traefik-service = indent(6, file("${path.module}/lib/services/traefik.service"))
install-traefik-script = indent(6, file("${path.module}/lib/scripts/install-traefik.sh")) 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")) env-file-content = indent(6, file("${path.module}/.env"))
} }
) )

View File

@@ -17,6 +17,8 @@ http:
service: ${subservice.name} service: ${subservice.name}
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
%{~ endfor } %{~ endfor }
%{~ endfor } %{~ endfor }
nextcloud: nextcloud:
@@ -26,7 +28,8 @@ http:
service: nextcloud service: nextcloud
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
rocket: rocket:
rule: "Host(`discussion.fefan.fr`)" rule: "Host(`discussion.fefan.fr`)"
entryPoints: entryPoints:
@@ -34,7 +37,8 @@ http:
service: rocket service: rocket
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
wiki: wiki:
rule: "Host(`benoit.mathieu.wiki`)" rule: "Host(`benoit.mathieu.wiki`)"
entryPoints: entryPoints:
@@ -42,7 +46,8 @@ http:
service: wiki service: wiki
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
vaultwarden: vaultwarden:
rule: "Host(`vaultwarden.aldon.fr`)" rule: "Host(`vaultwarden.aldon.fr`)"
entryPoints: entryPoints:
@@ -50,7 +55,8 @@ http:
service: vaultwarden service: vaultwarden
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
keycloak: keycloak:
rule: "Host(`keycloak.aldon.fr`)" rule: "Host(`keycloak.aldon.fr`)"
entryPoints: entryPoints:
@@ -58,6 +64,8 @@ http:
service: keycloak service: keycloak
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
middlewares:
- redirect-errors
services: services:
%{~ for _, service in services } %{~ for _, service in services }
%{~ for _, subservice in service } %{~ for _, subservice in service }
@@ -100,7 +108,21 @@ http:
servers: servers:
- url: "http://192.168.1.34:8080" - url: "http://192.168.1.34:8080"
error-handler-service:
loadBalancer:
passHostHeader: true
servers:
- url: "http://127.0.0.1:8090"
middlewares: middlewares:
redirect-to-https: redirect-to-https:
redirectScheme: redirectScheme:
scheme: https scheme: https
redirect-errors:
errors:
status:
- "500"
- "501"
- "503"
- "502"
service: error-handler-service
query: "/502.html"