···20202121## TLS and DNS
22222323-You need a wildcard TLS certificate covering `*.your-pds-hostname.example.com` - user handles resolve as subdomains, so every user's handle requires a matching cert SAN.
2323+You need a wildcard TLS cert covering `*.your-pds-hostname.example.com`. User handles are subdomains, so every handle needs a matching SAN.
24242525An approach using Cert Manager would look something like this:
2626···3737 - "*.pds.example.com"
3838```
39394040-If your PDS hostname is the apex domain (so handles are issued under it, not under a subdomain), include the apex in `dnsNames` alongside the wildcard.
4040+If you're using the apex domain for handles, include it in `dnsNames` alongside the wildcard.
41414242---
43434444## Secrets
45454646-The three secrets primary key secrets (`JWT_SECRET`, `DPOP_SECRET`, `MASTER_KEY`) must never appear in a manifest or config file. Inject them as a Kubernetes Secret, sourced from wherever you manage secrets.
4646+The three primary key secrets (`JWT_SECRET`, `DPOP_SECRET`, `MASTER_KEY`) must never appear in a manifest or config file. Inject them as a Kubernetes Secret, sourced from wherever you manage secrets.
47474848To create the Secret directly and manage rotation manually:
4949···67676868## PostgreSQL
69697070-CloudNativePG is an easy recommendation, an example for the purpose of Tranquil PDS:
7070+CloudNativePG works well here. Example cluster config:
71717272```yaml
7373apiVersion: postgresql.cnpg.io/v1
···90909191The `postgres-user-secret` Secret needs `username` and `password` keys. The password you put here is what goes into `DATABASE_URL`.
92929393-Any standard Postgres setup works in place of CNPG. Tranquil does not require anything special for a basic installation.
9393+Any standard Postgres setup works fine here.
94949595---
9696···179179 claimName: pds-blobs
180180```
181181182182-`SERVER_HOST: "0.0.0.0"` is required — the default `127.0.0.1` isn't reachable by either the Kubelet for health checks or your ingress controller.
182182+`SERVER_HOST: "0.0.0.0"` is required. The default `127.0.0.1` won't be reachable by the Kubelet or your ingress controller.
183183184184---
185185186186## Ingress
187187188188-The ingress rule must match both the PDS hostname itself and the wildcard for user handles.
188188+The ingress needs rules for both the PDS hostname and the wildcard for user handles.
189189190190```yaml
191191apiVersion: networking.k8s.io/v1
+3-3
example.toml
···378378[email]
379379# Sender email address. When unset, email sending is disabled entirely.
380380#
381381-# Email is fully optional. However, at least one comms method (email,
382382-# Discord, Telegram, or Signal) must be configured for account
383383-# verification, password resets, and 2FA backup codes to work.
381381+# Email is optional, but at least one comms method (email, Discord,
382382+# Telegram, or Signal) must be set up for account verification,
383383+# password resets, and 2FA backup codes to work.
384384#
385385# Can also be specified via environment variable `MAIL_FROM_ADDRESS`.
386386#from_address =