سرور مجازی برای ربات تلگرام؛ استقرار، امنیت و مقیاس – داماش

سرور مجازی برای ربات تلگرام؛ سروری که بات ۲۴/۷ بیدار است

فهرست مطالب

سرور مجازی برای ربات تلگرام – استقرار ۲۴/۷

ربات تلگرام فقط زمانی کار می‌کند که یک برنامه‌ی دائماً در حال اجرا، پشتش بیدار باشد. این جمله ساده، یعنی انتخاب بین «سرور مجازی برای ربات تلگرام» و راه‌حل‌های مقطعی، همان انتخابی است که جان بات شما را می‌گیرد یا می‌دهد. اگر هاست اشتراکیای که باتتان روی آن است هر شب ساعت ۱۲:۰۰ همه‌چیز را kill کند، یا آی‌پی سرور شما در لیست‌سیاه افتاده باشد، بات همان‌جا می‌میرد که هیچ‌کس خبر ندارد.

در این راهنما از معماری روز اول تا مقیاس‌پذیری یک بات با هزاران کاربر جلو می‌رویم: چند رم واقعاً لازم است، webhook با long polling چه فرقی دارد، توکن BotFather را چطور مثل کلید خانه نگه داریم، و چطور با systemd کاری کنیم که بات حتی بعد از ری‌استارت سرور خودش بلند شود. اگر هنوز سرور نگرفته‌اید، راهنمای کامل سرور مجازی و راهنمای ۷ گامی خرید را پیش از این مقاله بخوانید.

سرور مجازی برای ربات تلگرام – زیرساخت بات داماش

چرا ربات تلگرام اصلاً به سرور نیاز دارد؟

تلگرام دو مدل کار با بات‌ها دارد و هر دو مدل یک پیش‌نیاز قطعی دارد: یک برنامه‌ی همیشه در حال اجرا روی یک ماشین همیشه روشن. در مدل اول (Long Polling)، برنامه‌ی شما هر چند ثانیه از سرورهای تلگرام می‌پرسد «پیام جدیدی هست؟» و در مدل دوم (Webhook)، تلگرام خودش پیام‌ها را به آدرس HTTPS شما می‌فرستد. هیچ‌کدام از این دو روی گوشی شما یا یک سیستم خانگی که شب‌ها خاموش می‌شود کار نمی‌کند.

سرور مجازی اینجاست که مشکل حل می‌شود: یک ماشین مجازی با آی‌پی ثابت، آپتایم ۲۴ ساعته و دسترسی کامل root. شما تصمیم می‌گیرید چه نسخه‌ی پایتون یا Node.js نصب شود، چه پورتی باز باشد، بات کدام ساعت آپدیت شود و لاگ‌ها کجا نگه‌داری شوند. این سطح کنترل روی هیچ هاست اشتراکی به شما داده نمی‌شود.

Long Polling یا Webhook؟ انتخاب مسیر درست

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

معیار Long Polling Webhook
نحوه‌ی دریافت پیام سرور شما هر ۲-۵ ثانیه درخواست می‌فرستد تلگرام به محض پیام، درخواست می‌فرستد
نیاز به HTTPS خیر بله، با گواهی معتبر
مصرف CPU مداوم (هر چند ثانیه) فقط هنگام پیام
تاخیر تا چند ثانیه چند صد میلی‌ثانیه
مناسب برای بات کوچک، توسعه و تست بات پرترافیک و پروداکشن

قانون تجربی: در توسعه و تست با long polling شروع کنید (نصب سریع‌تر، دردسر SSL ندارد)، و وقتی بات پروداکشن شد و حجم پیام بالا رفت، به webhook مهاجرت کنید. webhook فقط روی پورت‌های ۴۴۳، ۸۰، ۸۸ و ۸۴۳۳ کار می‌کند — این محدودیت سمت تلگرام است، نه سرور شما.

حداقل سخت‌افزار برای ربات تلگرام چقدر است؟

