services: publisher: build: context: .. dockerfile: publisher/Dockerfile image: atproto-1440news-publisher container_name: atproto-1440news-publisher restart: unless-stopped stop_grace_period: 30s env_file: - pds.env environment: DB_HOST: infra-postgres DB_PORT: 5432 DB_USER: dba_1440_news DB_PASSWORD_FILE: /run/secrets/db_password DB_NAME: db_1440_news secrets: - db_password networks: - atproto labels: - "traefik.enable=true" # Production: HTTPS with Let's Encrypt for api.1440.news - "traefik.http.routers.publisher-1440.rule=Host(`api.1440.news`)" - "traefik.http.routers.publisher-1440.entrypoints=https" - "traefik.http.routers.publisher-1440.tls.certresolver=letsencrypt-dns" # Production: HTTP to HTTPS redirect - "traefik.http.routers.publisher-1440-redirect.rule=Host(`api.1440.news`)" - "traefik.http.routers.publisher-1440-redirect.entrypoints=http" - "traefik.http.routers.publisher-1440-redirect.middlewares=https-redirect" - "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https" - "traefik.http.middlewares.https-redirect.redirectscheme.permanent=true" # Local development - "traefik.http.routers.publisher-1440-local.rule=Host(`api.1440.localhost`)" - "traefik.http.routers.publisher-1440-local.entrypoints=http" # Shared service - "traefik.http.services.publisher-1440.loadbalancer.server.port=4322" secrets: db_password: file: ../../../infra/postgres/secrets/dba_1440_news_password.txt networks: atproto: external: true