Деплой приложения через bash и docker-compose

Деплой проекта позволяет сделать ваше приложение видимым для вашей аудитории. Мы, в Wormsoft, перепробовали разные варианты деплоя. Для небольших проектов мы остановились на варианте простого Bash скрипта вместе с правильно настроенным docker-compose файлом.

Примерный желаемый флоу

В итоге мы получили результат, в котором наше "микросервисное" приложение декларативно разворачивается на сервере клиента и легко обновляется при выходе новых версий исходников.

Экспериментальное видео

В этот раз я решил оформить свой опыт в видео небольшого видео-урока.

Буду признателен за ваш просмотр и обратную связь. Если что-то я сделал критически неправильно, то будет круто об этом узнать. Если видео понравилось, то знать про это тоже лишним не будет:)

Docker-compose с env переменными вместе Bash творят чудеса!

Основная идея заключается в том, что рядом с docker-compose.yml можно положить файл .env примерно со следующим содержимым

MICROSERVICE_1_SRC_DIR=/var/src/microservice_1
MICROSERVICE_2_SRC_DIR=/var/src/microservice_2
MICROSERVICE_3_SRC_DIR=/var/src/microservice_3
PROJECTS_BRANCH=master

И сделать блок build в docker-compose следующим

service1:
    build:
      context: ${MICROSERVICE_1_SRC_DIR}
      dockerfile: Dockerfile

А в bash скрипте, которые будет заниматься деплоем всего сервиса сделать следующую запись:

folders=(\
    $MICROSERVICE_1_SRC_DIR\
    $MICROSERVICE_2_SRC_DIR\
    $MICROSERVICE_3_SRC_DIR\
      )

for folder in ${folders[*]}
do
    echo "update " $folder
    cd $folder && git fetch
    cd $folder && git reset --hard origin/$PROJECT_BRANCH
done
docker-compose up -d --build

И получить новую собранную версию все проекта со всеми микросервисами. Если выходит новая версия какого-то из сервисов, то мы запускаем этот скрипт, который обновит исходники, пересоберет образы и запустит контейнеры и приложение заработает как надо. Все эти идеи детально отображены в моем видео, так что приятного просмотра!

Полезные ссылки

В видео я упоминаю несколько раз свои репозитории с примером проекта. Прикладываю ссылки сюда:

  1. github.com/gmoreva/1-bdc-interface - пример интерфейса, который общается с публичным микросервисом.
  2. github.com/gmoreva/1-bdc-service-example - пример "микросервисов", которые общаются между собой через REST и один из них открыт в паблик и доступен для интерфейса.
  3. github.com/gmoreva/1-bdc-prod - репозиторий с примером боевогоо docker-compose файла, bash скрипта и примером .env. Данный пример разворачивает

Благодарю за внимание!