5 bước treo bot Telegram trên VPS Linux 24/7 (Sử dụng PM2)
Nếu bạn là một developer, quản trị viên cộng đồng (admin group) hay người làm MMO (treo bot airdrop), bạn chắc chắn hiểu sức mạnh của Bot Telegram. Chúng có thể tự động hóa hàng ngàn tác vụ, từ gửi thông báo, quản lý thành viên, đến săn kèo crypto – một trong những cách treo VPS kiếm tiền hiệu quả.
Nhưng có một vấn đề cố hữu: Khi bạn chạy code bot trên máy tính cá nhân (PC/Laptop) và… tắt máy đi ngủ, con bot của bạn cũng “ngừng hoạt động” theo.
Đây là lúc VPS (Virtual Private Server) tỏa sáng. Nếu bạn chưa rõ, hãy xem bài viết phân biệt giữa Cloud Server và VPS của chúng tôi.
Một VPS Linux giống như một chiếc máy tính siêu nhỏ chạy hệ điều hành (thường là Ubuntu – xem so sánh Oracle Linux và Ubuntu để biết lý do) hoạt động 24/7 trên Internet.
Lợi ích khi đưa bot lên VPS:
- Hoạt động 24/7: Bot của bạn không bao giờ ngủ, luôn sẵn sàng phản hồi hoặc thực thi tác vụ.
- Ổn định: VPS có đường truyền Internet và nguồn điện ổn định, không bị ảnh hưởng bởi mạng nhà bạn.
- Bảo mật: Bạn có thể cấu hình các lớp bảo mật chuyên nghiệp cho máy chủ của mình.
- Tiết kiệm tài nguyên: Bạn không cần phải “cắm chuột” laptop của mình cả ngày, giải phóng máy tính cá nhân cho các tác vụ khác.
Trong hướng dẫn này, chúng ta sẽ đi qua 5 bước chi tiết để đưa Bot Telegram (viết bằng Python) của bạn lên một VPS Linux (Ubuntu) và chạy nó 24/7 bằng PM2 – công cụ quản lý tiến trình (process manager) mạnh mẽ và cực kỳ phổ biến.
Bước 1: Lấy API Token từ “cha đẻ” BotFather
Bước đầu tiên, chúng ta cần “giấy khai sinh” cho con bot của mình. Telegram cung cấp một bot quản lý trung tâm tên là @BotFather.
- Mở Telegram của bạn, tìm kiếm
@BotFather(chọn tài khoản có dấu tick xanh). - Gõ lệnh
/startđể bắt đầu. - Gõ lệnh
/newbotđể tạo bot mới. - BotFather sẽ hỏi tên (Name) cho bot (ví dụ:
Bot Quản Lý Của Tôi). - Tiếp theo, nó sẽ hỏi tên người dùng (Username), username bắt buộc phải kết thúc bằng chữ “bot” (ví dụ:
MyGroupAdmin_bot). - Nếu thành công, BotFather sẽ gửi cho bạn một tin nhắn chúc mừng kèm theo API Token.
Hãy lưu lại chuỗi Token này (ví dụ: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). Đây chính là “chìa khóa” để code của bạn có thể điều khiển bot.
Cảnh báo bảo mật: Tuyệt đối không bao giờ chia sẻ Token này cho bất kỳ ai hoặc đăng nó công khai. Nếu lộ Token, người khác có thể chiếm quyền điều khiển bot của bạn.
Bước 2: Cấu hình VPS (Nền móng bảo mật & môi trường)
Đây là bước quan trọng nhất, tạo nền móng an toàn cho bot của bạn. Chúng ta sẽ sử dụng VPS chạy Ubuntu 22.04 (phiên bản phổ biến và ổn định nhất hiện nay).
Đăng nhập SSH & cập nhật hệ thống
Sau khi mua VPS, bạn sẽ nhận được 4 thông tin: IP, Username (thường là root), Password, và Port (thường là 22).
Sử dụng một trình SSH client (như PuTTY trên Windows hoặc Terminal trên macOS/Linux) để đăng nhập:
# Cú pháp: ssh [username]@[ip_address]
ssh [email protected]
Sau khi đăng nhập thành công, việc đầu tiên luôn luôn là cập nhật hệ thống để vá các lỗ hổng bảo mật mới nhất:
sudo apt update && sudo apt upgrade -y
(Cực kỳ quan trọng) Thiết lập Firewall (UFW)
Để VPS “mở toang” cho Internet là cực kỳ nguy hiểm. Chúng ta sẽ dùng ufw (Uncomplicated Firewall) để đóng các cổng không cần thiết. (Để tìm hiểu sâu hơn, bạn có thể xem hướng dẫn cấu hình UFW Ubuntu chi tiết).
Bước đầu tiên và quan trọng nhất là cho phép cổng SSH, nhưng giới hạn (limit) nó. Lệnh limit thông minh hơn allow, nó sẽ tự động chặn các IP cố gắng dò mật khẩu (brute-force) máy chủ của bạn. (Bạn cũng có thể kết hợp thêm cài đặt Fail2Ban để bảo vệ VPS toàn diện hơn).
# Cho phép SSH nhưng có giới hạn chống brute-force
sudo ufw limit OpenSSH
Sau khi đã đảm bảo cổng SSH được phép, hãy bật tường lửa:
# Bật Firewall (gõ 'y' để xác nhận)
sudo ufw enable
Cuối cùng, kiểm tra trạng thái. Bạn sẽ thấy Status: active và OpenSSH: LIMIT.
sudo ufw status
Tạo User chuyên dụng (Không bao giờ chạy Bot bằng Root)
Chạy bất kỳ ứng dụng nào bằng user root (siêu admin) là một thói quen bảo mật tồi. Nếu code bot của bạn có lỗ hổng, kẻ tấn công có thể chiếm toàn quyền điều khiển VPS.
Chúng ta sẽ tạo một user mới tên là telebot để chỉ chuyên chạy bot. (Đây là bước cơ bản, để hiểu rõ hơn, bạn nên đọc hướng dẫn toàn diện về phân quyền user trên Linux).
- Tạo user mới:
adduser telebotHệ thống sẽ yêu cầu bạn đặt mật khẩu cho user này.
- Cấp quyền
sudo(để cài đặt phần mềm):usermod -aG sudo telebot - Chuyển sang user mới: Bây giờ, hãy thoát khỏi
rootvà đăng nhập vào usertelebot.su - telebot
Từ bây giờ, mọi lệnh cài đặt và chạy bot, chúng ta sẽ thực hiện dưới quyền user telebot này.
Cài đặt môi trường (Python & PM2)
Bot của chúng ta cần 2 thứ để chạy: Môi trường (Python) và Trình quản lý (PM2). (Nếu bạn là người mới, hãy tham khảo 20+ lệnh Linux cơ bản nhất để làm quen).
- Cài đặt Python 3, Pip và Venv: Ubuntu 22.04 thường có sẵn Python 3. Nhưng chúng ta cần
pip(trình quản lý gói) vàvenv(môi trường ảo).sudo apt install python3 python3-pip python3-venv -y - Cài đặt Node.js và PM2: PM2 là một công cụ viết bằng Node.js, nhưng nó quản lý các ứng dụng Python cực kỳ tốt. Chúng ta cài Node.js chỉ để có thể cài PM2.
# Cài Node.js (phiên bản LTS 18.x) và NPM sudo apt install nodejs npm -y # Cài PM2 (cờ -g nghĩa là "global", @latest đảm bảo bản mới nhất) sudo npm install pm2@latest -g
Sau khi chạy lệnh này, gõ pm2 list để kiểm tra. Nếu nó hiện ra một bảng trống (không có lỗi), bạn đã thành công!
Bước 3: Chuẩn bị mã nguồn (Code) bot
Bây giờ VPS đã sẵn sàng, chúng ta cần đưa code bot lên.
Tải code bot lên VPS
Bạn có 2 cách phổ biến (thực hiện bằng user telebot):
- Cách 1 (Khuyên dùng): Dùng Git Nếu code của bạn được lưu trên GitHub/GitLab, đây là cách chuyên nghiệp nhất. (Nếu VPS chưa có, hãy cài đặt Git trên VPS Linux trước).
# Cài đặt Git (nếu VPS chưa có) sudo apt install git -y # Clone code từ repository của bạn git clone https://github.com/ten-cua-ban/my-telegram-bot.git # Di chuyển vào thư mục code cd my-telegram-bot - Cách 2: Dùng SFTP (FileZilla) Nếu code của bạn nằm trên máy tính, hãy dùng một trình SFTP (như FileZilla hoặc MobaXterm).
- Kết nối SFTP vào VPS (Host:
sftp://IP_VPS, User:telebot, Pass: mật khẩu củatelebot, Port:22). - Kéo thả thư mục code từ máy bạn sang thư mục
/home/telebot/trên VPS. - Quay lại Terminal SSH,
cd ten-thu-muc-bot.
- Kết nối SFTP vào VPS (Host:
(BẢO MẬT) Tách API Token ra khỏi code
Không bao giờ “hard-code” (viết thẳng) Token vào file .py. Chúng ta sẽ dùng file .env để lưu trữ bí mật. Đây là một phần quan trọng của bảo mật VPS Linux.
- Tạo file
requirements.txt: Trong thư mục code, tạo filerequirements.txt(nano requirements.txt) và thêm 2 thư viện sau:pyTelegramBotAPI python-dotenvpyTelegramBotAPI: Thư viện bot Telegram (chúng ta dùng thư viện này vì cú pháp đơn giản, dễ hiểu).python-dotenv: Giúp code Python đọc file.env.
- Tạo file
.env: Cũng trong thư mục code, tạo file.env(nano .env) để chứa Token.BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 - Thêm
.envvào.gitignore(Nếu dùng Git) Rất quan trọng! Để đảm bảo bạn không vô tình đẩy file.envchứa Token lên GitHub.echo ".env" >> .gitignore
Cài đặt thư viện vào môi trường ảo (venv)
Chúng ta sẽ tạo một môi trường ảo (venv) riêng cho bot. Điều này giúp các thư viện của bot không bị “đụng độ” với thư viện hệ thống.
- Tạo môi trường ảo (tên là
venv):python3 -m venv venv - Kích hoạt môi trường ảo:
source venv/bin/activateBạn sẽ thấy tên môi trường
(venv)xuất hiện trước dấu nhắc lệnh. - Cài đặt các thư viện: Lệnh này sẽ đọc file
requirements.txtvà cài 2 thư viện trên vào môi trườngvenv.pip3 install -r requirements.txtSau khi cài xong, bạn có thể gõ
deactivateđể thoát khỏi venv. PM2 sẽ tự quản lý việc này.
Cập nhật code Python để đọc Token từ .env
Cuối cùng, hãy đảm bảo code Python của bạn (ví dụ file main.py) biết cách đọc Token từ file .env.
Đây là một code mẫu cơ bản sử dụng thư viện pyTelegramBotAPI (telebot):
import os
import telebot
from dotenv import load_dotenv
# Tải các biến môi trường từ file .env
load_dotenv()
# Lấy Token từ biến môi trường
BOT_TOKEN = os.getenv('BOT_TOKEN')
if not BOT_TOKEN:
print("Lỗi: Không tìm thấy BOT_TOKEN! Hãy kiểm tra file .env")
exit()
# Khởi tạo bot
bot = telebot.TeleBot(BOT_TOKEN)
# (Phần code còn lại của bạn...)
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Chào mừng, tôi đang hoạt động 24/7 trên VPS!")
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, message.text)
# Chạy bot lặp vô hạn (polling)
print("Bot đang chạy...")
bot.infinity_polling()
Bước 4: Treo bot 24/7 với PM2
Đây là lúc PM2 ra tay. Nó sẽ chạy bot của bạn ở chế độ nền (background) và tự động khởi động lại nếu bot bị crash.
Lệnh khởi chạy bot
Đảm bảo bạn đang ở trong thư mục code (/home/telebot/my-telegram-bot).
Mấu chốt ở đây là chúng ta phải chỉ cho PM2 biết dùng trình thông dịch (interpreter) Python nào. Đó chính là file Python bên trong thư mục venv chúng ta đã tạo.
# Cú pháp: pm2 start [file] --interpreter [đường_dẫn_python] --name [tên_app]
pm2 start main.py --interpreter venv/bin/python3 --name "MyTelegramBot"
Sau khi chạy, PM2 sẽ hiển thị một bảng thông báo tiến trình MyTelegramBot đang ở trạng thái online.
Đảm bảo bot tự chạy khi reboot VPS
Bot đang chạy 24/7, nhưng nếu VPS của bạn vì lý do nào đó (bảo trì, sự cố) mà reboot, PM2 sẽ không tự khởi động.
Chúng ta cần ra lệnh cho PM2 “ghi nhớ” danh sách bot và tự chạy khi hệ thống khởi động.
- Lưu danh sách tiến trình:
pm2 save - Tạo Script khởi động:
pm2 startupPM2 sẽ tạo ra một lệnh (thường bắt đầu bằng
sudo env...). Bạn chỉ cần copy toàn bộ lệnh đó và dán lại vào Terminal, rồi ấn Enter.
Xong! Từ giờ, ngay cả khi VPS reboot, PM2 sẽ tự động khởi động và chạy lại MyTelegramBot của bạn.
Bước 5: Quản lý bot và các mẹo chuyên nghiệp
Bot của bạn giờ đã “bất tử”. Dưới đây là các lệnh PM2 cơ bản và một số mẹo chuyên nghiệp bạn phải biết.
Các lệnh quản lý cơ bản
- Xem danh sách bot đang chạy:
pm2 list - Xem log (Cực kỳ quan trọng để fix bug): Nếu bot của bạn bị lỗi, treo, hoặc không phản hồi, lệnh này là thứ đầu tiên bạn cần gõ:
pm2 logs MyTelegramBot - Khởi động lại bot (Khi bạn cập nhật code): Sau khi bạn
git pullđể lấy code mới, chỉ cần chạy:pm2 restart MyTelegramBot - Dừng hoặc xóa bot:
pm2 stop MyTelegramBot pm2 delete MyTelegramBot
Pro-Tip 1: Dashboard thời gian thực
Thay vì chỉ xem danh sách tĩnh, bạn có thể mở một dashboard giám sát tài nguyên (CPU, RAM) và log của bot theo thời gian thực:
pm2 monit
Pro-Tip 2: Tự động restart khi sửa code (Cho Dev)
Khi đang phát triển, nếu bạn muốn PM2 tự động restart bot mỗi khi bạn lưu file .py, hãy thêm cờ --watch.
# Thêm --watch và --ignore-watch
pm2 start main.py --interpreter venv/bin/python3 --name "Bot-Dev" --watch --ignore-watch="venv"
Lưu ý: ignore-watch rất quan trọng để PM2 không bị restart khi bạn cài thư viện trong venv.
Pro-Tip 3: Xử lý tin nhắn dài (Tránh crash bot)
Một lỗi phổ biến là bot của bạn bị crash khi cố gắng gửi một tin nhắn quá dài (vượt quá 4096 ký tự), ví dụ như khi gửi một file log.
Thư viện pyTelegramBotAPI cung cấp một hàm tiện ích là smart_split để giải quyết việc này. Thay vì bot.send_message, hãy dùng:
from telebot import util
long_text = "Nội dung text rất dài..." # (Ví dụ: 10.000 ký tự)
# Tự động cắt tin nhắn tại các điểm ngắt câu/dòng hợp lý
for text_chunk in util.smart_split(long_text, 4000):
bot.send_message(message.chat.id, text_chunk)
Câu hỏi thường gặp (FAQ)
1. Tại sao phải dùng PM2 mà không chạy python main.py trực tiếp?
Nếu bạn chạy python main.py và đóng cửa sổ SSH, bot của bạn sẽ dừng lại. PM2 là một trình quản lý tiến trình, nó giúp bot của bạn:
- Chạy ở chế độ nền (background) 24/7.
- Tự động khởi động lại (restart) ngay lập tức nếu bot bị crash do lỗi code.
- Tự động khởi động cùng VPS sau khi reboot (như hướng dẫn ở Bước 4).
- Quản lý log và tài nguyên (CPU/RAM) dễ dàng.
2. Tại sao tôi không nên chạy bot bằng user root?
Chạy bot bằng root (siêu admin) là cực kỳ nguy hiểm. Nếu code bot của bạn (hoặc một thư viện bạn dùng) có lỗ hổng bảo mật, kẻ tấn công có thể lợi dụng nó để chiếm toàn bộ quyền điều khiển VPS, đánh cắp dữ liệu hoặc phá hủy máy chủ. Việc tạo một user riêng (như telebot ở Bước 2) giới hạn quyền hạn của bot, giảm thiểu rủi ro xuống mức thấp nhất.
3. Tôi muốn cập nhật code cho bot thì làm thế nào?
Rất đơn giản. Bạn chỉ cần SSH vào VPS, su - telebot, di chuyển đến thư mục code của bạn và kéo code mới về (ví dụ: git pull). Sau đó, chỉ cần gõ lệnh pm2 restart MyTelegramBot (thay MyTelegramBot bằng tên bot của bạn). PM2 sẽ khởi động lại bot với code mới nhất mà không bị gián đoạn.
4. Bot của tôi không chạy, làm sao để biết lỗi ở đâu?
Lệnh quan trọng nhất bạn cần biết là pm2 logs MyTelegramBot. Lệnh này sẽ hiển thị tất cả các output và thông báo lỗi (error) từ file Python của bạn. Hầu hết các vấn đề như sai Token, lỗi cú pháp, hoặc lỗi thư viện đều sẽ hiển thị rõ ràng tại đây.
5. VPS cần cấu hình tối thiểu bao nhiêu để treo bot Telegram?
Bot Telegram (đặc biệt là bot Python) rất nhẹ. Đối với hầu hết các bot quản lý nhóm hoặc bot airdrop, một VPS cơ bản với 1GB RAM và 1 Core CPU là quá đủ để chạy ổn định 24/7.
6. Tôi có thể treo nhiều bot trên cùng một VPS không?
Chắc chắn là có. Đây chính là ưu điểm của PM2. Bạn chỉ cần lặp lại Bước 4 cho mỗi bot mới (trong thư mục code riêng của nó) và đặt cho nó một tên (--name) khác.
Ví dụ: pm2 start bot_2.py --interpreter venv2/bin/python3 --name "MySecondBot"
Giới hạn duy nhất là tài nguyên (CPU và RAM) của VPS. Bạn có thể dùng lệnh pm2 monit (như trong Pro-Tip 1) để theo dõi xem VPS của mình có đang bị quá tải hay không khi chạy nhiều bot.
Kết luận
Chúc mừng! Bạn không chỉ cài đặt thành công Bot Telegram, mà còn triển khai nó một cách chuyên nghiệp và an toàn trên VPS Linux.
Chúng ta đã đi qua 5 bước quan trọng: Lấy Token, cấu hình bảo mật VPS (Firewall limit, User), chuẩn hóa code (dùng venv, .env), và cuối cùng là đảm bảo bot chạy 24/7 với PM2, kèm theo các mẹo quản lý chuyên nghiệp.
Việc chạy bot Telegram không yêu cầu cấu hình VPS quá mạnh. Một VPS cơ bản với 1GB RAM và 1 Core CPU (như gói VPS KVM Basic) là quá đủ để bạn treo 5-10 con bot khác nhau.
Nếu bạn đang tìm một nhà cung cấp VPS Linux ổn định, hỗ trợ kỹ thuật nhanh chóng và chi phí tối ưu để bắt đầu dự án bot của mình, hãy tham khảo các gói VPS tại VPSChinhHang ngay hôm nay!







