misskeyサーバーを簡単に立てるためのdocker compose定義
Cloudflareを使うので固定IPアドレスは不要、それどころかグローバルIPアドレスさえ不要です。
用意するもの: dockerコマンドとdocker-composeコマンドが動くLinux環境(WSL可)
立ち上がるもの:
- Misskey(高速ノート検索が有効になった状態)
- 藍ちゃんbot
- etc/misskey-default.ymlの
url:の欄がhttp://localhostになっていることを確認します docker-compose up -d --wait webを実行します- http://localhost/ にアクセスします
ドメイン名をexample.comとし、これがCloudflareで管理されているものとします
- Cloudflare Tunnelsでtunnelを作成します。トークンが生成されますが、それは直接「トークンだ」と表示されるものではなく、表示されているconnector実行用コマンドに含まれる無意味な長い文字列です。
- etc/misskey-default.ymlの
url:の欄をhttps://example.comに書き換えます - etc/docker.envの
TUNNEL_TOKEN=の欄にCloudflare Tunnelsのトークンを入力します - Cloudflare Tunnelsの設定で、Public Hostnameとして
example.com/を、そのserviceとしてHTTP://lbを設定します docker-compose up -d --wait webを実行します。これで、http://localhost/ でサーバーにローカルアクセスできることを確認しますdocker-compose up -d --wait tunnelを実行します- https://example.com/ にアクセスします
- AWS S3 をはじめとするオブジェクトストレージを作成し、そのクレデンシャルを用意します
- etc/docker.envの
AWS_ACCESS_KEY_ID=の欄にAWSのアクセスキーを入力します - etc/docker.envの
AWS_SECRET_ACCESS_KEY=の欄にAWSのシークレットアクセスキーを入力します - etc/docker.envの
AWS_DEFAULT_REGION=の欄にAWSのリージョンを入力します。AWS S3以外のオブジェクトストレージの場合はそのままにしておきます - AWS S3以外のオブジェクトストレージの場合は、etc/docker.envの
S3_ENDPOINT=の欄にオブジェクトストレージのエンドポイントURLを入力します- ヒント: Cloudflare R2の場合、
https://XXXXXXXXXX.r2.cloudflarestorage.com/BUCKET_NAMEのようなURLを案内されますが、最後のBUCKET_NAMEは不要です。バケット名はこのあとBACKUP_OBJECT_S3URLを指定するときに使います
- ヒント: Cloudflare R2の場合、
- etc/docker.envの
BACKUP_OBJECT_S3URL=の欄にS3://から始まるバケット名を含むパス名を入力します - bin/backup-db.shを実行すると、バケット上に指定通りのキー名でDBのバックアップが作成されます
- etc/crontab に毎時のbin/backup-db.sh呼び出しが設定されているので、この通りに自動バックアップされるようになります
- リストアの練習は、他のサーバーに同じ設定ファイルを置いて行うのがよいでしょう
docker compose up -d dbとしてDBを起動しますbin/restore-db.shとしてDBをリストアしますdocker compose up -d webとしてMisskeyを起動します- http://localhost/ にアクセスします。バックアップしたときの状態に戻っているはずです
- 実際のリストアの際には、次のような手順になるでしょう
docker compose downでいったん全コンテナを終了しますdocker compose up -d dbとしてDBだけを起動しますbin/restore-db.shとしてDBをリストアしますdocker compose up -d webとしてMisskeyを起動します- http://localhost/ にアクセスし、バックアップしたときの状態に戻っていることを確認します
docker-compose up -d --wait tunnelを実行しWebに公開します
bin/update-misskey.shを実行します。これは 公式Dockerhub から最新のイメージを取得し、アプリケーションインスタンスを更新します。このとき、新しいバージョンのコンテナを起動してから既存のコンテナを停止するため、サービスは無停止です- β版など、latest以外のタグを使いたい場合は、
bin/update-misskey.sh TAGのようにタグ名を指定します
- Misskey上で藍ちゃん用のアカウントを作ります
- そのアカウントで、APIトークンを発行します。権限はすべて付いたものにします
- Gemini APIのページ https://ai.google.dev/gemini-api/docs?hl=ja で「Gemini APIを取得する」から無料のAPIキーを取得します
- etc/docker.envの
AI_MISSKEY_TOKEN=の欄にMisskeyアカウントのAPIトークンを入力します。AI_GEMINI_API_TOKEN=の欄にGemini APIキーを入力します docker-compose up -d aiとして藍ちゃんを起動します- Misskey上で藍ちゃんアカウントに ping などと話しかけてみてください
- crontabには、夜11時半に藍ちゃんを止めて朝7時半に藍ちゃんを起動するタイマーが記述されています。また、夜11時半には藍ちゃんにおやすみのあいさつをノートさせるタイマーも記述されています。必要に応じて調整してください