# This stack runs API, email worker, and file worker containers. # Ensure envs in .env point to endpoints reachable from inside containers. # In particular, MYSQL_DSN/SQS/SES values using 127.0.0.1 will not work unless they are # changed to a host or service name that containers can reach. services: api: build: context: . dockerfile: Dockerfile target: api image: localhost/wucher-api:dev env_file: - .env environment: HTTP_PORT: "8080" ports: - "8080:8080" restart: unless-stopped security_opt: - no-new-privileges:true cap_drop: - ALL healthcheck: test: ["CMD", "/app/healthcheck", "http://127.0.0.1:8080/health"] interval: 30s timeout: 3s start_period: 20s retries: 3 worker: build: context: . dockerfile: Dockerfile target: worker image: localhost/wucher-worker:dev env_file: - .env environment: # Bind to all interfaces so the monitor endpoint can be reached from the host. QUEUE_WORKER_MONITOR_ADDR: "0.0.0.0:9090" WORKER_JOB: "email" ports: - "9090:9090" restart: unless-stopped security_opt: - no-new-privileges:true cap_drop: - ALL healthcheck: test: ["CMD", "/app/healthcheck", "http://127.0.0.1:9090/health"] interval: 30s timeout: 3s start_period: 20s retries: 3 gotenberg: image: gotenberg/gotenberg:8 ports: - "3000:3000" restart: unless-stopped file-worker: build: context: . dockerfile: Dockerfile target: file-worker image: localhost/wucher-file-worker:dev env_file: - .env environment: # Bind to all interfaces so the monitor endpoint can be reached from the host. QUEUE_WORKER_MONITOR_ADDR: "0.0.0.0:9091" WORKER_JOB: "file_processing" ports: - "9091:9091" restart: unless-stopped security_opt: - no-new-privileges:true cap_drop: - ALL healthcheck: test: ["CMD", "/app/healthcheck", "http://127.0.0.1:9091/health"] interval: 30s timeout: 3s start_period: 20s retries: 3