Manual install
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.
mkdir -p /opt/chronicler && cd /opt/chronicler
Download the compose file
curl -L -o docker-compose.yml \
https://github.com/ChroniclerLM/Releases/releases/latest/download/docker-compose.yml
Invoke-WebRequest -Uri "https://github.com/ChroniclerLM/Releases/releases/latest/download/docker-compose.yml" -OutFile "docker-compose.yml"
Write the .env
Two values are required: a database password, and which runtime to use for the model.
printf 'POSTGRES_PASSWORD=%s\nCOMPOSE_PROFILES=cpu\n' "$(openssl rand -hex 24)" > .env
"POSTGRES_PASSWORD=$([guid]::NewGuid().ToString('N'))`nCOMPOSE_PROFILES=cpu" | Out-File -Encoding ascii .env
-Encoding ascii matters: Docker Compose can't read the UTF-16 that
Out-File writes by default.
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:
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.
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
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:
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).
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
- Tune memory: Performance and memory
- Every setting you can change: Configuration reference
- Put HTTPS in front: Security and networking
- Automatic backups: Backups and restore