39 lines
2.1 KiB
Docker
39 lines
2.1 KiB
Docker
FROM repo.nstart.cloud/dockerhub/library/node:22-alpine AS build
|
||
# Build identity для VersionBadge / UpdateBanner. Внутри Docker build context
|
||
# нет .git/ (BUILD_CONTEXT=ordinis-admin-ui/), vite execSync падает →
|
||
# fallback "unknown" / package.json. CI передаёт реальные значения через
|
||
# --build-arg (см. .gitlab-ci.yml publish_script .docker_base).
|
||
#
|
||
# GIT_TAG — "none" sentinel когда CI_COMMIT_TAG не set (branch pipeline).
|
||
# Фильтруем "none" → пустая строка чтобы vite.config.ts видел falsy и
|
||
# fallback'ил к package.json.
|
||
ARG GIT_COMMIT=unknown
|
||
ARG GIT_TAG=none
|
||
ENV CI_COMMIT_SHORT_SHA=$GIT_COMMIT
|
||
ENV CI_COMMIT_TAG=$GIT_TAG
|
||
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.15.4 — exact version для reproducibility + lockfile compat
|
||
# (pnpm-lock.yaml lockfileVersion: '9.0').
|
||
# - corepack может hang в CI на integrity-check / non-TTY prompts. npm
|
||
# install --silent надёжнее.
|
||
# - v10+ блокирует postinstall scripts ("Run pnpm approve-builds..."), в CI
|
||
# нет интерактивного prompt'а → exit 1. v9 keeps старое поведение.
|
||
RUN npm install -g --silent pnpm@9.15.4
|
||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
|
||
COPY . .
|
||
RUN pnpm build
|
||
|
||
FROM repo.nstart.cloud/dockerhub/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
|