بلاگ ابرفردوسی > آموزش سرور مجازی : آموزش دپلوی ربات تلگرام روی سرور

آموزش دپلوی ربات تلگرام روی سرور

دپلوی ربات تلگرام روی سرور

اگر بهترین ربات تلگرام را هم روی سیستم شخصی به‌راه انداخته باشیم، به‌محض اینکه لپ‌تاپ بسته یا اینترنت قطع می‌شود ربات هم از کار می‌افتد. این مشکلی است که فقط با دپلوی ربات تلگرام روی سرور حل می‌شود. عملیاتی که در آن کدها از محیط لوکال به یک سرور مجازی (VPS) همیشه روشن منتق‍ل می‌شوند تا ربات شما بتواند ۲۴ ساعته و بدون وقفه ازطریق Bot API تلگرام به درخواستِ کاربران پاسخ دهد. در واقع شما بااین‌کار، یک بک‌اند (Backend) مستقل و قدرتمند برای پردازش دستورات ربات خود می‌سازید.

در این مقاله، قرار است دست‌به‌کار شویم و صفر تا صد راه‌اندازی و میزبانی ربات تلگرام روی سرور لینوکس را (چه برای پروژه‌های پایتون و چه Node.js) بررسی کنیم. همچنین یاد می‌گیریم که برای اجرای دائمی ربات از چه ابزارهایی استفاده کنیم و مهم‌تر از همه، چطور چالش فیلترینگ و اتصال به API تلگرام را در سرورهای ایران با موفقیت دور بزنیم.

پیش‌نیازهای دپلوی ربات تلگرام روی سرور

دپلوی ربات تلگرام روی سرور

راه اندازی ربات تلگرام روی سرور نیاز به مصالحی دارد. فرقی نمی‌کند ربات را برای یک پروژه دانشجویی نیاز دارید یا یک دستیار هوشمند سازمانی؛ برای اینکه ربات شما بدون سکته و قطعی کار کند، موارد زیر پایه و اساس معماری شما خواهند بود:

  1. توکن ارتباطی (Bot Token):

همه‌چیز از BotFather در تلگرام شروع می‌شود. توکنی که این ربات پدر به شما می‌دهد (یک رشته متنی طولانی)، کلید ورود شما به Bot API تلگرام است. بدون این کلید، هیچ سروری نمی‌تواند خودش را به‌عنوان ربات شما جا بزند.

  1. زبان برنامه‌نویسی و محیط ایزوله:

باید مشخص کنید که پایه کدهای شما چیست. چه قصد دپلوی ربات تلگرام پایتون روی سرور را داشته باشید و چه بخواهید به‌سراغ نصب ربات تلگرام Node.js روی لینوکس بروید، ایزوله کردن محیط اجرا حیاتی است. مثلاً در پایتون، حتماً به ابزاری مثل venv نیاز داریم تا پکیج‌های ربات با سایر برنامه‌های سرور تداخل پیدا نکنند.

  1. سرور مجازی لینوکس (VPS) و دسترسی SSH:

مهم‌ترین پیش‌نیاز پروژه است. برای اجرای ربات تلگرام روی VPS به یک سرور لینوکسی (ترجیحاً توزیع‌های پایدار مثل Ubuntu یا Debian) نیاز دارید که بتوانید ازطریق پروتکل امن SSH به آن متصل شوید و کدهایتان را مدیریت کنید.

  1. دامنه و گواهینامه SSL (شرطِ وب‌هوک):

اگر می‌خواهید ربات‌تان را به شکل استاندارد و حرفه‌ای (متد Webhook) اجرا کنید، داشتن یک دامنه (Domain) و یک گواهینامه SSL معتبر (برای پروتکل HTTPS) از نان شب واجب‌تر است. تلگرام به دلایل امنیتی، اطلاعات کاربرانش را به سرورهای بدون HTTPS ارسال نمی‌کند.

⚠️ هشدار خیلی مهم
یکی از اشتباهات رایج در زمان نصب ربات تلگرام روی لینوکس، هاردکد کردن (Hardcode) توکنِ ربات مستقیماً داخل کدهای اصلی و سپس پوش (Push)کردن آن روی گیت‌هابِ عمومی است. همیشه توکن را در فایل‌های متغیر محلی مثل .env ذخیره کنید تا دسترسی‌های ربات خود را دو دستی تقدیم هکرها نکرده باشید!

انتخاب بهترین روش اجرا؛ Long Polling یا Webhook؟

تفاوت معماری Long Polling و Webhook در ربات تلگرام

حالا که پیش‌نیازها آماده شد، دقیقاً در دوراهی معماری ربات قرار می‌گیریم. در مستندات رسمی تلگرام (Bots FAQ)، دو روش استاندارد برای دریافت آپدیت‌ها و پیام‌های کاربران معرفی شده است. انتخاب بین این دو، مستقیماً به ابعاد پروژه و امکانات سرور شما بستگی دارد.

روش اول- Long Polling

در این متد، آموزش اجرای ربات تلگرام روی VPS به ساده‌ترین شکل ممکن پیش می‌رود. در Long Polling، سرور شما در یک حلقه بی‌نهایت و در بازه‌های زمانی کوتاه از سرورهای تلگرام می‌پرسد: آیا پیام جدیدی برای ربات من داری؟

  • مزایا: راه‌اندازی آن به‌شدت آسان است. نیازی به دامنه، IP ثابت یا تنظیمات پیچیده HTTPS ندارید. برای تست کدهای اولیه یا ربات‌هایی که ترافیک پایینی دارند بهترین انتخاب است.
  • معایب: ازآنجایی‌که سرور شما مدام درحال ریکوئست فرستادن است، مصرف منابع (CPU و پهنای باند شبکه) بالا می‌رود. همچنین ممکن است در پاسخ‌گویی به کاربر تأخیر چندثانیه‌ای احساس شود.

روش دوم- Webhook

اگر به‌دنبال آموزش میزبانی Telegram Bot به روش اصولی هستید، باید از وب‌هوک استفاده کنید. در این روش، نیازی نیست سرور شما مدام سوال بپرسد؛ بلکه شما یک آدرس URL امن (HTTPS) به تلگرام می‌دهید و می‌گویید: هر وقت پیام جدیدی آمد، خودت آن را به این آدرس بفرست.

  • مزایا: دریافت پیام‌ها در لحظه (Real-time) انجام می‌شود و مصرف منابع سرور به‌شدت کاهش پیدا می‌کند.
  • معایب: راه‌اندازی آن کمی چالش فنی دارد. حتماً به یک دامنه معتبر، گواهینامه SSL و تنظیمات درست وب‌سرور نیاز دارید.
💡 ترفند کاربردی
اگر قصد راه اندازی ربات تلگرام روی اوبونتو با متد Webhook را دارید، به هیچ‌وجه پورت‌های ربات (مثل 8443 یا 8080) را مستقیماً رو به اینترنت باز نگذارید. بهترین روش این است که ترافیک ورودی را ابتدا به یک وب‌سرور قدرتمند مثل Nginx بفرستید. انجین‌ایکس در اینجا نقش Reverse Proxy را بازی می‌کند؛ یعنی ترافیک HTTPS تلگرام را می‌گیرد، گواهینامه SSL را تایید می‌کند و سپس پیام را در یک بستر امن (Localhost) به کدهای پایتون یا Node.js شما تحویل می‌دهد.

تنظیمات آماده‌سازی سرور لینوکس

خرید سرور لینوکس تازه مثل تحویل گرفتن یک زمین خاکی است؛ قبل‌از اینکه بخواهید تجهیزات ربات را در آن مستقر کنید، باید بستر آن را بسازید. برای نصب ربات تلگرام روی لینوکس، معمولاً توزیع اوبونتو (Ubuntu) انتخاب اول توسعه‌دهندگان است. پس بیایید همین سرور را برای میزبانی آماده کنیم.

گام اول- آپدیت پکیج‌ها

اولین کاری که بعداز ورود به سرور (ازطریق SSH) باید انجام دهید، به‌روزرسانی لیست مخازن و پکیج‌های سیستم‌عامل است. این کار جلوی بسیاری از خطاهای عجیب‌وغریب در زمان نصب نرم‌افزارها را می‌گیرد:

sudo apt update && sudo apt upgrade -y

گام دوم- ساخت کاربر جدید

اجرای برنامه‌ها با دسترسی root یک خودکشی امنیتی است. اگر ربات شما هک شود یا باگی داشته باشد، هکر کل سرور شما را در دست می‌گیرد. پس یک کاربر عادی اما با دسترسی ادمین (sudo) می‌سازیم:

adduser botadmin
usermod -aG sudo botadmin
su - botadmin
⚠️ هشدار خیلی مهم
در تمام مسیر راه اندازی ربات تلگرام روی اوبونتو، عادت کنید که کدهای اجرایی ربات را در پوشه Home همین کاربر جدید (مثلاً /home/botadmin/) قرار دهید و هرگز فایل‌های پروژه را در دایرکتوری‌های سیستمی رها نکنید. /div>

گام سوم- نصب پیش‌نیازها و ساخت محیط ایزوله (venv)

حالا نوبت نصب ابزارهای اصلی است. ما به پایتون (یا Node.js)، گیت‌هاب (برای کلون کردن کدها) و ابزار مدیریت محیط مجازی نیاز داریم.

اگر پایه پروژه شما پایتون است، ساخت Virtual Environment (محیط مجازی) از واجبات است تا کتابخانه‌های ربات با سایر بخش‌های لینوکس تداخل پیدا نکنند:

sudo apt install python3 python3-venv python3-pip git -y
mkdir mytelegrambot && cd mytelegrambot
python3 -m venv venv

با اجرای دستور بالا، یک پوشه به نام venv ساخته می‌شود که یک نسخه کاملاً ایزوله و تمیز از پایتون را در دل خود دارد.

دپلوی ربات تلگرام پایتون روی سرور

حالا که زمین بازی آماده شد، نوبت به انتقال و اجرای کدها می‌رسد. پروسه دپلوی ربات تلگرام پایتون روی سرور چند مرحله مشخص دارد که اگر آن‌ها را به درستی طی نکنید، ربات شما با اولین قطعی ارتباط SSH خاموش خواهد شد!

۱. انتقال کدها و نصب وابستگی‌ها

برای آوردن کدها به سرور می‌توانید از git clone استفاده کنید یا فایل‌ها را ازطریق ابزارهایی مثل FileZilla (یا دستور scp) آپلود کنید. (اگر در این بخش با چالش روبرو هستید، پیشنهاد می‌کنم نگاهی به مقاله جامع ما درباره آموزش آپلود پروژه پایتون روی سرور ابری (Nginx، Flask و…) بیندازید).

بعداز انتقال فایل‌ها (به‌خصوص فایل حاوی کدهای ربات مثل bot.py و لیست پکیج‌ها یا همان requirements.txt)، محیط مجازی را فعال‌سازی و کتابخانه‌ها را نصب می‌کنیم:

source venv/bin/activate
pip install -r requirements.txt

۲. اجرای دائمی ربات با Systemd

در این مرحله اگر دستور python bot.py را بزنید، ربات کار می‌کند و پیغام Online می‌دهد. اما به‌محض اینکه ترمینال لینوکس را ببندید، پردازه‌ی ربات (SIGHUP) از بین می‌رود و ربات خاموش می‌شود.

برای اجرای دائمی ربات تلگرام روی سرور، نباید به بازماندن ترمینال وابسته باشیم. در لینوکس، قدرتمندترین ابزار برای فعال نگه‌داشتن و اجرای پس‌زمینه برنامه‌ها systemd است (برای پروژه‌های Node.js معمولاً از ابزار سبک‌تری مثل PM2 استفاده می‌شود، اما systemd به‌عنوان دی‌فالت لینوکس، باثبات‌ترین گزینه است).

کافی است با دستور زیر، یک سرویس برای ربات خود بسازیم تا مدیریت آن (اجرا و راه‌اندازی خودکارِ مجدد درصورت کرش کردن) به هسته لینوکس سپرده شود:

sudo nano /etc/systemd/system/telegrambot.service

و این ساختار را در آن تنظیم کنیم (حتماً مسیرها را با توجه به سرور خود شخصی‌سازی کنید):

[Unit]
Description=My Python Telegram Bot
After=network.target

[Service]
User=botadmin
WorkingDirectory=/home/botadmin/mytelegrambot
ExecStart=/home/botadmin/mytelegrambot/venv/bin/python /home/botadmin/mytelegrambot/bot.py
Restart=always

[Install]
WantedBy=multi-user.target
💡 ترفند کاربردی
در ساختار systemd بالا به خط ExecStart دقت کنید. یکی از رایج‌ترین باگ‌ها در اجرا و میزبانی ربات تلگرام روی VPS این است که کاربران فقط می‌نویسند python bot.py. در سیستم‌دی شما باید آدرس‌دهی مستقیم و کامل (Absolute Path) داشته باشید و دقیقاً به لینوکس بگویید که از مفسر پایتون داخل محیط مجازیِ venv استفاده کند نه پایتون پیش‌فرض سرور!

حالا با این سه دستور ساده، ربات را برای همیشه روشن کنید تا با هربار راه‌اندازی مجدد سرور نیز به‌صورت خودکار بالا بیاید:

sudo systemctl daemon-reload
sudo systemctl start telegrambot
sudo systemctl enable telegrambot

دپلوی ربات Node.js روی لینوکس

اگر از عاشقان جاوا اسکریپت هستید و می‌خواهید پروسه دپلوی ربات تلگرام روی سرور را با Node.js پیش ببرید، مسیر شما کمی متفاوت اما بسیار سرراست است. اکوسیستم Node به‌دلیل ساختار Non-blocking (غیرمسدودکننده) ذاتی خود، برای هندل کردن ریکوئست‌های همزمانِ تلگرام فوق‌العاده عمل می‌کند.

نصب Node.js و npm

ابتدا باید موتور محرک کدهایمان را روی سرور نصب کنیم. برای نصب ربات تلگرام Node.js روی لینوکس، پیشنهاد می‌کنم همیشه از نسخه‌های پایدار (LTS) استفاده کنید تا درگیر باگ‌های عجیب نشوید:

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

راه‌اندازی پروژه و نصب پکیج‌های تلگرام

مانند پایتون، در اینجا هم بهتر است یک پوشه مجزا برای ربات بسازیم و پکیج‌های استانداردی مثل telegraf یا node-telegram-bot-api را نصب کنیم:

mkdir mynodebot && cd mynodebot
npm init -y
npm install telegraf

اجرای سرویس دائمی (PM2 یا Systemd؟)

توسعه‌دهندگان وب معمولاً برای سرِپا نگه‌داشتن پروژه‌های Node.js از ابزار محبوبی به نام PM2 استفاده می‌کنند. نصب و اجرای آن با دستور pm2 start bot.js به‌سادگی انجام می‌شود. اما از نگاه یک مدیر زیرساخت، برای میزبانی Telegram Bot در محیط‌های پروداکشن واقعی، استفاده از ابزار بومیِ لینوکس یعنی systemd (که در بخش قبل بررسی کردیم) بسیار پایدارتر است. systemd مستقیماً با هسته سیستم‌عامل در ارتباط است و در زمان ریبوت شدن سرور، با اطمینان بسیار بالاتری سرویس شما را بالا می‌آورد.

اجرای دائمی ربات تلگرام روی سرور

شاید بپرسید چرا این‌قدر روی عبارت اجرای دائمی ربات تلگرام روی سرور پافشاری می‌کنیم؟ واقعیت این است که در محیط سرور، اتفاقات غیرمنتظره‌ای مثل کمبود موقت رم (OOM Killer)، آپدیت‌های سیستمی یا حتی یک باگ کوچک در کدهای شما می‌تواند باعث کرش ربات شود. رباتِ خاموش، یعنی ریزش کاربر و از دست رفتن اعتماد!

سیستم‌دی (Systemd) و قدرت Auto-Restart

همان‌طورکه پیش‌تر فایل سرویس systemd را ساختیم، قدرت اصلی این ابزار در دو خطِ پیکربندی زیر است:

Restart=always
RestartSec=10

این دستورات به لینوکس می‌گویند: اگر پردازه‌ی ربات به‌هردلیلی کشته شد، فقط ۱۰ ثانیه صبر کن و مجدداً آن را راه‌اندازی کن. این یعنی شما در خواب هستید، اما سرور به‌صورت خودکار ربات شما را احیا می‌کند!

(اگر پروژه شما پایتونی است و می‌خواهید تمام ریزه‌کاری‌های زنده نگه‌داشتن اسکریپت‌ها را به‌صورت کاملاً تخصصی و عملی یاد بگیرید، پیشنهاد می‌کنم حتماً مقاله اجرای دائمی ربات پایتون را در وبلاگ ابر فردوسی مطالعه کنید.

لاگ‌گیری و بررسی خطاها

وقتی ربات را به‌صورت سرویسِ پس‌زمینه اجرا می‌کنید، دیگر خروجی‌ها و ارورها (مثل خطاهای سینتکس یا قطعی ارتباط با API تلگرام) روی صفحه ترمینال شما چاپ نمی‌شوند. در اینجا ابزار journalctl حکم جعبه سیاه را برای شما بازی می‌کند. برای اینکه بفهمید در مغزِ ربات چه می‌گذرد و خطاهای احتمالی را دیباگ کنید، کافی‌ست دستور زیر را وارد کنید:

sudo journalctl -u telegrambot.service -f
💡 ترفند کاربردی
سوئیچ -f (مخفف Follow) در دستور بالا یک ترفند فوق‌العاده است. این سوئیچ باعث می‌شود لاگ‌ها به‌صورت زنده و لحظه‌ای (Real-time) روی مانیتور شما رِندر شوند؛ دقیقاً شبیه به دستگاه نوار قلب! برای خروج از این حالت هم کافی‌ست کلیدهای Ctrl + C را فشار دهید.

تنظیم Webhook و HTTPS برای ترافیک بالا

اگر تا اینجای دپلوی ربات تلگرام روی سرور پیش آمده‌اید و قصد دارید ربات خود را برای هزاران کاربر یا یک سرویس سازمانی ارائه دهید، باید با متد Long Polling خداحافظی کنید. در روش Webhook، سرور شما درحالت آماده‌باش (Listen) قرار می‌گیرد و تلگرام پیام‌ها را مستقیماً به‌سمت سرور شما شلیک می‌کند.

اما تلگرام یک شرط سفت‌وسخت دارد: اطلاعات کاربران فقط به آدرس‌های رمزنگاری‌شده (HTTPS) ارسال می‌شود. برای راه‌اندازی این ساختار، گام‌های زیر را در سرور لینوکسی خود طی کنید:

گام اول- اتصال دامنه و دریافت SSL رایگان

ابتدا باید یک دامنه (یا ساب‌دامین مثل bot.yourdomain.com) را در پنل DNS خود به IP سرورتان متصل کنید. سپس با استفاده از ابزار Certbot، یک گواهینامه امنیتی رایگان (Let’s Encrypt) برای آن بگیرید:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d bot.domain.com

اگر با مشکل فیلترینگ یا تحریم روبرو شدید، چاره‌ای ندارید که از DNS استفاده کنید. در این روش، سرور Let’s Encrypt برای تأیید مالکیت، نیازی به لمس مستقیم آی‌پی سرور ایرانی شما ندارد؛ بلکه صحت یک رکورد متنی (TXT Record) را روی لایه مدیریت DNS دامنه شما بررسی می‌کند:

sudo certbot certonly --manual --preferred-challenges dns -d domain.com

گام دوم- انجین‌ایکس (Nginx) در نقش Reverse Proxy

به‌جای اینکه کدهای پایتون یا Node.js شما مستقیماً با اینترنت درگیر شوند، Nginx را جلوی آن‌ها قرار می‌دهیم. انجین‌ایکس ترافیک امن را از تلگرام دریافت می‌کند و آن را به پورت داخلی ربات (مثلاً پورت 3000) پاس می‌دهد.

یک فایل کانفیگ در مسیر /etc/nginx/sites-available/telegrambot بسازید و کدهای زیر را در آن قرار دهید:

server {
    listen 443 ssl;
    server_name bot.yourdomain.com;

    # مسیر گواهینامه‌های SSL که توسط Certbot ساخته شده‌اند
    ssl_certificate /etc/letsencrypt/live/bot.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bot.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000; # پورتی که کدهای ربات شما روی آن در حال اجراست
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

پس‌از ذخیره، با دستور sudo systemctl reload nginx تنظیمات را اعمال کنید.

گام سوم- معرفی Webhook به تلگرام

حالا که سرور شما با یک آدرس امن آماده دریافت پیام است، باید این آدرس را به تلگرام معرفی کنید. کافی‌ست در مرورگر خود (یا ازطریق ترمینال با دستور curl) لینک زیر را فراخوانی کنید:

https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=https://bot.domain.com
💡 ترفند کاربردی
یکی از ترفندهای مهم برای زمان دپلوی ربات تلگرام روی سرور با متد Webhook، پنهان کردن آدرس دریافتی است. اگر آدرس وب‌هوک شما صرفاً yourdomain.com باشد، هرکسی می‌تواند درخواست‌های جعلی به سرور شما بفرستد. همیشه از یک مسیرِ تصادفی و مخفی (مثلاً توکن ربات) استفاده کنید:
https://bot.domain.com/my_secret_path_or_token

ملاحظات ایران و چالش فیلترینگ

تا این مرحله، پروسه فنیِ دپلوی ربات تلگرام به پایان رسید؛ اما اگر سرور شما داخل ایران باشد، تازه اول دردسر است! همان‌طورکه می‌دانید دسترسی به سرورهای تلگرام در ایران با محدودیت‌های شدیدی روبه‌رو است. این یعنی سرور لینوکسِ شما که در دیتاسنترهای داخلی میزبانی می‌شود، به‌طور پیش‌فرض نمی‌تواند با api.telegram.org ارتباط برقرار کند. نتیجه؟ ربات شما پیام‌های کاربران را دریافت می‌کند (ازطریق Webhook)، اما نمی‌تواند پاسخی برای آن‌ها بفرستد!

راهکارهای پایداری ارتباط و دسترسی بدون وقفه

برای اینکه زحمات شما برای راه اندازی ربات تلگرام روی سرور هدر نرود و ربات درگیر خطای Connection Timeout نشود، باید زیرساخت شبکه را برای ارتباط مداوم آماده کنید:

  1. تنظیم پراکسی در سطح کد (Application Level): در فریم‌ورک‌های پایتونی یا جاوا اسکریپتی، می‌توانید متغیرهای محیطیِ پراکسی (مثل HTTPS_PROXY) را مستقیماً داخل کدهای ربات ست کنید تا ریکوئست‌ها ازطریق یک تونل امن به تلگرام برسند.
  2. تونلینگ در سطح سرور (OS Level): نصب ابزارهایی مانند V2ray، Xray یا حتی Tor روی سرور داخلی و هدایت ترافیک خروجیِ سرور ازطریق آن‌ها، پایداری فوق‌العاده‌ای به ارتباط شما با تلگرام می‌بخشد.
  3. استفاده از سرورهای واسط (Relay Server): می‌توانید یک سرور بسیار ارزان‌قیمت و سبک در خارج از کشور تهیه کنید و ترافیک رباتِ سرور داخلی خود را به آن پاس دهید.
⚠️ هشدار خیلی مهم
هرگز برای اجرای ربات تلگرام روی VPS از VPNهای رایگان و ناپایدار لینوکسی استفاده نکنید. این ابزارها مرتباً IP سرور شما را تغییر می‌دهند یا قطع می‌شوند که باعث افت شدیدِ سرعتِ پاسخ‌گویی ربات و ایجاد اختلال در وب‌هوک خواهد شد. IP شما در ارتباط با سرورهای تلگرام باید ثابت و قابل‌اعتماد باشد.

انتخاب بهترین سرور برای ربات تلگرام

اگر سرور شما ناپایدار باشد، حتی تمیزترین کدهای پایتون و Node.js هم زیر بار ترافیکِ کاربران کم می‌آورند. اما بهترین سرور برای ربات تلگرام چه ویژگی‌هایی دارد؟

حداقل منابع سخت‌افزاری لازم

ربات‌های تلگرامی (به‌جز ربات‌هایی که پردازش هوش مصنوعی یا رندر ویدیو انجام می‌دهند) معمولاً پردازه‌های بسیار سبکی هستند. برای اجرای ربات تلگرام روی VPS در سطح ساده تا متوسط، یک سرور با ۱ هسته CPU و ۱ تا ۲ گیگابایت RAM کاملاً پاسخ‌گوی نیاز شما است. آنچه در اینجا اهمیت دارد، قدرت خالص پردازنده (CPU Cache) و سرعت خواندن/نوشتن دیسک است و ربطی به اعداد نجومیِ رَم ندارد!

پایداری شبکه

در میزبانی ربات تلگرام، این سه فاکتور شبکه‌ای بسیار ضروری هستند:

  1. آپتایم (Uptime) بالا: رباتی که قطعی داشته باشد، کاربر خود را از دست می‌دهد.
  2. تأخیر (Latency) پایین: سرور شما باید بتواند با کمترین پینگ ممکن با api.telegram.org صحبت کند.
  3. آی‌پی (IP) ثابت و معتبر: سرورهای تلگرام روی تغییرات مداوم IP حساس هستند و ممکن است درخواست‌های وب‌هوک شما را مسدود کنند.
  4. دسترسی کامل (Root/SSH): برای کانفیگ Nginx، نصب کتابخانه‌ها و تنظیم پراکسی‌ها، شما به کنترل صددرصدی روی سیستم‌عامل نیاز دارید (چیزی که در هاست‌های اشتراکی وجود ندارد).

VPS، سرور اختصاصی یا سرور ابری؟

سرورهای اختصاصی برای یک ربات ساده هزینه‌ای غیرمنطقی دارند. سرورهای مجازی سنتی (VPS) گزینه‌های خوبی هستند، اما اگر ربات شما ناگهان وایرال (Viral) شود و ترافیک بالایی بگیرد، ارتقای منابع در VPS سنتی زمان‌بر است. اما اینجا سرور ابری (Cloud Server) به‌دلیل ایزوله بودن منابع و قابلیت مقیاس‌پذیری آنی، منطقی‌ترین انتخاب است.

میزبانی ربات‌ها در ابر فردوسی از تست تا پروداکشن

اگر به‌دنبال زیرساختی هستید که چالش‌های تحریم، فیلترینگ و کندی سرعت را برای اجرای ربات‌ها به‌حداقل برساند، سرور ابری ابر فردوسی زیرساخت خود را برای همین نیازها بهینه کرده است:

چالش توسعه‌دهنده رباتراهکار تخصصی ابر فردوسی
نیاز به پردازش سریع ریکوئست‌هااستفاده از سرورهای پرچمدار HPE نسل جدید، پردازنده‌های قدرتمند Intel/AMD و هاردهای فوق‌سریع NVMe
هزینه‌های بالای تست کدهای اولیهپرداخت ساعتی: فقط به‌اندازه ساعاتی که سرور روشن است هزینه می‌دهید!
نصب پیش‌نیازها و محیط اجرابازارچه ابری: نصب ابزارهایی مثل داکر (Docker)، انجین‌ایکس و فریم‌ورک‌ها تنها با یک کلیک
پایداری ارتباط و پینگ پایینمیزبانی در قدرتمندترین دیتاسنترهای ایران (برج میلاد، دانشگاه فردوسی)

برای اینکه کیفیت شبکه، سرعت دیسک و پایداری ارتباط با تلگرام را خودتان شخصاً تست کنید، ابر فردوسی ۱۰۰ هزار تومان اعتبار رایگان برای کاربران جدید درنظر گرفته است. با این اعتبار می‌توانید همین حالا یک سرور ابری بسازید، ربات خود را دپلوی کنید و اگر همه‌چیز عالی بود، میزبانی خود را دائمی کنید.

سرور ابری

جمع‌بندی

در این مقاله مسیر تاریک و گاهی پر از باگِ دپلوی ربات تلگرام روی سرور را قدم‌به‌قدم روشن کردیم. یاد گرفتیم که چطور کدهای پایتون یا Node.js خود را در محیط لینوکس ایزوله کنیم، تفاوت Long Polling و Webhook را بررسی کردیم و مهم‌تر از همه، دیدیم که با استفاده از ابزارهایی مثل systemd و Nginx، چطور می‌توان یک ربات را برای همیشه در پس‌زمینه بیدار نگه داشت. حل چالش شبکه در سرورهای ایران هم آخرین قطعه از این پازل بود.

حالا شما برای ما بنویسید که آیا تجربه دیپلوی ربات روی سرورهای لینوکسی را داشته‌اید؟ برای دور زدن چالش قطع ارتباط با API تلگرام روی سرورهای داخلی، از چه ابزارها یا ترفندهایی استفاده می‌کنید؟

منابع:
core.telegram | docs.python | docs.nginx | nginx | docs.redhat | rsf | reuters

سؤالات متداول

آیا می‌توان ربات تلگرام را روی هاست اشتراکی اجرا کرد؟

به‌صورت استاندارد خیر. هاست‌های اشتراکی معمولاً دسترسی روت (SSH) به شما نمی‌دهند، اجازه اجرای پردازه‌های پس‌زمینه و دائمی (برای متد Polling) را مسدود می‌کنند و در روش Webhook هم برای کانفیگ پورت‌های دلخواه محدودیت‌های شدیدی دارند. سرور مجازی (VPS) یا سرور ابری تنها زیرساخت اصولی است.

تفاوت اجرای ربات با متد Polling و Webhook در چیست؟

در روش Polling، سرور شما در یک حلقه تکرارشونده مدام از تلگرام می‌پرسد آیا پیام جدیدی هست؟ (مصرف منابع بالا، نصب آسان). اما در Webhook، سرور شما هیچ کاری نمی‌کند تا زمانی که تلگرام پیام‌ها را مستقیماً برایش شلیک کند (مصرف منابع صفر در حالت بیکاری، اما نیازمند دامنه و SSL).

آیا برای دیپلوی ربات تلگرام حتماً به دامنه (Domain) نیاز داریم؟

فقط درصورتی‌که بخواهید از معماری Webhook استفاده کنید به دامنه و گواهینامه SSL معتبر (HTTPS) نیاز دارید. اگر ربات را با روش Long Polling اجرا می‌کنید، کدهای شما فقط با داشتن IP سرور و دسترسی به اینترنت به‌خوبی کار می‌کنند.

چطور ربات تلگرام را ۲۴ ساعته روشن نگه داریم؟

هرگز کدهای ربات را با یک دستور ساده در ترمینال و باز گذاشتن پنجره آن اجرا نکنید! در محیط لینوکس باید کدهای خود را به یک سرویس (Service) تبدیل کنید. با ساخت یک فایل در systemd (یا استفاده از PM2 برای Node.js)، مدیریت اجرای ربات را به هسته سیستم‌عامل می‌سپارید تا حتی درصورت کرش کردن نیز به‌طور خودکار ری‌استارت شود.

برای میزبانی ربات تلگرام چه مقدار RAM و CPU کافی است؟

ربات‌های تلگرامی ذاتاً پردازه‌های بسیار سبکی هستند. یک سرور ابری با ۱ هسته CPU و ۱ تا ۲ گیگابایت RAM برای هندل کردن هزاران درخواست در روز کاملاً پاسخگو است؛ مگر اینکه ربات شما درگیر پردازش‌های سنگینی مثل تبدیل ویدیو یا اجرای مدل‌های لوکالِ هوش مصنوعی باشد.

آیا می‌توان چند ربات مختلف را روی یک سرور اجرا کرد؟

بله، به‌راحتی! شما محدودیت تعدادی ندارید. فقط کافی است برای جلوگیری از تداخل کتابخانه‌ها، کدهای هر ربات را در یک پوشه مجزا قرار داده و برای هرکدام یک محیط ایزوله (venv در پایتون) بسازید. درصورت استفاده از Webhook، مطمئن شوید که ترافیک هر ربات توسط Nginx به پورتِ داخلیِ اختصاصیِ همان ربات هدایت می‌شود.

برای ربات تلگرام از systemd استفاده کنیم یا screen و tmux؟

قطعاً systemd (یا مدیریت‌کننده‌هایی مثل PM2). ابزارهایی مثل screen و tmux صرفاً برای باز نگه‌داشتن موقتِ ترمینال و دیباگ کردنِ دستی کدها عالی هستند؛ اما اگر سرور شما ریستارت شود یا پردازه‌ی ربات به‌دلیل کمبود رم کرش کند، screen هم از بین می‌رود و ربات خاموش می‌ماند. برای یک محیط پروداکشن واقعی که نیاز به پایداری و Auto-Restart دارد، باید کدهای خود را به سرویسِ سیستمی تبدیل کنید.

چطور امنیت ربات تلگرام روی سرور را بالا ببریم؟

برای جلوگیری از هک شدن سرور و لو رفتن دسترسی‌های ربات، این ۳ قانون طلایی زیرساخت را رعایت کنید:
اجرا با کاربر محدود: هرگز ربات را با کاربر root اجرا نکنید. یک کاربر لینوکسی استاندارد (مثلاً botadmin) بسازید تا اگر کدهای ربات آسیب‌پذیری داشتند، کل سرور به خطر نیفتد.
ایزوله کردن توکن: توکنی که از BotFather گرفته‌اید را مستقیماً داخل فایل‌های کد ننویسید (هاردکد نکنید)؛ آن را در یک فایل متغیر (مثل env) ذخیره کنید تا درصورت آپلود کدها روی گیت‌هاب، توکن شما لو نرود.
مسیر مخفی در وب‌هوک: اگر از Webhook استفاده می‌کنید، URL دریافت پیام‌ها را ساده (مثل domain.com/bot) تنظیم نکنید. بهترین راهکار این است که توکن ربات را به‌عنوان مسیر قرار دهید (domain.com/Token) تا هکرها نتوانند با ریکوئست‌های جعلی، دیتابیس ربات شما را پر کنند.

یاسین اسدی

اگه می‌خوای زندگیت تغیر کنه کتاب نخون؛ نوشته‌های منو بخون!
پست های مرتبط

بستن آی پی کشورهای خارجی در لینوکس

احتمالاً همین الان که درحال خواندن این خطوط هستید، لاگ‌های سرور شما پر از تلاش‌های ناموفق ورود به SSH از سمت IPهای ناشناس است. واقعیت این است که تنها چند دقیقه بعداز متصل شدن یک سرور لینوکسی…

۲۴ مرداد ۱۴۰۵

خطای اتصال مودل به دیتابیس Moodle Database Error

هیچ‌چیز برای یک مدیر سیستم یا مدرس مأیوس‌کننده‌تر از این نیست که دقیقاً در بحبوحه برگزاری امتحانات یا کلاس‌های آنلاین، سایت آموزش مجازی از دسترس خارج شود. مواجه شدن با خطای اتصال مودل به دیتابیس یا همان…

۲۴ مرداد ۱۴۰۵

علت قطع و وصل شدن کلاس آنلاین چیست؟

خیلی وقت‌ها وقتی وسط یک ارائه مهم یا امتحان آنلاین، سیستم دچار تأخیر صدا و تصویر می‌شود یا با خارج شدن ناگهانی از کلاس مواجه می‌شوید، اولین متهم همیشه سرعت اینترنت است. اما واقعیات فنی نشان می‌دهد…

۲۴ مرداد ۱۴۰۵
0 0 رای ها
به مقاله امتیاز بدید
0 نظرات