services: mon: image: twinproduction/gatus:latest volumes: - "{{ mon_base }}/volumes/gatus/data:/data" - "{{ mon_base }}/volumes/gatus/config:/config" environment: - TZ={{ timezone }} - DEPLOYMENT_TIME={{ deployment_time }} networks: - monint - proxy - metrics deploy: mode: replicated update_config: parallelism: 1 failure_action: rollback order: start-first delay: 5s monitor: 30s replicas: 1 labels: - traefik.enable=true - traefik.swarm.network=proxy - traefik.http.routers.mon.middlewares=oauth-verify - traefik.http.routers.mon.tls=true - traefik.http.routers.mon.tls.certResolver=letsencrypt - traefik.http.routers.mon.rule=Host(`{{ mon_domain }}`) - traefik.http.routers.mon.entrypoints=websecure - traefik.http.services.mon.loadbalancer.server.port=8080 uptime: image: oci.liz.coffee/emprespresso/uptime:release networks: - monint environment: - TZ={{ timezone }} - DEPLOYMENT_TIME={{ deployment_time }} deploy: mode: replicated replicas: 1 update_config: parallelism: 1 order: start-first failure_action: rollback labels: - traefik.enable=false prometheus: image: prom/prometheus:latest volumes: - "{{ mon_base }}/volumes/prometheus/config.yml:/etc/prometheus/prometheus.yml" networks: - proxy - metrics environment: - TZ={{ timezone }} - DEPLOYMENT_TIME={{ deployment_time }} deploy: mode: replicated replicas: 1 update_config: parallelism: 1 order: start-first failure_action: rollback labels: - traefik.enable=true - traefik.swarm.network=proxy - traefik.http.routers.prometheus.tls=true - traefik.http.routers.prometheus.tls.certResolver=letsencrypt - traefik.http.routers.prometheus.rule=Host(`{{ prometheus_domain }}`) - traefik.http.routers.prometheus.entrypoints=websecure - traefik.http.services.prometheus.loadbalancer.server.port=9090 networks: monint: proxy: external: true metrics: name: metrics driver: overlay attachable: true