本文へスキップ
← ガイド一覧

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)。トークンのエラーやパッケージの不足が、最もよくある原因です。
  • ボットは外部から接続を受け付けるサービスではないため、ファイアウォールのポートを別途開ける必要はありません。
  • サーバー自体が応答しない場合は、サーバーに接続できないときを確認してください。

解決しない問題がある場合は、Discordのチケットでお問い合わせください。