Экватор рассказа про техническое оживление Python Дайджест проекта. Ранее рассказал как перейти с Python 3.4 на Python 3.11 и автоматически актуализировать весь код. В этой части расскажу про организацию CI для Open Source проекта на основе Github Actions — как гонять тесты, проверять код, зависимости, разворачивать приложение и делать бэкапы на внешнее хранилище.  В Python Дайджест есть три операции, которые хотелось бы сразу автоматизировать: Лет 5 назад, Travis CI был "CI по умолчанию для Open Source проектов", с помощью него запускали тесты, делали сборки, даже работали с серверами по SSH. Было удобно и бесплатно. Сейчас "CI по умолчанию для OpenSource на Github" — это Github Actions. Это средство автоматизации, которое позволяет к событиям взаимодействия с репозиторием привязать выполнение почти любых действий. Про него на хабре несколько раз писали — раз, два, три. Github Actions крут тем, что сами Actions — это плагины (часто скрипты или Docker образ), которые пишут все кому не лень и выкладывают на Github Marketplace. Работает это так: А Github Action плагины — это готовые действия, которыми вы можете стянуть код из репозитория, преобразовать его, куда-то сохранить и прочее. Плагинов много. Для моих задач хватило таких плагинов. Они покрывают действия от скачивания кода репозитория до сборки образа в Docker Hub и подключения к внешнему серверу по SSH. Старый сервер был на устаревшей Ubuntu 14.04, для которой не удалось найти живых репозиториев с пакетами и обновиться выше. Также сама система была сильно замусорена. Поэтому решил, что проще создать новый сервер и настроить. Мне не хотелось получить мусорный сервер спустя очередные 5 лет, поэтому решил запускать приложение с помощью docker compose (docker_compose.prod.yml), собирая Docker (Dockerfile) образ приложения. Но для начала настроил сервер с актуальной Ubuntu.
Python Дайджест хостится на FirstVDS уже давно, без неожиданных проблем, поэтому и новый сервер проще запустить там. У FirstVDS есть подробная документация на большинство случаев жизни, описаны даже самые первые шаги с хостингом. Купил сервер с 2 потоками CPU, 4 Gb RAM и 60 Gb SSD. За глаза и за уши такого количества ресурсов хватает для проекта. После получения сервера нужно было: Сервер готов для следующих шагов. Хорошо писать программы с учетом 12 factors, получаем более удобное, понятное в поддержке приложение. Один практический аспект из 12 факторов — это отказаться от hardcoded настроек в пользу настройки через окружение. В исполняемом окружении прописываем переменные (доступ до БД, секреты и прочее), а приложение считывает их на старте с помощью библиотеки python-dotenv. Github Secrets позволяют сохранить переменные окружения, а затем обратиться к ним при работе CI. Причем, на каждую ветку можно сделать отдельные наборы переменных. Вот я и создал набор production и указал переменные для доступа по SSH, а также для работы приложения.  Готово, теперь можем запускать. Сделал тестовый коммит и процессинг начался: Дальше в настройки DNS домена была настроена A запись с парой домен-ip адрес сервера. Вот и все, теперь Github Actions будет автоматически раз в сутки делать бэкап базы на Яндекс.Диск, при Pull Request будут проходить тесты и проверки кода, а по коммиту в основную ветку — разворачиваться приложение на сервере. 
 НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS. CTO https://sapronov.me/