−25%

Windows 年払い、10月31日まで。 プランを見る

EQVPS
始める

VPSでTelegramボットをホストする方法(そして動かし続ける)

2026年6月15日 · 1 分で読める · EQVPS Team

ノートPCが開いている間だけ動くTelegramボットは、本当に動いているわけではありません — デモをしているのです。実際にオンラインで、午前3時に答え、あなたの再起動と自分のクラッシュを生き延びるには、サーバー上に住む必要があります。ここに全行程が、最初から最後まで、コマンドとともにあります。

まず良い知らせ:ボットは小さなワークロードです。大半、メッセージを待ってアイドルで座っているので、最も安い箱で問題なく動きます — 専用IPも、ドメインも、凝ったものもなし。

1. BotFatherからトークンを取得

Telegramで @BotFather にメッセージを送り、/newbot を送り、名前とユーザー名を選びます。12345:AAH... のようなトークンが渡されます。パスワードのように扱いましょう — それを持つ者が誰でもあなたのボットを操れます。

2. 最小限のボット

サーバーにSSHで入り、Pythonとライブラリをセットアップ:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot

返信するボット — ~/mybot/bot.py:

import os
from telegram.ext import ApplicationBuilder, CommandHandler

async def start(update, ctx):
    await update.message.reply_text("Alive and on a server. 🟢")

app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

トークンを環境変数から読んでいる点に注意 — ハードコードではありません。それが次のステップで重要です。

3. 実際に動かし続ける部分:systemd

ただ python bot.py を動かすと、SSHを閉じた瞬間に死にます。systemdサービスこそが、ログアウト、クラッシュ、再起動を生き延びさせるものです。/etc/systemd/system/mybot.service を作成:

[Unit]
Description=Telegram bot
After=network-online.target

[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser

[Install]
WantedBy=multi-user.target

そして:

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot      # active (running) と言うはず
journalctl -u mybot -f           # ライブログ

Restart=always が実作業をする行 — クラッシュしても5秒で戻ります。enable は再起動後に立ち上がることを意味します。それが「一度ボットを動かした」と「私のボットは上がっている」の全部の違いです。

4. なぜドメインも開放ポートも要らないのか

ボットはロングポーリングを使います — 更新を求めてTelegramへ手を伸ばすので、何も中へ届く必要はありません。公開URLも、インバウンドのファイアウォール規則も、専用IPもなし。だからこそNAT VPS(共有IP、ポート上のSSH)がボットには良く安い住処なのです。webhookは非常に大量向けにありますが、始めるにはまず必要ありません。

正直な注意点

  • トークンの衛生: ここでは明快さのためユニットファイルにインライン — 締めた箱では問題ないですが、共有される何かには、代わりにroot専用の EnvironmentFile から読み込み、決してgitにコミットしないこと。漏れた?BotFatherで失効させ、新しいのを発行。
  • 重いボット: ボットが自分で仕事をするなら(画像生成、ローカルモデル)、もう小さくありません — それに応じてサイズアップを。

それだけです。まずセキュリティチェックリストで箱を締め、サービスを置けば、あなたがいようといまいとボットはオンラインのまま。暗号決済のVPSなら、決めた1分後には動かせます。

FAQ

TelegramボットにどのVPSが要りますか?

最小のものです。Telegramボットは大半アイドルで、更新を待っているので、1 GB RAMと2コアがほとんどのボットに十分 — かなり忙しいものでも。もっと必要なのはボットが自分で重い仕事をするときだけ(画像処理、ローカルモデル、大きなデータベース)。

SSHを閉じた後、Telegramボットをどう動かし続けますか?

systemdサービスとして動かします。ターミナルで起動するのと違い、systemdはログアウト後も生かし、クラッシュしたら再起動し、再起動後にまた立ち上げます。それがおもちゃと、上がったままのものとの違いです。

切断するとなぜボットが止まるのですか?

SSHセッションで起動したので、そのセッションが終わると死ぬからです。systemdサービス(または手早いテストにはtmux)で包めば、ログインとは無関係に動きます。

Telegramボットにドメインやwebhookは必要ですか?

いいえ。ロングポーリング(getUpdates)は公開URLも、ドメインも、インバウンドポートも要りません — ボットがTelegramへ手を伸ばします。だから専用IPのないNAT VPSがボットには完璧に問題ないのです。webhookは大量向けの任意の最適化です。

ボットのトークンをVPSに置くのは安全ですか?

はい、パスワードのように扱えば:環境変数か、ボットのユーザーだけが読めるファイルに保管し、決してgitにコミットせず、SSH鍵でサーバーを締めます。トークンが漏れたら、BotFatherで失効させ、新しいのを発行します。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。