رباتی که فقط تا وقتی لپتاپتان باز است اجرا میشود در واقع در حال کار نیست — فقط دارد نمایش میدهد. برای اینکه واقعاً آنلاین باشد، ساعت ۳ بامداد پاسخ بدهد و از ریبوتهای شما و کرشهای خودش جان سالم به در ببرد، باید روی یک سرور زندگی کند. اینجا کل مسیر را از ابتدا تا انتها، همراه با دستورها، مرور میکنیم.
اول خبر خوب: یک ربات بار کاری بسیار کوچکی است. بیشتر وقتها بیکار میماند و منتظر پیام است، پس ارزانترین سرور هم بهراحتی از پس آن برمیآید — نه IP اختصاصی، نه دامنه، هیچ چیز خاصی.
۱. گرفتن توکن از BotFather
در تلگرام به @BotFather پیام بدهید، /newbot بفرستید و یک نام و نامکاربری انتخاب کنید. توکنی به شما میدهد که شبیه 12345:AAH... است. با آن مثل یک رمز عبور رفتار کنید — هرکس آن را داشته باشد ربات شما را کنترل میکند.
۲. یک ربات کوچک
با SSH به سرور وصل شوید و پایتون و کتابخانه را نصب کنید:
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()
توجه کنید که توکن را از یک متغیر محیطی میخواند — نه به صورت هاردکد. این در مرحله بعد اهمیت پیدا میکند.
۳. بخشی که واقعاً آن را فعال نگه میدارد: 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 خطی است که کار اصلی را انجام میدهد — کرش میکند و ظرف ۵ ثانیه برمیگردد. enable یعنی بعد از ریبوت هم بالا میآید. همین کل تفاوت میان «یک بار رباتی را اجرا کردم» و «ربات من بالاست» است.
۴. چرا نه دامنه و نه پورت باز
ربات از long polling استفاده میکند — خودش برای گرفتن بهروزرسانیها به سمت تلگرام دست دراز میکند، پس هیچ چیزی لازم نیست به داخل برسد. نه URL عمومی، نه قانون فایروال ورودی، نه IP اختصاصی. دقیقاً به همین دلیل است که یک VPS با NAT (IP مشترک، SSH روی یک پورت) خانهای مناسب و ارزان برای یک ربات است. webhookها برای حجم بسیار بالا وجود دارند، اما تقریباً مطمئناً برای شروع به آنها نیازی ندارید.
هشدارهای صادقانه
- بهداشت توکن: اینجا برای وضوح، توکن مستقیم در فایل unit آمده — روی یک سرور محکمشده اشکالی ندارد، اما برای هر چیزی که مشترک است، آن را از یک
EnvironmentFileکه فقط root میخواند بارگذاری کنید و هرگز در git کامیتش نکنید. لو رفت؟ در BotFather باطلش کنید و یکی جدید بگیرید. - رباتهای سنگین: اگر رباتتان خودش کار را انجام میدهد (تولید تصویر، یک مدل محلی)، دیگر کوچک نیست — منابع را متناسب افزایش دهید.
همین. اول سرور را با چکلیست امنیتی محکم کنید، سرویس را جا بیندازید، و رباتتان چه شما آنلاین باشید چه نباشید آنلاین میماند. روی یک VPS که با رمزارز پرداخت شده، میتوانید یک دقیقه پس از تصمیمگیری آن را در حال اجرا داشته باشید.
نظرات
هنوز نظری نیست. اولین نفر باشید.