Чому GCP?
Під час написання телеграм ботів зіткнувся з питанням, як швидко і безкоштовно зробити так, щоб бот працював постійно. Варіанти з Heroku та Pythonanywhere мають надто маленькі ліміти, якщо у вас більше одного бота. Тому я вирішив користуватися GCP. Платформа надає безкоштовно 300 $ на рік + величезні знижки за використання цих коштів (до 94%).

Як захотіти вашого робота?
Крок 1. Реєстрація на GCP
Переходимо на сайт і натискаємо Почніть безкоштовно.

Вводимо свої дані та картку. Гроші з картки не списуватимуться, якщо ви самі не активуєте платну передплату.

Крок 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.py2.Додайте у файли з 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Джерело: habr.com
