services: web: build: context: . target: web ports: - "${HOST_PORT:-8000}:80" depends_on: api: condition: service_healthy restart: unless-stopped api: build: context: . target: api environment: NODE_ENV: production PORT: 3001 DATABASE_URL: /data/tech-library.db WEB_ORIGIN: ${WEB_ORIGIN:-http://localhost:8000} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD_HASH: ${ADMIN_PASSWORD_HASH:?Set ADMIN_PASSWORD_HASH} SESSION_SECRET: ${SESSION_SECRET:?Set SESSION_SECRET} volumes: - tech-library-data:/data healthcheck: test: ["CMD", "node", "-e", "fetch('http://localhost:3001/health').then(r=>{if(!r.ok)process.exit(1)})"] interval: 15s timeout: 5s retries: 5 restart: unless-stopped worker: build: context: . target: worker environment: NODE_ENV: production DATABASE_URL: /data/tech-library.db SOURCE_POLL_INTERVAL_HOURS: ${SOURCE_POLL_INTERVAL_HOURS:-24} volumes: - tech-library-data:/data depends_on: api: condition: service_healthy restart: unless-stopped volumes: tech-library-data: