сервисов из одного репозитория, зависимости у них прописаны в одном package.json и соответсвенно каждому контейнеру нужны свои зависимости, как их передать в контейнер? Есть вариант хранить node_modules в общем томе и прокидывать через volume либо для каждого контейнера устанавливать свои зависимости из разных package.json, но техлид эти варианты отмёл. Общаются сервисы по очередям, через воркеров bullMQ, кеширует redis. Хз, что он хочет ещё. Какие вообще best practice существуют по архитектуре микросервисов?
"один репозиторий на все 3 приложения (http server + 2 ms)
- 1 package.json
- три разных Dockerfile, для каждого мс
- 1 общий docker-compose.yml
- volumes - нет"
такие вводные
Все зависимости должны быть в образе, какие еще тома?
Ну вообще этим должен заниматься архитектор, все продумать и приложение писать изначально заточенное в микросервисы. Вам монолит распилить надо? Архитектуру кто делает?
Бест практикс - все зависимости внутри имейджа никаких внешних подключений
Причем тут архитектура. Им я так понял просто надо три имейджа собрать из одного репа
Я понял что нужно распилить на микросервисы монолит.... Тз хромает
разные package.json и package-lock.json/yarn.lock для каждого приложения конечно. Зачем раздувать образы, и тащить одни и те же node_modules в каждый сервис, когда он все из них не будет использовать? - это надо задать вопрос тех. лиду, я думаю кроме ответа "мне удобней править один файл чем несколько" он не сможет ничего ответить, а это не повод раздувать образы, укудшать скорость деплоймента, хранить больше данных в registry чем надо.
Мой вариает с одним имейджем потанциально меньше места занимать в сумме будет
на мой вкус это закрытие орагнизационной проблемы техническими методами. Как-то костыльно
Один имэйдж на все 3 сервиса?
Да, просто запускаете разное.
Так не прокатит, тк смысл в том, чтобы была возможность при необходимости поднимать сервисы по отдельности в зависимости от нагрузки
Тогда 3 файла пекеджа. Либо в печку Лида.
Ну дык и в чем проблема
общий образ даст такую возможность. Через разные entypoint легко разруливается, или через один общий но с разными аргументами
объясните пожалуйста подробнее про entripint?
На самом деле частый паттерн в мире джс почему-то, целые менеджеры монореп пишут, чтобы собирать сервисы с общим пакаджем но в каждом билде только нужные пакеты
ну тебе предложили делать один образ на все приложения. Далее стоит задача запустить их в контейнере из этого образа. Ты можешь, запускать нужное тебе приложение указав нужный entrypoint. Например: 1) /opt/app1/server.js - запуск app1 (в терминах куба: command ["node", "/opt/app1/server.js"]) 2) /opt/app2/server.js - запуск app2 (в терминах куба: command ["node", "/opt/app2/server.js"]) Или ты можешь написать entypoint который запускает нужное тебе приложения исходя из аргументов в Dockerfile: ENTRYPOINT ["/entrypoint.sh"] 1) /entrypoint.sh app1 - запуск app1 ( в терминах куба: args: ["app1"] ) 2) /entrypoint.sh app2 - запуск app2 ( в терминах куба: args: ["app2"] ) entrypoint.sh в зависимости от аргумента запускает нужное приложение
Вот! так как технически то это сделать?
В голову лезут lerna ,ng
я договорился с лидом об отказе от lerna, иначе в образ пришлось бы запекать много всего. То есть проблема организационная. Если бы не смог договориться, то на любые жалобы про размер образа и почему он долго качается, отсылал к тому что это lerna и сами так захотели
Через sh норм идея... Но лучше 3 разных образа:)
Там как раз не пришлось бы
да, мы так и делаем. Разные образы, разные package.json
это у нас один докерфайл на весь реп и в одном контйнере все 3 сервиса крутятся?
я деталей не помню про lerna, но помню было что-то связано со сборками
нет. Три контейнера, один образ один dockerfile
1 образ 3 контейнера же, а что где запускать ты разруливаешь через аргументы к энтрипоинту
звучит слишком по девопсовски для просто разраба)
Эм...... Ну У вас выбора особо нет. Выше весь дискас был уже... Дык повесьте задачу на девопс, или У вас нет?
ок, это я понял уже. А через bind mount можно решить мою задачу? нагуглил такой вариант
Возьмите инструкцию от Дмитрия выше, почитайте, поищите примеры как люди делают. На самом деле так часто делают.... Точно найдете примеры, но он написал чуть ли не под ключ вам всё.
На каком варианте в итоге остановиличь? Один докерфайл+ентрипоин?
Я так понимаю что да....вариантов предложили минимум 2
Ты прям так любишь до мелочей жевать)
Похвально же! Спасибо мил человек надо говорить:)
Обсуждают сегодня