[RESPONDIDO] Mensaje de mantenimiento para actualización

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

Hola, buenas tardes.

Muchas gracias por compartirnos esta alternativa, esto nos fue útil para nosotros! =)

Gracias por el tiempo y el aporte, saludos.