ربات تلگرام برخلاف تصور رایج، منابع سنگین نمی‌خواهد. خود ران‌تایم پایتون یا Node.js در حالت idle حدود ۵۰ تا ۱۲۰ مگابایت رم کار می‌کند و تلگرام پیام‌ها را سبک نگه می‌دارد. گلوگاه واقعی پایگاه‌داده، تعداد کاربران همزمان و کارهایی است که بات برایشان انجام می‌دهد (دانلود فایل، پردازش تصویر، فراخوانی API خارجی).

  • بات کوچک (تا ۱۰۰۰ کاربر فعال): ۱ گیگابایت رم و ۱ هسته CPU کافی است؛ همه‌چیز از جمله وب‌سرور و دیتابیس روی یک سرور.
  • بات متوسط (۱۰۰۰ تا ۱۰۰۰۰ کاربر): ۲ گیگابایت رم و ۲ هسته؛ پایگاه‌داده را از SQLite به PostgreSQL منتقل کنید.
  • بات بزرگ (بالای ۱۰۰۰۰ کاربر فعال): ۴ گیگابایت رم به بالا، چند سرور پشت load balancer، worker صف (Redis یا RabbitMQ) و پایگاه‌داده اختصاصی.

برای محاسبه‌ی دقیق‌تر نیاز پروژه‌ی خودتان از ماشین‌حساب انتخاب سرور استفاده کنید و قبل از خرید قیمت سرور مجازی و پلن‌های سرور ابری ایران را مقایسه کنید.

چرا هاست اشتراکی جای خوش بات نیست؟

بسیاری از توسعه‌دهندگان باتشان را روی هاست اشتراکی شروع می‌کنند و بعد از چند هفته به یک مشکل برمی‌خورند: هاست‌های اشتراکی برنامه‌های طولانی‌مدت را دوست ندارند. process بات شما که قرار است تا ابد اجرا شود، معمولاً پس از چند دقیقه بی‌تحرکتی یا با رسیدن به محدودیت CPU kill می‌شود. بعضی از هاست‌ها فقط از طریق cron اجازه‌ی اجرای برنامه می‌دهند و cron کمتر از یک دقیقه فاصله‌ی مجاز ندارد — یعنی پیام‌ها با تاخیر و پرش.

مشکل دوم webhook است: تلگرام به یک گواهی SSL معتبر نیاز دارد و روی هاست اشتراکی معمولاً فقط گواهی دامنه‌ی اصلی شما معتبر است، نه ساب‌دامنه‌ای که می‌خواهید به آن اختصاص دهید. مشکل سوم آی‌پی است: روی هاست اشتراکی ده‌ها سایت دیگر هم‌آی‌پی شما هستند و اگر یکی از آن‌ها به لیست‌سیاه برود، بات شما هم گیر می‌کند. سرور مجازی این سه مشکل را با آی‌پی اختصاصی، گواهی Let’s Encrypt رایگان و دسترسی کامل به process manager حل می‌کند.

امنیت بات: توکن مثل کلید خانه است

توکنی که BotFather به شما می‌دهد (مثل 123456789:AAEx…) کلید کامل کنترل بات است. هرکسی آن را داشته باشد می‌تواند به جای بات شما پیام بفرستد، کاربران را بن کند، نام و عکس بات را عوض کند و حتی با webhook همه‌ی پیام‌ها را به سرور خودش ببرد. سه قانون زیر را رعایت کنید:

  1. توکن هرگز در کد و git نباشد: آن را در متغیر محیطی (`.env` یا systemd) نگه دارید و فایل `.env` را در `.gitignore` قرار دهید.
  2. سطح‌دسترسی فایل: `chmod 600 .env` تا فقط کاربر مالک بتواند آن را بخواند.
  3. کاربر غیر root: بات را با یک کاربر معمولی اجرا کنید، نه root. اگر بات آسیب‌پذیر شد، نفوذگر حداقل کل سرور را نمی‌گیرد. با محاسبه‌گر chmod مقادیر را سریع تست کنید.

در کنار این‌ها، فایروال را فقط روی پورت‌های لازم (۲۲ برای SSH، ۴۴۳ برای webhook) باز کنید و SSH را به کلید عمومی محدود کنید. با ابزار بررسی پورت می‌توانید از بیرون تأیید کنید که فقط پورت‌های درست باز هستند.

از صفر تا استقرار در شش قدم

  1. بات را بسازید: در تلگرام به @BotFather بگویید /newbot، نام و یوزرنیم انتخاب کنید و توکن را ذخیره کنید.
  2. سرور را آماده کنید: سیستم‌عامل را آپدیت کنید (`apt update && apt upgrade`)، کاربر غیر root بسازید و کلید SSH را نصب کنید.
  3. ران‌تایم نصب کنید: پایتون با venv مجزا یا Node.js با nvm. کتابخانه‌های آماده مثل python-telegram-bot، aiogram یا Telegraf صرفه‌جویی بزرگی هستند.
  4. وب‌سرور و SSL (فقط برای webhook): Nginx یا Caddy را روی ساب‌دامینه اختصاصی نصب کنید و گواهی Let’s Encrypt بگیرید. با ابزار بررسی گواهی SSL اعتبار آن را تست کنید.
  5. سرویس systemd بنویسید: فایل سرویس تعیین می‌کند بات با چه کاربری، از کدام مسیر و با چه متغیرهای محیطی اجرا شود، و بعد از هر کرش یا ری‌استارت سرور خودش دوباره بلند شود.
  6. وب‌هوک را تنظیم کنید (یا polling را رها کنید): با یک درخواست `setWebhook` آدرس HTTPS خود را به تلگرام معرفی کنید. آی‌پی عمومی سرور را از ابزار آی‌پی من بگیرید تا مطمئن شوید DNS درست تنظیم شده.

بعد از این شش قدم، بات شما زنده است. حالا با `journalctl -u bot-service -f` لاگ‌ها را زنده ببینید و سازنده عبارت Cron برای کارهای زمان‌بندی‌شده مثل بکاپ روزانه‌ی پایگاه‌داده استفاده کنید.

وقتی بات بزرگ می‌شود: مقیاس‌پذیری

یک بات موفق سریع‌تر از تصور شما رشد می‌کند و همان معماری روز اول دیگر جواب نمی‌دهد. سه نشانه‌ی نیاز به مقیاس: بالا رفتن مصرف CPU بالای ۷۰٪ مداوم، تاخیر بیشتر از چند ثانیه در پاسخ، و کرش‌های متناوب به خاطر کمبود رم. در این مرحله:

  • پایگاه‌داده را از SQLite به PostgreSQL یا MySQL منتقل کنید (SQLite با نوشتن همزمان مشکل دارد).
  • کارهای سنگین (دانلود فایل، پردازش تصویر، ارسال انبوه) را به یک worker صف منتقل کنید تا بات فقط پیام‌ها را دریافت کند.
  • چند نمونه از بات روی چند سرور با nginx به عنوان load balancer اجرا کنید — با webhook این کار آسان است چون تلگرام فقط یک آدرس می‌بیند.
  • سنجه‌ها را جمع کنید: تعداد پیام در دقیقه، زمان پاسخ، نرخ خطا. بدون سنجه مقیاس‌پذیری حدس است.

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

ابزارهای رایگانی که کار را راحت می‌کنند

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

داستان واقعی: باتی که در ساعت پیک از کار افتاد

یک فروشگاه آنلاین روی سرور مجازی برای ربات تلگرام، رباتی برای پشتیبانی مشتریان داشت. روزی که کمپین تخفیف راه انداختند، هزاران کاربر همزمان شروع به چت کردن با بات کردند. سرور مجازی ۲ گیگابایتی، زیر بار از کار افتاد و systemd process را ری‌استارت کرد، ولی هر بار دوباره زیر بار از کار می‌افتاد. نتیجه: چهار ساعت پشتیبانی از دست رفته و هزاران پیام بدون جواب. مشکل رم نبود — کمبود knowledge برای مقیاس بود. وقتی سرور مجازی برای ربات تلگرام را به ۴ گیگابایت ارتقا دادند و کش را فعال کردند و کش را فعال کردند، بات در پیک بعدی بدون هیچ مشکلی کار کرد.

درس این داستان: مقیاس‌پذیری سرور مجازی برای ربات تلگرام از روز اول برنامه‌ریزی می‌شود، نه روزی که پیک می‌رسد. اگر می‌دانید کمپین بزرگی در راه است، ارتقا را قبل از آن انجام دهید. سرور مجازی برای ربات تلگرام ارتقای آنلاین دارد و هیچ قطعی در کار نیست.

زبان برنامه‌نویسی و تأثیرش روی منابع سرور

انتخاب زبان ربات روی سرور مجازی برای ربات تلگرام، مستقیماً هزینه‌ی سرور شما را تعیین می‌کند. Python (با کتابخانه python-telegram-bot) ساده‌ترین گزینه برای شروع است ولی مصرف رم آن نسبتاً بالاست. Node.js (با telegraf) سبک‌تر است و برای I/O-heavy bots عالی عمل می‌کند. Go سریع‌ترین و کم‌مصرف‌ترین است — یک بات Go روی سرور مجازی برای ربات تلگرام با ۵۱۲ مگابایت رم هم کار می‌کند. PHP برای ربات‌های کوچک و ساده کافی است.

پیشنهاد عملی: اگر تازه شروع می‌کنید، Python یا Node.js بگیرید. وقتی بات به هزاران کاربر رسید، اگر رم گران شد، به Go مهاجرت کنید. هزینه‌ی توسعه‌ی مجدد، معمولاً کمتر از هزینه‌ی سالانه‌ی رم اضافی است.

جدول مقایسه‌ی منابع بر اساس اندازه‌ی ربات

اندازه‌ی ربات کاربران فعال روزانه رم پیشنهادی CPU نکته
خیلی کوچک تا ۱۰۰ ۱ گیگابایت ۱ هسته Python هم کافی است
کوچک ۱۰۰-۱۰۰۰ ۲ گیگابایت ۱ هسته کش پیام‌ها را فعال کنید
متوسط ۱۰۰۰-۱۰۰۰۰ ۴ گیگابایت ۲ هسته صف پیام با Redis
بزرگ ۱۰۰۰۰-۱۰۰۰۰۰ ۸ گیگابایت ۴ هسته تفکیک worker و database
خیلی بزرگ بالای ۱۰۰۰۰۰ ۱۶ گیگابایت+ ۸ هسته+ خوشه‌ای + load balancer

systemd: کسی که بات شما را زنده نگه می‌دارد

بزرگترین اشتباه در سرور مجازی برای ربات تلگرام این است که بات را با python bot.py در یک ترمینال اجرا می‌کنند. وقتی SSH بسته می‌شود یا سرور ری‌استارت می‌شود، بات می‌میرد. راه حل: systemd service بنویسید. systemd روی سرور مجازی برای ربات تلگرام، بات را هنگام بوت بالا می‌آورد، اگر کرش کرد دوباره اجرا می‌کند و لاگ‌ها را برای شما نگه می‌دارد. روی سرور مجازی برای ربات تلگرام داماش، این کار در پنج دقیقه انجام می‌شود.

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

دیتابیس ربات: کجا داده‌ها را نگه داریم

سرور مجازی برای ربات تلگرام داده تولید می‌کند: پیام‌ها، وضعیت کاربران، تنظیمات. برای ربات کوچک روی سرور مجازی برای ربات تلگرام، SQLite کافی است — یک فایل، بدون سرور دیتابیس، بدون تنظیمات. برای ربات متوسط به بالا، PostgreSQL یا MySQL را روی همان سرور یا سرور جداگانه اجرا کنید. اگر روی سرور مجازی برای ربات تلگرام سرعت بالا و حجم زیاد دارید، Redis برای کش و صف پیام‌ها بهترین انتخاب است.

نکته‌ی مهم: بکاپ از دیتابیس سرور مجازی برای ربات تلگرام را فراموش نکنید. اگر روی سرور مجازی برای ربات تلگرام SQLite دارید، فقط کپی فایل کافی نیست چون ممکن است در حال نوشتن باشد — از .backup استفاده کنید. برای PostgreSQL روی سرور مجازی برای ربات تلگرام از pg_dump روزانه استفاده کنید.

وب‌هوک vs Long Polling

سرور مجازی برای ربات تلگرام – مقیاس‌پذیری
: انتخاب نهایی

