Вступление

D2C использует плейбуки Ansible для разворачивания сервисов. Настройки со страницы создания сервисов используются как параметры для выполнения плейбуков. У нас есть набор плейбуков для различных конфигураций и типов сервисов. Вы выбираете тип сервиса, вводите необходимые параметры, указываете исходный код и/или скрипты для разворачивания и запускаете процесс разворачивания. Весь процесс логгируется отдельными задачами и вы можете следить за ними в панели управления D2C.

В D2C есть три стадии разворачивания: сборка, разворачивание и запуск. D2C может выполнять все три, одну за другой, или только какую-то одну необходимую. Например, вы можете захотеть пересобрать контейнер, обновив Node.js, и запустить его с таким же исходным кодом и данными. Или вы можете обновить исходный код и перезапустить ваш сервис, чтобы забрать изменения.

Сборка

Это процесс сборки образа контейнера для вашего сервиса. Он включает скачивание базового образа Docker для сервиса, установку и настройку необходимых пакетов. На этой стадии нет доступа к сервису. Все модификации, выполненные на этой стадии, хранятся внутри образа контейнера; данные не сохраняются в постоянном хранилище. Стоит воспринимать эту стадию как подготовку сервера для запуска сервиса. Используйте Глобальные зависимости для запуска команд на этой стадии.

Разворачивание

Это процесс подготовки вашего сервиса к запуску. В течении этой стадии у вас есть доступ к исходному коду сервиса и постоянному хранилищу, но изменения не сохранятся в образе контейнера. Следует использовать эту стадию, например, для компиляции CSS, минификации JS, установки локальных зависимостей, выполнять первоначальное заполнение базы данных и т.д.

Процесс разворачивания запускается во временном контейнере с копией исходного кода, но с таким же постоянным хранилищем. Впоследствии, исходный код из этого временного контейнера помещается в основной контейнер. Это позволяет достигнуть практически безостановочного разворачивания с подготовкой новой версии кода пока предыдущая находится в онлайне; в то же время, если вам потребуется мигрировать текущую базу данных на новую версию - у вас будет доступ к постоянному хранилищу. В зависимости от предпочитаемого процесса разворачивания, вы можете захотеть остановить текущий сервис (в случаях миграции базы данных) или оставить запущенным и просто заменить исходный код после процесса подготовки во временном контейнере. Используйте Локальные зависимости и подготовка кода для выполнения команд на этой стадии.

После того, как процесс разворачивания выполнен, временный контейнер удаляется. Поэтому на этой стадии вы можете изменять только исходный код или данные постоянного хранилища. Любые изменения, которые выполнены в других местах (например глобальная установка npm-пакетов) будет утеряна. Помните про использования стадии сборки для внесения изменений контейнера.

Запуск

На этой стадии контейнер сервиса запускается с исходным кодом и монтированным постоянным хранилищем. Сетевое взаимодействие уже правильно настроено, порты проброшены и DNS настроен. Образ контейнера созданный во время стадии сборки используется для запуска контейнера. Используйте Команду запуска для запуска вашего сервиса.

Обычно вам стоит изменять Команду запуска только для сервисов типа Node, Python и т.д. Сервисы хранения данных, такие как базы данных и веб-серверы предоставляются в D2C с уже предустановленными командами.