Skip to content

Commit 7f4aa84

Browse files
committed
cai thien code docker
1 parent 8499286 commit 7f4aa84

3 files changed

Lines changed: 24 additions & 15 deletions

File tree

Dockerfile

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,49 @@
11
# ============================================================
2-
# Stage 1: depsinstall production dependencies
2+
# Stage 1: basebase image with essential libraries
33
# ============================================================
4-
FROM node:20-alpine AS deps
4+
FROM node:20-alpine AS base
55
RUN apk add --no-cache libc6-compat
6-
76
WORKDIR /app
87

9-
COPY src/package.json src/package-lock.json ./
10-
RUN npm ci --omit=dev --ignore-scripts
8+
# Application version (passed at build time)
9+
ARG NEXT_PUBLIC_APP_VERSION
10+
ENV NEXT_PUBLIC_APP_VERSION=$NEXT_PUBLIC_APP_VERSION
1111

1212
# ============================================================
13-
# Stage 2: buildercompile the Next.js app
13+
# Stage 2: developmentprep for dev environment
1414
# ============================================================
15-
FROM node:20-alpine AS builder
15+
FROM base AS development
1616

1717
WORKDIR /app
1818

19-
# Copy ALL deps (including devDeps) for build
19+
# Copy ALL deps (including devDeps)
2020
COPY src/package.json src/package-lock.json ./
2121
RUN npm ci --ignore-scripts
2222

2323
# Copy source code
2424
COPY src/ .
2525

26+
# Disable Next.js telemetry
27+
ENV NEXT_TELEMETRY_DISABLED=1
28+
29+
# ============================================================
30+
# Stage 3: builder — compile the Next.js app
31+
# ============================================================
32+
FROM development AS builder
33+
2634
# Build-time env vars (public ones only — never leak secrets here)
2735
ARG NEXT_PUBLIC_SUPABASE_URL
2836
ARG NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
2937

3038
ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL
3139
ENV NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=$NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
3240

33-
# Disable Next.js telemetry
34-
ENV NEXT_TELEMETRY_DISABLED=1
35-
3641
RUN npm run build
3742

3843
# ============================================================
3944
# Stage 3: runner — minimal production image
4045
# ============================================================
41-
FROM node:20-alpine AS runner
46+
FROM base AS runner
4247

4348
WORKDIR /app
4449

@@ -50,7 +55,7 @@ RUN addgroup --system --gid 1001 nodejs && \
5055
adduser --system --uid 1001 nextjs
5156

5257
# Copy built assets from builder
53-
COPY --from=builder /app/public ./public
58+
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
5459
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
5560
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
5661

docker-compose.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ services:
88
build:
99
context: .
1010
dockerfile: Dockerfile
11-
target: builder # build xong là chạy ngay, không cần stage runner
11+
target: development # build xong là chạy ngay (npm install), không cần build sản phẩm
1212
args:
1313
NEXT_PUBLIC_SUPABASE_URL: ${NEXT_PUBLIC_SUPABASE_URL}
1414
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY}
15+
NEXT_PUBLIC_APP_VERSION: ${APP_VERSION:-0.1.0}
1516
command: npm run dev
1617
ports:
1718
- "3000:3000"
@@ -23,6 +24,7 @@ services:
2324
- NODE_ENV=development
2425
- NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
2526
- NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=${NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY}
27+
- NEXT_PUBLIC_APP_VERSION=${APP_VERSION:-0.1.0}
2628
- SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY}
2729
env_file:
2830
- src/.env.local
@@ -43,9 +45,11 @@ services:
4345
args:
4446
NEXT_PUBLIC_SUPABASE_URL: ${NEXT_PUBLIC_SUPABASE_URL}
4547
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY}
48+
NEXT_PUBLIC_APP_VERSION: ${APP_VERSION:-0.1.0}
4649
ports:
4750
- "3000:3000"
4851
environment:
52+
- NEXT_PUBLIC_APP_VERSION=${APP_VERSION:-0.1.0}
4953
- SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY}
5054
env_file:
5155
- src/.env.local

src/app/api/health/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export async function GET() {
1010
status: "ok",
1111
timestamp: new Date().toISOString(),
1212
uptime: process.uptime(),
13-
version: process.env.npm_package_version ?? "unknown",
13+
version: process.env.NEXT_PUBLIC_APP_VERSION ?? "unknown",
1414
environment: process.env.NODE_ENV,
1515
},
1616
{ status: 200 }

0 commit comments

Comments
 (0)