From b2e25546e67ce12c487278ecb2a451b2bf9bea28 Mon Sep 17 00:00:00 2001 From: javad Date: Sat, 20 Jun 2026 21:07:29 +0330 Subject: [PATCH] add dockerfile --- .dockerignore | 13 +++++++++++ Dockerfile | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ next.config.mjs | 1 + 3 files changed, 75 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..720a6e4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +node_modules +.next +out +build +.git +.idea +*.rar +*.zip +.env.local +.env*.local +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a2f21f5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,61 @@ +# syntax=docker/dockerfile:1 + +# ==================================================== +# Stage 1: Base settings & Alpine System Dependencies +# ==================================================== +FROM node:20-alpine AS base +WORKDIR /app +# نصب ابزارهای مورد نیاز برای سازگاری پکیج‌های بومی سیستم (مانند Sharp یا لایبرری‌های ++C) +RUN apk add --no-cache libc6-compat +ENV NEXT_TELEMETRY_DISABLED 1 + +# ==================================================== +# Stage 2: Advanced Dependency Caching +# ==================================================== +FROM base AS deps +COPY package.json package-lock.json ./ + +# استفاده از کش سیستم میزبان برای NPM جهت جلوگیری از دانلود مجدد پکیج‌ها +RUN --mount=type=cache,target=/root/.npm \ + npm ci + +# ==================================================== +# Stage 3: Optimized Application Builder +# ==================================================== +FROM base AS builder +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# اصلاح خطای متغیر محیطی: متغیر NODE_ENV به صورت استاندارد لینوکس پاس داده شده است +RUN --mount=type=cache,target=/app/.next/cache \ + NODE_ENV=production npm run build + +# ==================================================== +# Stage 4: Ultra-light Production Runner +# ==================================================== +# ارث‌بری از base برای حفظ پکیج‌های سیستم از جمله libc6-compat برای محیط پروداکشن +FROM base AS runner +WORKDIR /app + +# تنظیم متغیرهای محیطی با دستور رسمی داکر +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +# ایجاد کاربر و گروه امنیتی غیر روت +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs + +# کپی کردن فایل‌های استاتیک عمومی (مطمئن شوید پوشه public در ریشه پروژه شما وجود دارد) +COPY --from=builder /app/public ./public + +# کپی کردن ساختار Standalone با اعمال دسترسی کاربر محدود شده +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +# سوئیچ به کاربر امن و غیر روت برای رعایت استانداردهای بالاترین سطح امنیت سازمان +USER nextjs + +EXPOSE 3000 + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index c61ea6e..8d1fe4c 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,5 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { + output: 'standalone', typescript: { // !! WARN !! // Dangerously allow production builds to successfully complete even if