Flake to setup a local env for atproto development
at main 1.8 kB view raw
1{ pkgs }: 2 3pkgs.writeShellScriptBin "pds" '' 4 set -e 5 6 # Default port for bluesky-pds 7 PORT=''${BLUESKY_PDS_PORT:-3000} 8 9 # Create data directories 10 mkdir -p ./data/pds/blocks 11 mkdir -p ./data/pds/db 12 13 echo "Starting Bluesky PDS on port $PORT..." 14 echo "Data directory: ./data/pds" 15 16 # Configure for local disk storage 17 export PDS_DATA_DIRECTORY="./data/pds" 18 export PDS_BLOBSTORE_DISK_LOCATION="./data/pds/blocks" 19 export PDS_DB_SQLITE_LOCATION="./data/pds/db/pds.sqlite" 20 export PDS_PORT="$PORT" 21 22 # Generate or use existing PLC rotation key 23 if [ ! -f "./data/pds/plc-rotation-key.txt" ]; then 24 echo "Generating PLC rotation key..." 25 ${pkgs.openssl}/bin/openssl rand -hex 32 > ./data/pds/plc-rotation-key.txt 26 fi 27 export PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX="$(cat ./data/pds/plc-rotation-key.txt)" 28 29 # Generate or use existing JWT secret 30 if [ ! -f "./data/pds/jwt-secret.txt" ]; then 31 echo "Generating JWT secret..." 32 ${pkgs.openssl}/bin/openssl rand -hex 32 > ./data/pds/jwt-secret.txt 33 fi 34 export PDS_JWT_SECRET="$(cat ./data/pds/jwt-secret.txt)" 35 36 # Set admin password 37 export PDS_ADMIN_PASSWORD="admin" 38 39 # Set hostname and URL scheme (using example.org domain) 40 export PDS_HOSTNAME="pds.example.org:8443" 41 export PDS_SERVICE_URL="https://pds.example.org:8443" 42 43 # Configure supported handle domains 44 export PDS_SERVICE_HANDLE_DOMAINS=".pds.example.org" 45 46 # Enable development mode 47 export PDS_DEV_MODE="true" 48 49 # Configure logging 50 export LOG_ENABLED="true" 51 52 # Configure SMTP for MailHog 53 export PDS_EMAIL_SMTP_URL="smtp://localhost:1025" 54 export PDS_EMAIL_FROM_ADDRESS="noreply@pds.example.org" 55 56 # Configure PLC server URL to use local Caddy-proxied server 57 export PDS_DID_PLC_URL="https://plc.example.org:8444" 58 59 ${pkgs.bluesky-pds}/bin/pds 60''