Бесплатный хостинг Telegram-бота на Google Cloud Platform

    Почему 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
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 18

      +13
      «Бесплатный» и «бесплатный пробный период» это разные вещи.
      Заголовок статьи по сути вводит в заблуждение
        –13

        Согласен, стоило уточнить, но всё же ничего не мешает раз в год привязать новую карточку и перезалить снимок, поэтому посчитал возможным назвать статью таким образом.

        +2
        Только есть одно но — Google Cloud не разрешает использовать individual accounts в России, только business.
          –1

          Я из Беларуси и у нас такая же ситуация. Главное, чтобы на карточке было немного денег(Гугл возьмёт и вернёт их обратно).
          Данные можете ввести любые, если вы не собираетесь переходить на платное использование после.

          0
          del
          +2
          Я так понимаю, что питон вручную из виртуальной среды запускается, а systemd дёргает глобальную версию?
          Я бы посоветовал прописать virtual environments в .service файле с путями к библиотекам питона вместо того, чтобы заниматься двойной установкой через pip.
          Или вообще использовать только глобальный питон системы без всяких виртуальных сред и не усложнять жизнь. У вас все равно только один проект одной версии на машине крутится.

          И «User=root» без надобности лучше не использовать, а учитывая что WorkingDirectory у вас "/home/$USER", то правильнее было бы " User=$USER".

          И непонятно зачем вы пытаетесь запускать скрипт через /usr/bin/python3, если у вас в файле прописан интерпритатор #!/usr/bin/env python (через который вы, очевидно, запускаете скрипт вручную, поэтому и приходится устанавливать библиотеки два раза).

          # -*- coding: utf-8 -*- по большому счету имеет смысл прописывать во втором питоне. Начиная с 3й версии utf-8 итак по дефолту
            0
            Мне кажется, для такого небольшого проекта лучше бы подошёл Google AppEngine, когда Гугл сам заботится о развертывании приложения и перезагрузками его по необходимости, т.е не надо голову греть про systemd юниты и обновление ОС. Ещё до недавнего времени можно было развернуть python 2.7 приложение совсем бесплатно (совсем, а не на год как в статье), как сейчас — не знаю. Ну и с этими совсем бесплатными приложениями были ограничения, возможно, long poll бот и не заведётся.
            Тем не менее, за триальные 300 баксов можно и полноценное окружение типа flexible иметь, со всеми возможностями последних питонов
              0

              Что за нищебродство, да ещё от айтишников.
              10-30 баксов в год на свою вдску, где можно делать всё и без ограничений — это мастхэв.
              Вы б ещё на народ.ру размещались бы в 2020.

                0
                Подскажите VDS на 10-30 баксов в год, пожалуйста
                  0

                  Гугл в помощь.
                  Но суть не в цене. Подход к личной среде переводит на совершенно иной уровень работы и зарплаты.

                0

                В GCP можно иметь всегда бесплатную виртуальную машину(1
                F1-micro instance per month), даже после окончания триал периода, правда она будет жить в США

                  0
                  По мне плохое решение.
                  Боты это прямая задача для stateless и конкретно Google Cloud Run.
                  Бесплатный лимит позволяет обрабатывать до ~66т сообщений к боту в сутки.
                  Для большинство ботов должно хватить.
                    0
                    Можно на cloud function вложиться во free tier
                      0
                      sudo systemctl daemon-reload
                      Релоад надо делать, только если вы поменяли сам демон (то есть системдешный файл, который управляет ботом). Во всех остальных случаях достаточно простого restart.
                        0
                        Спасибо, не знал
                          0
                          Зато проставили хаб «Настройка Linux» :)
                        0

                        Триальный — да, бесплатный — нет.


                        Спасибо, конечно, за старания, но, кмк, стоило упомянуть Google Cloud Run, AWS Lambda и Heroku с их триалами, ведь они предлагают запуск кода без мучений с настройкой vm linux и окружения.


                        Кроме прочего в Google Cloud есть always free тариф на один экземпляр f1-micro и не только, в AWS так же есть always free, как и у большинства облачных провайдеров, вот тут есть подробности.

                        Only users with full accounts can post comments. Log in, please.