Docker Compose
Docker Composeは、TomoriBotとPostgreSQLをコンテナー内で一緒に実行します。これは、セットアップウィザード および 手動セットアップ と並ぶ3番目のインストールオプションです。ホストシステムにBunまたはPostgreSQLをインストールせずに、Dockerですべてを実行したい場合に選択します。対話型セットアップウィザードをバイパスし、データベース接続を自動的に構成します。
1. コードを取得する
Section titled “1. コードを取得する”git clone https://github.com/Bredrumb/TomoriBot.gitcd TomoriBot2. 必要な.envの値
Section titled “2. 必要な.envの値”サンプルファイルから始めます。
cp .env.example .envこれらの必須変数を.envに設定します。
| 変数 | 価値 |
|---|---|
DISCORD_TOKEN | Discordボットトークン (GuildMembers、MessageContent、およびGuildPresences特権インテントを有効にします)。 |
CRYPTO_SECRET | 保存されたAPIキーの暗号化に使用される32文字の暗号化キー。 |
POSTGRES_PASSWORD | データベースのパスワード。他のすべてのPOSTGRES_*値は自動構成されます。 |
Dockerを使用してCRYPTO_SECRETのランダムな32文字の値を生成し、それを.envにコピーします。
docker run --rm alpine:3.22 sh -c "head -c 24 /dev/urandom | base64"POSTGRES_PASSWORD用に別のパスワードを生成します。.env.optional.exampleからオプションのチューニング設定をコピーできます。
Linuxでは、コンテナーを起動する前に、ホスト上にバインドマウントディレクトリを作成し、所有権をUID 1001に割り当てます。Dockerは、不足しているマウントポイントをrootとして作成します。これにより、ボットコンテナーはバックアップ、ログ、またはアップロードを保存できなくなります。
mkdir -p backups logs datasudo chown 1001:1001 backups logs data3. ビルドと実行
Section titled “3. ビルドと実行”docker compose build # first time, or after code/dependency changesdocker compose up # bot + database後で開始する場合は、コードや依存関係を変更しない限り、docker compose upだけで十分です。ボットがDiscordに接続したら、任意のサーバー チャネルで/setupを実行してAIプロバイダー キーを追加します。Discordのセットアップオプションについては、クイックスタート を参照してください。
.envシークレットとローカルHTTPエンドポイントが機能するように、サービス定義でRUN_ENV=developmentピンを構成します。コンテナーのヘルスチェックは、ボットプロセスが実行されているかどうかを報告します。Discordゲートウェイ接続はテストされません。運用モード (RUN_ENV=production) の違い (シークレットマネージャー、ネットワーク制限、メトリック) については、セキュリティアーキテクチャ を参照してください。
単一ホストでのオプションのシャード設定
Section titled “単一ホストでのオプションのシャード設定”デフォルトの動作では、SHARD_COUNT と SHARD_IDS を未設定のままにします。起動時にDiscordから推奨されたすべてのシャードを1つのプロセスが担当します。小規模な環境では通常1つのシャードが割り当てられます。このモードではシャードリースやキャッシュ無効化リスナーは使用されません。複数のシャードが同じプロセスを共有できます。
既存のサービスで4つのシャードを実行するには、.env に SHARD_COUNT=4 を追加し、SHARD_IDS は未設定のままにします。また、正常なシャットダウン処理が完了できるように、compose.override.yaml に以下のサービスオーバーライドを追加します:
services: tomoribot: stop_grace_period: 40sdocker compose up -d --build tomoribot でサービスを再作成します。スクリプトから docker stop を呼び出す場合や独自のCompose停止タイムアウトを指定する場合は、そちらでも40秒以上の猶予を設定してください。実行中にシャード数が自動的に変更されることはありません。総数を変更するにはプロセス全体の再起動が必要です。
オプションの静的サブセットを使用する場合は、同じ明示的な SHARD_COUNT と互いに重複しない SHARD_IDS(例:合計 4 に対して 0,1 と 2,3)を持つサービスをグループごとに個別に用意します。各サービスには固有の名前、コンテナー名、および公開ヘルスポートを設定してください。アプリケーションは各グループから安定したメトリックラベルを導出します。データベースは1つに保ち、ゲートウェイ起動前に既存のワンショットコマンド bun run src/db/initializeCli.ts をスキーマ管理権限で実行した上で、すべてのゲートウェイプロセスで DATABASE_SCHEMA_MANAGEMENT_ENABLED=false を設定します。元の全シャード担当サービスをこれらのグループと同時に起動してはいけません。総数や分割構成を変更する前に、以前のプロセスを停止してください。
サブセットモードでは、完全設定されたMatrixブリッジは拒否されます。ユーザーごとのターン制限やアップロード制限はプロセスごとに適用されるため、2つ目のプロセスを有効にする前に、制限枠が倍増することが許容されるか検討してください。releaseブランチ専用のサポーター課金を利用している環境では、複数プロセスからリクエストを処理する前に、共有の支出受付および照合の調整も必要です。安全性とヘルスの制限については、シャーディングとプロセス所有権 を参照してください。
4. オプションのローカルサーバー(Composeプロファイル)
Section titled “4. オプションのローカルサーバー(Composeプロファイル)”Composeプロファイルを使用してオプションのローカルヘルパー サーバーを実行して、必要なものだけを開始できるようにします。
# SearXNG (private web search) + Crawl4AI (browser-rendered fetch)docker compose --profile searxng --profile fetch-crawl4ai upSearXNGを有効にする場合は、.envにSEARXNG_BASE_URL=http://searxng:8080/を設定してください。それ以外の場合は未設定のままにしてください。SEARXNG_SECRETをSearXNGリクエスト署名用の別のランダム値に設定します。
サーバー固有の設定については、SearXNG、Crawl4AI、および ローカルモニタリング を参照してください。
メンテナンス、アップデート、バックアップ
Section titled “メンテナンス、アップデート、バックアップ”Composeデプロイメントでのバックアップ優先更新には、bun run update --dockerを使用します。Composeデータベースをバックアップまたは復元するには、メンテナンスとバックアップ を参照してください。