انتخاب بین وب‌هوک و long polling روی سرور مجازی برای ربات تلگرام ساده‌تر از چیزی است که به نظر می‌رسد. وب‌هوک به این معناست که تلگرام به سرور مجازی برای ربات تلگرام شما درخواست می‌فرستد — یعنی سرور شما باید از اینترنت قابل دسترس باشد با HTTPS معتبر. Long polling یعنی سرور مجازی برای ربات تلگرام دائماً از تلگرام می‌پرسد «پیام جدید هست؟». وب‌هوک سریع‌تر و کم‌مصرف‌تر است. Long polling ساده‌تر برای شروع و نیازی به HTTPS ندارد.

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

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

روی سرور مجازی برای ربات تلگرام چقدر رم لازم است؟

برای یک بات کوچک با کمتر از هزار کاربر فعال، ۱ گیگابایت رم کافی است. اگر بات فایل پردازش می‌کند یا با پایگاه‌داده کار می‌کند، ۲ گیگابایت جای امن‌تری است. مصرف واقعی را با `htop` روی سرور زنده ببینید، حدس نزنید.

آیا به جای سرور مجازی برای ربات تلگرام، هاست اشتراکی کافی است؟

امکان‌پذیر است ولی توصیه نمی‌شود. هاست اشتراکی process طولانی‌مدت را kill می‌کند، cron با فاصله‌ی زیر یک دقیقه اجازه نمی‌دهد و گواهی SSL برای ساب‌دامینه‌ی webhook دردسر دارد. سرور مجازی با همان هزینه‌ی تقریبی، همه‌ی این محدودیت‌ها را برمی‌دارد.

اگر سرور مجازی برای ربات تلگرام ری‌استارت شود، بات هم می‌میرد؟

خیر، به شرطی که از systemd استفاده کنید. systemd به طور پیش‌فرض سرویس را بعد از کرش و بعد از بوت سرور دوباره شروع می‌کند (`Restart=always` و `enable`). این دقیقاً همان دلیلی است که استقرار حرفه‌ای با systemd انجام می‌شود، نه با `nohup` یا `screen`.

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

به این ترتیب بررسی کنید: (۱) گواهی SSL معتبر و منقضی‌نشده است؟ (۲) پورت ۴۴۳ از بیرون باز است؟ (۳) آدرس webhook دقیقاً با گواهی یکی است؟ (۴) تلگرام چه پاسخی به `getWebhookInfo` می‌دهد؟ این آخرین مورد معمولاً خودش می‌گوید مشکل کجاست.

سرور مجازی برای ربات تلگرام به آی‌پی اختصاصی نیاز دارد؟

الزاماً نه، ولی قویاً توصیه می‌شود. آی‌پی اختصاصی یعنی رفتار سایت‌های دیگر روی هاست روی بات شما اثر ندارد و لیست‌سیاه شدن یکی، دیگری را زمین نمی‌اندازد. برای webhook داشتن آی‌پی ثابت و DNS ثابت هم ضروری است.

هزینه‌ی ماهانه‌ی سرور مجازی برای ربات تلگرام چقدر است؟

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

منبع تکمیلی: مستندات رسمی Telegram Bot API.

جمع‌بندی

سرور مجازی برای ربات تلگرام انتخابی نیست که بعداً به آن برسید؛ از روز اول است. آی‌پی ثابت، آپتایم ۲۴/۷، دسترسی root برای systemd و گواهی SSL آزاد برای webhook، حداقل‌هایی هستند که هیچ هاست اشتراکی به آن‌ها پا نمی‌دهد. با ۱ گیگابایت رم شروع کنید، با long polling بسنجید، به webhook مهاجرت کنید، توکن را در متغیر محیطی نگه دارید و سنجه‌ها را از همان روز اول جمع کنید. برای دیدن گزینه‌های سرور، قیمت‌ها را مقایسه کنید و اگر سوالی دارید، قبل از خرید بپرسید.

مرور سریع: قبل از خرید، این را حتماً بخوانید

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

منابع و مطالعهٔ بیشتر

برای عمیق‌شدن در این موضوع، مطالعهٔ ربات تلگرام در ویکی‌پدیا را توصیه می‌کنیم.