93 lines
3.2 KiB
YAML
93 lines
3.2 KiB
YAML
# =============================================================================
|
|
# 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
|
|
|
|
# Preferred: pipe-separated list, e.g. "web developer|frontend developer|react developer"
|
|
- JOBSPY_SEARCH_TERMS=${JOBSPY_SEARCH_TERMS:-web developer|graduate web developer|react developer|graduate software engineer|graduate react developer|next js developer|graduate front end 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:-}
|
|
|
|
# UKVisaJobs (UK visa sponsorship jobs) - optional
|
|
- UKVISAJOBS_EMAIL=${UKVISAJOBS_EMAIL:-}
|
|
- UKVISAJOBS_PASSWORD=${UKVISAJOBS_PASSWORD:-}
|
|
- UKVISAJOBS_HEADLESS=${UKVISAJOBS_HEADLESS:-true}
|
|
- UKVISAJOBS_SEARCH_KEYWORD=${UKVISAJOBS_SEARCH_KEYWORD:-}
|
|
|
|
# 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
|
|
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
|
|
# Sync extractor changes
|
|
- path: ./extractors/gradcracker/src
|
|
target: /app/extractors/gradcracker/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:
|