Chronicler
Self-hosting

Manual install

Install the stack from a terminal — the path for a headless server.

Use this when the server has no desktop — a VPS, a NAS, a machine in a rack — or when you'd simply rather see what you're running.

Create a folder for the install

Everything lives here: the compose file, the .env, and by extension your database. Put it somewhere permanent.

Terminal
mkdir -p /opt/chronicler && cd /opt/chronicler

Download the compose file

Terminal
curl -L -o docker-compose.yml \
  https://github.com/ChroniclerLM/Releases/releases/latest/download/docker-compose.yml

Write the .env

Two values are required: a database password, and which runtime to use for the model.

Terminal
printf 'POSTGRES_PASSWORD=%s\nCOMPOSE_PROFILES=cpu\n' "$(openssl rand -hex 24)" > .env
No default password ships, on purpose — a shipped default would make every install on the internet identically guessable. Compose refuses to start without one, and changing it after the first start locks you out of your own database. Back this file up with your other secrets.

Pick the right runtime

COMPOSE_PROFILES decides which Ollama container starts: cpu, nvidia or amd. cpu always works. If the machine has a graphics card, let the detection script choose:

Terminal
curl -L -o detect-hardware.sh \
  https://github.com/ChroniclerLM/Releases/releases/latest/download/detect-hardware.sh
chmod +x detect-hardware.sh
./detect-hardware.sh

It probes the host, writes the right COMPOSE_PROFILES into .env, and suggests a model for the hardware it found. Details and manual alternatives: GPU acceleration.

If COMPOSE_PROFILES is missing entirely, no model runtime starts. The stack comes up but can't answer anything, and docker compose logs ollama-pull will say so after two minutes.

Start it

Terminal
docker compose up -d
docker compose logs -f

First start pulls several gigabytes. When chronicler-backend reports it's listening on 8410, you're up. chronicler-ollama-pull exiting is normal — it downloads the model and stops.

Check with:

Terminal
docker compose ps
curl http://localhost:8410/health

Connect the app and claim the server

On any machine on the network, open Chronicler → Settings → Connection → Local, and enter http://<server-ip>:8410.

The login screen offers Register your admin account while the server has no users. Create it, accept the licence terms, and activate your key (Licensing).

Do this immediately after the first start, from a machine you trust. An empty server is claimable by whoever gets there first.

What just started

The database schema is created automatically on first boot, and again on every update — you never run migrations by hand. Before a schema change the backend dumps the database first and refuses to continue if that dump fails.

Optional next steps