Jobber/docker-compose.yml
2025-12-26 20:31:25 +00:00

95 lines
3.4 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
- JOBSPY_SITES=${JOBSPY_SITES:-indeed,linkedin}
# 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_TOKEN=${UKVISAJOBS_TOKEN:-}
- UKVISAJOBS_AUTH_TOKEN=${UKVISAJOBS_AUTH_TOKEN:-}
- UKVISAJOBS_CSRF_TOKEN=${UKVISAJOBS_CSRF_TOKEN:-}
- UKVISAJOBS_CI_SESSION=${UKVISAJOBS_CI_SESSION:-}
- UKVISAJOBS_MAX_JOBS=${UKVISAJOBS_MAX_JOBS:-50}
- 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: