Bluesky PDSで「画像が黒くなる」「アップロードできない」不具合を完全解決するまでの記録

この記事は約4分で読めます。

※この記事にはプロモーションが含まれています。

概要

Blueskyの自己ホスト版PDS(Personal Data Server)を運用中、
投稿画像が黒くなる/プロフィール画像が更新できない/アバターが差し替えられない
という不具合が発生。
最終的に、BLOB(画像)保存ディレクトリ設定の不整合と環境変数の誤指定が原因であることが判明した。

1. 症状

  • Bluesky Web から画像付き投稿を行うと、画像が 真っ黒
  • プロフィール画像やヘッダー画像を変更しても、反映されない
  • テキスト投稿は成功する。
  • PDSは正常稼働しており、curl /xrpc/_health は 200 OK を返す。

2. 環境

  • サーバー:Ubuntu 22.04 LTS
  • Docker で Bluesky PDS を運用
  • 逆プロキシ:Caddy + Cloudflare
  • PDS イメージ:ghcr.io/bluesky-social/pds:0.4
  • データ永続化パス:/pds → コンテナ内 /app/data にマウント

3. エラーログの分析

docker logs 出力:

TypeError: Cannot open database because the directory does not exist

PDSがSQLiteデータベースを開けていない → ディレクトリ構造が壊れているか存在しない。

4. 原因の一次特定

環境変数 /pds/pds.env を確認:

PDS_DATA_DIRECTORY=/app/data
PDS_BLOBSTORE_DISK_LOCATION=/app/data/blocks

コンテナ再生成時にマウントパスがずれていたため、PDSが初期化エラーで終了していた。

5. ディレクトリ再作成と権限修復

mkdir -p /pds/blocks
chmod -R 777 /pds/blocks
docker restart pds

6. コンテナ確認

docker exec -it pds sh -c 'ls -ld /app/data/blocks'

✅ 正しく存在、✅ /app/data がホスト /pds にマウント済

7. 動作確認

curl -I https://bluesky.j-makoto.online/xrpc/_health
HTTP/2 200 OK

プロフィール画像再設定と投稿テストで、画像・テキスト投稿とも成功。

復活しました!

8. 根本原因の総括

問題点原因対応
画像が黒くなるBLOBディレクトリ未マウント or 権限不足/pds/blocks を再作成+パーミッション調整
PDS起動時に TypeError/app/data が存在しなかった永続化ディレクトリを再確認
画像がアップロードできないPDS_BLOBSTORE_DISK_LOCATION の参照先不一致/app/data/blocks に統一

9. 再発防止チェックリスト

  • /pds/blocks が存在: ls -ld /pds/blocks
  • /pds/blocks に書き込める: touch /pds/blocks/testfile
  • PDSがブロブディレクトリを認識: docker exec -it pds sh -c 'ls /app/data/blocks'
  • HTTPSヘルスチェックOK: curl -I https://ドメイン/xrpc/_health
  • Cloudflare経由でも画像URL表示可 ✅

10. 教訓

  • PDS_DATA_DIRECTORY と PDS_BLOBSTORE_DISK_LOCATION の整合性が最重要
  • Dockerマウントの破損や空ディレクトリに注意
  • Caddy/Cloudflare設定は問題ではなかった
  • 多くの不具合は「PDSがBLOBファイルを読めない」ローカル設定が原因

結論

画像が黒くなる・プロフィール画像が更新できない場合、
PDSのBLOB保存ディレクトリが正しくマウント・認識されていないのが主原因。
設定を見直すことで、PDSは正常に画像を保存・配信できるようになる。

最後に

セルフホストで運用すると、どうしてもトラブルは避けられません。

これまでは、筆者のようにソースコードが読めない人は自己解決は無理だったことでしょう。

でも、今は違います。「生成AI」に相談すれば解決してくれるのです。

こんな感じにエラーをコピペして投げるだけです。即答えてくれます。気を使う必要もありません。

とにかくコミュニケーション能力がずば抜けて高いです ^^;

誠ちゃん
誠ちゃん

最後まで読んでいただき、ありがとうございました!

今後もOSSに関するトラブルシューティングはノウハウ集として蓄積していく予定です。

error: Content is protected !!
タイトルとURLをコピーしました