Guide de déploiement

Héberger son PDS Bluesky sur un VPS avec le protocole AT

Déployer sur un VPS Cloud →

Self-hosting9 min de lecture

Héberger son PDS Bluesky sur un VPS avec le protocole AT

Le protocole AT (atproto) dissocie votre identité Bluesky du serveur qui l'héberge. Tant que votre compte réside sur bsky.social, c'est Bluesky Inc. qui contrôle votre DID. Héberger son propre Personal Data Server sur un VPS transfère ce contrôle : vos publications, follows et handle vous suivent quel que soit l'avenir de la plateforme. Le dépôt officiel github.com/bluesky-social/pds fournit un Compose prêt à l'emploi avec Caddy (TLS automatique) et Watchtower (mises à jour automatiques), pour une charge de maintenance comparable à tout autre service Docker.

Posséder son identité Bluesky

La portabilité du protocole AT repose sur une séparation stricte entre le DID (Decentralized Identifier), le PDS qui stocke vos données, et le relayeur de réseau. Votre DID doc, signé cryptographiquement par votre serveur, énumère les clés de signature et le point d'entrée du service qui héberge votre dépôt. Changer de PDS met à jour ce document sans modifier le DID lui-même : vos abonnés ne voient rien, vos liens de profil restent valides, et votre handle reste le même.

Tant que vous déléguez cet hébergement à bsky.social, la portabilité reste théorique. La migrer vers un VPS que vous administrez la rend effective : vous contrôlez les clés, vous décidez des règles d'inscription, et aucune décision de politique externe ne peut vous priver de votre dépôt de publications.

Avantages d'un PDS auto-hébergé

  • Votre handle Bluesky devient un sous-domaine de votre propre domaine, par exemple vous.votre-domaine.com.
  • Vos publications, likes et follows sont stockés dans un dépôt signé cryptographiquement sur votre serveur — vous en êtes l'unique propriétaire.
  • En cas de changement de politique de bsky.social, une migration ne coûte ni abonné ni publication : le protocole AT transfère l'intégralité du dépôt.
  • Vous gérez la liste des comptes admis via un système de codes d'invitation : une instance strictement personnelle reste possible.
  • Watchtower surveille l'image du PDS et déclenche les mises à jour automatiquement, sans intervention manuelle.
  • Caddy gère le TLS et le renouvellement des certificats, y compris pour le wildcard DNS requis par les handles en sous-domaine.
  • La consommation mémoire au repos avoisine 512 Mo : compatible avec la plupart des VPS d'entrée de gamme.
  • Le code est publié sous licence MIT sur github.com/bluesky-social/pds ; aucune édition entreprise payante n'existe.

Prérequis chiffrés

Un VPS avec au moins 512 Mo de RAM et 1 vCPU suffit pour un usage personnel (un à cinq comptes). Prévoyez 20 Go de stockage SSD minimum pour les médias et l'historique des publications. Pour un usage associatif à une dizaine de comptes, 1 Go de RAM et 40 Go de stockage offrent davantage de marge.

Côté réseau, les ports 80 et 443 doivent être joignables depuis l'extérieur. Le PDS maintient une connexion WebSocket persistante vers le réseau Bluesky : assurez-vous que votre pare-feu ne coupe pas les connexions longues inactives.

DNS : un enregistrement A wildcard *.votre-domaine.com pointant vers l'IP de votre VPS est indispensable. Il permet à chaque handle en sous-domaine d'être résolu sans qu'une entrée DNS distincte soit nécessaire par compte. Si votre registrar ne supporte pas les wildcards, la configuration manuelle d'un handle via un enregistrement TXT _atproto.votre-domaine.com reste possible, mais plus contraignante.

Logiciels requis : Docker et Docker Compose v2. Aucune autre dépendance n'est nécessaire ; le Compose officiel embarque Caddy, Watchtower et le PDS dans un réseau interne isolé.

Installation pas à pas

01

Cloner le dépôt officiel

Connectez-vous en SSH sur votre VPS et clonez le dépôt de référence. La branche main est la branche stable recommandée par les mainteneurs : git clone https://github.com/bluesky-social/pds /opt/pds. Entrez ensuite dans le répertoire avec cd /opt/pds.

02

Créer le fichier d'environnement

Copiez l'exemple fourni dans le dépôt : cp .env.example .env.

Renseignez au minimum PDS_HOSTNAME (votre domaine racine, sans le wildcard, ex. votre-domaine.com), PDS_JWT_SECRET et PDS_ADMIN_PASSWORD. Générez des valeurs aléatoires fortes : openssl rand -hex 32 produit une chaîne de 64 caractères suffisante pour chacun des deux secrets.

03

Configurer le DNS wildcard

Dans l'interface de votre registrar ou de Cloudflare, créez un enregistrement A *.votre-domaine.com pointant vers l'adresse IP de votre VPS.

La propagation prend en général quelques minutes, parfois jusqu'à 24 h. Vérifiez avec dig +short test.votre-domaine.com @1.1.1.1 avant de passer à l'étape suivante : si la réponse est vide, attendez.

04

Démarrer les services

Le Compose officiel démarre le PDS, Caddy et Watchtower en une commande : docker compose up -d.

Caddy obtient automatiquement le certificat TLS pour votre-domaine.com et *.votre-domaine.com. Suivez les logs avec docker compose logs -f caddy pour confirmer que le challenge a abouti avant de créer le premier compte.

05

Créer le premier compte

L'image PDS expose une commande d'administration en ligne. Créez votre compte : docker compose exec pds /pds/bin/create-account --handle vous.votre-domaine.com --email [email protected] --password <motdepasse>.

Ouvrez l'application Bluesky, choisissez « Serveur personnalisé » (adresse : https://votre-domaine.com), entrez le code d'invitation retourné et finalisez la création de compte.

06

Migrer depuis bsky.social (si applicable)

Si vous avez déjà un compte sur bsky.social, le protocole AT permet une migration sans perte de followers ni de publications. Dans l'application Bluesky : Paramètres → Gérer mon compte → Migrer le compte. Entrez l'adresse de votre PDS (https://votre-domaine.com) et suivez les étapes. Votre DID est mis à jour pour pointer vers votre serveur ; vos abonnés n'ont aucune action à effectuer — ils vous voient toujours dans leur flux.

07

Vérifier l'installation

Ouvrez https://votre-domaine.com/xrpc/com.atproto.server.describeServer dans un navigateur.

La réponse JSON confirme que votre PDS est accessible et que le TLS est valide. Cherchez ensuite @vous.votre-domaine.com dans l'application Bluesky pour vérifier que le handle se résout correctement.

Configuration post-installation

Codes d'invitation. Par défaut, les inscriptions sont fermées : seuls les comptes créés avec un code d'invitation peuvent rejoindre votre PDS. Générez des codes supplémentaires avec docker compose exec pds /pds/bin/create-invite-code. Pour un usage strictement personnel, cette restriction est la configuration recommandée.

Surveillance avec Watchtower. Watchtower est déjà dans le Compose officiel et surveille l'image du PDS. Dès qu'une nouvelle version est publiée sur le registre d'images, il tire l'image et redémarre le service, sans intervention de votre part. Pour recevoir une notification à chaque mise à jour, ajoutez [email protected] dans le fichier .env.

Sauvegardes. Le répertoire data/ (configurable via PDS_DATA_DIRECTORY) contient la base SQLite et les médias. Planifiez une sauvegarde régulière : le répertoire est cohérent à froid si vous arrêtez les services avec docker compose stop avant de le copier.

Durcissement recommandé

Ajoutez PDS_REGISTRATION_DISABLED=true dans .env pour exiger un code d'invitation à toute inscription. Relancez le PDS avec docker compose restart pds après modification.

Testez régulièrement la restauration de vos sauvegardes en démarrant un PDS éphémère sur un second répertoire : une sauvegarde non testée n'est pas une sauvegarde. Une base SQLite corrompue sans restauration valide signifie la perte de l'ensemble des publications.

Dépannage courant

DNS non propagé. Si Caddy ne parvient pas à obtenir le certificat, docker compose logs caddy affiche failed to obtain certificate. Vérifiez la résolution du wildcard avec dig *.votre-domaine.com @1.1.1.1 : une réponse vide indique que l'entrée DNS n'existe pas encore ou n'est pas encore propagée.

Erreur de certificat (ports bloqués). Si l'enregistrement DNS existe mais que le challenge TLS-ALPN échoue, un pare-feu bloque probablement le port 80 ou 443. Sur un VPS avec ufw, vérifiez ufw status et autorisez les deux ports : ufw allow 80/tcp && ufw allow 443/tcp.

Migration DID échouée. Si l'application Bluesky retourne une erreur lors de la migration, confirmez que votre PDS répond depuis l'extérieur (endpoint describeServer ci-dessus). La migration contacte votre serveur depuis les serveurs de bsky.social : un timeout signifie un problème réseau ou un certificat non valide.

Handle non résolu. Si @vous.votre-domaine.com ne se résout pas dans l'application Bluesky, vérifiez que le wildcard DNS est bien propagé et que l'endpoint /.well-known/atproto-did de votre handle répond avec le bon DID (curl https://vous.votre-domaine.com/.well-known/atproto-did).

Pour aller plus loin

Un PDS auto-hébergé s'intègre naturellement à une infrastructure Docker déjà en place. Le guide sur le déploiement avec Caddy couvre les cas plus avancés de reverse proxy multi-services sur le même VPS. Si vous souhaitez également héberger votre forge Git, le guide Forgejo sur VPS suit le même modèle Compose. Pour sécuriser l'accès administrateur à vos services auto-hébergés sans les exposer directement à internet, le guide Headscale/Tailscale sur VPS propose une alternative à un bastion SSH.

Un VPS prêt pour votre PDS Bluesky

Déployez votre Personal Data Server sur un VPS performant, configurable en quelques minutes. Vos données, votre infrastructure.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.