Skip to content

Troubleshooting

You see Cause Fix
check-config names a variable The value is missing or malformed. Fix the line in pds.env and run the check again. The message says what shape it expects.
docker-compose: command not found, or an error about the Compose file’s version Compose version 1. Install the Compose plugin and use docker compose, with a space.
The server exits at start and the log says another server holds the lock A previous container still runs, or the lock file is left from a copy. docker compose ps; stop what runs. A stale linkjar-pds.lock in a copied directory can be removed when no server runs there.
curl to the server fails with a certificate error on the first request Caddy fetches the certificate on the first connection, which takes a few seconds. Try again. If it keeps failing, DNS does not point at the host, or port 80 or 443 is closed.
A handle’s name gets no certificate The wildcard record is missing, or the handle is not an active account. Check dig +short anything.pds.example.com, and the /tls-check route in the checks.
The Bluesky app signs in but cannot load settings, and the log shows getPreferences failing PDS_BSKY_APP_VIEW_URL and PDS_BSKY_APP_VIEW_DID are unset. Set both, as in the example file, and restart.
Sign-up fails with an invite code error PDS_INVITE_REQUIRED is on and the code is wrong or used up. Create a code with the admin API.
Sign-up fails and the log mentions the rotation key PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX is unset. Generate one as in the install and restart. Without it the server creates no account.
Posts do not appear for people on other servers The relay has not crawled the host yet, or cannot reach it. Wait for the first write after a start, then check getHostStatus as in the first account. The firehose must be reachable at wss://pds.example.com.
Password reset mail never arrives SMTP is not set, or the URL is wrong. Email. A wrong URL shows in the log of the request.
The firehose subscriber count stays at 0 The relay is not connected. Same as the posts above. A proxy in front of DNS that drops long WebSockets is a common cause.
verify prints differences after a restore The backup was taken while the server ran, without the -wal files. Restore from a cold backup, or copy the -wal and -shm files with the databases.
A second host started on a copy of the directory Two servers served one set of accounts. Stop one at once. The relay and the apps saw two histories; the one that keeps running is the truth, and the other’s writes since the copy are lost.

When the table does not have it, the log has it: docker compose logs pds, with LOG_LEVEL=debug for the detail. Open an issue at github.com/linkjar/pds with the lines around the error; they contain no secret.