R
Rezinkin
Назад к блогу

Как я автоматизировал деплой с помощью Docker и CI/CD

5 мин
DockerCI/CDDevOps

Проблема ручного деплоя

Раньше каждый деплой выглядел одинаково: зайти на сервер по 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, и через пару минут изменения уже на сервере. Автоматизация деплоя — одно из лучших вложений времени, которое я сделал.