+14
src/content/blog/pds-on-a-pi.md
+14
src/content/blog/pds-on-a-pi.md
···
258
258
## Next steps:
259
259
260
260
Deploy this post + caddy changes, create a test account or two, find a permanent setup for the pi, and setup regular backups of the pds; then migrate to it myself!!
261
+
262
+
## Update (17/09/25)
263
+
264
+
Required changes to get this properly working:
265
+
266
+
- Tailscale doesn't let you do subdomains so I needed to do some rewrites on the url + modifying the default image to allow for handle resolution (see: [@vielle.dev/server-config](https://tangled.sh/@vielle.dev/server-config/blob/master/caddy/Caddyfile#:~:text=rewrite%20/.well-known/atproto-did%20/.well-known/atproto-did/{http.request.host}) and [@vielle.dev/pi-config](<https://tangled.sh/@vielle.dev/pi-config/blob/main/pds/service/index.js#:~:text=async%20function%20customDidRoute(/**%20@type%20{PDS}%20*/%20pds,/**%20@type%20{import('express').Request}%20*/%20req,/**%20@type%20{import('express').Response}%20*/%20res)%20{const%20handle%20=%20req.params.handle;const%20supportedHandle%20=%20pds.ctx.cfg.identity.serviceHandleDomains.some((host)%20=%3E%20handle.endsWith(host)%20||%20handle%20===%20host.slice(1));if%20(!supportedHandle)%20{return%20res.status(404).send(%22User%20not%20found%22);}let%20did;try%20{const%20user%20=%20await%20pds.ctx.accountManager.getAccount(handle);did%20=%20user?.did;}%20catch%20(err)%20{return%20res.status(500).send(%22Internal%20Server%20Error%22);}if%20(!did)%20{return%20res.status(404).send(%22User%20not%20found%22);}res.type(%22text/plain%22).send(did);}>))
267
+
- Tailscale magicDNS is slow so you need to use 100.x.y.z ip addresses
268
+
- Probably smart to up the timeout for reverse proxy (I did 3s -> 5s)
269
+
- You need to symlink ./pds to /pds to make pdsadmin.sh work properly
270
+
271
+
Other notes:
272
+
273
+
- Handles like `test.{domain}` dont work because of a reserved list which is hardcoded on in the official pds package. You need to patch or fork it to override it afaict.
274
+
- Configure `PDS_PRIMARY_COLOR` for custom theming (ex: `PDS_PRIMARY_COLOR="#008282"`) and `PDS_OAUTH_PROVIDER_NAME` for a custom name somewhere, idk where