Size: a a a

2019 November 11

VB

Vitaliy Belmach in BeerJS/SPB
Может кто знает,  в каких чатиках можно спрашивать вопросы по JS и относящимся технологиям?
источник

OK

Oleg Klimenko in BeerJS/SPB
источник

OK

Oleg Klimenko in BeerJS/SPB
да и здесь в принципе тоже есть шанс что ответят
источник

VB

Vitaliy Belmach in BeerJS/SPB
Контекст: Сейчас фронт собиратся и кладется в статику джавы и вообще, весь билд делается бэком ( что не очень хорошо, так как для обновления фронта на деве, нужно дженкинс джобу для бэка запускать). Прилетала таска, выделить фронт в отдельный контейнер.

Вопрос: Для того, чтобы сайт вертелся в докер контейнере\сервере ( ci/cd уже после этого настроим ), что надо сделать после сборки проекта ( к примеру ("build": "webpack --env.production --config webpack.config.prod.js" )). Потом же нужно же нужно будет serve сделать, чтобы статикой отдавать?
источник

МБ

Михаил Белый in BeerJS/SPB
делаешь образ в нем nginx раздает статику, это если ноды нет
источник

VB

Vitaliy Belmach in BeerJS/SPB
Спасибо, теперь понял, в какую сторону копать
источник

VB

Vitaliy Belmach in BeerJS/SPB
По теме много статеек, но сложно найти годноту. ( ну или я плохо ищу ) Часто можно встретить, ну здесь у нас все хорошо, здесь будем считать, что это нам не надо. В итоге, все хорошо и в пару строчек получается)
источник

VB

