diff --git a/blueprints/bluesky-pds/bluesky-pds.svg b/blueprints/bluesky-pds/bluesky-pds.svg new file mode 100644 index 00000000..77ebea07 --- /dev/null +++ b/blueprints/bluesky-pds/bluesky-pds.svg @@ -0,0 +1,3 @@ + + + diff --git a/blueprints/bluesky-pds/docker-compose.yml b/blueprints/bluesky-pds/docker-compose.yml new file mode 100644 index 00000000..4f9ae9a2 --- /dev/null +++ b/blueprints/bluesky-pds/docker-compose.yml @@ -0,0 +1,48 @@ +services: + pds: + image: 'ghcr.io/bluesky-social/pds:0.4.182' + volumes: + - pds-data:/pds + environment: + - SERVICE_URL_PDS_3000 + - PDS_HOSTNAME + - PDS_JWT_SECRET + - PDS_ADMIN_PASSWORD + - 'PDS_ADMIN_EMAIL=${PDS_ADMIN_EMAIL}' + - PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX + - 'PDS_DATA_DIRECTORY=${PDS_DATA_DIRECTORY:-/pds}' + - 'PDS_BLOBSTORE_DISK_LOCATION=${PDS_DATA_DIRECTORY:-/pds}/blocks' + - 'PDS_BLOB_UPLOAD_LIMIT=${PDS_BLOB_UPLOAD_LIMIT:-104857600}' + - 'PDS_DID_PLC_URL=${PDS_DID_PLC_URL:-https://plc.directory}' + - 'PDS_EMAIL_FROM_ADDRESS=${PDS_EMAIL_FROM_ADDRESS}' + - 'PDS_EMAIL_SMTP_URL=${PDS_EMAIL_SMTP_URL}' + - 'PDS_BSKY_APP_VIEW_URL=${PDS_BSKY_APP_VIEW_URL:-https://api.bsky.app}' + - 'PDS_BSKY_APP_VIEW_DID=${PDS_BSKY_APP_VIEW_DID:-did:web:api.bsky.app}' + - 'PDS_REPORT_SERVICE_URL=${PDS_REPORT_SERVICE_URL:-https://mod.bsky.app/xrpc/com.atproto.moderation.createReport}' + - 'PDS_REPORT_SERVICE_DID=${PDS_REPORT_SERVICE_DID:-did:plc:ar7c4by46qjdydhdevvrndac}' + - 'PDS_CRAWLERS=${PDS_CRAWLERS:-https://bsky.network}' + - 'LOG_ENABLED=${LOG_ENABLED:-true}' + command: | + sh -c ' + set -euo pipefail + echo "Installing required packages and pdsadmin..." + apk add --no-cache openssl curl bash jq coreutils gnupg util-linux-misc >/dev/null + curl -o /usr/local/bin/pdsadmin.sh https://raw.githubusercontent.com/bluesky-social/pds/main/pdsadmin.sh + chmod 700 /usr/local/bin/pdsadmin.sh + ln -sf /usr/local/bin/pdsadmin.sh /usr/local/bin/pdsadmin + echo "Creating an empty pds.env file so pdsadmin works..." + touch /pds/pds.env + echo "Launching PDS, enjoy!..." + exec node --enable-source-maps index.js + ' + healthcheck: + test: + - CMD + - wget + - '--spider' + - 'http://127.0.0.1:3000/xrpc/_health' + interval: 5s + timeout: 10s + retries: 10 +volumes: + pds-data: \ No newline at end of file diff --git a/blueprints/bluesky-pds/template.toml b/blueprints/bluesky-pds/template.toml new file mode 100644 index 00000000..3de5b201 --- /dev/null +++ b/blueprints/bluesky-pds/template.toml @@ -0,0 +1,36 @@ +[variables] +main_domain = "${domain}" +admin_password = "${password:32}" +jwt_secret = "${jwt:32}" +rotation_key = "${jwt:32}" +data_directory = "/pds" +blob_upload_limit = "104857600" +log_enabled = "true" + +[config] +mounts = [] +env = [ + "PDS_ADMIN_PASSWORD=${admin_password}", + "PDS_HOSTNAME=${main_domain}", + "PDS_JWT_SECRET=${jwt_secret}", + "PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=${rotation_key}", + "PDS_ADMIN_EMAIL=", + "PDS_EMAIL_FROM_ADDRESS=", + "PDS_EMAIL_SMTP_URL=", + "PDS_DATA_DIRECTORY=${data_directory}", + "PDS_BLOBSTORE_DISK_LOCATION=${data_directory}/blocks", + "PDS_BLOB_UPLOAD_LIMIT=${blob_upload_limit}", + "PDS_DID_PLC_URL=https://plc.directory", + "PDS_BSKY_APP_VIEW_URL=https://api.bsky.app", + "PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app", + "PDS_REPORT_SERVICE_URL=https://mod.bsky.app/xrpc/com.atproto.moderation.createReport", + "PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac", + "PDS_CRAWLERS=https://bsky.network", + "LOG_ENABLED=${log_enabled}" +] + +[[config.domains]] +serviceName = "pds" +port = 3000 +host = "${main_domain}" +path = "/" \ No newline at end of file diff --git a/meta.json b/meta.json index 1c558d82..6dbc14d9 100644 --- a/meta.json +++ b/meta.json @@ -750,6 +750,24 @@ "nextjs" ] }, + { + "id": "bluesky-pds", + "name": "Bluesky PDS", + "version": "0.4.182", + "description": "Bluesky PDS is a personal data server for Bluesky.", + "logo": "bluesky-pds.svg", + "links": { + "github": "https://github.com/bluesky-social/pds", + "website": "https://bsky.social/about", + "docs": "https://github.com/bluesky-social/pds" + }, + "tags": [ + "bluesky", + "pds", + "data", + "server" + ] + }, { "id": "bolt.diy", "name": "bolt.diy",