あなたのボット、寝ていませんか?
こんにちは!「リナックス先生」です。
前回はVPNを作ってセキュリティを強化しましたが、今回は「攻め」の活用術です。
先生、趣味でDiscordのボットを作ってみたんです!
でも、僕のノートパソコンで動かしてるので、パソコンを閉じたりスリープにするとボットも止まっちゃって…。
友達から「ボット返事しないぞー」ってクレームが来るんです。
それは当然ね。
そんな時こそVPSの出番よ。
今回は、VPSの中にPython環境を作って、「サーバーが再起動しても勝手に生き返る不死身のボット」を作るプロの運用術を教えるわ。
1. VPSでボットを動かすメリット
HerokuやReplitなどの無料枠で動かす方法もありますが、本格的に運用するならVPS一択です。
- 24時間365日稼働: スリープモードはありません。いつでも即座に応答します。
- 制限なし: 無料サービスのような「稼働時間制限」や「メモリ制限」を気にせず、重い処理(画像生成やAI連携など)も可能です。
- データの保存: SQLiteやMySQLを使って、ユーザーのレベルや会話履歴を永続的に保存できます。
2. 環境構築:Pythonの準備
今回はAlmaLinux 9(またはUbuntu)を想定して解説します。まずはPython環境を整えましょう。
Step 1: Pythonと仮想環境のインストール
システムを汚さないために、プロジェクトごとに仮想環境(venv)を作るのが鉄則です。
# 必要なパッケージを入れる (AlmaLinuxの場合) dnf install python3 python3-pip -y # 作業用ディレクトリ作成 mkdir -p /opt/my-discord-bot cd /opt/my-discord-bot # 仮想環境の作成 python3 -m venv venv # 仮想環境に入る source venv/bin/activate
Step 2: ライブラリのインストール
Discord用のライブラリと、環境変数を読み込むためのライブラリを入れます。
(venv) pip install discord.py python-dotenv
3. ボットの作成(セキュリティ重視)
コードに直接トークン(パスワード)を書くのは危険です。.env ファイルを使って管理しましょう。
Step 1: 環境変数の設定 (.env)
vi .env
中身:
DISCORD_TOKEN=ここにあなたのボットのトークンを貼り付け
Step 2: ボット本体の作成 (main.py)
vi main.py
中身:
import os
import discord
from dotenv import load_dotenv
# .envファイルを読み込む
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'{client.user} としてログインしました')
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content == '/ping':
await message.channel.send('Pong! VPSからこんにちは!')
client.run(TOKEN)
一度手動で動くかテストしてみましょう。
(venv) python main.py
Discordで /ping と打って返事が来ればOKです。Ctrl + C で停止します。
4. 【重要】Systemdで「不死身化(デーモン化)」する
ここがプロの技術です。python main.py で動かすだけだと、ターミナルを閉じるとボットも止まってしまいます。
Linuxの管理システム「Systemd」に登録して、バックグラウンドで常駐させましょう。
Step 1: サービスファイルの作成
Root権限で設定ファイルを作ります。
# 仮想環境を抜ける deactivate # ファイル作成 vi /etc/systemd/system/discord-bot.service
▼記述内容(コピペOK)
[Unit] Description=My Discord Bot Service After=network.target [Service] # 実行ユーザー(普段使っているユーザー名に変えてください) User=root # 作業ディレクトリ WorkingDirectory=/opt/my-discord-bot # 実行コマンド (仮想環境内のpythonを使うのがポイント!) ExecStart=/opt/my-discord-bot/venv/bin/python main.py # エラーで落ちても自動で再起動する設定 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
Step 2: 自動起動の有効化と開始
# Systemdの設定を読み込み systemctl daemon-reload # 自動起動をオンにする(サーバー再起動時にも動くように) systemctl enable discord-bot # サービスを開始 systemctl start discord-bot # 状態確認 systemctl status discord-bot
緑色の丸で active (running) と出ていれば成功です!
これでターミナルを閉じても、PCの電源を切っても、VPSが生きている限りボットは永遠に動き続けます。
5. 応用:定期実行スクリプト(Cron)
ボット以外にも、Pythonを使えば「毎朝8時にニュースをLINEに送る」といった自動化も可能です。
SystemdではなくCron(クーロン)を使います。
crontab -e
記述例:
# 毎日 朝8:00に weather.py を実行 0 8 * * * /opt/my-scripts/venv/bin/python /opt/my-scripts/weather.py
ここでも「仮想環境内のPythonフルパスを指定する」のが、エラーを防ぐコツです。
まとめ:VPSは「24時間働くロボット工場」
いかがでしたか?
Systemdを使うことで、あなたの作ったプログラムは「趣味の工作」から「実用的なサービス」へと進化しました。
感動です!
パソコンを閉じてもスマホから /ping したら返事が返ってきました!
エラーで止まっても Restart=always で勝手に生き返るなんて、ゾンビみたいで頼もしいです!
ふふ、良い例えね。
VPSはWebサイトを表示するだけでなく、こうやって裏方として働く「ボット」や「スクリプト」の住処としても最適なの。
どんどん自動化して、生活を便利にしていきましょう!
▼ボット運用に最適なVPS
Pythonのボットやスクリプトを動かすだけなら、それほど高いスペックは必要ありません。月額数百円のエントリープランでも十分に動作します。まずはここから自動化ライフを始めてみましょう。


コメント