#De mplo g
https://www.pythonanywhere.com это неплохой сервис, который мы используем для нашего тестового бота в телеге
Мы решили автоматизировать процесс обновления на проде с нашего репозитория, ведь нужно минимизировать количество работ непосредственно на хосте.
Это работает и на бесплатном аккаунте, где нет shh доступа.
И так приступим.
1. Подготовка проекта
Регистрируемся и создаем Flask проект на https://www.pythonanywhere.com
Открываем консоль на сервере и переходим к проекту cd mysite
Удаляем файл, что бы не было проблем при слиянии rm flask_app.py
Инициализируем git init
Указываем наш удаленный репозиторий, где указываете свой ТОКЕН без скобок
git remote add origin https://{TOKEN}@github.com/luchoffice:bot_telegram.git
Что бы получить токен необходимо перейти в Settings Developer / settings / Personal access tokens
Для неприватного репозитория достаточно git remote add origin https://github.com/luchoffice/bot_telegram.git
Забираем файлы из репозитория git pull origin main
2. Настраиваем вебхуки на гитхабе для нашего хоста
Переходим в настройки https://github.com/luchoffice/bot_telegram/settings/hooks
Указываем наш сервер и адрес по которому будет происходить обновление
http://luchoffice.pythonanywhere.com/update_server
Выбираем:
application/json
just push
Active
3. Перехватываем WebHook и делаем Pull запрос
В flask_app.py создаем route для получения вебхуков от GitHub, которые хаб автоматически присылает при срабатывании push событий.
В route адрес страницы должен совпадать с указанным webhook на github.
Указываем в качестве репозитория наш сайт на хостинге, который мы инициализировали выше и делаем pull запрос в main ветку на проде.
Таким образом мы избавляемся от необходимости вносить неконтролируемые правки на горячую прям на проде и всегда можем контролировать все изменения.
Какие проблемы могут возникнуть?
Основная проблема это слияние и баги, в main ветку должен попадать только код после одобрения и тщательной ревизии, а главное правило не вносить изменений прямо на сервере, доступ к серверу должен быть ограничен.
Что дальше?
Пока сервер не будет перезагружен наши изменения не работают необходимо настроить автоматическую перезагрузку при осуществлении pull запроса на проде, чем и займемся дальше.