Ansible для Docker Compose: деплой контейнеров без ручных ssh-сессий
Сижу в пятницу вечером, допиваю чай. Вдруг — сообщение от клиента: сайт не открывается. SSH-доступ есть, но я не помню, на каком сервере что запущено. Знакомо?
Предыстория
У меня несколько self-hosted проектов: CRM, пара блогов, трекер задач. Раньше я заходил на каждый сервер руками, подтягивал образы, переписывал compose-файлы.
Однажды я забыл обновить переменные в .env на одном из серверов. Prod упал на час. Клиент был недоволен.
Проблема
Ручные ssh-сессии — это риск. Всегда найдется сервер, на котором забыл выполнить docker pull. Или compose-файл лежит в другом каталоге.
Я тратил по 20 минут на деплой простого обновления. А если проектов пять — это уже два часа тупого копирования команд.
Почему это важно
Каждая минута простоя — деньги. Даже для маленького pet-проекта потеря времени демотивирует.
Деплой должен быть как нажатие одной кнопки. Или одной команды в терминале. Иначе ты просто теряешь ресурс на рутину.
Решение
Я написал простой Ansible playbook для Docker Compose. Он делает три вещи:
- 🚀 Копирует compose-файл и .env на сервер
- 📦 Выполняет docker compose pull для обновления образов
- 🔄 Перезапускает сервисы: docker compose up -d --remove-orphans
Весь процесс занимает одну команду: ansible-playbook deploy.yml. Без ручного входа по ssh. Без проверки, не забыл ли я что-то.
Я добавил пару переменных — имя хоста и путь. Теперь один playbook работает для всех моих проектов. Просто меняю инвентори.
Результат
Обновление любого сервиса теперь занимает 10 секунд. Я запускаю команду и пью кофе.
Ручные ошибки ушли. Серверы всегда в актуальном состоянии. Могу спокойно уехать на выходные — деплой сделает коллега одной командой.
Для небольших self-hosted проектов этого достаточно. Ansible не перегружен лишними абстракциями. Docker Compose не требует сложных оркестраторов.
📬 Свяжитесь с нами
Хотите внедрить это в своем бизнесе? Пишите нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro
- ✈️ Telegram Global (EN): Academyoneitproglobal
- ✈️ Telegram (RU): Academyoneitpro