Проблема ручного деплоя
Раньше каждый деплой выглядел одинаково: зайти на сервер по SSH,
выполнить git pull, пересобрать зависимости, перезапустить
сервисы. На словах — пять минут, на практике — полчаса с неизбежными
ошибками. Забыл обновить .env? Сервис упал. Не пересобрал
контейнер? Старый код в продакшене. Когда проектов стало больше трёх,
ручной деплой превратился в рутину, которая отнимала целые вечера.
Переход на Docker Compose
Первым шагом стала контейнеризация всех сервисов. Каждый проект получил
свой Dockerfile и общий docker-compose.yml.
Основные преимущества, которые я получил:
- Изоляция окружения — никаких конфликтов зависимостей между проектами
- Воспроизводимость — одна команда
docker compose up -dподнимает всё - Простота отката — достаточно переключить тег образа на предыдущий
Настройка GitHub Actions
Следующий этап — автоматизация через CI/CD. В каждом репозитории я настроил
GitHub Actions workflow: при пуше в ветку main запускается
сборка Docker-образа, прогон тестов и деплой на сервер через SSH.
Секреты (хост, ключи, переменные окружения) хранятся в GitHub Secrets.
Весь пайплайн занимает 2–3 минуты, и я получаю уведомление в Telegram
о статусе деплоя.
Результаты
Время деплоя сократилось с 30 минут до 3. Количество ошибок при
развёртывании упало практически до нуля — всё, что проходит тесты,
гарантированно работает в продакшене. Теперь я просто делаю
git push, и через пару минут изменения уже на сервере.
Автоматизация деплоя — одно из лучших вложений времени, которое я сделал.