emorel
(Diego Emiliano Morel)
4 Abril, 2023 17:46
1
Hola buenas tardes, desde UNPAZ estamos haciendo pruebas para pronto salir a producción.
Nos preguntamos si existe la posibilidad de dejar un mensaje de mantenimiento para cuando se tenga que actualizar el sistema?
Al remover el stack de los sistemas el index arroja el mensaje “404 page not found”. Quizás sea posible personalizar ese HTML para cuando el sistema no se encuentre disponible.
Quedo atento a las sugerencias, muchas gracias.
Buen día,
recomendamos realizar pruebas para personalizar el mensaje de error de traefik en un ambiente de testeo
para las pruebas sobre un ambiente basado en docker swarm, se siguió como referencia esta guía: Custom error page in Traefik v2.x. Finally 😻 | by Yulia Kostrikova 🇺🇦❤️ | Medium
el método consiste en agregar un servicio (nginx) que captura los errores y sirve la página 404.html personalizada
para adaptar a nuestro caso, dentro del directorio “servicios” se debe crear directorio “pages” que debe contener el archivo 404.html personalizado
también se debe crear el directorio “catch-all”, y dentro de éste crear un archivo llamado “default.conf” con el siguiente contenido:
server {
listen 80;
server_name _;
error_page 404 /404.html;
location / {
root /usr/share/nginx/error-pages;
internal;
}
}
se agregan las líneas correspondiente al servicio maintenance-page en traefik.yml, (que es el yml que utilizamos en el ambiente de testing, debido a que se utilizan certificados autofirmados):
maintenance-page:
image: nginx:stable
volumes:
- ./pages:/usr/share/nginx/error-pages
- ./catch-all/default.conf:/etc/nginx/conf.d/default.conf
networks:
traefik-public:
deploy:
# mode: global
# placement:
# constraints:
# - node.role == manager
labels:
- "traefik.enable=true"
- "traefik.http.services.maintenance-page.loadbalancer.server.port=80"
- "traefik.http.routers.maintenance-page.rule=HostRegexp(`{host:.+}`)"
- "traefik.http.routers.maintenance-page.priority=1"
- "traefik.http.routers.maintenance-page.middlewares=maintenance-page@docker"
- "traefik.http.routers.maintenance-page.entrypoints=web-secured"
- "traefik.http.routers.maintenance-page.tls=true"
- "traefik.http.middlewares.maintenance-page.errors.status=400-599"
- "traefik.http.middlewares.maintenance-page.errors.service=maintenance-page"
- "traefik.http.middlewares.maintenance-page.errors.query=/404.html"
volumes:
catch-all:
pages:
mientras que las líneas del servicio de traefik (reverse-proxy) quedan de la siguiente manera:
deploy:
mode: global
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
# Dasboard
- "traefik.http.routers.api.rule=Host(`traefik.uunn.local`)"
- "traefik.http.routers.api.service=api@internal"
- "traefik.http.routers.api.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=traefik:$$apr1$$clave."
# Dummy service for Swarm port detection. The port can be any valid integer value.
#- "traefik.http.services.dummy-svc.loadbalancer.server.port=9999"
- "traefik.http.services.http-catchall.loadbalancer.server.port=8080"
# Redirect TLS
#- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.rule=Host(`uunn.local`)"
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.tls=true"
#- "traefik.http.routers.http-catchall.priority=100"
#- "traefik.http.routers.http-catchall.middlewares=redirect-to-https@docker"
#- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.routers.http-catchall.middlewares=maintenance-page@docker"
para que tome los cambios, desplegar nuevamente
docker stack rm traefik
docker stack deploy -c traefik.yml traefik
Si alguien más de la comunidad ha experimentado con otra alternativa, invitamos a compartir su experiencia!
Saludos
emorel
(Diego Emiliano Morel)
18 Abril, 2023 17:55
3
Hola, buenas tardes.
Muchas gracias por compartirnos esta alternativa, esto nos fue útil para nosotros! =)
Gracias por el tiempo y el aporte, saludos.