Troubleshooting
When something goes wrong on a self-hosted instance, three questions answer most of it:
- Is the stack running?
docker compose ps - What do the logs say?
docker compose logs <service> - Which piece is unhappy? The health check, then the page for that symptom under Find your fix.
Everything here assumes the two-file setup from
Install: a .env, a docker-compose.yml, and
docker compose in the folder that holds them.
Read the logs
Logs are the first stop for almost every problem.
docker compose ps # which containers are up, and their health
docker compose logs api # one service
docker compose logs -f caddy # follow it live
docker compose logs --tail 50 api
Each container names itself in its log lines. A crash-looping container shows
in docker compose ps as restarting, and its logs almost always print the
reason on the last few lines before it exits.
The "is it up" check
The API answers a health endpoint that needs no login:
curl -fsS http://localhost:8088/api/v1/healthz
- A healthy instance returns JSON with
"ok": true. - Changed
WEB_PORT, or reach the box by an HTTPS address? Use that host and port instead. - A refused connection means the
weborapicontainer isn't up, so checkdocker compose psand theapilogs.
Find your fix
- Install and startup: a container won't start, a migration failed on boot, a port is already in use, image pulls are denied.
- HTTPS and access: the certificate won't issue, the phone camera is blocked, a name resolves but won't load.
- Data and backups: restoring, the encryption key, a backup that didn't run.
- Common error messages: a table from the exact text you see to its cause and fix.
Day-two operations (updating, routine backups) live in Operating.
Where things live
.envanddocker-compose.ymlare your whole configuration. Every setting is a line in.env, and changing one and runningdocker compose up -dapplies it../data/holds all state, in one folder per service:db(the databases),files(uploads and images),backups(the stack's nightly dumps),caddyandcaddy-config(issued certificates and proxy config),modules(installed module code). Copy this tree with the stack stopped and you have copied everything (see Data and backups).- The containers are
db,api,web, andcaddy(the last only when you run HTTPS). Nothing bind-mounts source code, because the images are what runs.