Update
An update is a new image digest in .env and a restart. A newer server
reads the existing data directory. This release adds a credential recovery
table to the account database and an index to actor databases on writable
open. The first index build takes a SQLite write lock and extra disk space.
Find the new image
Section titled “Find the new image”Resolve the main tag to its digest:
docker buildx imagetools inspect ghcr.io/linkjar/pds-server:main --format '{{.Manifest.Digest}}'Or build it yourself from a fresh checkout, as in the install.
Restart on it
Section titled “Restart on it”Set PDS_IMAGE in .env to the new digest, then:
docker compose pulldocker compose up -dCompose replaces the server’s container and leaves Caddy running. On
SIGTERM the server stops taking connections, finishes the writes in
flight, closes the firehose with a close frame so that the relay resumes
at its cursor, and exits. The Compose file gives it 60 seconds.
Check that the new server is up:
docker compose logs --since 2m pdscurl -s https://pds.example.com/xrpc/_healthRoll back
Section titled “Roll back”Put the previous digest back in .env and run docker compose up -d
again, subject to the authentication limit below. The additive table and
index leave the reference layout readable by older servers.
The reference server and older Candidate images do not enforce credential epochs or the member host’s live session check. They can accept revoked, unexpired legacy tokens after a password recovery. If recovery must remain effective, rotate the token-signing secrets and keys and require sign-in again before serving with an older image. Keep the account database and its recovery table in every backup.
