Getting started

Docker installation

Deploy TraDoc from GHCR on the consistent Docker host and container port 2507.

TraDoc uses port 2507 on the Docker host and 2507 inside the production container. Its database, documents and provider data persist in ./data.

Copy-ready Docker Compose

services:
  tradoc:
    image: ghcr.io/lucas-lepajollec/tradoc:latest
    ports:
      - "2507:2507"
    env_file:
      - path: .env
        required: false
    volumes:
      - ./data:/app/data
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: unless-stopped

Then start and verify TraDoc:

mkdir -p data
sudo chown -R 1000:1000 data
docker compose pull
docker compose up -d --force-recreate
docker compose ps
curl http://localhost:2507/health

The first two commands prepare a Linux bind mount for the image's non-root UID/GID 1000:1000. Docker Desktop normally handles host-file sharing itself. Never replace correct ownership with chmod 777.

The first start does not require .env. An optional untracked .env can override initial provider settings; copy .env.example and replace its placeholders before restarting. An older APP_SECRET value is ignored.

Open http://<server-ip>:2507 from the LAN. The image already runs as a non-root user and contains its own health check on port 2507; Compose does not repeat those settings. Configure the provider, key and model in TraDoc after the first connection.

The host.docker.internal entry lets a container reach an inference server running directly on the Docker host. Change LLM_ENDPOINT when the provider runs elsewhere.

Build from source

git clone https://github.com/lucas-lepajollec/tradoc.git
cd tradoc
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

The overlay builds tradoc:local without changing port 2507 or ./data.

Update safely

Stop TraDoc and back up the complete data directory before an update. Then pull and recreate the container. Never run docker compose down -v or delete data during a normal update. See Updates.