victorgg commited on
Commit
64dbd3a
·
verified ·
1 Parent(s): f024bf3

Create Dockerfile

Browse files
Files changed (1) hide show
  1. 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
+ # --- မှတ်ချက်များ အဆုံး ---