Create Dockerfile
Browse files- Dockerfile +92 -0
Dockerfile
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Stage 1: Build the application (Builder Stage)
|
| 2 |
+
# ---------------------------------------------
|
| 3 |
+
# Node.js ရဲ့ Long Term Support (LTS) version တစ်ခုကို သုံးပါ။ Alpine က ပိုသေးပါတယ်။
|
| 4 |
+
# Alpine နဲ့ အဆင်မပြေရင် node:18-slim or node:20-slim ကို ပြောင်းသုံးနိုင်ပါတယ်။
|
| 5 |
+
FROM node:18-alpine AS builder
|
| 6 |
+
|
| 7 |
+
# Container ထဲမှာ အလုပ်လုပ်မယ့် directory ကို သတ်မှတ်ပါ။
|
| 8 |
+
WORKDIR /app
|
| 9 |
+
|
| 10 |
+
# Package Manager ကို သွင်းပါ (ဒီမှာ pnpm ကို နမူနာ ထားသုံးထားပါတယ်)
|
| 11 |
+
# သင်က npm သို့မဟုတ် yarn သုံးတယ်ဆိုရင် ဒီအဆင့်ကို ကျော်နိုင်ပါတယ်၊ သို့မဟုတ် သက်ဆိုင်ရာ command ပြောင်းပါ။
|
| 12 |
+
RUN npm install -g pnpm
|
| 13 |
+
|
| 14 |
+
# package.json နဲ့ lock file ကို copy ကူးပါ။ lock file က dependency version တွေ တိကျစေဖို့ အရေးကြီးပါတယ်။
|
| 15 |
+
COPY package.json pnpm-lock.yaml* ./
|
| 16 |
+
# --- အကယ်၍ npm သုံးလျှင် ---
|
| 17 |
+
# COPY package.json package-lock.json* ./
|
| 18 |
+
# --- အကယ်၍ yarn သုံးလျှင် ---
|
| 19 |
+
# COPY package.json yarn.lock* ./
|
| 20 |
+
|
| 21 |
+
# Dependencies တွေကို Install လုပ်ပါ။ --frozen-lockfile က lock file အတိုင်း တိတိကျကျ သွင်းပေးပါတယ်။
|
| 22 |
+
# Build အတွက် devDependencies တွေပါ လိုအပ်တာကြောင့် --prod=false ကို သုံးထားတာ ဒါမှမဟုတ် ဘာမှမထည့်ရင် default အတိုင်းရပါတယ်။
|
| 23 |
+
RUN pnpm install --frozen-lockfile --prod=false
|
| 24 |
+
# --- အကယ်၍ npm သုံးလျှင် ---
|
| 25 |
+
# RUN npm ci
|
| 26 |
+
# --- အကယ်၍ yarn သုံးလျှင် ---
|
| 27 |
+
# RUN yarn install --frozen-lockfile
|
| 28 |
+
|
| 29 |
+
# ကျန်တဲ့ project code တွေကို အကုန် copy ကူးပါ။
|
| 30 |
+
COPY . .
|
| 31 |
+
|
| 32 |
+
# (Optional) Build Time Environment Variables တွေ လိုအပ်ရင် ဒီမှာ သတ်မှတ်နိုင်ပါတယ်။
|
| 33 |
+
# ARG NEXT_PUBLIC_FOO
|
| 34 |
+
# ENV NEXT_PUBLIC_FOO=$NEXT_PUBLIC_FOO
|
| 35 |
+
|
| 36 |
+
# Next.js application ကို Production အတွက် Build လုပ်ပါ။
|
| 37 |
+
# *** အရေးကြီး ***: next.config.js မှာ output: 'standalone' ကို ထည့်ထားဖို့ အလွန် recommend လုပ်ပါတယ်။
|
| 38 |
+
# ဒါက Docker image ကို သေးငယ်စေပြီး လိုအပ်တာတွေပဲ ထည့်ပေးပါတယ်။
|
| 39 |
+
RUN pnpm build
|
| 40 |
+
# --- အကယ်၍ npm သုံးလျှင် ---
|
| 41 |
+
# RUN npm run build
|
| 42 |
+
# --- အကယ်၍ yarn သုံးလျှင် ---
|
| 43 |
+
# RUN yarn build
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
# Stage 2: Production Image (Runner Stage)
|
| 47 |
+
# ----------------------------------------
|
| 48 |
+
# ပိုသေးတဲ့ base image ကို ပြန်သုံးပါ။ Builder stage က image နဲ့ တူရုံ သို့မဟုတ် ပိုသေးရင် ကောင်းပါတယ်။
|
| 49 |
+
FROM node:18-alpine AS runner
|
| 50 |
+
|
| 51 |
+
WORKDIR /app
|
| 52 |
+
|
| 53 |
+
# Environment ကို Production လို့ သတ်မှတ်ပါ။
|
| 54 |
+
ENV NODE_ENV=production
|
| 55 |
+
|
| 56 |
+
# Security အတွက် non-root user တစ်ယောက် ဖန်တီးပါ။
|
| 57 |
+
RUN addgroup --system --gid 1001 nodejs
|
| 58 |
+
RUN adduser --system --uid 1001 nextjs
|
| 59 |
+
|
| 60 |
+
# Builder stage ကနေ build လုပ်ပြီးသား လိုအပ်တဲ့ ဖိုင်တွေကိုပဲ ကူးယူပါ။
|
| 61 |
+
# (next.config.js မှာ output: 'standalone' သုံးထားတယ်လို့ ယူဆထားပါတယ်)
|
| 62 |
+
# --chown=nextjs:nodejs က ဖိုင်ပိုင်ရှင်ကို ခုနက ဖန်တီးထားတဲ့ user အဖြစ် သတ်မှတ်ပေးပါတယ်။
|
| 63 |
+
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
| 64 |
+
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
| 65 |
+
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
| 66 |
+
|
| 67 |
+
# Non-root user အဖြစ် ပြောင်းသုံးပါ။
|
| 68 |
+
USER nextjs
|
| 69 |
+
|
| 70 |
+
# App က run မယ့် port ကို သတ်မှတ်ပါ။ Next.js default က 3000 ပါ။
|
| 71 |
+
# Hugging Face Spaces က port mapping ကို သူ့ဘာသာ စီစဉ်ပေးပါလိမ့်မယ်။
|
| 72 |
+
EXPOSE 3000
|
| 73 |
+
|
| 74 |
+
# Default PORT ကို သတ်မှတ်ထားနိုင်ပါတယ်။ HF က ဒါကို override လုပ်နိုင်ပါတယ်။
|
| 75 |
+
ENV PORT=3000
|
| 76 |
+
|
| 77 |
+
# Application ကို စ run ပါ။ ('standalone' output အတွက် entry point က များသောအားဖြင့် server.js ပါ)
|
| 78 |
+
CMD ["node", "server.js"]
|
| 79 |
+
|
| 80 |
+
# --- Standalone Output မသုံးခဲ့လျှင် မှတ်ချက် ---
|
| 81 |
+
# အကယ်၍ next.config.js မှာ output: 'standalone' မသုံးခဲ့ဘူးဆိုရင်:
|
| 82 |
+
# 1. Runner stage မှာ Production dependencies တွေကို သီးသန့် install လုပ်ဖို့ လိုနိုင်ပါတယ်:
|
| 83 |
+
# COPY --from=builder /app/package.json /app/pnpm-lock.yaml* ./
|
| 84 |
+
# RUN pnpm install --frozen-lockfile --prod=true
|
| 85 |
+
# 2. ဖိုင်တွေကူးတဲ့အခါ .next/standalone အစား .next တစ်ခုလုံး၊ node_modules (အပေါ်က install မလုပ်ရင်)၊ package.json စတာတွေ ကူးဖို့လိုပါမယ်။
|
| 86 |
+
# COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
| 87 |
+
# COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
| 88 |
+
# COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
|
| 89 |
+
# COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json
|
| 90 |
+
# 3. CMD ကိုလည်း ပြောင်းဖို့လိုပါမယ်:
|
| 91 |
+
# CMD ["pnpm", "start"] # သို့မဟုတ် npm start / yarn start (package.json ထဲက script အတိုင်း)
|
| 92 |
+
# --- မှတ်ချက်များ အဆုံး ---
|