Skip to content

Install with Docker

The included Compose stack is the supported beginner installation. It starts GoNZB and PostgreSQL, enables PostgreSQL data checksums, and keeps application state in named volumes.

1. Install prerequisites

Install Docker Engine, the Docker Compose plugin, Git, and OpenSSL. Confirm:

docker --version
docker compose version
git --version
openssl version

2. Download GoNZB

For a release deployment, check out the desired release tag rather than a moving development branch:

git clone https://github.com/datallboy/GoNZB.git
cd GoNZB
git checkout v0.9.0

Until the final tag exists, use the release branch only for testing:

git checkout release/v0.9.0

3. Create local configuration

cp .env.example .env
cp config.yaml.example config.yaml

Generate independent secrets:

openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32

Put the first value in .env as POSTGRES_PASSWORD, the second as POSTGRES_APP_PASSWORD, and the third as GONZB_API_BOOTSTRAP_TOKEN when setup will be reachable from another machine.

Set the host ownership IDs and configuration path in .env:

PUID=1000
PGID=1000
GONZB_CONFIG_PATH=./config.yaml

Use id -u and id -g if your account is not UID/GID 1000.

Keep the default listener unless a protected remote path is already in place:

GONZB_BIND_ADDRESS=127.0.0.1
GONZB_PORT=8080

Do not commit .env, config.yaml, database files, stores, or identity keys.

4. Choose hard module gates

The default config.yaml enables the aggregator, local indexer, API, and web UI. It leaves GoNZBNet disabled. That is the recommended first start.

Hard module gates are read at process startup:

modules:
  aggregator:
    enabled: true
  usenet_indexer:
    enabled: true
  gonzbnet:
    enabled: false
  web_ui:
    enabled: true
  api:
    enabled: true

Most operational settings—including NNTP credentials, newsgroups, schedules, aggregator sources, download clients, and GoNZBNet roles—belong in the web UI.

5. Build and start

docker compose up -d --build
docker compose ps
docker compose logs --tail=100 gonzb

Wait for both services to become healthy, then open:

http://localhost:8080/setup

If GoNZB runs on a headless server while the listener remains localhost-only, use an SSH tunnel:

ssh -L 8080:127.0.0.1:8080 user@server

Then open http://localhost:8080/setup on your workstation.

6. Basic service checks

curl --fail http://127.0.0.1:8080/healthz
curl --fail http://127.0.0.1:8080/readyz
docker compose exec postgres pg_isready

healthz proves the process responds. readyz also checks requirements for enabled modules, so it may explain missing PostgreSQL or configuration.

Routine commands

docker compose logs -f gonzb
docker compose restart gonzb
docker compose pull
docker compose up -d --build
docker compose down

docker compose down preserves named volumes. Do not add --volumes unless you intend to erase PostgreSQL and GoNZB state.

Continue with First-run setup.