
Self-hosting Bluesky PDS the easy way
Yulei ChenBluesky is a decentralized social network built on the AT Protocol. By default, your account lives on Bluesky's servers. But the protocol is designed so you can run your own Personal Data Server (PDS) and truly own your identity, your data, and your social graph. No more depending on a single company to keep your account alive.
Sliplane makes running your own PDS painless. With a one-click preset, you get a fully configured Bluesky PDS with persistent storage, automatic HTTPS, and zero server management.
Prerequisites
Before deploying, ensure you have a Sliplane account (free trial available).
Quick start
Sliplane provides one-click deployment with presets.
- Click the deploy button above
- Select a project
- Select a server. If you just signed up you get a 48-hour free trial server
- Click Deploy!
About the preset
The one-click deploy above uses Sliplane's Bluesky PDS preset. Here's what it includes:
- Official
ghcr.io/bluesky-social/pdsimage, version0.4.182(check GitHub releases for newer versions) - Persistent storage mounted to
/pdsfor your data and blob storage - Pre-configured AT Protocol network settings (PLC directory, app view, report service, crawlers)
- Auto-generated JWT secret, admin password, and PLC rotation key
- Custom startup command that installs
pdsadminfor account management - Health check on
/xrpc/_health
Next steps
Once your PDS is running, you can access it at the domain Sliplane provides (e.g. bluesky-pds-xxxx.sliplane.app).
Setting up your hostname
The preset automatically sets PDS_HOSTNAME to your Sliplane domain. If you want to use a custom domain (recommended for production use), add it in the Sliplane dashboard and then update the PDS_HOSTNAME environment variable to match.
A custom domain is important because your PDS hostname becomes part of your decentralized identity (DID). Changing it later is possible but requires migration steps.
Admin credentials
Your admin password is auto-generated and visible in the environment variables tab of your service on Sliplane. You'll need it to create accounts via the pdsadmin tool or the admin API.
Creating accounts
To create a new account on your PDS, you can use the admin API. Connect to your PDS via the Sliplane terminal or use curl:
curl -X POST https://YOUR-PDS-DOMAIN/xrpc/com.atproto.server.createAccount \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"handle": "user.YOUR-PDS-DOMAIN",
"password": "a-secure-password"
}'
Replace YOUR-PDS-DOMAIN with your actual PDS hostname.
Environment variables
Here are the key environment variables you might want to customize:
| Variable | Default | Description |
|---|---|---|
PDS_HOSTNAME | Sliplane domain | Your PDS hostname (used for identity) |
PDS_ADMIN_PASSWORD | Auto-generated | Admin password for account management |
PDS_EMAIL_FROM_ADDRESS | (not set) | Sender address for verification emails |
PDS_EMAIL_SMTP_URL | (not set) | SMTP connection string for sending emails |
PDS_BLOB_UPLOAD_LIMIT | 104857600 | Max blob upload size in bytes (default 100 MB) |
If you want your PDS to send verification and password-reset emails, configure PDS_EMAIL_FROM_ADDRESS and PDS_EMAIL_SMTP_URL in the environment variables tab.
Logging
The PDS logs to stdout by default, which works perfectly with Sliplane's built-in log viewer. The LOG_ENABLED variable is set to true in the preset. For general Docker logging tips, check out our post on how to use Docker logs.
Cost comparison
Here's how hosting a Bluesky PDS compares across providers:
| Provider | vCPU Cores | RAM | Disk | Estimated Monthly Cost | Notes |
|---|---|---|---|---|---|
| Sliplane | 2 | 2 GB | 40 GB | €9 | charge per server |
| Render | 1 | 2 GB | 40 GB | ~$35-$45 | VM Small |
| Fly.io | 2 | 2 GB | 40 GB | ~$20-$25 | VM + volume |
| Railway | 2 | 2 GB | 40 GB | ~$15-$66 | Usage-based |
FAQ
Can I use my custom domain as my Bluesky handle?
Yes! Once your PDS is running on a custom domain, your handle can be @your-name.your-domain.com. This is one of the biggest advantages of running your own PDS: you get a handle that matches your domain, proving you own it.
How do I configure email sending?
Set the PDS_EMAIL_FROM_ADDRESS to a valid sender email and PDS_EMAIL_SMTP_URL to your SMTP server connection string (e.g. smtps://user:pass@smtp.example.com). This enables verification emails and password resets for accounts on your PDS.
How do I update Bluesky PDS?
Change the image tag in your service settings on Sliplane and redeploy. Check the Bluesky PDS GitHub releases for the latest stable version. Your data in the /pds volume persists across updates.
Can I migrate my existing Bluesky account to my PDS?
Yes, the AT Protocol supports account migration between servers. You can move your existing identity from bsky.social to your own PDS while keeping your followers, posts, and social graph. Check the AT Protocol account migration docs for the detailed process.
What resources does a PDS need?
For a personal PDS (a handful of accounts), 2 GB RAM and 2 vCPU cores are plenty. Storage depends on how much media you and your users post. The Sliplane starter server with 40 GB disk is a solid starting point. If you need more storage later, you can upgrade your server in the dashboard.