The #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.
docker pull ghcr.io/srbhr/resume-matcher
docker run -d --name resume-matcher -p 3000:3000 --restart always ghcr.io/srbhr/resume-matcher
podman run -d --name resume-matcher -p 3000:3000 --restart always ghcr.io/srbhr/resume-matcher
skopeo inspect docker://ghcr.io/srbhr/resume-matcher
oras pull ghcr.io/srbhr/resume-matcher
docker compose up -d
services:
resume-matcher:
image: ghcr.io/srbhr/resume-matcher
build:
context: .
# Optional, for slow networks (empty by default = no change):
# DEBIAN_MIRROR=https://mirrors.edge.kernel.org/debian docker compose build
args:
- DEBIAN_MIRROR=${DEBIAN_MIRROR:-}
- DEBIAN_SECURITY_MIRROR=${DEBIAN_SECURITY_MIRROR:-}
- PIP_INDEX_URL=${PIP_INDEX_URL:-}
- PLAYWRIGHT_DOWNLOAD_HOST=${PLAYWRIGHT_DOWNLOAD_HOST:-}
container_name: resume-matcher
ports:
- "${PORT:-3000}:3000"
volumes:
- resume-data:/app/backend/data
#secrets:
# - llm_api_key
environment:
# domain in reverse proxy
- FRONTEND_BASE_URL=${FRONTEND_BASE_URL:-http://localhost:3000}
# Logging configuration: DEBUG, INFO, WARNING, ERROR
- LOG_LEVEL=${LOG_LEVEL:-INFO}
#- LOG_LEVEL_FILE=${LOG_LEVEL_FILE:-}
# Debug level for LiteLLM: DEBUG, INFO, WARNING, ERROR
- LOG_LLM=${LOG_LLM:-WARNING}
#- LOG_LLM_FILE=${LOG_LLM_FILE:-}
# LLM Configuration - configure via Settings UI or set env vars for explicit overrides
# Supported providers: openai, anthropic, openrouter, gemini, deepseek, ollama
# Defaults are defined in apps/backend/app/config.py
- LLM_PROVIDER=${LLM_PROVIDER:-openai}
- LLM_MODEL=${LLM_MODEL:-}
# Optional Docker Secret file path (same behavior as Postgres-style *_FILE)
#- LLM_API_KEY_FILE=${LLM_API_KEY_FILE:-/run/secrets/llm_api_key}
- LLM_API_KEY=${LLM_API_KEY:-}
# For Ollama running on host machine, use host.docker.internal:
# - LLM_API_BASE=http://host.docker.internal:11434
- LLM_API_BASE=${LLM_API_BASE:-}
# CORS origins (JSON array format). FRONTEND_BASE_URL is auto-included.
#- CORS_ORIGINS=["http://localhost:3000","http://127.0.0.1:3000"]
restart: unless-stopped
# Fast iteration: `docker compose watch` (Compose 2.22+). Backend code is synced into
# the running container and the app restarts; no image rebuild. Frontend, dependency
# and image changes rebuild the image (Chromium and Python deps stay cached).
# Plain `docker compose up` ignores this block.
develop:
watch:
- action: sync+restart
path: ./apps/backend/app
target: /app/backend/app
ignore:
- __pycache__/
- action: rebuild
path: ./apps/frontend
ignore:
- node_modules/
- .next/
- action: rebuild
path: ./apps/backend/pyproject.toml
- action: rebuild
path: ./Dockerfile
- action: rebuild
path: ./docker
#secrets:
# llm_api_key:
# file: ./secrets/llm_api_key
volumes:
resume-data:
driver: local