a73d0d31aa
pnpm@latest (= v10+) теперь блокирует postinstall scripts по умолчанию и
просит "Run pnpm approve-builds to pick which dependencies should be
allowed to run scripts". В CI нет интерактивного prompt'а → exit code 1.
Pin на v9 — keeps старое behaviour, совместимо с pnpm-lock.yaml v9.0.
Same подход что в docs/Dockerfile (pnpm@9.0.0 уже).
Если нужен v10 — добавь в package.json:
"pnpm": { "onlyBuiltDependencies": ["esbuild", ...] }
либо --config.dangerouslyAllowAllBuilds=true в CI command.
26 lines
1.4 KiB
Docker
26 lines
1.4 KiB
Docker
FROM repo.nstart.cloud/library/node:22-alpine AS build
|
||
WORKDIR /app
|
||
# .npmrc нужен ДО pnpm install, иначе @nstart/* резолвятся в public npm и 404.
|
||
# pnpm-lock.yaml — для воспроизводимости (frozen lockfile в CI).
|
||
COPY package.json pnpm-lock.yaml .npmrc ./
|
||
# Pin pnpm@9 — v10+ блокирует postinstall scripts по умолчанию ("Run pnpm
|
||
# approve-builds to pick which dependencies should be allowed"). В CI
|
||
# интерактивного prompt'а нет → exit 1. v9 keeps старое поведение либо
|
||
# прокидывает --config.dangerouslyAllowAllBuilds; v9 проще и совместимо
|
||
# с lockfile'ом (lockfile v9.0).
|
||
RUN corepack enable && corepack prepare pnpm@9 --activate
|
||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
|
||
COPY . .
|
||
RUN pnpm build
|
||
|
||
FROM repo.nstart.cloud/library/nginx:1.27-alpine
|
||
COPY --from=build /app/dist /usr/share/nginx/html
|
||
# Шаблон обрабатывается официальным entrypoint nginx-image:
|
||
# /docker-entrypoint.d/20-envsubst-on-templates.sh пробегает по
|
||
# /etc/nginx/templates/*.template и envsubst'ит ENV vars в /etc/nginx/conf.d/.
|
||
COPY nginx.conf /etc/nginx/templates/default.conf.template
|
||
ENV NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/templates \
|
||
NGINX_ENVSUBST_TEMPLATE_SUFFIX=.template \
|
||
NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx/conf.d
|
||
EXPOSE 80
|