Discordボットを24時間ホスティングする (discord.js・discord.py)
自分のPCの電源を切ってもボットが動き続けるように、Ubuntuサーバーで実行する方法です。ボットのコードはすでに完成していて、自分のPCで問題なく動くことを前提とします。
1. ボットのコードをサーバーに移す
ファイルのアップロードとダウンロードを参考にボットのフォルダーをサーバーに移すか、GitHubに上げてあるならサーバーで直接取得します。
git clone https://github.com/my-id/my-bot.git
cd my-bot
🔒 ボットのトークンは、絶対にコードに直接書いたりGitHubに上げたりしないでください。 トークンが漏えいすると、誰でも自分のボットを操作できてしまいます。サーバーの
.envファイルに別途入れておくことをおすすめします。
Node.jsのボット (discord.js)
Node.jsのインストール
Ubuntuの標準リポジトリのNode.jsはバージョンが古く、最新のdiscord.jsが動作しないことがあります。公式の配布版でインストールします。
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
パッケージをインストールしてpm2で実行
pm2は、ボットが停止すると自動で再起動し、サーバーが再起動してもボットを再び実行してくれます。
npm install
sudo npm install -g pm2
pm2 start index.js --name my-bot # 起動ファイルの名前に合わせて変更します
pm2 save
pm2 startup # 出力されたコマンドをもう一度コピーして実行します
よく使うコマンド:
pm2 logs my-bot # リアルタイムのログを表示(終了: Ctrl + C)
pm2 restart my-bot # コードの修正後に再起動
pm2 status # 実行状態を確認
Pythonのボット (discord.py)
仮想環境を作ってパッケージをインストール
sudo apt install -y python3-venv
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
systemdで常時実行
サービスファイルを作成します。
sudo nano /etc/systemd/system/my-bot.service
WorkingDirectoryとExecStartのパスは実際のボットのフォルダーの場所(pwdコマンドで確認)に、Userは自分のアカウント名に変更します。
[Unit]
Description=My Discord Bot
After=network-online.target
[Service]
User=username
WorkingDirectory=/home/username/my-bot
ExecStart=/home/username/my-bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now my-bot
sudo systemctl status my-bot # active (running)なら成功
journalctl -u my-bot -f # リアルタイムのログを表示
ボットが停止しています
- まずログを確認してください(
pm2 logsまたはjournalctl -u my-bot)。トークンのエラーやパッケージの不足が、最もよくある原因です。 - ボットは外部から接続を受け付けるサービスではないため、ファイアウォールのポートを別途開ける必要はありません。
- サーバー自体が応答しない場合は、サーバーに接続できないときを確認してください。