
サムネののどかな景色は一切関係ありません。最近 Misskey の自インスタンスへの完全移行を本格的に考え始めたので、後回しにしていた DB のバックアップとオブジェクトストレージの設定をしてきました。今回はその設定した内容なんかを、備忘録的な感じで書いていく記事になります。Misskey 自インスタンスを持っていない人はおそらくどうでもいい内容だと思うので、他の記事でも読んでくださればと。
DB バックアップ作成の手順、バックアップからの復旧手順、そしてオブジェクトストレージの設定方法という順番で並んでいるので、好きなところを読んでください。
ステップバイステップで解説します。とはいっても特別難しいことはなく、やることは先人が作ってくれているPostgreSQLバックアップ用 Docker Image を引っ張ってきてコンテナを作るだけとなります。
misskey のあれこれが入っている/misskeyの外で、以下を実行してバックアップのあれこれを格納するディレクトリを作ります。
mkdir misskey-backup
cd misskey-backup
中身のあれこれは下で解説するので、一旦コピペしてください。
nano compose.yml
そして以下を張り付ける。
services:
db-backup:
image: prodrigestivill/postgres-backup-local
restart: always
networks:
- misskey_internal_network # ※1
volumes:
- ./backups:/backups
environment:
- TZ=Asia/Tokyo # ※2
- POSTGRES_HOST=db
- POSTGRES_DB=misskey # ※3
- POSTGRES_USER=misskey # ※3
- POSTGRES_PASSWORD=MisskeyのDBパスワード # ※3
# 毎日 午前4時00分 に実行
- SCHEDULE=0 4 * * * # ※4
- BACKUP_KEEP_DAYS=7
- BACKUP_KEEP_WEEKS=4
- BACKUP_KEEP_MONTHS=6
networks:
misskey_internal_network:
external: true
name: misskey_internal_network # ※1
ここからは、上のcompose.yml内の※がついている箇所について解説、変更していきます。※の箇所のみが変更する可能性のある中でも重要な場所なので一旦解説しますが、何が書いてあるのかわかる方や、「お前のことは信用できないから全部変更したい!」という方は AI に投げたら解説してくれると思います。
※1
ここは、misskey 本体が動いている docker ネットワークの名前です。何も変更していなければmisskey_internal_networkとなっているので(misskey 2025.10 時点)基本的に変更は不要ですが、不安な方は以下のコマンドを/misskey内で実行してみてください。そこで得られたネットワーク名を※1 の箇所に入力してください。
docker network ls | grep internal
# xxxxxxxxxx misskey_internal_network bridge local のような出力が得られるはず。
※2
ここはバックアップのスケジュールを設定する際に参照するタイムゾーンの設定です。日本以外に住んでいる人は変更する必要がありますが、そうでない方はそのままで OK です。
※3
ここはバックアップ対象であるPostgreSQLの DB の DB 名, ユーザー名, パスワードを設定する部分です。初期設定では全て misskey となっていますが変更している人もいると思うので解説します。これらの情報は/misskey/.config/docker.envに書かれているので、ここを参照してあげれば OK です。以下は/misskey内から内容を確認するためのコマンドです。
cat .config/docker.env
# POSTGRES_PASSWORD=xxxxx など複数要素の出力が得られるはず。
※4
バックアップを取る頻度を指定できます。デフォルトでは毎日午前 4 時に設定していますが、変更したい人はこの記事なんかを参考にして cron 形式の時間指定を書き換えてください。
ここまで出来たらあとはコンテナを起動してあげるだけです。以下のコマンドを先ほど作成したcompose.ymlがあるのと同じディレクトリで実行してコンテナの起動を確認してください。
docker compose up -d
コンテナがちゃんと動くか不安な方は以下のコマンドを同じディレクトリで実行してあげれば手動でバックアップを作成することができます。
docker compose exec db-backup /backup.sh
backups/にバックアップが作成されているはずです。
オブジェクトストレージに関する手順はこの項の次にあるので、復旧方法は今はいらないという方はこの部分だけコピペして保存して次の項までスクロールしてください。
/misskey内で実行してください。
docker compose down
rm -rf ./db
docker compose up -d db
backupsがあるディレクトリ(バックアップコンテナ用の compose.yml があるのと同じ階層)で実行してください。先ほど起動した DB はそのままにしてください。起動している状態でリストアをします。
ls -lh backups/ # 戻したい地点のファイル名を確認してください(misskey-20251123.sql.gzなど)
docker compose exec db-backup /restore.sh /backups/戻したいファイル名.sql.gz
/misskey内で実行してください。
docker compose up -d
以上で DB の復旧作業は完了です。
ここからは Cloudflare R2 オブジェクトストレージの設定をかるーく書きます。一応注意点として、R2 は無料枠がそこそこデカいです。容量としては 10GB まで、アップロードやアクセスなんかの操作にも一応制限はあるのですが、少数人数のサーバーではまず到達することができないレベルの数字なので具体的には解説しませんが、そういうレベルで無料枠がデカいという話です。容量はある程度長く使えば超える可能性がありますが、50GB くらいになっても月額が 100 円を超えることはないので安心して使えると思います。


