Футбольный телеграм бот на Python (4/4): Запуск на сервере
В четвертой части серии статей по написанию телеграм бота на python, запустим его на сервере. Для разнообразия и правдоподобия я выбрал вариант размещения на VPS, а не Heroku.
Во-первых, Heroku очень редко используют в продакшене. Его платные тарифы сильно выше стоимости аренды сервера.
Во-вторых, крупные кампании дают виртуальные машины бесплатно на год. Этого достаточно, что бы 4 года не платить за работу сервера.
Получение VPS
Как я уже написал, есть возможность получить VPS бесплатно на год. Выбирайте любой:
- AWS Amazon, продукт Amazon EC2.
- Azure Microsoft, продукт Виртуальные машины Linux.
- Google Cloud, продукт Compute Engine.
- Alibaba Cloud, продукт Elastic Compute Service.
Только не активируйте все сразу, это разовое предложение.
Не буду подробно описывать, как развернуть VPS, у этих платформ документации на высоком уровне. Если у вас трудности с английским и переводчиками, начинайте с Azure. У них много русской документации. Скажу только, что крайне желательно выбирать OS Ubuntu 18.04.
Процесс получения бесплатного периода и создание виртуальной машины достаточно тернист. Если вы никогда не делали это ранее, будьте готов потратить 1-2 часа на знакомство с облачными решениями.
Я буду использовать VPS с почасовой оплатой от reg.ru. Это дешевое и простое решение. Для обучения и демонстрации можно запускать на несколько часов по цене от 0,32 ₽/час. А постоянная работа подобного бота будет стоить 215 рублей в месяц.
Подключение к виртуальной машине
Для подключения к VPS нужно знать ip (IPv4), логин (обычно «root») и пароль.
С Linux и MacOS можно подключится из терминала. Введите команду, логин и ip сервера.
ssh root@123.123.123.23
Для windows можно скачать терминал Ubuntu. Если такой вариант не подходит, используйте PuTTY (порт: 22). Вот так выглядит консоль. Для подключения требуется ввести «yes» и пароль.

После входа я узнал какая версия python установлена командой python -V . Из коробки стоит 3.6.9, а проект на 3.8.5, нужно обновить.
Подготовка сервера
- Установим необходимую версию python. Внимательно вводите эти команды по очереди, это процесс кастомной установки.
$ sudo apt update $ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev $ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz $ tar -xf Python-3.8.5.tgz $ cd Python-3.8.5 $ ./configure --enable-optimizations $ make # ~15 минут $ sudo make altinstall $ cd /home
Немного деталей. Я скачал архив, распаковал и установил python 3.8.5. Будет готов подождать пока выполнится команды make . Введите python3.8 -V и убедитесь, что можно продолжать:
/home# python3.8 -V Python 3.8.5
2. Создадим проект. Установим и создадим виртуально окружение. Выполняйте команды по очереди:
$ python3.8 -m pip install --upgrade pip $ pip install virtualenv $ mkdir fonlinebot $ cd fonlinebot $ virtualenv venv $ source venv/bin/activate $ python -V $ deactivate
Мы установили pip и virtualenv. Затем создали папку «fonlinebot», создали в ней виртуальное окружение и проверили его.

3. Установим и запустим Redis-server. Для установки и проверки в Ubuntu введите эти команды:
$ sudo apt install redis-server $ redis-cli 127.0.0.1:6379> ping
Получите PONG , значит redis запущен. Устанавливать удаленный доступ и пароль в этом руководстве я не буду. Эта служба доступна только конкретной машине, что полностью покрывает задачу.
4. Переменные окружения. Теперь нужно спрятать токен и API-ключ в переменные. Выполните команду nano /etc/environment и вставьте эти строки со своими значениями в кавычках.
fonlinebot_token="замените_на_токен" fonlinebot_api_key="замените_на_ключ_апи"
Затем нажмите CTRL+O -> Enter -> CTRL+X для сохранения. Перезапустите машину: sudo reboot , что бы переменить настройки.
5. Подготовка кода бота. Отредактируйте файл config.py. Раскомментируем настройки логирования и установим переменные окружения.
# fonlinebot/config.py #. import datetime import os formatter = '[%(asctime)s] %(levelname)8s --- %(message)s (%(filename)s:%(lineno)s)' logging.basicConfig( filename=f'bot-from-.log', filemode='w', format=formatter, datefmt='%Y-%m-%d %H:%M:%S', level=logging.WARNING ) TOKEN = os.environ.get("fonlinebot_token") #. 'x-rapidapi-key': os.environ.get("fonlinebot_api_key"), #.Скрывать секретную информацию (токены, пароли) обязательно. Нельзя выкладывать файлы с паролями на гитхаб, stackoverflow или отправлять сторонним разработчикам.
Половина работы сделана. Теперь нужно загрузить файлы на сервер.
Загрузка файлов на VPS
Скачайте и установите WinSCP. Это программа для загрузки проекта на VPS. Альтернативный вариант Filezilla. Вариант для повышения скиллов — Git.
Откройте и установите соединение с сервером:
Далее перенесите файлы проекта (без venv и файлов Pycharm) в папку home/fonlinebot/.
Готово? Запустим бота с сервера.
$ cd /home/fonlinebot/ # перейдем в папку проекта $ source venv/bin/activate # активируем окружение $ pip install -r requirements.txt # установим зависимости $ python main.py # запустим ботаТеперь перейдите в Телеграм и протестируйте работу. Отвечает? Хорошо, остановите его (ctrl+c) и деактивируйте виртуальное окружение ( deactivate )
Финишная прямая проекта. После закрытия терминала, бот остановится. После перезапуска сервера, он не запустится. Настроем автономную работу.
Беспрерывная работа бота
Создадим собственную службу для постоянной работы бота и перезапуска в случае падения.
nano /lib/systemd/system/fonlinebot.service[Unit] Description=Football online bot After=network.target [Service] EnvironmentFile=/etc/environment ExecStart=/home/fonlinebot/venv/bin/python main.py ExecReload=/home/fonlinebot/venv/bin/python main.py WorkingDirectory=/home/fonlinebot/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.targetЗатем нажмите CTRL+O -> Enter -> CTRL+X для сохранения. Что это за настройки?
Настройки службы, нам важны эти:
- Description — описание службы.
- EnvironmentFile — путь к файлу с переменными.
- ExecStart и ExecReload — это команды для запуска и перезапуска бота.
- WorkingDirectory — путь к папке в которой файл запуска main.py.
Для запуска службы выполните эти 2 команды.
systemctl enable fonlinebot systemctl start fonlinebot
Теперь вернемся в бот и посмотрим как он отвечает.
Если бот не отвечает, проверьте статус и логи. Здесь сложно предвидеть ошибку:
systemctl status fonlinebot # статус journalctl -u fonlinebot.service # логи
Проект готов, отличная работа! Все этапы разработки на Gitlab.
Заключение
Мы проделали большую работу: создали бота, настроили его взаимодействие с внешним api и загрузили на сервера. В процессе затронули кнопки, меню, callback и ошибки.
Вот несколько идей для продолжения проекта:
- более детальная статистика матча,
- админка для получения ошибок и отправки сообщения всем пользователям,
- сбор статистики активности пользователей.
- переход на вебхук.
Где разместить свой телеграмм бот?
Я создал свой телеграмм бот и он работает когда я запущу программу (т.е свой бот) на локальном ПК. И хочу сделать так что с ним можно было работать с другими устройствами везде и всегда.
Отслеживать
задан 30 июл 2021 в 19:21
Suhayli Tuev Suhayli Tuev
25 1 1 серебряный знак 9 9 бронзовых знаков
Не выключайте свой ПК с ботом. Либо ищите хостинги на которых можно будет запускать бота, типа heroku
30 июл 2021 в 19:26
ru.stackoverflow.com/a/1146497/234134 туда же можно добавить Oracle Free вечная бесплатная ВМ с Ubuntu Server (естественно ограничение по ресурсам, но для бота хватит). либо raspberry pi
4 авг 2021 в 21:34
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Попробуйте Heroku. Можно залить на сервер бесплатно. Сам пользуюсь и вполне устраивает. Вот гайд по Heroku.
Какие есть альтернативы?
- Railway App - Вам выделеятся каждый месяц 5$ и 500 часов работы. Деплоить проекты можно с гитхаба.
- Render - На месяц вам дается уже 750 часов бесплатной работы, деплой через Github
- PythonAnywhere - Прост в использовании, но нельзя подключаться к сторонним сервисам
Отслеживать
187 12 12 бронзовых знаков
ответ дан 31 июл 2021 в 8:19
848 3 3 серебряных знака 12 12 бронзовых знаков
Попробуй тут https://simplecloud.ru/start/34795 Сервер от 150 руб в месяц. Можно эксперементировать с ботами. Да и вообще для начала очень простой хостинг. Доступ к серверу будет по ssh.
Отслеживать
ответ дан 30 июл 2021 в 19:51
Sergei Malanin Sergei Malanin
546 2 2 серебряных знака 12 12 бронзовых знаков
В данный момент стало трудно искать сервера, тк все заблокировано. Насчет Heroku - работает только с vpn и возможно во время оплаты, может быть неполадки. Но есть https://www.pythonanywhere.com/, если тг бот не имеет выхода в сеть, то бесплатная версия будет оптимальной, а так цены там небольшие
Отслеживать
ответ дан 5 янв 2023 в 10:09
user513855 user513855
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
- python
- telegram
- telebot
- бот
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951
Как запустить Python Telegram бота на VPS

Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
#main.py import telebot bot = telebot.TeleBot("ТОКЕН") @bot.message_handler(func=lambda message: message.text.lower() in ['привет', 'здравствуйте']) def send_welcome(message): bot.reply_to(message, "Здравствуйте!") @bot.message_handler(func=lambda message: True) def echo_all(message): bot.reply_to(message, 'Я тебя не понимаю(') bot.infinity_polling()
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
ssh root@213.139.209.81
И введите пароль который вы указали при создании VPS.
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
sudo apt update sudo apt upgrade
Загрузка и запуск бота
Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.
cd /home mkdir ramziv_bot cd ramziv_bot
Зайдите панель управления VPS и откройте Файловый менеджер.

Загрузите файлы вашего проекта на сервер, в моем случаи это только один файл main.py .

Установите зависимости вашего проекта, и запустите бота.
Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.
pip install pyTelegramBotAPI python3 main.py
Теперь перейдите в Телеграм и протестируйте работу.

Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
sudo nano /lib/systemd/system/ramziv_bot.service
С конфигурацией:
[Unit] Description=Ramziv - Telegram Bot After=syslog.target After=network.target [Service] Type=simple WorkingDirectory=/home/ramziv_bot/ ExecStart=/usr/bin/python3 /home/ramziv_bot/main.py RestartSec=60 Restart=always [Install] WantedBy=multi-user.target
Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.
Выполните эти две команды что бы запустить службу.
sudo systemctl enable ramziv_bot sudo systemctl start ramziv_bot
Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.
Заключение
Ваш бот будет всегда запускаться при старте системы, и перезапускается при возникновении ошибки. Для примера вы можете специально вызвать исключения в одной из функций обернутой обработчиком, и отследить ее в журнале командой:
sudo journalctl -u ramziv_bot.service #Вывод #Jun 13 12:35:31 objmnuqxoa python3[1069]: File "/home/ramziv_bot/main.py", line 7, in send_welcome #Jun 13 12:35:31 objmnuqxoa python3[1069]: number = 1/0 #Jun 13 12:35:31 objmnuqxoa python3[1069]: ZeroDivisionError: division by zero
Комментарии
Tima
14 ноября 2023
Спасибо, за интересную статью. Помог. Часть с развёртыванием бота понятная и чёткая, мне нравится.
Бесплатный хостинг для Telegram-бота или Discord-бота на Python и не только. Обзор вариантов
Когда у вас небольшой проект (например, телеграмм бот или дискорд бот), платить лишние деньги за хостинг не хочется. Давайте попробуем разобраться, какие есть варианты бесплатного – или условно бесплатного – хостинга для ботов.
Специализированные сервисы для хостинга Телеграмм ботов и Дискорд ботов
- Heroku - облако, идеально подходящее для размещения телеграм-ботов и Discord-ботов. Есть совсем недорогие тарифы (ранее был бесплатный, но его недавно убрали). Единственным препятствием является необходимость оплаты картой иностранного банка.
- Amvera Cloud - российский аналог Heroku. Как и в Heroku, есть возможность развертывать приложения в контейнерах и обновлять их через push в GIT. Кроме того, есть грантовая программа. И при регистрации будет начислен стартовый баланс, которого хватит на несколько недель бесплатного использования.
- Pythonanywhere. Сервис заточен на хостинг проектов на Python. Однако на бесплатном тарифе нельзя использовать pyTelegramApi, что затрудняет развертывание на нем именно Telegram-ботов.
Бесплатные VPS хостинги
Существуют и полностью бесплатные хостинги на основе VPS. Обычно бесплатный тариф подразумевает отсутствие гарантий работоспособности сервиса и поддержки, но если ваш проект не требует безотказной работы, можно рассмотреть и их.
Есть несколько готовых подборок, приведем одну из ранее размещенных на Хабр по ссылке.
Google Cloud Platform. Сервис App Engine
Сервис позволяет развернуть приложения на языках Python, PHP, Go, Ruby, Java, JavaScript(Node.js).
Минус бесплатной версии - закрытая для записи файловая система, что не позволит вашему боту сохранять файлы.
Классическое облако с serverless функционалом
Как правило, крупные облачные провайдеры, такие как Яндекс, Сбер и VK, предлагают стартовую сумму на тестирование их облаков, равную нескольким тысячам рублей.
Недостатком является стоимость минимальной виртуальной машины, которая съедает тестовые деньги за 1-2 месяца.
Но можно воспользоваться serverless сервисами и запустить бота в виде функции. При небольшом трафике и принятии холодных стартов, можно получить бесплатный или, во всяком случае, недорогой хостинг.
Итого
Мы рассмотрели несколько вариантов хостинга Telegram-ботов и Дискорд-ботов. Все бесплатные тарифы провайдеров обладают существенными ограничениями, но решение найти можно. Альтернативным способом является использование полноценных решений в рамках промо-тарифов, а также технологии serverless облачных провайдеров.
- бесплатный хостинг для бота
- хостинг для бота дискорд
- хостинг для ботов telegram
- хостинг бота discord
- хостинг для телеграмм бота
- хостинг для телеграм бота
- лучшие хостинг для ботов
- дешевый хостинг для ботов
- хостинг телеграмм бота
- хостинг python бота
- Блог компании Amvera
- Хостинг

