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