Как стать автором
Обновить

Комментарии 17

Как в Россельхозбанке сейчас прогресс IT в целом?

Скажите пожалуйста, есть ли возможность при помощи nodemon отслеживать изменения файлов снаружи контейнера? Разработка ведется снаружи и очень желательно, чтобы при сохранении файла старый сервер внутри контейнера останавливался, новый запускался и обновлялась вкладка браузера когда завершится запуск сервера.

Штатных средств не нашел, в итоге использую собственный велосипед на базе chokidar + websockets + puppeteer. Но все равно, не оставляет чувство, что я упустил что-то и что такой важный кейс разработки кто-то автоматизировал должным образом.

nodemon -L разве не это делает?

В том-то и дело, что эта опция активирует отслеживание через polling. На крупных проектах нужно будет увеличивать интервал до нескольких секунд, а это уже убивает смысл автоматического рестарта сервера.

В коде из статьи вроде так и должно работать - в описании сервиса фронта папка ./client монтируется в контейнер как /app, так что все локальные изменения будут видны и в контейнере

Наверное я не совсем хорошо объяснил суть проблемы. Nodemon успешно работает внутри контейнера: если я захожу внутрь контейнера и там редактирую файл например при помощи vim, то nodemon это отслеживает и перезапускает сервер. Однако, когда я редактирую тот же файл снаружи контейнера, например при помощи VS Code, то nodemon, работающий внутри контейнера не может отследить изменение

Смонтировать внешний том внутрь контейнера можно?

Смонтировано. И вот как раз в смонтированной папке nodemon, который работает внутри контейнера, не отслеживает изменения, которые производятся в той же смонтированной папке в хостовой ОС. Т.е., файлы по факту меняются, но nodemon не получает события об их изменении.

Иными словами, nodemon, который работает в линуксовом контейнере не получает сообщений, когда я снаружи контейнера в винде нажимаю Ctrl+S в виндовом блокноте.

Не знаю, насколько это правильно, но я использую polling во время разработки чтобы сервер в Docker видел изменения. Другого решения я не нашёл. nodemon тоже так может, но написано, что это "должно быть крайней мерой", потому что будет поллить все файлы, которые найдёт.

С помощью этого сервиса можно клонировать кодовую базу на нескольких системах – везде будет одинаковый результат.

Чтобы был действительно одинаковый результат, нужно использовать package-lock.json:

COPY package.json package-lock.json
RUN npm ci

А для продакшена вообще `npm ci --production`, что часто существенно снижает размеры образа.

не понял зачем nodemone в контейнере если при любых изменениях вы делаете docker-compose up и происходит перезапуск контейнера и соответственно перезапуск nodejs или это имелось виду не продакшен а чисто для локальной разработки?

Причем даже для чисто локальной разработки nodemon не нужен, если делать перезапуск контейнера.

С такими настройками вы можете одновременно запускать бэкенд Node.js и фронтенд React внутри Docker.

Запускать фронтенд - это вообще-то открыть его в браузере. Скорее всего автор хотел написать что билд фронта делается в контейнере, но у автора не получилось.

не знал, прикольно.

Непонятно, какой кейс решает эта статья и зачем в такой конфигурации докер, но допустим. Насколько я помню, на хост папки монтируются под рутом, так что либо chmod надо ставить интересный (что,кстати, немедленно отразится в git), либо в ide работать от рута. Ну и дев сервер в докере гонять - уже совсем беда имхо. Для локальной разработки это всё лишние абстракции. Что касается фронта, то если у вас нет SSR, то лучше использовать multistage сборку, где сперва собрать статику, а потом запаковать её в образ с тем же nginx. Что касается сервисов на ноде, образ на основе alpine - не лучший выбор для пакетов с биндингами в нативный код. Могут выскочить лишние ненужные проблемы. Наконец, автор умалчивает о том, как запускать образы в разных конфигурациях окружений. Если с нодой всё довольно просто - можно переменные окружения использовать, то со статикой не всё так очевидно. Я часто сталкивался с тем, что многие вообще не понимают, как это можно реализовать. В общем, есть простор для более глубокого освещения темы

Люди, банки, кто угодно, пожалуйста, отстаньте вы уже express, забудьте про него, хватит пихать его в гайды, опомнитесь... Есть же fastify, есть встроенный модуль http, которого достаточно, хватит пихать этот богомерзкий express...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий