kossmos
@kossmos
Frontend разработчик

Как собрать связку nginx, front, back с помощью docker-compose?

Всем привет!

Есть два проекта: фронт на Vue.js и бек на Nest.js. Каждый проект, естественно, лежит в своём репозитории на Gitlab. Использую Gitlab CI/CD для сборки и доставки на VPS. Nginx настроен в проекте с фронтом. Проект с беком ничего не знает про nginx.

Пробовал nginx с docker-compose держать в отдельном проект, удобно, но... деплоить приходится руками, т.к. этот проект ничего не знает про фронт и бек.

Собственно сам вопрос: как завязать всё это дело на docker-compose, чтобы иметь один конфиг на всю связку?
Полагаю silver на Gitlab решает эту проблему за счёт Multi-project pipelines. А какие варианты ещё могут быть?
  • Вопрос задан
  • 1380 просмотров
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
А в чем собственно проблема?

Gitlab CI/CD загружает новую версию репозитория - в ./local-back или ./local-front, и дергает перезапуск docker-compose

docker-compose.yml который лежит в папке выше имеет примерно такой вид:

nginx:
   ...
   volumes:
   - ./local-back:/container/back
   - ./local-front:/container/front
  ...

back:
  ...
  volumes:
  -./local-back:/container/back
  command: тут скрипт который конфигурит бэк и запускает его

front:
  ...
  volumes:
  -./local-front:/container/front
  command: тут скрипт который конфигурит фронт, собирает статику, или что он там делает..


nginx видит бэк как back - соотвественно адресует запросы ему, видит и папку с бэком чтобы брать файлы оттуда при необходимости (загружаемое медиа и пр.)
nginx также видит папку с фронтом откуда берет статику и прочее
Ответ написан
@vitaly_il1
DevOps Consulting
Проект с беком ничего не знает про nginx.

Он и не должен вроде? Только фронту нужен URL  backend?

Насчет основного вопроса: я не работал с Gitlab CI, но в Jenkins я бы просто брал код из разных репо, строил images и запускал в docker-compose. Вроде этого:
https://stackoverflow.com/questions/59712578/multi...
Ответ написан
@noremorse_ru
А зачем один конфиг на разные проекты?
Пробовал nginx с docker-compose держать в отдельном проект, удобно, но... деплоить приходится руками, т.к. этот проект ничего не знает про фронт и бек.

В смысле он ничего не знает? Тебе нужно придерживаться микросервисной архитектуры, когда сервису ничего не нужно знать, кроме того, куда пулять http запрос. Пусть твой балансировщик проксирует / на фронт, а /api/ на бэк или как там у тебя урлы построены и всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы