# 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