# PDS Environment Configuration Template # Copy this file to /pds/pds.env on your server and fill in values # Source: aesthetic-computer/at/pds/config/pds.env.example # ============================================================================= # REQUIRED: Basic PDS Configuration # ============================================================================= # Your PDS hostname (e.g., pds.aesthetic.computer) PDS_HOSTNAME=pds.aesthetic.computer # Admin email for Let's Encrypt TLS certificates PDS_ADMIN_EMAIL=me@jas.life # Port bindings (usually don't need to change) PDS_PORT=3000 # Data directory (inside container) PDS_DATA_DIRECTORY=/pds # ============================================================================= # REQUIRED: DID PLC Configuration # ============================================================================= # DID PLC URL (official service) PDS_DID_PLC_URL=https://plc.directory # ============================================================================= # REQUIRED: Relay/Firehose Configuration # ============================================================================= # Bluesky relay for federation PDS_BSKY_APP_VIEW_URL=https://api.bsky.app PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app # Crawling configuration PDS_CRAWLERS=https://bsky.network # ============================================================================= # REQUIRED: Blob Storage - DigitalOcean Spaces (Recommended) # ============================================================================= # S3-compatible blob storage PDS_BLOBSTORE_DISK_LOCATION=s3 # DigitalOcean Spaces endpoint (change region if needed) # Regions: nyc3, sfo3, fra1, sgp1 PDS_BLOBSTORE_S3_ENDPOINT=https://nyc3.digitaloceanspaces.com # Your Space name PDS_BLOBSTORE_S3_BUCKET=aesthetic-pds-blobs # Spaces access credentials (from DO dashboard → API → Spaces Keys) PDS_BLOBSTORE_S3_ACCESS_KEY_ID=DO00XXXXXXXXXX PDS_BLOBSTORE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx # Region (must match endpoint) PDS_BLOBSTORE_S3_REGION=nyc3 # Force path style (required for Spaces) PDS_BLOBSTORE_S3_FORCE_PATH_STYLE=true # ============================================================================= # OPTIONAL: Google Cloud Storage (Alternative to Spaces) # ============================================================================= # Uncomment and configure if using GCS instead of Spaces # PDS_BLOBSTORE_DISK_LOCATION=gcs # PDS_BLOBSTORE_GCS_BUCKET=aesthetic-pds-blobs # PDS_BLOBSTORE_GCS_PROJECT_ID=aesthetic-computer # GOOGLE_APPLICATION_CREDENTIALS=/pds/gcs-service-account.json # ============================================================================= # REQUIRED: Email Configuration (SMTP) # ============================================================================= # Email service for verification emails # Option 1: Resend (recommended, free tier available) # PDS_EMAIL_SMTP_URL=smtps://resend:re_xxxxxx@smtp.resend.com:465/ # Option 2: SendGrid # PDS_EMAIL_SMTP_URL=smtps://apikey:SG.xxxxxx@smtp.sendgrid.net:465/ # Option 3: Gmail (for testing only) # PDS_EMAIL_SMTP_URL=smtps://your-email@gmail.com:app-password@smtp.gmail.com:465/ # From address for emails PDS_EMAIL_FROM_ADDRESS=noreply@aesthetic.computer # ============================================================================= # OPTIONAL: Contact Information (shown in describeServer) # ============================================================================= PDS_CONTACT_EMAIL_ADDRESS=mail@aesthetic.computer # ============================================================================= # OPTIONAL: Service Configuration # ============================================================================= # Service DID (generated on first run, leave empty initially) PDS_SERVICE_DID= # JWT secret (generated automatically if not set) PDS_JWT_SECRET= # ============================================================================= # OPTIONAL: Rate Limiting # ============================================================================= # Enable rate limiting (recommended) PDS_RATE_LIMIT_ENABLED=true # Requests per 5 minutes per IP PDS_RATE_LIMIT_GLOBAL_LIMIT_PER_PERIOD=3000 PDS_RATE_LIMIT_GLOBAL_PERIOD=300000 # ============================================================================= # OPTIONAL: Account Creation # ============================================================================= # Allow new account creation PDS_INVITE_REQUIRED=true # Max accounts (0 = unlimited) PDS_MAX_ACCOUNTS=100 # ============================================================================= # OPTIONAL: Moderation # ============================================================================= # Moderation service PDS_MODERATION_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac PDS_MODERATION_SERVICE_URL=https://mod.bsky.app # ============================================================================= # OPTIONAL: Logging # ============================================================================= # Log level (debug, info, warn, error) LOG_LEVEL=info # Log destination (stdout or file path) LOG_DESTINATION=/pds/pds.log # ============================================================================= # OPTIONAL: Advanced Configuration # ============================================================================= # Blob upload limits PDS_MAX_BLOB_SIZE=5242880 # 5MB # Account migration PDS_ACCOUNT_MIGRATION_ENABLED=true # WebSocket keep-alive PDS_WEBSOCKET_KEEPALIVE_INTERVAL=30000 # Database location PDS_DB_SQLITE_LOCATION=/pds # ============================================================================= # OPTIONAL: Development/Debug # ============================================================================= # Enable debug mode (set to false for production) # PDS_DEBUG=false # Report service URL (for error reporting) # PDS_REPORT_SERVICE_URL=https://mod.bsky.app # PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac # ============================================================================= # NOTES # ============================================================================= # 1. Never commit this file to version control # 2. Store sensitive values in aesthetic-computer-vault # 3. Restart PDS after changing values: systemctl restart pds # 4. Test SMTP config: curl -X POST http://localhost:3000/xrpc/com.atproto.server.requestEmailConfirmation # 5. Check logs: docker logs pds --tail 100