···4545* Public inbound internet access permitted on port 80/tcp and 443/tcp
46464747**Server Recommendations**
4848-| | |
4949-| ---------------- | ---------------- |
5050-| Operating System | Ubuntu 22.04 |
5151-| Memory (RAM) | 2+ GB |
5252-| CPU Cores | 2+ |
5353-| Storage | 40+ GB SSD |
5454-| Architectures | amd64, arm64 |
4848+| | |
4949+| ---------------- | ------------ |
5050+| Operating System | Ubuntu 22.04 |
5151+| Memory (RAM) | 2+ GB |
5252+| CPU Cores | 2+ |
5353+| Storage | 40+ GB SSD |
5454+| Architectures | amd64, arm64 |
55555656**Note:** It is a good security practice to restrict inbound ssh access (port 22/tcp) to your own computer's public IP address. You can check your current public IP address using [ifconfig.me](https://ifconfig.me/).
5757···70707171From your DNS provider's control panel, set up a domain with records pointing to your server.
72727373-| Name | Type | Value | TTL |
7474-| ----------------- | ---- | ------------- | ---- |
7575-| `example.com` | `A` | `12.34.56.78` | 600 |
7676-| `*.example.com` | `A` | `12.34.56.78` | 600 |
7373+| Name | Type | Value | TTL |
7474+| --------------- | ---- | ------------- | --- |
7575+| `example.com` | `A` | `12.34.56.78` | 600 |
7676+| `*.example.com` | `A` | `12.34.56.78` | 600 |
77777878**Note:**
7979* Replace `example.com` with your domain name.
···93939494These should all return your server's public IP.
95959696-## Automatic install on Ubuntu 22.04 or Debian 11
9696+## Automatic install on Ubuntu 20.04/22.04 or Debian 11/12
97979898On your server via ssh, run the installer script:
9999···309309310310You will need to customize various settings configured through the PDS environment variables. See the below table to find the variables you'll need to set.
311311312312-| Environment Variable | Value | Should update? | Notes |
313313-| ----------------------------------------- | --------------------------------------------- | -------------- |------ |
314314-| PDS_HOSTNAME | example.com | ✅ | Public domain you intend to deploy your service at |
315315-| PDS_JWT_SECRET | jwt-secret | ✅ | Use a secure high-entropy string that is 32 characters in length |
316316-| PDS_ADMIN_PASSWORD | admin-pass | ✅ | Use a secure high-entropy string that is 32 characters in length |
317317-| PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX | 3ee68... | ✅ | See above Generate Keys section - once set, do not change |
318318-| PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX | e049f... | ✅ | See above Generate Keys section - once set, do not change |
319319-| PDS_DB_SQLITE_LOCATION | /pds/pds.sqlite | ❌ | Or use `PDS_DB_POSTGRES_URL` depending on which database you intend to use |
320320-| PDS_BLOBSTORE_DISK_LOCATION | /pds/blocks | ❌ | Only update if you update the mounted volume for your docker image as well |
321321-| PDS_DID_PLC_URL | https://plc.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
322322-| PDS_BSKY_APP_VIEW_URL | https://api.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
323323-| PDS_BSKY_APP_VIEW_DID | did:web:api.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
324324-| PDS_CRAWLERS | https://bgs.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
312312+| Environment Variable | Value | Should update? | Notes |
313313+| ----------------------------------------- | ---------------------------- | -------------- | --------------------------------------------------------------------------- |
314314+| PDS_HOSTNAME | example.com | ✅ | Public domain you intend to deploy your service at |
315315+| PDS_JWT_SECRET | jwt-secret | ✅ | Use a secure high-entropy string that is 32 characters in length |
316316+| PDS_ADMIN_PASSWORD | admin-pass | ✅ | Use a secure high-entropy string that is 32 characters in length |
317317+| PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX | 3ee68... | ✅ | See above Generate Keys section - once set, do not change |
318318+| PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX | e049f... | ✅ | See above Generate Keys section - once set, do not change |
319319+| PDS_DB_SQLITE_LOCATION | /pds/pds.sqlite | ❌ | Or use `PDS_DB_POSTGRES_URL` depending on which database you intend to use |
320320+| PDS_BLOBSTORE_DISK_LOCATION | /pds/blocks | ❌ | Only update if you update the mounted volume for your docker image as well |
321321+| PDS_DID_PLC_URL | https://plc.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
322322+| PDS_BSKY_APP_VIEW_URL | https://api.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
323323+| PDS_BSKY_APP_VIEW_DID | did:web:api.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
324324+| PDS_CRAWLERS | https://bgs.bsky-sandbox.dev | ❌ | Do not adjust if you intend to federate with the Bluesky federation sandbox |
325325326326There are additional environment variables that can be tweaked depending on how you're running your service. For instance, storing blobs in AWS S3, keys in AWS KMS, or setting up an email service.
327327
+4-1
installer.sh
···9191 if [[ "${DISTRIB_CODENAME}" == "bullseye" ]]; then
9292 SUPPORTED_OS="true"
9393 echo "* Detected supported distribution Debian 11"
9494+ elif [[ "${DISTRIB_CODENAME}" == "bookworm" ]]; then
9595+ SUPPORTED_OS="true"
9696+ echo "* Detected supported distribution Debian 12"
9497 fi
9598 fi
969997100 if [[ "${SUPPORTED_OS}" != "true" ]]; then
9898- echo "Sorry, only Ubuntu 20.04, 22.04, and Debian 11 are supported by this installer. Exiting..."
101101+ echo "Sorry, only Ubuntu 20.04, 22.04, Debian 11 and Debian 12 are supported by this installer. Exiting..."
99102 exit 1
100103 fi
101104