subcult-pds
Invite-only Bluesky PDS for pds.subcult.tv.
Constraints
- Official image:
ghcr.io/bluesky-social/pds:0.4.5027@sha256:d95725b24dbe53af9d91dc69750556931ebed6c396f2cfa42b221434db642f12 - Default bind:
10.0.0.56:3043 - Default data dir:
/srv/data/subcult-pds - Default backup dir:
/srv/backups/subcult-pds - Secrets live only in
${PDS_DATA_DIR}/pds.env PDS_HOSTNAME=pds.subcult.tvPDS_SERVICE_HANDLE_DOMAINS=.subcult.tvPDS_BSKY_APP_VIEW_DID=did:web:api.bsky.appPDS_RATE_LIMITS_ENABLED=truePDS_INVITE_REQUIRED=truePDS_BLOB_UPLOAD_LIMIT=104857600[email protected]- No Watchtower
- SMTP is intentionally unset; password recovery is unavailable until configured
- Signup links use the Subcult privacy policy, terms, and contact pages
- Existing reserved host labels and subdomains must not be issued as handles
OAuth same-site fix
The official 0.4.5027 distribution contains @atproto/[email protected] and accepts sibling-subdomain OAuth navigation with Sec-Fetch-Site: same-site.
The previous derived-image hotfix is retired; its immutable rollback digests and deployment history remain recorded in docs/DEPLOYMENT_EVIDENCE.md.
Quick start
- Copy
.env.exampleto.envand adjust host paths if needed. - Run
scripts/init.shonce to create${PDS_DATA_DIR}/pds.env. - Run
scripts/preflight.sh. - Validate
docker compose -f compose.yaml config --quiet. - Start with Docker Compose.
Warning
Backups use a running-state check before stopping PDS and always write a checksum sidecar.
Restores require --yes, a checksum sidecar, and reject absolute or traversal archive entries before extraction.
Smoke validation checks health and optional expected version, the server identity and invite policy, the public account-creation 404 boundary, and WebSocket connectivity unless SKIP_WEBSOCKET_CHECK=1.
Set PDS_TEST_HANDLE to a known existing handle to include wildcard resolution.
License
Licensed under GPL-3.0-or-later. See LICENSE.