デプロイ(Docker)
イメージのビルド
bash
docker build -t nbc-bot .Dockerfile はマルチステージビルドで、golang:1.26-alpine でビルドした静的バイナリ(CGO_ENABLED=0)を alpine:latest の実行イメージにコピーするだけの軽量構成です。modernc.org/sqlite はピュアGo実装なのでCGOなしでもSQLiteが使えます。
実行
bash
docker run --rm -p 8080:8080 \
--env-file .env \
-v $(pwd)/data:/root/data \
-v $(pwd)/fumikun-sa.json:/root/fumikun-sa.json:ro \
nbc-botSQLITE_DB_PATHが指すディレクトリ(既定./data)はコンテナ再作成後もアラートの永続化状態を保つためにボリュームマウント推奨- サービスアカウントJSONは
GOOGLE_APPLICATION_CREDENTIALSで指すパスに読み取り専用でマウント ENV_FILE_PATHが指すファイル(既定.env)は、STATUS_MESSAGE_IDの自動書き戻し先なので、ホスト側でも永続化されるパスにマウントしておくこと
Discord側の設定
- Discord Developer Portal でアプリケーションを作成し、Bot Token / Public Key / Application ID を取得
- Interactions Endpoint URL に、デプロイ先の
POST /にあたるURL(例:https://your-domain.example.com/)を設定- この設定を保存する際、Discordはそのエンドポイントに
type: 1(ping)のInteractionを送って疎通確認を行うため、事前にデプロイを完了させておく必要がある
- この設定を保存する際、Discordはそのエンドポイントに
- Botに必要な権限(メッセージ送信・編集、Webhookなど)を付与してサーバーに招待
- デプロイ後、初回のみ以下を叩く
bash
curl -X POST https://your-domain.example.com/register-command
curl -X POST https://your-domain.example.com/send-button稼働形態についての補足
nbc-bot は単一の長時間稼働プロセスとして動作する前提で設計されています(返却期限アラートは time.AfterFunc によるインプロセスタイマー+SQLiteへの永続化で実現しており、Cloud Run のようなリクエスト単位でスケールイン/アウトする実行環境は想定していません)。デプロイ先はVPSなど、プロセスが継続的に起動し続ける環境を選んでください。
.env の STATUS_MESSAGE_ID は起動時に読み込まれません。.env はプロセスマネージャ(systemdの EnvironmentFile= など)が読み込む前提で、アプリ自身は起動後の更新のみをそのファイルに書き戻します。運用するプロセスマネージャの .env 読み込み先と ENV_FILE_PATH が一致していることを確認してください。