Vitaliy Belmach in BeerJS/SPB
Михаил Белый
делаешь образ в нем nginx раздает статику, это если ноды нет
А мы можем сделать это в докере таким способом?
npm install -g serve
serve -s build
( с документации https://create-react-app.dev/docs/deployment/ )  
Или это не очень хороший подход?
источник

VL

Vladimir Luss in BeerJS/SPB
ура, наконец-то вопрос, на который я могу ответить!

# =====================
# STATIC BUILDER IMAGE
# =====================
FROM node:10.16.0 AS builder

# installing deps
ADD package.json /opt/app/package.json
ADD package-lock.json /opt/app/package-lock.json
RUN cd /opt/app/ && npm install

# Copy node_modules from builder image
WORKDIR /opt/app

ADD . /opt/app
RUN NODE_ENV=production npm run build

# =====================
# WEB SERVER IMAGE
# =====================

FROM nginx:1.16.0-alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=builder /opt/app/build /usr/share/nginx/html


мультистейдж докерфайл для сборки и серва фронта
источник

IK

Ilnur Khalilov in BeerJS/SPB
Vladimir Luss
ура, наконец-то вопрос, на который я могу ответить!

# =====================
# STATIC BUILDER IMAGE
# =====================
FROM node:10.16.0 AS builder

# installing deps
ADD package.json /opt/app/package.json
ADD package-lock.json /opt/app/package-lock.json
RUN cd /opt/app/ && npm install

# Copy node_modules from builder image
WORKDIR /opt/app

ADD . /opt/app
RUN NODE_ENV=production npm run build

# =====================
# WEB SERVER IMAGE
# =====================

FROM nginx:1.16.0-alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=builder /opt/app/build /usr/share/nginx/html


мультистейдж докерфайл для сборки и серва фронта
Только я бы рекомендовал использовать npm ci вместо install
источник

VB

Vitaliy Belmach in BeerJS/SPB
@stainful Оу, спасибо. Выглядит понятно и логично😁. Считай, разблокировал достижение
источник

VB

Vitaliy Belmach in BeerJS/SPB
@khalilov  Точно, спасибо. Слышал про это несколько раз, а как дошло до дела, то забыл. Теперь минус парочка возможных проблем
источник

VL

Vladimir Luss in BeerJS/SPB
Ilnur Khalilov
Только я бы рекомендовал использовать npm ci вместо install
справедливо!
источник

AR

Andrey Ryakhovskiy in BeerJS/SPB
Vladimir Luss
ура, наконец-то вопрос, на который я могу ответить!

# =====================
# STATIC BUILDER IMAGE
# =====================
FROM node:10.16.0 AS builder

# installing deps
ADD package.json /opt/app/package.json
ADD package-lock.json /opt/app/package-lock.json
RUN cd /opt/app/ && npm install

# Copy node_modules from builder image
WORKDIR /opt/app

ADD . /opt/app
RUN NODE_ENV=production npm run build

# =====================
# WEB SERVER IMAGE
# =====================

FROM nginx:1.16.0-alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=builder /opt/app/build /usr/share/nginx/html


мультистейдж докерфайл для сборки и серва фронта
Можно, я тоже свои 5 копеек вставлю?

— Вместо ADD рекомендуют использовать COPY
— Чем меньше команд ADD/COPY/RUN, тем меньше слоёв у образа => быстрее билд и меньше места занимает
— запускать приложение лучше под отдельным пользователем (а не под рутом, как по-умолчанию в докере). Но тут есть сопутствующие проблемы: не рут не может открывать порты ниже 1000 или 1024 (не помню точно), так что приложению стоит использовать 8080, а уже снаружи маппить в какой угодно

Тогда будет что-то вроде:
FROM node:10.16.0 AS base

WORKDIR /opt/app

# тут можно установить доп. пакеты

RUN groupadd -g 999 appuser && \
   useradd -m -r -u 999 -g appuser appuser && \
   chown -R appuser:appuser /opt/app

FROM base as builder

USER appuser

COPY package*.json ./

ENV NODE_ENV=production

RUN npm i

COPY . .

RUN npm run build

FROM base

COPY --from=builder --chown=appuser:appuser /opt/app /opt/app

USER appuser

ENV NODE_ENV=production

ENTRYPOINT npm start

Это если приложение стартовать нужно (бэк на ноде или ssr-сервер), иначе свистопляска с пользователем не актуальна
источник

VL

Vladimir Luss in BeerJS/SPB
Andrey Ryakhovskiy
Можно, я тоже свои 5 копеек вставлю?

— Вместо ADD рекомендуют использовать COPY
— Чем меньше команд ADD/COPY/RUN, тем меньше слоёв у образа => быстрее билд и меньше места занимает
— запускать приложение лучше под отдельным пользователем (а не под рутом, как по-умолчанию в докере). Но тут есть сопутствующие проблемы: не рут не может открывать порты ниже 1000 или 1024 (не помню точно), так что приложению стоит использовать 8080, а уже снаружи маппить в какой угодно

Тогда будет что-то вроде:
FROM node:10.16.0 AS base

WORKDIR /opt/app

# тут можно установить доп. пакеты

RUN groupadd -g 999 appuser && \
   useradd -m -r -u 999 -g appuser appuser && \
   chown -R appuser:appuser /opt/app

FROM base as builder

USER appuser

COPY package*.json ./

ENV NODE_ENV=production

RUN npm i

COPY . .

RUN npm run build

FROM base

COPY --from=builder --chown=appuser:appuser /opt/app /opt/app

USER appuser

ENV NODE_ENV=production

ENTRYPOINT npm start

Это если приложение стартовать нужно (бэк на ноде или ssr-сервер), иначе свистопляска с пользователем не актуальна
так а будет ли кэшироваться без слоев тогда?
зачем node_modules каждый раз инсталлить?
источник

AR

Andrey Ryakhovskiy in BeerJS/SPB
Vladimir Luss
так а будет ли кэшироваться без слоев тогда?
зачем node_modules каждый раз инсталлить?
Кешироваться будет. И слои будут, но только те, что необходимы. В вашем варианте будет два слоя: слой с package.json и слой с package-lock.json, в моём — один слой.
источник
2019 November 13

JV

Julia Voychenko in BeerJS/SPB
Там вбросили еще пул тикетов на митап на 19-е, если что
источник

JV

Julia Voychenko in BeerJS/SPB
источник

OK

Oleg Klimenko in BeerJS/SPB
а что за митап?
источник

JV

Julia Voychenko in BeerJS/SPB
спб-фронтенд
источник