Я хотел сделать то же самое, что и вы: мы запускаем Discourse на Amazon ECS, поэтому нам нужно было иметь возможность собирать только веб-образ и загружать его в реестр. Мне не хотелось взламывать процесс сборки Discourse, так как мы хотим максимально приближаться к официально поддерживаемой установке.
Вместо этого мы используем обычный скрипт launcher для создания настройки из двух контейнеров на локальной машине, но игнорируем контейнер данных и загружаем веб-контейнер в реестр. Во время выполнения мы переопределяем детали подключения к Postgres и Redis через переменные окружения.
Развёртывание нового образа состоит из трёх шагов:
-
Выполните безопасные предварительные миграции. Запустите в ECS эту команду (с новым образом):
SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate -
Разверните новый образ. Обновите сервис ECS.
-
Выполните пост-миграции. Запустите в ECS эту команду:
SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
Запуск локального контейнера данных во время сборки образа, вероятно, расточителен, но это позволяет использовать стандартный файл web.template.yml, не беспокоясь о том, какие его части пытаются подключиться к базе данных или Redis.