# ============================================================================= # Job Ops - Docker Compose Configuration # ============================================================================= services: job-ops: build: context: . dockerfile: Dockerfile args: # Set "false" only if you want Reactive Resume steps in the first-run wizard (rebuild image). VITE_SKIP_RXRESUME_ONBOARDING: "true" image: job-ops:local container_name: job-ops ports: - "3005:3001" volumes: # Persist database and generated PDFs - ./data:/app/data environment: # Server config - NODE_ENV=production - PORT=3001 # Python path (uses system python in container) - PYTHON_PATH=/usr/bin/python3 env_file: - path: ./.env required: false restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s develop: watch: # Rebuild container when package.json changes - path: ./orchestrator/package.json action: rebuild - path: ./orchestrator/package-lock.json action: rebuild # Sync source code changes and rebuild inside container - path: ./orchestrator/src target: /app/orchestrator/src action: sync+restart - path: ./visa-sponsor-providers target: /app/visa-sponsor-providers action: sync+restart # Sync extractor changes - path: ./extractors/gradcracker/src target: /app/extractors/gradcracker/src action: sync+restart - path: ./extractors/hiringcafe/src target: /app/extractors/hiringcafe/src action: sync+restart - path: ./extractors/ukvisajobs/src target: /app/extractors/ukvisajobs/src action: sync+restart - path: ./extractors/jobspy target: /app/extractors/jobspy action: sync+restart # Volumes for data persistence volumes: data: