# ============================================================================= # Job Ops - Docker Compose Configuration # ============================================================================= services: job-ops: build: context: . dockerfile: Dockerfile image: job-ops:latest container_name: job-ops ports: - "3005:3001" volumes: # Persist database and generated PDFs - ./data:/app/data # Base resume JSON (read-only) - ./resume-generator/base.json:/app/resume-generator/base.json:ro environment: # Server config - NODE_ENV=production - PORT=3001 # OpenRouter API for AI scoring and summaries - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - MODEL=${MODEL:-openai/gpt-4o-mini} # RXResume credentials for PDF generation - RXRESUME_EMAIL=${RXRESUME_EMAIL} - RXRESUME_PASSWORD=${RXRESUME_PASSWORD} # Pipeline configuration - PIPELINE_TOP_N=${PIPELINE_TOP_N:-10} - PIPELINE_MIN_SCORE=${PIPELINE_MIN_SCORE:-50} # JobSpy (Indeed/LinkedIn scraping) - optional - JOBSPY_SITES=${JOBSPY_SITES:-indeed,linkedin} - JOBSPY_SEARCH_TERM=${JOBSPY_SEARCH_TERM:-web developer} - JOBSPY_LOCATION=${JOBSPY_LOCATION:-UK} - JOBSPY_RESULTS_WANTED=${JOBSPY_RESULTS_WANTED:-200} - JOBSPY_HOURS_OLD=${JOBSPY_HOURS_OLD:-72} - JOBSPY_COUNTRY_INDEED=${JOBSPY_COUNTRY_INDEED:-UK} - JOBSPY_LINKEDIN_FETCH_DESCRIPTION=${JOBSPY_LINKEDIN_FETCH_DESCRIPTION:-1} # Optional: Notion integration - NOTION_API_KEY=${NOTION_API_KEY:-} - NOTION_DATABASE_ID=${NOTION_DATABASE_ID:-} # Optional: Webhook secret for n8n - WEBHOOK_SECRET=${WEBHOOK_SECRET:-} # Python path (uses system python in container) - PYTHON_PATH=/usr/bin/python3 restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s # Volumes for data persistence volumes: data: