Rodegast
> При этом ты создал кучу проблем, да и отладка у тебя может работать только с PyCharm-ом.
Ты постоянно говоришь про КУЧУ проблем, а кучи нет. У пользователь PyCharm'а проблем нет вообще. Также я убежден, что ЛЮБАЯ современная IDE может работать с docker'ом.
Rodegast
> Основная проблема в том что у тебя появляется лишняя сущность. По сути что бы запустить несколько процессов тебе приходится устанавливать демона, писать конфиги для docker-compose, возиться с контейнерами/образами, версионировать всё это и т.д. У тебя возникает дополнительная инфроструктура, её нужно администрировать, в идеале для этого тебе нужен дополнительный DevOps инженер.
- Лишняя сущносность, это докер-демон с его зависимостями + docker-compose.yaml? - Пусть так, но ИМХО комбайн из скриптов на баше - точно такая же сущность и уж точно более сложная в поддержке, дебагге и актуализации.
- Версионировать ничего не нужно, ну разве что docker-compose.yaml в git-индекс добавить; Зачем версионировать? Тут я вас возможно не понял.
- Никаких DevOps-инженеров не нужно, вы себе, что-то слишком сложное представили. Тут же нет необходимости деплоить и оркестрировать контейнерами через Kubernetes. Под каждый процесс просто по контейнеру. Выучи базовые команды по запуску и останове контейнеров и будет счастье.
Ты говоришь “лишняя сущность - сложнее взаимодействовать с ситемой, докер не нужен в dev-среде!” и “пиши комбайн на баш-скриптах это все упрощает”. Я твою позицию понимаю, но тут тоже куча минусов и главный из них - баш. Баш - очень недружественная штука, во всей команде, можно сказать, что я единственный, кто на нем может не то, чтобы писать, а писать понятно. Есть еще пара ребят, кто что-то пишут на баше, но это так… В любом случае много кода на баше в ОДНОМ месте - это очень плохо просто потому что этот код трудно написать, трудно написать понятно, трудно поддерживать, расширять и т.д. Баш скрипты полезны, но я хочу, чтобы это были скрипты-помогайки, а не комбайн.
Вот смотри, на примере возникшей у меня проблемы с доставвкой protobuf-файлов до компонентов системы.Эта проблема возникла у меня на раннем этапе, еще до того как я принял решение писать docker-compose, точнее в момент когда я выбирал между вариантом с баш-комбайном и docker-compose. На тот момент я делал первую версию прототипа с ВСЕГО 4-ю модулями: mod_cards, mod_deals, mod_services, mod_api.
1 Я описал для каждого модуля .proto структуры - ок.
2 Формирование прото пакетов, два возможных варианта:
2.1.1 Сначала СКОМПИЛИРОВАТЬ .proto-файлы в python-пакеты;
2.1.2 Доставить эти пакеты по модулям, по ВСЕМ модулям ВСЕ варианты пакетов, каждый модуль при этом лежит в разных папках;
2.2.1 Сначала доставить ВСЕ .proto-файлы по ВСЕМ модулям;
2.2.2 СКОМПИЛИРОВАТЬ .proto-файлы в python-пакеты на месте;
3 Чтобы поставленные пакеты были доступны процессам их потребляющим мне надо перезапустить КАЖДЫЙ процесс!
!!! Это уже слишком много геммора даже для ВСЕГО ЧЕТЫРЕХ компонентов, которых потом будет в разы больше.
А если учесть мою хотелку в dev-среде править .proto-файлы и сразу видеть результат изменений в runtime, то получается вообще сложно! Это надо ловить изменения в .proto и запускать алгоритм описанный выше заново.
Также после отработки этого скрипта я всегда имею артефакты от компиляции .proto-файлов, которые ВСЕГДА находтся в дирректории проекта. Конечно, я могу компилировть внутри /tmp-директории, чтобы артефакты компиляции не мозолили мне глаза, но python-пакеты то по процессу попадают в дирректорию проекта, где они мне нужны только в runtime, но не нужны в репозитории. Конечно, я могу добавить их в .gitignore, но глаза то они мозолят. Конечно, я могу расширить наш баш-комбайн таким образом, чтобы он еще и мусор подчищал, но зачем так сложно?
В итоге я сделал все через небольшой баш-скрипт-прото-компилятор и docker-compose:0 ранее я писал, что в каждом контейнере есть процесс мониторящий изменение СВОЕГО исполняемого кода и перезапускающий основной процесс докера в случае изменений;
1 на dev-хосте есть папка с .proto-файлами примонтированная к каждому контейнеру через volumes. Это значит, что при каждой правке этих фалов разработчиком, ВСЕ контейнеры получают новые .proto
2 есть баш-скрипт, который очень тупенький, но прекрасно умеет решать одну задачу - компилировать .proto-файлы. Скрипт примонтирован как volume к каждому контейнеру;
3 в каждом контейнере есть процесс аналогичный тому, что в п.0 только он смотрит на proto-директорию и при каждом изменении запускает компиляцию .proto-файлов в python-пакеты;
4 процесс из п.0 видит, что кодовая база изменилась и отрабатывает.
Да я без лишнего гемора, получаю runtime-компиляцию .proto-файлов без лишнего геммора, просто по двум причинам:
1 все контейнеры стандартизированы по структуре, очень просты и тупы.
2 баш-скрипт очень простой и применим к каждому контейнеру.
Мне кажется, что это очень удобно!py.user.next
Ну так выложил бы его здесь.
Много слов, мало кода.
Я выше сказал, что отложил этот скрипт незакончив.