はじめる
babyrite を導入するための手順を説明します.
動作要件
| 項目 | 最小要件 | 推奨要件(複数ギルド運用時) |
|---|---|---|
| CPU | 1 vCPU(共有可) | 1 vCPU |
| メモリ | 128MB | 256MB 以上 |
| ディスク | 数十 MB(config.toml のみ) | 同左 |
| ネットワーク | Discord Gateway(WebSocket 常時接続)と Discord API / GitHub API への HTTPS アウトバウンド | 同左 |
- babyrite は外部データベースを持ちません.また今後このようなデータベースを要求するような機能を追加する予定はありません.
- Discord API への WebSocket 接続を行った際,チャンネル情報を moka でメモリキャッシュします.
- キャッシュはギルドのチャンネルリスト / チャンネル を各最大 500 エントリで保存します.
- TTL 12h・TTI 1h で設定されています.
実測値ではなく実装からの見積もりです
上記はソースコード(キャッシュサイズ,GitHub raw 取得の 1MB 上限など)から算出した目安であり,ベンチマークによる実測値ではありません.運用規模に応じて調整してください.
対応 OS・アーキテクチャ
- 推奨環境として,macOS および主要な Linux ディストリビューションでの動作を確認しています.
- Windows でも動作しますが,macOS または Linux での実行を推奨します(v0.19.0 以降).
- ARM64 環境にも対応しています(v0.16.0 以降).
トレードオフ
babyrite 自体の処理は regex マッチと HTTP リクエストが中心で,常時 CPU に張り付くことはほぼありません.一方で,以下の要因はギルド数やメッセージ量に比例して増えるため,「最小要件」のまま複数ギルドで運用するとメモリ不足やレイテンシ増加につながる可能性があります.
- moka キャッシュのメモリ使用量:参加ギルド数・チャンネル数が増えるほど,キャッシュに保持される
GuildChannelのデータ量が増えます.キャッシュ自体は最大 500 エントリで頭打ちになりますが,エントリ 1 件あたりのデータサイズはギルドの構成に依存します. - reqwest のコネクション数:Discord メッセージリンクと GitHub パーマリンクの展開(1 メッセージあたり最大 3 件ずつ)が同時多発すると,アウトバウンド HTTP コネクションが一時的に増加します.
- GitHub raw 取得のバッファ:1 ファイルあたり最大 1MB を一時的にメモリへ読み込むため,同時に複数の GitHub パーマリンクが展開されるタイミングでは瞬間的なメモリ使用量が跳ね上がります.
単一ギルドでの小規模な運用であれば最小要件で十分ですが,複数ギルドにまたがって常時稼働させる場合は,推奨要件程度の余裕を見ておくことをおすすめします.
インストール
babyrite は Docker を使ってインストールします.以下のコマンドで最新版の babyrite を pull できます.
docker pull ghcr.io/m1sk9/babyrite:v1Docker Compose を使う (推奨)
babyrite のセットアップには Docker Compose の利用を推奨します.
k8s や Docker Swarm などのオーケストレーションツールを使う場合は,それぞれの設定ファイルに合わせて構成してください.
services:
app:
image: ghcr.io/m1sk9/babyrite:v1
env_file:
- .env
restart: always設定
専用の設定ファイルを使うことで,babyrite の動作をカスタマイズできます.設定ファイルは TOML 形式で記述し,CONFIG_FILE_PATH 環境変数でパスを指定します.設定ファイルを用意しなくても,デフォルト設定のまま起動できます.
設定項目の一覧・デフォルト値・ログ出力の詳細については 設定リファレンス を参照してください.
環境変数
babyrite が使用する環境変数は以下の通りです.起動に必須な環境変数は DISCORD_API_TOKEN のみです.
| Key | Description |
|---|---|
DISCORD_API_TOKEN | Discord API トークン |
CONFIG_FILE_PATH | 設定ファイルへのパス(再帰的パス) |
RUST_LOG | ログレベルのフィルタ.設定した場合,設定ファイルの log.level を上書きします. |