Настроил путь
от коммита до сервиса.

Связал GitHub Actions, внешний VPS и домашний Debian. Новая версия проходит тесты, собирается на сервере и получает трафик после проверок. Для доставки выделена учётная запись с ограниченными правами.

GitHub Actions → VPS → Debian → второе окружение.
  1. 01Коммит

    Конкретная версия кода

  2. 02Проверки

    Тесты отдельно от рабочей базы

  3. 03Сборка

    Образы интерфейса и API

  4. 04Проверка запуска

    Второе окружение до переключения

  5. 05Выпуск

    Переключение и контрольные запросы

В репозитории —
приложение и процесс выпуска.

TaskFlow объединяет исходный код интерфейса и API с настройками автоматических проверок. Здесь можно увидеть, как изменения становятся рабочей версией.

На Debian рабочий репозиторий размещён в /opt/company/repositories/TaskFlow. Каждый выпуск получает отдельный каталог /opt/company/releases/<commit>: это связывает запущенную версию с конкретным состоянием исходного кода.

Моя задача здесь — сделать путь изменения понятным: от коммита и тестов до сборки, проверки состояния и переключения маршрутизатора.

Тесты отделены от рабочей базы.

CI запускается для push и pull request в main и develop. Среда — Python 3.13; команда pytest --cov=app --cov-report=term запускает тесты и выводит покрытие. Для тестов используется SQLite, подключение к рабочей PostgreSQL не требуется.

Доставка запускается после успешного завершения CI для main. Сценарий получает идентификатор коммита: на сервер выпускается определённая версия исходного кода.

Домашний сервер доступен через отдельный туннель.

GitHub Actions подключается к VPS по SSH :22. ProxyCommand использует 127.0.0.1:2222 на VPS — обратный проброс к SSH :22 домашнего Debian.

Учётная запись deploy выполняет sudo -n /usr/local/sbin/taskflow-deploy <COMMIT>. Блокировка flock исключает одновременное выполнение сценария. Далее проверяются Git-состояние и коммит, создаётся выпуск, собираются образы и запускается другое окружение.

Полномочия ограничены задачей выпуска.

В sudoers разрешён конкретный сценарий taskflow-deploy. Общие права sudo для произвольной оболочки root не выдаются. Ключи доступа хранятся в GitHub Secrets и не входят в описание проекта.

На VPS находятся внешний Nginx и SSH-вход. Контейнеры приложения работают на Debian. WireGuard wg-vps относится к прежней схеме и не участвует в текущем выпуске.

Предыдущая версия остаётся доступной.

После переключения второе окружение сохраняется как цель возврата. При проблемах восстанавливаются прежняя конфигурация маршрутизатора и active-color. Это возврат приложения; общая PostgreSQL не откатывается вместе с цветом.

Подробный разбор выпуска и возврата версии →