Почему GCP?
При написание телеграмм ботов столкнулся с вопросом, как быстро и бесплатно сделать так, чтобы бот работал постоянно. Варианты с Heroku и Pythonanywhere имеют слишком маленькие лимиты, если у вас более одного бота. Поэтому я решил воспользоваться GCP. Платформа предоставляет бесплатно 300$ на год + огромные скидки при использование этих средств(до 94%).
Как захостить вашего бота?
Шаг 1. Регистрация на GCP
Переходим на сайт GCP и нажимаем Get started for free.
Вводим свои данные и карточку. Деньги с карточки не будут списываться, если вы сами не активируете платную подписку.
Шаг 2. Создаём виртуальную машину
После регистрации вы окажетесь на главной странице сервиса. Вам необходимо выбрать в разделе Ресурсов вкладку Compute Engine.
Необходимо создать новый экземпляр.
Если вы не будете развертывать БД на виртуальной машине, то можете взять g1-small, иначе советую n1-standart.
Необходимо будет выбрать также ОС. Я выбрал Debian GNU/Linux 9 (stretch).
Всё, ВМ создана. Обычные её развертывание занимает от 1 до 5 минут.
Шаг 3. Настройка виртуальной машины
Вы можете подключиться по SSH со своего ПК или же взаимодействовать через платформу.
Для этого нажмите на SSH.
У вас откроется терминал Linux в новом окне.
Теперь перейдем к настройке. Сначала вводим команду:
sudo apt-get update
для обновления информации об новейших версиях пакетов.
После вводим:
sudo apt-get install python3-setuptools
sudo apt-get install python3-pip
Сам Python устанавливать не нужно, он уже есть.
Теперь необходимо установить все необходимые билиотеки. Есть небольшой нюанс, все библиотеки необходимо устанавливать дважды:
pip3 install ‘name_of_package’
для использования через коману python3, и
sudo pip3 install ‘name_of_package’
для systemd. Данная утилита поможет вам запустить бота и перезапускать его, если он упадёт.
Самый простой способ запускать бота через python3, но он будет выключаться, если вы будете отключаться. Можно использовать screen, но бот не будет сам перезапускаться. Также можно использовать crontab с проверкой порта, но мне кажется этот вариант сложнее, чем systemd.
Шаг 4. Заливаем бота на сервер
Есть два способа залить вашего бота. Если вы не дружите с Git, вы можете просто заархивировать бота в .tar и залить его на сервер:
После этого разархивируем его командой:
tar -xvf yourfile.tar
Теперь ваш бот хранится в папке с названием архива.
Второй способ через Git. Я думаю, не стоит обьяснять как это сделать людям, которые умеют его использовать.
После установки его командой:
sudo apt install git
Вы можете клонировать его себе на ВМ.
После этого переходим к настройке systemd. Для этого переходим в его директорию:
cd /etc/systemd/system
И создаём файл bot.service:
sudo nano bot.service
Вписываем в открывщиеся окно следующее:
[Unit]
Description=Telegram bot 'Имя бота'
After=syslog.target
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/home/название вашего юзера/название папки в которой лежит бот
ExecStart=/usr/bin/python3 /home/название вашего юзера/название папки в которой лежит бот/bot.py
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Закройте и соханите файл. Закрывается с помощью команды Ctrl+X.
После этого введите команды по очереди:
sudo systemctl daemon-reload
sudo systemctl enable bot
sudo systemctl start bot
sudo systemctl status bot
Если всё будет хорошо, вы увидите примерно следующее:
Всё, теперь ваш бот работает самостоятельно. Надеюсь моя статья поможет вам захостить вашего бота.
P.S.
1.Проверьте вашего бота на ошибки
Запустите вашего бота и проверьте его работу прежде, чем запускать его через systemd. Для этого перейдите в папку с ботом и запустите через python.
cd <папка вашего бота>
python3 bot.py
2.Добавьте в файлы с py-скриптами кодировку
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Вставить в начале файла.
3.Ошибки в systemd
Если вы проверяли бота на ошибки и он нормально работал, но он не хочет запускаться в systemd, то вы можете посмотреть логи и понять в чём ошибка просмотрев файл:
sudo nano /var/log/syslog
Вы можете скачать этот файл и просмотреть на своём компьютере через Notepad++.
4.Апдейт бота
Если вы хотите дописать или залить новую версию бота, то введите команду:
sudo systemctl stop bot
Провидите все необходимые манипуляции. А потом введите следующие команды, чтобы он опять заработал:
sudo systemctl daemon-reload
sudo systemctl start bot
sudo systemctl status bot