Discordボットを24時間安定稼働させたいなら、ConoHa VPSの1GBプラン+systemd常駐+.env管理の組み合わせがコスパと安全性のバランスで最適です。本記事ではUbuntu 24.04環境でハマりやすい落とし穴も含めて解説します。
「RailwayやReplitの無料枠が制限されて、ボットが頻繁にスリープしてしまう」「自宅PCでは電気代と再起動が辛い」――そんな悩みを抱えていませんか?
本記事を読むと、ConoHa VPSの契約からPython仮想環境構築、systemdによる24時間常駐化、トークン管理のセキュリティ設定まで一気通貫で理解できます。
なぜDiscordボットはVPSで動かすべき?
無料ホスティング(Railway/Replit)はスリープ・実行時間制限・突然のプラン改定リスクが付きまといます。VPSなら月600〜700円で24時間常時稼働+自由なミドルウェア導入が可能で、長期運用に最適です。
特にConoHa VPSは時間課金対応で初期費用ゼロ、IPv4標準提供、東京リージョンの低レイテンシなど、個人開発ボットの要件を最小コストで満たします。
どのプランを選ぶべき?
| プラン | 月額(まとめトク) | 用途 |
|---|---|---|
| 512MB | 460円 | 非推奨。メモリ不足でクラッシュ |
| 1GB | 763円 | 最推奨。複数ボット同居も可 |
| 2GB | 1,400円 | DB併用・画像処理ボット向け |
ConoHa VPSの初期設定はどう進める?
OSはUbuntu 24.04 LTSを選択。SSH接続後、まずSSH鍵認証への切り替え・UFWでの不要ポート閉鎖・fail2ban導入の3点を済ませてからボット環境構築に進みます。
1GBプラン・Ubuntu 24.04・SSHキーを登録。作成完了後、IPアドレスを控える。
ssh root@<IP>で接続し、adduser botで専用ユーザーを作成。usermod -aG sudo botでsudo権限付与。
ufw allow 22 && ufw enableで必要ポートのみ開放。apt install fail2banでSSHブルートフォース対策を有効化。
Python環境とDiscord.pyはどう構築する?
Ubuntu 24.04以降はpipのシステム直接実行が原則禁止です。venv(仮想環境)の作成が必須で、ここを飛ばすと「externally-managed-environment」エラーで止まります。
sudo apt update && sudo apt install -y python3 python3-venv python3-pip
mkdir -p /opt/my-discord-bot && cd /opt/my-discord-bot
python3 -m venv venv
source venv/bin/activate
pip install discord.py python-dotenv
仮想環境の中でdiscord.pyとpython-dotenvをインストールすれば、システム側のpipを汚染せず安全にライブラリ管理ができます。
TOKENを安全に管理する.envファイル
ボットトークンをコードに直書きするのは厳禁です。GitHubに誤って公開した瞬間に乗っ取られる事故が後を絶ちません。.envファイルに分離し、.gitignoreで除外しましょう。
# .env
DISCORD_TOKEN=YOUR_BOT_TOKEN_HERE
# main.py
from dotenv import load_dotenv
import os
load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")
systemdで24時間常駐化する手順は?
screenやtmuxはセッション切断や再起動でボットも止まります。systemdサービス化+Restart=on-failureを使えば、サーバー再起動後も自動復旧する真の24時間稼働が実現します。
# /etc/systemd/system/discord-bot.service
[Unit]
Description=Discord Bot
After=network.target
[Service]
User=bot
WorkingDirectory=/opt/my-discord-bot
ExecStart=/opt/my-discord-bot/venv/bin/python main.py
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
ポイントはExecStartをvenv内のpythonを絶対パスで指定すること。グローバルの/usr/bin/python3を指定するとModuleNotFoundErrorで起動しません。
systemctl daemon-reload && systemctl enable --now discord-botで自動起動を有効化。
systemctl status discord-botでactive (running)を確認。エラー時はjournalctl -u discord-bot -fでログを追跡。
運用・トラブルシュートのコツは?
放置しているとjournaldのログが肥大化し、SSDを圧迫します。/etc/systemd/journald.confでSystemMaxUse=500Mに上限設定し、UptimeRobotで外形監視を追加するのが運用の鉄則です。
コード更新はgit pull && systemctl restart discord-botの2コマンドで反映。Restart=alwaysではなくon-failureを選ぶことで、コードのバグで無限再起動ループに陥るのを防げます。
まとめ:ConoHa VPSなら月700円で堅牢な24時間稼働が実現
- プランは1GBを選択。512MBはメモリ不足リスク
- Ubuntu 24.04ではvenv必須。pip直接実行はエラー
- トークンは.env+python-dotenvで分離管理する
- systemdサービス化でOS再起動後も自動復旧を実現
- journaldの上限設定と外形監視で長期運用に備える
FAQ
無料のRailwayやReplitではダメ?▼
ModuleNotFoundErrorが出る原因は?▼
ExecStartでvenv内のpython絶対パスではなく/usr/bin/python3を指定しているケースが大半です。venvのpythonバイナリを明示すれば解決します。複数のDiscordボットを1台で動かせる?▼
discord-bot-a.servicediscord-bot-b.serviceと分け、ボット同士で監視・再起動の影響を受けない構成にしましょう。

コメント