career-ops Docker & Self-Hosted Deployment

GitHub

Open-source AI job search: scan job portals, evaluate listings with a structured A-F rubric into a 1.0-5.0 score, tailor your CV, track applications β€” runs...

63,650 stars JavaScript JavaScript 1 file Β· ~32,471 tokens #ai#ai-agent#anthropic#ats#automation#beginner-friendly#career#careerops
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/career-ops
2. Docker Run (1-Click Launch) docker run -d --name career-ops --restart always career-ops:local
3. Podman Run podman run -d --name career-ops --restart always career-ops:local
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/career-ops:local
5. ORAS Pull (OCI Artifact) oras pull career-ops:local
6. Compose Deployment docker compose up -d
docker-compose.yml
Download .yml
services:
  career-ops:
    build:
      context: .
      dockerfile: Dockerfile
    image: career-ops:local
    container_name: career-ops
    working_dir: /app
    # Long-running shell so `docker compose exec` is instant.
    command: ["tail", "-f", "/dev/null"]
    init: true
    # Mount whole project so edits on host are visible inside the container.
    # node_modules is kept inside the image to avoid host/container ABI mismatch
    # (host is ubuntu26.04 where playwright won't install; image is jammy).
    volumes:
      - .:/app
      - career-ops-node-modules:/app/node_modules
    environment:
      - NODE_ENV=development
      - PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
      # Forward common API keys if set on host. Empty values are ignored.
      - GEMINI_API_KEY=${GEMINI_API_KEY:-}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
      - OPENAI_API_KEY=${OPENAI_API_KEY:-}
    # Chromium needs a larger /dev/shm than the default 64M.
    shm_size: "1gb"
    # Dashboard TUI is interactive; expose nothing by default but allow `-it`.
    tty: true
    stdin_open: true
    restart: unless-stopped

volumes:
  career-ops-node-modules: