Runtime runbook
Preconditions
- working directory:
~/dev/lobe - Docker access: every Compose command uses
sudo -n - required external dependency:
- Docker network
lllm_defaultexists - container
lllm-proxyis attached and ready on port4000
- Docker network
- protected configuration:
.envexists, is gitignored, and has mode0600- never read or print
.envduring routine operation
Validate without rendering secrets
cd ~/dev/lobe
sudo -n docker compose config --quietA zero exit proves Compose can parse and interpolate the protected configuration. Do not run docker compose config without --quiet; its rendered output contains secret values.
Start or reconcile
cd ~/dev/lobe
sudo -n docker compose up -d
sudo -n docker compose ps -aExpected dependency order:
- PostgreSQL, Redis, and RustFS become healthy.
rustfs-initcreates bucketlobe, applies the anonymous read policy, and exits0.- Lobe starts only after those health and completion conditions pass.
- SearXNG runs privately on the Compose network.
up -d also reconciles an edited image digest and allows LobeHub to perform its normal database migration. Follow upgrades before using it for a version change.
Read status
sudo -n docker compose ps -aThe stable shape is:
lobe: running and healthylobe-postgres: running and healthylobe-redis: running and healthylobe-rustfs: running and healthylobe-searxng: runninglobe-rustfs-init: exited with status0
SearXNG has no Compose healthcheck, so its expected state is running rather than a healthy annotation.
Read scoped logs
sudo -n docker compose logs --tail=100 lobe
sudo -n docker compose logs --tail=100 postgresql
sudo -n docker compose logs --tail=100 redis
sudo -n docker compose logs --tail=100 rustfs
sudo -n docker compose logs --tail=100 rustfs-init
sudo -n docker compose logs --tail=100 searxngUse the service name shown in docker-compose.yml. Do not dump container environments or add shell tracing around commands that consume .env.
Host health checks
curl -fsS http://127.0.0.1:52100/ >/dev/null
curl -fsS http://127.0.0.1:52101/health >/dev/null
curl -fsS https://lobe.loca.zone/ >/dev/null
curl -fsS https://wiki.lobe.loca.zone/ >/dev/nullInterpretation:
- loopback application failure isolates the fault below nginx
- public application failure with successful loopback narrows the fault to nginx, TLS, or name routing
- RustFS health failure blocks
rustfs-initand therefore blocks Lobe startup - wiki health is independent of Compose and follows the active Quartz
currentsymlink
Confirm the one-shot initializer
sudo -n docker compose ps -a rustfs-init
sudo -n docker compose logs --tail=100 rustfs-initSuccess is an exited status of 0 after bucket creation or confirmation and policy installation. Restart loops are not expected because the service has restart: "no".
Public-route expectations
https://lobe.loca.zone/: LobeHub; nginx proxy buffering and cache disabled for streamed responseshttps://s3.lobe.loca.zone/: RustFS S3 API only; no consolehttps://wiki.lobe.loca.zone/: static Quartz release- missing wiki routes:
404 - HTTP on all three names: ACME challenge handling followed by HTTPS redirect for other paths
Next procedures
- before changing a digest: upgrades
- before any risky operation: backups-restore
- when a check fails: troubleshooting
- to reproduce all deployment receipts: verification