coolify_pds_compose.yaml
edited
1# Note: Coolify now has an official template for quick deployment of a Bluesky PDS
2# (see here: https://bsky.app/profile/indexx.dev/post/3lxdcz7aat22r)
3
4services:
5 pds:
6 image: ghcr.io/bluesky-social/pds:0.4
7 volumes:
8 - pds-data:/pds
9 environment:
10 # Service Configuration
11 - SERVICE_FQDN_PDS_3000
12 - PDS_HOSTNAME=${SERVICE_URL_PDS}
13 - PDS_DATA_DIRECTORY=${PDS_DATA_DIRECTORY:-/pds}
14
15 # Authentication & Security
16 - PDS_JWT_SECRET=${SERVICE_BASE64_PDS}
17 - PDS_ADMIN_PASSWORD=${SERVICE_PASSWORD_PDS}
18 - PDS_ADMIN_EMAIL=${PDS_ADMIN_EMAIL}
19 - PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=${SERVICE_HEX_32_ROTATIONKEY}
20
21 # Storage Configuration
22 - PDS_BLOBSTORE_DISK_LOCATION=${PDS_DATA_DIRECTORY:-/pds}/blocks
23 - PDS_BLOB_UPLOAD_LIMIT=${PDS_BLOB_UPLOAD_LIMIT:-104857600}
24
25 # External Services
26 - PDS_DID_PLC_URL=${PDS_DID_PLC_URL:-https://plc.directory}
27 - PDS_BSKY_APP_VIEW_URL=${PDS_BSKY_APP_VIEW_URL:-https://api.pop1.bsky.app}
28 - PDS_BSKY_APP_VIEW_DID=${PDS_BSKY_APP_VIEW_DID:-did:web:api.bsky.app}
29 - PDS_REPORT_SERVICE_URL=${PDS_REPORT_SERVICE_URL:-https://mod.bsky.app}
30 - PDS_REPORT_SERVICE_DID=${PDS_REPORT_SERVICE_DID:-did:plc:ar7c4by46qjdydhdevvrndac}
31 - PDS_CRAWLERS=${PDS_CRAWLERS:-https://bsky.network}
32
33 # Email Configuration
34 - PDS_EMAIL_SMTP_URL=${PDS_EMAIL_SMTP_URL}
35 - PDS_EMAIL_FROM_ADDRESS=${PDS_EMAIL_FROM_ADDRESS}
36 - PDS_CONTACT_EMAIL_ADDRESS=${PDS_CONTACT_EMAIL_ADDRESS}
37
38 # Logging
39 - LOG_ENABLED=${LOG_ENABLED:-false}
40 command: |
41 sh -c '
42 set -euo pipefail
43
44 echo "Installing required packages and pdsadmin..."
45 apk add --no-cache openssl curl bash jq coreutils gnupg util-linux-misc >/dev/null
46
47 echo "Downloading pdsadmin..."
48 curl -o /usr/local/bin/pdsadmin.sh https://raw.githubusercontent.com/bluesky-social/pds/main/pdsadmin.sh
49 chmod 700 /usr/local/bin/pdsadmin.sh
50 ln -sf /usr/local/bin/pdsadmin.sh /usr/local/bin/pdsadmin
51
52 echo "Generating pds.env with all specified Coolify environment variables..."
53 env | awk -F "=" "
54 /^(PDS|LOG|SERVICE)_[A-Z0-9_]+/ {
55 gsub(/\\x27/, \"\\\"\", \$2);
56 print \$1 \"=\\\"\" \$2 \"\\\"\"
57 }" > ${PDS_DATA_DIRECTORY}/pds.env
58
59 echo "Launching PDS..."
60 exec node --enable-source-maps index.js
61 '
62 healthcheck:
63 test: ["CMD", "wget", "--spider", "http://127.0.0.1:3000/xrpc/_health"]
64 interval: 2s
65 timeout: 10s
66 retries: 10
67
68volumes:
69 pds-data: