Self-hosting Bluesky PDS the easy way

Self-hosting Bluesky PDS the easy way

Yulei Chen - Content-Engineerin bei sliplane.ioYulei Chen
5 min

Bluesky 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.

SliplaneDeploy Bluesky PDS >
  1. Click the deploy button above
  2. Select a project
  3. Select a server. If you just signed up you get a 48-hour free trial server
  4. 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/pds image, version 0.4.182 (check GitHub releases for newer versions)
  • Persistent storage mounted to /pds for 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 pdsadmin for 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:

VariableDefaultDescription
PDS_HOSTNAMESliplane domainYour PDS hostname (used for identity)
PDS_ADMIN_PASSWORDAuto-generatedAdmin 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_LIMIT104857600Max 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:

ProvidervCPU CoresRAMDiskEstimated Monthly CostNotes
Sliplane22 GB40 GB€9charge per server
Render12 GB40 GB~$35-$45VM Small
Fly.io22 GB40 GB~$20-$25VM + volume
Railway22 GB40 GB~$15-$66Usage-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.

Self-host Bluesky PDS now - It's easy!

Sliplane gives you everything you need to run your own Bluesky Personal Data Server without server hassle.