February 21, 2020

Переносим проект на хостинг

Итак, после того как мы закончили с написанием кода по превращению аватарки Telegram в часы, следующим логическим шагом было бы развёртывание проекта на сервере. Наверняка у вас его нет, да и покупать как-то не хочется... Hо это и необязательно, поскольку сейчас существует множество бесплатных облачных решений, например Heroku.

Подготавливаем инструменты

Сперва давай зарегистрируем тебя на GitHub. Необходимо создать аккаунт (рано или поздно он точно может пригодиться) и установить Git. После создания аккаунта жмем "New repository". Называем его TimeChanger, можем добавить какое-либо описание, и жмем "Create repository".

Создаем репозиторий

Теперь установим Git. На Linux это можно сделать с помощью следующей команды:

$ sudo apt-get install git-all

На MacOS и Windows его нужно будет скачать и установить.

Ссылка для скачивания на MacOS

Ссылка для скачивания на Windows

Скачиваем Git по ссылкам выше и устанавливаем, это несложно.

Да, и не забудь конечно же зарегистрироваться на Heroku.

Командная строка

Есть много различных способов использования Git. Помимо оригинального клиента, имеющего интерфейс командной строки, существует множество клиентов с графическим интерфейсом, в той или иной степени реализующих функциональность Git.

В рамках данной статьи мы будем использовать Git в командной строке. Кроме того, с виртуальными средами можно работать только в контексте командной строки.

Поэтому, предполагается, что ты хотя бы в общих чертах знаешь, как открыть терминал в Mac или командную строку, или Powershell в Windows. Если это непонятно, возможно придётся ненадолго прерваться и изучить эти вопросы.

Виртуальные среды

Мы будем работать с виртуальной средой virtualenv. Сначала установим ее, выполнив команду в терминале Windows:

$ pip install virtualenv

Для MacOS или Linux будем использовать:

$ pip3 install virtualenv

Теперь давай наведем порядок в файлах. Создай новую папку и перейди в неё в терминале или командной строке. Нам нужно инициализировать в ней virtualenv:

$ virtualenv my_env
Имя среды my_env в принципе не имеет особого значения, но лучше сделать его интуитивно понятным.

Переходим в папку my_env. Здесь, в принципе и на Windows и на Linux/MacOS синтаксис одинаковый, используем команду cd. Теперь нужно клонировать git-репозиторий.

Вводим следующую команду:

$ git clone https://github.com/adreex/TimeChanger

Таким образом мы скопировали в папку проект отсюда: https://github.com/adreex/TimeChanger

В той же папке my_env запустим virtualenv:

  • На Windows: $ scripts\\activate.bat
  • На Linux/MacOS: $ source bin/activate
Если virtualenv был успешно запущен, приглашение командной строки должно начинаться с (my_env).

Установка зависимостей

Вообще говоря, в скопированном нами репозитории уже есть файл requirements.txt. Но далее нам понадобится рабочий интерпретатор на нашей локальной машине, для создания файла сессии. И кроме того, вдруг когда-нибудь понадобится деплоить собственный код?

Из терминала переходим в папку репозитория (мы клонировали ее под именем TimeChanger), и устанавливаем все необходимые зависимости:

$ pip install Pillow==6.0.0 pyaes==1.6.1 pyasn1==0.4.5 pytz==2019.1 rsa==4.0 Telethon==1.8.0
Обрати внимание, если ты деплоишь своего бота, то тут должны быть те зависимости, которые необходимы для твоего проекта.

Теперь нужно создать список зависимостей Heroku. Это несложно:

$ pip freeze > requirements.txt

Финальные шаги

В папке с проектом создадим Procfile. В этом файле необходимо разместить инструкции по работе с нашим скриптом. Имя файла обязательно должно быть Procfile (Procfile.windows в случае с Windows). У него не должно быть других расширений.

Содержимое файла должно быть таким:

worker: python main.py

Добавим файл __init__.py в папку с проектом. Он может быть пустым (просто оставь там закомменченную строку вида # test), но он должен там быть.

Добавим все файлы проекта и сделаем коммит в репозиторий:

$ git init
$ git add .
$ git commit -m 'initial commit'
$ git push --set-upstream <https://github.com/имя_вашего_профиля/TimeChanger> master

Теперь развернём проект на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.

Для MacOS или Windows, необходимо установить интерфейс командной строки. Переходим по ссылке и устанавливаем.

Для установки на Linux достаточно ввести команду:

sudo snap install heroku --classic

Помнишь мы ставили виртуальную среду и необходимые пакеты? Выполним на локальной машине следующий код:

python3 main.py

После этого вводим телефон, и создаем новую сессию в Telegram. Нам понадобится файл session.session, который мы зальем (вместе с остальным кодом) с помощью Git на Heroku

$ git add .
$ git commit -m 'initial commit'

Логинимся в Heroku, создаем приложение, и делаем пуш кода:

$ heroku login
$ heroku create
$ git push heroku master
$ heroku ps:scale worker=1

С этого момента приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:

$ heroku logs --tail
Коды ошибок можно найти на сайте Heroku.

Итог

Безусловно, бесплатный аккаунт накладывает некоторые ограничения. Тем не менее, теперь код с часами полностью автоматизирован. Поздравляем!


Материал подготовлен образовательной организацией Python Academy.