Skip to content

デプロイ(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-bot
  • SQLITE_DB_PATH が指すディレクトリ(既定 ./data)はコンテナ再作成後もアラートの永続化状態を保つためにボリュームマウント推奨
  • サービスアカウントJSONは GOOGLE_APPLICATION_CREDENTIALS で指すパスに読み取り専用でマウント
  • ENV_FILE_PATH が指すファイル(既定 .env)は、STATUS_MESSAGE_ID の自動書き戻し先なので、ホスト側でも永続化されるパスにマウントしておくこと

Discord側の設定 ​

  1. Discord Developer Portal でアプリケーションを作成し、Bot Token / Public Key / Application ID を取得
  2. Interactions Endpoint URL に、デプロイ先の POST / にあたるURL(例: https://your-domain.example.com/)を設定
    • この設定を保存する際、Discordはそのエンドポイントに type: 1(ping)のInteractionを送って疎通確認を行うため、事前にデプロイを完了させておく必要がある
  3. Botに必要な権限(メッセージ送信・編集、Webhookなど)を付与してサーバーに招待
  4. デプロイ後、初回のみ以下を叩く
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 が一致していることを確認してください。