services: outfit-voting-abi26: image: tueem/outfit-voting-abi26:latest restart: unless-stopped environment: DB_HOST: "HOST" DB_PORT: "PORT" DB_NAME: "NAME" DB_USER: "USER" DB_PASS: "PASS" OIDC_ISSUER: "OIDC_ISSUER" OIDC_CLIENTID: "OIDC_CLIENTID" OIDC_SECRET: "OIDC_SECRET" OIDC_REDIRECT: "OIDC_REDIRECT" SIGNINGKEY: "SIGNINGKEY" IMPRINTURL: "IMPRINTURL" networks: - web-network - backend depends_on: postgres: condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.myapp.rule=Host(`example.com`)" - "traefik.http.routers.myapp.entrypoints=websecure" - "traefik.http.routers.myapp.tls=true" - "traefik.http.routers.myapp.tls.certresolver=letsencrypt" - "traefik.http.services.myapp.loadbalancer.server.port=4000" postgres: image: postgres:latest restart: unless-stopped shm_size: 128mb environment: POSTGRES_PASSWORD: "PASS" volumes: - db:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U myuser -d mydatabase"] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - backend traefik: image: traefik:v3.1 restart: unless-stopped security_opt: - no-new-privileges:true ports: - "80:80" # HTTP port - "443:443" # HTTPS port command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entryPoint.scheme=https" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=your-email@example.com" - "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik-ssl:/etc/traefik/acme networks: - web-network networks: web-network: backend: volumes: db: