From 86f3a69fe32042a993a2728dc6533f201a3514a0 Mon Sep 17 00:00:00 2001 From: Thanakarn Klangkasame <77600906+Simulationable@users.noreply.github.com> Date: Tue, 30 Sep 2025 15:04:37 +0700 Subject: [PATCH] build: legacy docker builder without NODE_ENV hacks --- Dockerfile | 47 ++++++++++++++--------------------------------- Jenkinsfile | 1 + 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/Dockerfile b/Dockerfile index b8ad744..5ee7ea0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,49 +1,33 @@ # syntax=docker/dockerfile:1 -############################ -# Base -############################ FROM node:20-alpine AS base WORKDIR /app ENV NEXT_TELEMETRY_DISABLED=1 RUN apk add --no-cache libc6-compat -############################ -# Dependencies (dev) — ติดตั้ง deps + devDeps เพื่อใช้ build -############################ +# ---- deps: ติดตั้งพร้อม devDeps โดยไม่ต้องตั้ง NODE_ENV=development ---- FROM base AS deps -ENV NODE_ENV=development RUN corepack enable COPY . . RUN set -eux; \ - if [ -f pnpm-lock.yaml ]; then pnpm install --frozen-lockfile; \ - elif [ -f yarn.lock ]; then yarn install --frozen-lockfile; \ - elif [ -f package-lock.json ]; then npm ci; \ + if [ -f pnpm-lock.yaml ]; then pnpm install --frozen-lockfile --prod=false; \ + elif [ -f yarn.lock ]; then yarn install --frozen-lockfile --production=false; \ + elif [ -f package-lock.json ]; then npm ci --include=dev; \ else npm install; \ fi -############################ -# Build -############################ +# ---- builder: ใช้ deps เดิม สร้างโปรดักชันบิลด์ ---- FROM base AS builder -ENV NODE_ENV=development RUN corepack enable COPY --from=deps /app/node_modules ./node_modules COPY . . -# ให้ชัวร์: ถ้ามี next.config.ts แต่ยังไม่มี typescript → ติดตั้งเพิ่มแบบ dev RUN set -eux; \ - if [ -f next.config.ts ] && ! node -e "require.resolve('typescript')" 2>/dev/null; then \ - npm i -D typescript; \ - fi; \ if [ -f pnpm-lock.yaml ]; then pnpm run build; \ elif [ -f yarn.lock ]; then yarn build; \ else npm run build; \ fi -############################ -# Dependencies (prod only) — prune devDeps ออก -############################ +# ---- prod-deps: เอาเฉพาะ production deps ---- FROM base AS prod-deps -ENV NODE_ENV=production RUN corepack enable COPY . . RUN set -eux; \ @@ -53,9 +37,7 @@ RUN set -eux; \ else npm install --omit=dev; \ fi -############################ -# Runner -############################ +# ---- runner ---- FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production @@ -63,15 +45,14 @@ ENV HOSTNAME=0.0.0.0 ENV PORT=3000 ENV NEXT_TELEMETRY_DISABLED=1 -RUN apk add --no-cache libc6-compat && \ - addgroup -g 1001 -S nodejs && \ - adduser -S nextjs -u 1001 -G nodejs +RUN apk add --no-cache libc6-compat \ + && addgroup -g 1001 -S nodejs \ + && adduser -S nextjs -u 1001 -G nodejs -# เอาเฉพาะสิ่งที่ต้องรันจริง -COPY --from=builder /app/public ./public -COPY --from=builder /app/.next ./.next -COPY --from=builder /app/package.json ./package.json -COPY --from=prod-deps /app/node_modules ./node_modules +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/package.json ./package.json +COPY --from=prod-deps /app/node_modules ./node_modules USER nextjs EXPOSE 3000 diff --git a/Jenkinsfile b/Jenkinsfile index ad85080..c92b66d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,6 +12,7 @@ pipeline { APP_PORT = '3000' // Next.js listens in container HOST_PORT = '5003' // 👈 พอร์ตบนโฮสต์ (ไม่ชนตัวอื่น) DOCKER_BUILDKIT = '0' + DOCKER_CLI_HINTS = 'false' } stages {