services: # Nginx reverse proxy and static file server (client baked into image) nginx: image: ghcr.io/dlawler489/etsy-finance-tracker-nginx:main container_name: etsy-nginx ports: - "3000:80" depends_on: - etsy-tracker restart: unless-stopped labels: - "traefik.enable=true" - "traefik.docker.network=traefik_default" - "traefik.http.routers.etsy.rule=Host(`etsy.plexultra.com`)" - "traefik.http.routers.etsy.entrypoints=websecure" - "traefik.http.routers.etsy.tls.certresolver=le" - "traefik.http.services.etsy.loadbalancer.server.port=80" networks: - etsy-network - traefik_default healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/"] interval: 30s timeout: 10s retries: 3 start_period: 10s # Etsy Finance Tracker API Server (from GitHub Container Registry) etsy-tracker: image: ghcr.io/dlawler489/etsy-finance-tracker:main container_name: etsy-finance-tracker expose: - "8080" environment: - NODE_ENV=production - PORT=8080 - CLIENT_URL=http://nginx volumes: - etsy_data:/app/data - etsy_uploads:/app/uploads restart: unless-stopped networks: - etsy-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s volumes: etsy_uploads: driver: local etsy_data: driver: local networks: etsy-network: driver: bridge traefik_default: external: true