0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

discord.pyでランニングコストゼロのBOTを作ってみた サーバー設定編

Posted at

前回のあらすじ

discord.pyを用いてbot本体のコードを作成した。

この記事でやること

実際に作成したプログラムをサーバーにデプロイする。

Koyebサーバーにアップロードする

今回はKoyebのサーバーにプログラムをアップロードして運用します。

Dockerの作成

サーバーにどんなライブラリでどのファイルを実行するかを教えてあげる必要があります。そこで、プロジェクトをDockerコンテナとして作成し、dockerfileにいろいろ書いて教えてあげましょう。

dockerfile

FROM python:3.13.2

# Set the working directory
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

requireents.txtにはpythonのライブラリのバージョン情報を書き込みます。
以下のコマンドを実行して生成してください。

pip freeze > requirements.txt

ディレクトリ構造

appフォルダにmain.pyを配置し、その他はroot

これでできたはずだが…?

現段階でもKoyebにアップロードを済ませれば動くと思うのですが、botの感知するdiscordサーバーにしばらく動きがなくなってしまったときにsleepしてしまいます。

health checkをする

定期的にbotに対して刺激を与えることで寝ないように起こしてあげます。

health_check_server.py

from flask import Flask
from rich import console
app = Flask(__name__)

@app.route("/")
def health_check():
    return "OK", 200

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

ここで問題が

Koyebの無料枠で実行できるのは一つのファイルのみ。
しかし、本体とヘルスチェックを同時に動かさなければ。

run_all.sh

# 両方をバックグラウンドで起動しつつ監視

python healthcheck_server.py &
python app/main.py

# discord_bot.py を終了させたらコンテナも終了

両方を実行するシェルスクリプトをKoyebの実行対象のファイルにしたら解決しました。

書き忘れ

Koyebの設定について書き忘れていました。

  • 環境変数の登録(discord bot, github access)
  • ポート番号をhealth checkのプログラムと一致させる

これでできるはずです。

完成!!

下の画像のようにhealtyになっていたら成功です。
image.png

おまけ

本記事の内容に加えて、チャットで設定を変更する機能を追加しました。
通話通知を出さないように非通知チャンネルを設定してみました。
やってみてね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?