You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
2.1 KiB
39 lines
2.1 KiB
# syntax=docker/dockerfile:1.7
|
|
|
|
# ──────────────────────────────────────────────────────────────────────────
|
|
# مرحلهٔ ۱ — build: کامپایل SPA با Vite
|
|
# ──────────────────────────────────────────────────────────────────────────
|
|
FROM node:22-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# نصب وابستگیها با کش npm و وابسته به package-lock
|
|
# نکته: npm ci درست است؛ اگر fail شد یعنی package-lock.json باید sync شود.
|
|
COPY package.json package-lock.json ./
|
|
RUN --mount=type=cache,target=/root/.npm npm ci
|
|
|
|
# کپی سورس و build
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# ──────────────────────────────────────────────────────────────────────────
|
|
# مرحلهٔ ۲ — runtime: سرو استاتیک با nginx + تزریق env در زمان اجرا
|
|
# ──────────────────────────────────────────────────────────────────────────
|
|
FROM nginx:1.27-alpine AS runtime
|
|
|
|
# خروجی build
|
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
|
|
# پیکربندی nginx
|
|
COPY docker/nginx/00-upstream-map.conf /etc/nginx/conf.d/00-upstream-map.conf
|
|
COPY docker/nginx/default.conf.template /etc/nginx/templates/default.conf.template
|
|
|
|
# تولید config.js در زمان start توسط entrypoint رسمی nginx
|
|
COPY docker/40-config-js.sh /docker-entrypoint.d/40-config-js.sh
|
|
RUN chmod +x /docker-entrypoint.d/40-config-js.sh
|
|
|
|
# envsubst فقط همین متغیر را جایگزین کند تا $uri/$host nginx خراب نشود
|
|
ENV NGINX_ENVSUBST_FILTER=^BACKEND_UPSTREAM$
|
|
ENV BACKEND_UPSTREAM=host.docker.internal:8001
|
|
|
|
EXPOSE 80
|