Skip to content

Docker Quickstart

Run GoGetEm with a single command — no Go toolchain, no Python venv, no manual setup.

Prerequisites

Quick start

docker compose up -d

Open http://localhost:8080 in your browser.

First-boot setup

  1. Navigate to /setup (you'll be redirected automatically on first visit)
  2. Create your account (username + password)
  3. The setup wizard walks you through: match profile, scrape profiles, and your first scrape

Configuration

Copy the example env file to customize settings:

cp .env.example .env

Key variables:

Variable Default Description
HOST_PORT 8080 Port exposed on your machine
MCP_TOKEN (empty) Bearer token for /api/mcp endpoint. Generate with openssl rand -hex 32
PAGE_SIZE 25 Jobs per page (10-50)

After editing .env, restart the container:

docker compose up -d

MCP endpoint (optional)

To use GoGetEm as a Claude MCP server over HTTP:

  1. Set MCP_TOKEN in your .env file:
    MCP_TOKEN=your-secret-token-here
    
  2. Restart: docker compose up -d
  3. Configure Claude Code's .mcp.json:
    {
      "mcpServers": {
        "gogetem": {
          "type": "http",
          "url": "http://localhost:8080/api/mcp",
          "headers": {
            "Authorization": "Bearer your-secret-token-here"
          }
        }
      }
    }
    

Building from source

# Build and run locally
docker compose build
docker compose up -d

# Dev mode (bind-mounts ./db for direct SQLite access)
docker compose -f docker-compose.dev.yml up --build

Dev mode uses a bind mount (./db:/app/db) so you can inspect the SQLite database from the host. It automatically sets SQLITE_JOURNAL_MODE=DELETE because WAL mode requires POSIX advisory file locks that don't work on macOS Docker bind mounts (VirtioFS).

Data persistence

Job data is stored in a Docker named volume (gogetem-data). This survives docker compose down and container rebuilds.

To back up:

docker compose exec gogetem cp /app/db/jobs.sqlite3 /app/db/backup.sqlite3
docker compose cp gogetem:/app/db/backup.sqlite3 ./backup.sqlite3

To start fresh:

docker compose down -v  # -v removes the volume
docker compose up -d

Troubleshooting

Port conflict: Change the host port in .env:

HOST_PORT=9090

Permission errors on volume: The container runs as UID/GID 1000. If your db/ directory (dev mode) has different ownership:

sudo chown -R 1000:1000 db/

"database disk image is malformed" on macOS Docker: This happens when using WAL journal mode with bind mounts. macOS Docker (VirtioFS) doesn't support the POSIX advisory file locks that WAL requires. Use docker-compose.dev.yml which sets SQLITE_JOURNAL_MODE=DELETE automatically, or add the env var to your own compose file:

environment:
  - SQLITE_JOURNAL_MODE=DELETE
The production docker-compose.yml uses named volumes and WAL mode — this issue only affects bind mounts.

SQLite on network filesystems: SQLite requires a local filesystem for WAL mode. Docker named volumes (default) work fine. Do not mount the database from NFS, SMB, or similar network shares.

Container won't start: Check logs:

docker compose logs gogetem

Updating to a new version:

docker compose pull
docker compose up -d