バケット名は任意、位置情報は自動、デフォルトのストレージクラスはStandardに設定してください。
バケット作成をできたらバケット内の「設定」タブに移動してください。

色々と設定項目がありますが、ここではカスタムドメイン以外設定する必要はありませんので、カスタムドメイン追加方法だけ解説します。
カスタムドメインタブの追加をクリックし、ドメインに自分が設定したいものを入力してあげます。ここで設定したものが misskey 側からファイルにアクセスする際に使われます。example.comが自身のドメインなら、r2.example.comやdb.example.comなんかでいいでしょう。既にあるものと被らなければ何でも OK です。特に追加設定はいらず、クリックで進めてあげるだけで Cloudflare が DNS に登録してくれます。このドメインはメモしておいてください。
最初にアクセスした R2 のダッシュボードに戻ってください。PC 表示にはなりますが、右側らへんにAccount Detailsというテーブルが目に入ると思います。そこにあるApi Tokensのとなりにある{} Manageをクリックしてアクセストークンの管理画面に移動して設定していきます。

移動したら、アカウント API トークンを作成します。トークン名は任意、アクセス許可は「オブジェクト読み取りと書きこみ」、バケット指定から先ほど作成したバケットを選択してください。他はデフォルト、空欄のままで OK です。
作成ボタンを押下すると色々とトークンが並んでる画面に遷移すると思いますが、ここでメモが必要なのはアクセスキー ID, シークレットアクセスキー, S3 クライアント用エンドポイントです。(エンドポイントは xxxx123456.r2.cloudflarestorage.com みたいな URL)
コントロールパネルからオブジェクトストレージの使用をオンにしたら、以下の画像のように設定してください。


BaseURL が少しわかりにくいですが、仮にカスタムドメインがr2.example.com、バケット名がmisskeyの場合はr2.example.com/misskeyのようになります。(もちろん先頭に https:// をいれてください。)
ここまできたらあとは画像を新しくアップロードして表示されるか確認するだけです。お疲れさまでした。
少なくとも misskey 2025.10 まではこの方法でオブジェクトストレージが使えます。まあオブジェクトストレージ周りで Misskey 側でとんでもない変更が来ることはないと思うので、後から読む人が困るのはおそらく Cloudflare 側の表示が変わっていることなんじゃないかなと思います。AI を使えばなんとかなると思うので頑張ってください。
最初これで少し詰まったので書いておきます。前述の通りに設定すれば問題なく表示されるはずですが、仮に表示されなかった場合以下の手順で解決できる可能性があります。
長丁場ですがお疲れさまでした!自分用のメモ的な感じで書くつもりが、気付けばそこそこしっかりと書いてしまいました。自インスタンスを建てて、misskey サーバー主の仲間入りをした方なんかはぜひやってみてください。
この記事が参考になった方は、SNS でのシェア、あるいは下のいいねボタンを押してくれると僕が喜びます!では、また次回 👋