When something breaks

The most common cases, their cause, and the concrete fix.

Two moves solve most mysteries: the health check at /api/health (is the store up, is the database fine, which version?) and the container log:

Watch the log (Ctrl+C exits the view)
cd /opt/vault/docker && docker compose --env-file ../.env logs -f app

Common cases

SymptomCauseFix
The build is killed partway throughNot enough memory — the most common install failure on small serversAdd 2 GB of swap and run install.sh again — it offers to do this for you
Login just does not work, no error shownAPP_URL in .env does not match the address in the browser (http/https, www, port)Set APP_URL to exactly the browser address, restart the container
Page loads but unstyled / no imagesManual installs only: the three copy steps after the build are missingSee Advanced — the three cp commands are mandatory
Operator password forgotten—“Forgot password?” on the sign-in page — needs email configured
Setup wizard is stuckAn abandoned wizard runpnpm reset:install resets only the wizard
Container runs but never reports healthyUsually the database is not ready yet, or .env is incompleteWatch the log (command above) — the first red line names the reason