Skip to content

Operations

Last Updated: 2026-06-11

Runbooks for production deployment, self-hosted installer (alpha), and AT Protocol OAuth / PDS origin behavior. Local onboarding stays in Getting started.

Pages

DocumentSummary
Production deploymentHTTPS single-origin topology, gateway + static UI, env checklist, release image
App edge deploymentinfra/app Pulumi stack — Caddy on app.*, file-explorer rsync, gateway proxy
Data (managed Postgres)infra/data Pulumi stack — DO Postgres, firewall, bootstrap + DATABASE_URL wiring
Self-hosted troubleshooting~/.substratum logs, gateway manifest, OAuth 400 on Express install, alpha support checklist
OAuth and PDS originsSame-origin rules, discoverable vs loopback OAuth metadata, loopback PDS Sec-Fetch-Site concerns
Catalog vs blockstore storagePostgres catalog vs file bytes ratio, capacity planning, how to measure on self-hosted
Marketing landing and macOS releasesPulumi marketing stack, ~/.ssh/substratum-do rsync, Caddy/TLS on substratum.cloud, Spaces .dmg releases
Garage v1 rolloutPhased PDS hosting, entitlement enforcement, manual billing, admin.* operator UI + Discourse — launch checklist for 0–500 users
PDS deploymentpds.substratum.cloud — Tranquil PDS upstream, authz proxy, Caddy TLS (Garage Phase 3)
Entitlement admin proceduresGrant/lapse via admin.* UI + admin API; staff DID provisioning (Garage)
Admin edge deploymentinfra/admin Pulumi stack — Caddy on admin.*, SPA rsync, ops-api proxy
PDS account migrationLeave Substratum PDS for Bluesky or self-hosting — PDS MOOver recommended

Dev vs production at a glance

TopicLocal dev (Compose edge)Production
App URLhttp://127.0.0.1:8080https://your-domain (must match PUBLIC_BASE_URL)
UI deliveryVite :14200 behind nginx (not forwarded on host)Built file-explorer static assets behind CDN / reverse proxy
OAuth clientLoopback metadata (atproto_localhost_client_metadata)Discoverable metadata at /.well-known/oauth-client-metadata.json
User PDSLocal Tranquil PDS at http://localhost:3000 (authz proxy; optional)User’s home PDS (e.g. Bluesky, Tangled, self-hosted)
Session cookiesubstratum_session on edge originSame — must be set on the same origin as the SPA
Self-hosted edgeInstaller troubleshooting (:35480, ~/.substratum/logs)N/A (managed hosting)