Как подружить Ansible и Docker?
Здравствуйте.
Делаем с другом проект бекенд в виде API на node.js, фронтенд на ember.js, используем postgresql и redis. Пока ведем разработку локально, но планируется три окружения: development, staging, production. Еще не деплоя ничего в свет уже есть проблемы, что на разных компах разные версии node, npm, postresql и т.д. А потом охото иметь одинаковую инфраструктуру на всех 3х типах окружений. Немного работал с Ansible, но без Docker, потому выбор пал на него.
Планируется 4 контейнера:
— контейнер с nginx, в нем же планирую положить фронтенд код
— контейнер с node.js приложением
— контейнер с postgresql БД
— контейнер с redis — используется для Pub/Sub и в качестве кеша.
Контейнер с nginx отдает фронтент и проксирует запросы к api на контейнер с node.js приложением.
На дев и стейдженг, эти контейнеры должны запускаться в рамках одного комп., а на продакшене скорее всего каждый контейнер будет запускаться на отдельно виртуальном сервере, к примеру, на дроплетах в DigitalOcean.
1. Делаю 3 inventory файла для каждого окружения. Для дев и стейдженг, для всех типов серверов ip адреса будут одинаковыми.
2. Ansible должен подготовить каждый из серверов:
— создать необходимых юзеров
— установить docker
3. Получается должно быть 4 Dockfile по которым docker создаст image:
— Как правильно описывать конфиги: описание хоста в nginx, настройки postgresql, указать, что бы данные хранились не в контейнере.
4. Как построить процесс сборки? Процесс сборки должен проходить в отдельном контейнере? Сборка состоит из таких этапов:
— Взять последний код с git (в одном репозитории и фронтенд и бекенд)
— Обновить npm update для бекенда
— Запустить код стайл + тесты для бекенда
— Обновить npm update для фронтенда
— Обновить bower update для фронтенда
— Запустить код стайл + тесты для бекенда
— Сделать билд фронтенда ember build
6. Как правильно деплоить?
— Делать процесс сборки на выбранном окружении, после чего перезапускать докер контейнеры, что бы они подтянули изменения.
— Делать процесс сборки создавать новый контейнер и как-то блансировать в nginx нагрузку на него, но тогда не совсем понятно как быть для девелопмент окружения
5. Как устанавливать задачи в короне?
Получилось много текста, но перечитал много статей, но в них в основном обзор доков и дельных советов мало, как все организовать для продакшена.
Потому если лень, отвечать, просто ткните в хорошие материалы по данной теме.
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
15 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів