前回はDiscordBotの開発でプログラムが動作するところまでを行いました。
Botプログラム自体は動作するようになりましたが、Botは常に起動した状態でなければなりません。
そのためにはBotをサーバーなどで動かす必要があります。
サーバー自体はレンタルサーバーか自宅サーバーとしてDockerを使用して動かすことにします。
Docker自体の構築方法は以前に紹介しておりますので、今回は簡潔にPythonとDockerを使用してBotを動かす方法を紹介します。
0. 環境
- OS: MacOS 15
- Python: 3.9
- Docker: 28.1.1
- docker-compose: 28.1.1
1. Python環境の準備
前回からの続きで「py_discord」という環境を構築した状態となっているはずです。
この環境を以下のコマンドを使用して「requirements.txt」に保存しておきます。
この「requirements.txt」は後でDockerのイメージを作成する際に使用します。
pip freeze > requirements.txt
2. Dockerfileの作成
Docker自体はすでに環境が用意されているものとなります。
以下の内容で「Dockerfile」を作成します。
# ベースとなるPythonの公式イメージを選択 (軽量なslim版がおすすめ)
FROM python:3.9-slim
# コンテナ内の作業ディレクトリを設定
WORKDIR /app
# 依存関係のファイルを先にコピー
COPY requirements.txt .
# pipを使って依存関係をインストール
# --no-cache-dirでキャッシュを残さず、イメージサイズを小さくする
RUN pip install --no-cache-dir -r requirements.txt
# プロジェクトのすべてのファイルをコンテナにコピー
COPY . .
# 6. コンテナが起動したときに実行するコマンドを指定
CMD ["python", "main.py"]
3. docker-compose.ymlの作成
次に「docker-compose.yml」を作成します。
ちなみに最近のdocker-composeでは「version: ‘3’」の指定は不要になっています。
services:
discord-bot:
# Dockerfileがある場所を指定してイメージをビルド
build:
# ビルドコンテキストはカレントディレクトリ
context: .
# Dockerfileの場所を具体的に指定
dockerfile: .docker/Dockerfile
# .envファイルから環境変数を読み込む
env_file:
- ./.env
# コンテナが何らかの理由で停止した場合、常に自動で再起動する
restart: always
以下のファイル構成となります。(.envは環境に応じて用意してください)
.
├── .docker
│ └── Dockerfile
├── py_discord # 仮想環境
│ ├── bin
│ ├── include
│ ├── lib
│ └── pyvenv.cfg
├── .env
├── docker-compose.yml
├── main.py
└── requirements.txt
4. Botの起動
以下のコマンドでBotを起動します。
docker-compose up -d
これで随時Botが起動し、Discordのサーバーで動作するようになります。