- 01Коммит
Конкретная версия кода
- 02Проверки
Тесты отдельно от рабочей базы
- 03Сборка
Образы интерфейса и API
- 04Проверка запуска
Второе окружение до переключения
- 05Выпуск
Переключение и контрольные запросы
В репозитории —
приложение и процесс выпуска.
TaskFlow объединяет исходный код интерфейса и API с настройками автоматических проверок. Здесь можно увидеть, как изменения становятся рабочей версией.
dashboard-ui/Клиентская часть на React↗taskflow-seo/Серверное приложение на FastAPI↗.github/workflows/CI и доставка после успешной проверки↗На 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 и не входят в описание проекта.
Предыдущая версия остаётся доступной.
После переключения второе окружение сохраняется как цель возврата. При проблемах восстанавливаются прежняя конфигурация маршрутизатора и active-color. Это возврат приложения; общая PostgreSQL не откатывается вместе с цветом.