···22AWS_ACCESS_KEY_ID=minioadmin
23AWS_SECRET_ACCESS_KEY=minioadmin
24# =============================================================================
00000025# Valkey (for caching and distributed rate limiting)
26# =============================================================================
27# If not set, falls back to in-memory caching (single-node only)
···22AWS_ACCESS_KEY_ID=minioadmin
23AWS_SECRET_ACCESS_KEY=minioadmin
24# =============================================================================
25+# Backups (S3-compatible)
26+# =============================================================================
27+# Set to enable automatic repo backups to S3
28+# BACKUP_S3_BUCKET=pds-backups
29+# BACKUP_ENABLED=true
30+# =============================================================================
31# Valkey (for caching and distributed rate limiting)
32# =============================================================================
33# If not set, falls back to in-memory caching (single-node only)
+25-1
docs/install-alpine.md
···68rc-update add minio
69rc-service minio start
70```
71-Create the blob bucket (wait a few seconds for minio to start):
72```sh
73curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
74chmod +x mc
75mv mc /usr/local/bin/
76mc alias set local http://localhost:9000 minioadmin your-minio-password
77mc mb local/pds-blobs
078```
79## 5. Install valkey
80```sh
···239```sh
240pg_dump -U postgres pds > /var/backups/pds-$(date +%Y%m%d).sql
241```
00000000000000000000000
···68rc-update add minio
69rc-service minio start
70```
71+Create the buckets (wait a few seconds for minio to start):
72```sh
73curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
74chmod +x mc
75mv mc /usr/local/bin/
76mc alias set local http://localhost:9000 minioadmin your-minio-password
77mc mb local/pds-blobs
78+mc mb local/pds-backups
79```
80## 5. Install valkey
81```sh
···240```sh
241pg_dump -U postgres pds > /var/backups/pds-$(date +%Y%m%d).sql
242```
243+244+## Custom Homepage
245+246+Drop a `homepage.html` in `/var/lib/tranquil-pds/frontend/` and it becomes your landing page. Go nuts with it. Account dashboard is at `/app/` so you won't break anything.
247+248+```sh
249+cat > /var/lib/tranquil-pds/frontend/homepage.html << 'EOF'
250+<!DOCTYPE html>
251+<html>
252+<head>
253+ <title>Welcome to my PDS</title>
254+ <style>
255+ body { font-family: system-ui; max-width: 600px; margin: 100px auto; padding: 20px; }
256+ </style>
257+</head>
258+<body>
259+ <h1>Welcome to my amazing zoo pen</h1>
260+ <p>This is a <a href="https://atproto.com">AT Protocol</a> Personal Data Server.</p>
261+ <p><a href="/app/">Sign in</a> or learn more at <a href="https://bsky.social">Bluesky</a>.</p>
262+</body>
263+</html>
264+EOF
265+```
+25-4
docs/install-containers.md
···82sleep 10
83```
8485-Create the minio bucket:
86```bash
87podman run --rm --pod tranquil-pds \
88 -e MINIO_ROOT_USER=minioadmin \
89 -e MINIO_ROOT_PASSWORD=your-minio-password \
90 docker.io/minio/mc:RELEASE.2025-07-16T15-35-03Z \
91- sh -c "mc alias set local http://localhost:9000 \$MINIO_ROOT_USER \$MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/pds-blobs"
92```
9394Run migrations:
···230sleep 15
231```
232233-Create the minio bucket:
234```sh
235source /srv/tranquil-pds/config/tranquil-pds.env
236podman run --rm --network tranquil-pds_default \
237 -e MINIO_ROOT_USER="$MINIO_ROOT_USER" \
238 -e MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
239 docker.io/minio/mc:RELEASE.2025-07-16T15-35-03Z \
240- sh -c 'mc alias set local http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/pds-blobs'
241```
242243Run migrations:
···350```sh
351podman exec tranquil-pds-db-1 pg_dump -U tranquil_pds pds > /var/backups/pds-$(date +%Y%m%d).sql
352```
000000000000000000000
···82sleep 10
83```
8485+Create the minio buckets:
86```bash
87podman run --rm --pod tranquil-pds \
88 -e MINIO_ROOT_USER=minioadmin \
89 -e MINIO_ROOT_PASSWORD=your-minio-password \
90 docker.io/minio/mc:RELEASE.2025-07-16T15-35-03Z \
91+ sh -c "mc alias set local http://localhost:9000 \$MINIO_ROOT_USER \$MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/pds-blobs && mc mb --ignore-existing local/pds-backups"
92```
9394Run migrations:
···230sleep 15
231```
232233+Create the minio buckets:
234```sh
235source /srv/tranquil-pds/config/tranquil-pds.env
236podman run --rm --network tranquil-pds_default \
237 -e MINIO_ROOT_USER="$MINIO_ROOT_USER" \
238 -e MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
239 docker.io/minio/mc:RELEASE.2025-07-16T15-35-03Z \
240+ sh -c 'mc alias set local http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD && mc mb --ignore-existing local/pds-blobs && mc mb --ignore-existing local/pds-backups'
241```
242243Run migrations:
···350```sh
351podman exec tranquil-pds-db-1 pg_dump -U tranquil_pds pds > /var/backups/pds-$(date +%Y%m%d).sql
352```
353+354+## Custom Homepage
355+356+Mount a `homepage.html` into the container's frontend directory and it becomes your landing page. Go nuts with it. Account dashboard is at `/app/` so you won't break anything.
357+358+```html
359+<!DOCTYPE html>
360+<html>
361+<head>
362+ <title>Welcome to my PDS</title>
363+ <style>
364+ body { font-family: system-ui; max-width: 600px; margin: 100px auto; padding: 20px; }
365+ </style>
366+</head>
367+<body>
368+ <h1>Welcome to my dark web popsocket store</h1>
369+ <p>This is a <a href="https://atproto.com">AT Protocol</a> Personal Data Server.</p>
370+ <p><a href="/app/">Sign in</a> or learn more at <a href="https://bsky.social">Bluesky</a>.</p>
371+</body>
372+</html>
373+```
+25-1
docs/install-debian.md
···59systemctl enable minio
60systemctl start minio
61```
62-Create the blob bucket (wait a few seconds for minio to start):
63```bash
64curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
65chmod +x mc
66mv mc /usr/local/bin/
67mc alias set local http://localhost:9000 minioadmin your-minio-password
68mc mb local/pds-blobs
069```
70## 5. Install valkey
71```bash
···212```bash
213sudo -u postgres pg_dump pds > /var/backups/pds-$(date +%Y%m%d).sql
214```
00000000000000000000000
···59systemctl enable minio
60systemctl start minio
61```
62+Create the buckets (wait a few seconds for minio to start):
63```bash
64curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
65chmod +x mc
66mv mc /usr/local/bin/
67mc alias set local http://localhost:9000 minioadmin your-minio-password
68mc mb local/pds-blobs
69+mc mb local/pds-backups
70```
71## 5. Install valkey
72```bash
···213```bash
214sudo -u postgres pg_dump pds > /var/backups/pds-$(date +%Y%m%d).sql
215```
216+217+## Custom Homepage
218+219+Drop a `homepage.html` in `/var/lib/tranquil-pds/frontend/` and it becomes your landing page. Go nuts with it. Account dashboard is at `/app/` so you won't break anything.
220+221+```bash
222+cat > /var/lib/tranquil-pds/frontend/homepage.html << 'EOF'
223+<!DOCTYPE html>
224+<html>
225+<head>
226+ <title>Welcome to my PDS</title>
227+ <style>
228+ body { font-family: system-ui; max-width: 600px; margin: 100px auto; padding: 20px; }
229+ </style>
230+</head>
231+<body>
232+ <h1>Welcome to my secret PDS</h1>
233+ <p>This is a <a href="https://atproto.com">AT Protocol</a> Personal Data Server.</p>
234+ <p><a href="/app/">Sign in</a> or learn more at <a href="https://bsky.social">Bluesky</a>.</p>
235+</body>
236+</html>
237+EOF
238+```
···12The container image expects:
13- `DATABASE_URL` - postgres connection string
14- `S3_ENDPOINT`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `S3_BUCKET`
15+- `BACKUP_S3_BUCKET` - bucket for repo backups (optional but recommended)
16- `VALKEY_URL` - redis:// connection string
17- `PDS_HOSTNAME` - your PDS hostname (without protocol)
18- `JWT_SECRET`, `DPOP_SECRET`, `MASTER_KEY` - generate with `openssl rand -base64 48`
···2122Health check: `GET /xrpc/_health`
2324+## Custom Homepage
25+26+Mount a ConfigMap with your `homepage.html` into the container's frontend directory and it becomes your landing page. Go nuts with it. Account dashboard is at `/app/` so you won't break anything.
27+28+```yaml
29+apiVersion: v1
30+kind: ConfigMap
31+metadata:
32+ name: pds-homepage
33+data:
34+ homepage.html: |
35+ <!DOCTYPE html>
36+ <html>
37+ <head><title>Welcome to my PDS</title></head>
38+ <body>
39+ <h1>Welcome to my little evil secret lab!!!</h1>
40+ <p><a href="/app/">Sign in</a></p>
41+ </body>
42+ </html>
43+```
44+
+25-1
docs/install-openbsd.md
···72rcctl enable minio
73rcctl start minio
74```
75-Create the blob bucket:
76```sh
77ftp -o /usr/local/bin/mc https://dl.min.io/client/mc/release/openbsd-amd64/mc
78chmod +x /usr/local/bin/mc
79mc alias set local http://localhost:9000 minioadmin your-minio-password
80mc mb local/pds-blobs
081```
82## 5. Install redis
83OpenBSD has redis in ports (valkey not available yet):
···251```sh
252pg_dump -U postgres pds > /var/backups/pds-$(date +%Y%m%d).sql
253```
00000000000000000000000
···72rcctl enable minio
73rcctl start minio
74```
75+Create the buckets:
76```sh
77ftp -o /usr/local/bin/mc https://dl.min.io/client/mc/release/openbsd-amd64/mc
78chmod +x /usr/local/bin/mc
79mc alias set local http://localhost:9000 minioadmin your-minio-password
80mc mb local/pds-blobs
81+mc mb local/pds-backups
82```
83## 5. Install redis
84OpenBSD has redis in ports (valkey not available yet):
···252```sh
253pg_dump -U postgres pds > /var/backups/pds-$(date +%Y%m%d).sql
254```
255+256+## Custom Homepage
257+258+Drop a `homepage.html` in `/var/tranquil-pds/frontend/` and it becomes your landing page. Go nuts with it. Account dashboard is at `/app/` so you won't break anything.
259+260+```sh
261+cat > /var/tranquil-pds/frontend/homepage.html << 'EOF'
262+<!DOCTYPE html>
263+<html>
264+<head>
265+ <title>Welcome to my PDS</title>
266+ <style>
267+ body { font-family: system-ui; max-width: 600px; margin: 100px auto; padding: 20px; }
268+ </style>
269+</head>
270+<body>
271+ <h1>Welcome to my uma musume shipping site!</h1>
272+ <p>This is a <a href="https://atproto.com">AT Protocol</a> Personal Data Server.</p>
273+ <p><a href="/app/">Sign in</a> or learn more at <a href="https://bsky.social">Bluesky</a>.</p>
274+</body>
275+</html>
276+EOF
277+```