services: consumer: build: ./backend image: simugaz/backend:latest command: consumer.py restart: unless-stopped networks: - lora-gateway_mqtt - database env_file: env_files/consumer.env api: build: ./backend image: simugaz/backend:latest command: api.py restart: unless-stopped networks: - traefik - database env_file: env_files/api.env labels: - traefik.enable=true - traefik.http.services.api-simugaz.loadbalancer.server.port=8000 - traefik.http.routers.api-simugaz-https.rule=Host(`api.agreg.ungol.fr`) - traefik.http.routers.api-simugaz-https.entrypoints=websecure - traefik.http.routers.api-simugaz-https.tls=true - traefik.http.routers.api-simugaz-https.tls.certresolver=letsencrypt - traefik.http.routers.api-simugaz-https.service=api-simugaz webui: build: ./frontend image: simugaz/frontend:latest restart: unless-stopped networks: - traefik depends_on: - api labels: - traefik.enable=true - traefik.http.services.webui.loadbalancer.server.port=80 - traefik.http.routers.webui-https.rule=Host(`demo.agreg.ungol.fr`) - traefik.http.routers.webui-https.entrypoints=websecure - traefik.http.routers.webui-https.tls=true - traefik.http.routers.webui-https.tls.certresolver=letsencrypt - traefik.http.routers.webui-https.service=webui db: image: postgres:18-alpine restart: unless-stopped volumes: - ./initdb:/docker-entrypoint-initdb.d:ro - db:/var/lib/postgresql networks: - database env_file: env_files/db.env pgadmin: image: dpage/pgadmin4:latest restart: unless-stopped ports: - 8081:80 networks: - public - database volumes: - ./servers.json:/pgadmin4/servers.json env_file: env_files/pgadmin.env traefik: image: traefik:3 command: - "--api=false" - "--api.dashboard=false" - "--api.insecure=false" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--providers.docker.network=traefik_public" - "--providers.file=true" - "--providers.file.directory=/rules" - "--providers.file.watch=true" - "--entryPoints.web.address=:80" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entryPoint.scheme=https" - "--entryPoints.websecure.address=:443" - "--entrypoints.websecure.http3={}" - "--certificatesresolvers.letsencrypt.acme.dnschallenge=true" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=ovh" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.delayBeforeCheck=0" - "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-v02.api.letsencrypt.org/directory" - "--certificatesresolvers.letsencrypt.acme.email=" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" env_file: env_files/traefik.env networks: - traefik - public ports: - 80:80 - 443:443 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - certificates:/letsencrypt:rw volumes: certificates: db: networks: public: database: internal: true lora-gateway_mqtt: external: true traefik: internal: true