|
@@ -0,0 +1,47 @@
|
|
|
|
|
+# ---------- base ----------
|
|
|
|
|
+FROM node:20-alpine AS base
|
|
|
|
|
+
|
|
|
|
|
+WORKDIR /app
|
|
|
|
|
+
|
|
|
|
|
+RUN npm config set registry https://mirror2.chabokan.net/npm/
|
|
|
|
|
+RUN npm install -g pnpm
|
|
|
|
|
+RUN pnpm config set registry https://mirror2.chabokan.net/npm/
|
|
|
|
|
+
|
|
|
|
|
+# ---------- deps ----------
|
|
|
|
|
+FROM base AS deps
|
|
|
|
|
+
|
|
|
|
|
+COPY package.json pnpm-lock.yaml* ./
|
|
|
|
|
+
|
|
|
|
|
+RUN pnpm install --no-frozen-lockfile
|
|
|
|
|
+
|
|
|
|
|
+# ---------- builder ----------
|
|
|
|
|
+FROM base AS builder
|
|
|
|
|
+
|
|
|
|
|
+ARG VITE_API_BASE_URL
|
|
|
|
|
+ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
|
|
|
|
|
+
|
|
|
|
|
+COPY --from=deps /app/node_modules ./node_modules
|
|
|
|
|
+COPY . .
|
|
|
|
|
+
|
|
|
|
|
+RUN pnpm build
|
|
|
|
|
+
|
|
|
|
|
+# ---------- runner ----------
|
|
|
|
|
+FROM node:20-alpine AS runner
|
|
|
|
|
+
|
|
|
|
|
+WORKDIR /app
|
|
|
|
|
+
|
|
|
|
|
+ENV NODE_ENV=production
|
|
|
|
|
+
|
|
|
|
|
+# install serve LOCAL (not global)
|
|
|
|
|
+RUN npm config set registry https://mirror2.chabokan.net/npm/
|
|
|
|
|
+RUN npm install -g serve
|
|
|
|
|
+
|
|
|
|
|
+COPY --from=builder /app/dist ./dist
|
|
|
|
|
+
|
|
|
|
|
+RUN addgroup -S nodejs && adduser -S reactjs -G nodejs
|
|
|
|
|
+
|
|
|
|
|
+USER reactjs
|
|
|
|
|
+
|
|
|
|
|
+EXPOSE 3001
|
|
|
|
|
+
|
|
|
|
|
+CMD ["serve", "-s", "dist", "-l", "3001"]
|