From c71a29309a5d70bef2cb0fd7eff1b1127c156bae Mon Sep 17 00:00:00 2001 From: Tien-BH Date: Thu, 10 Jul 2025 04:16:07 +0000 Subject: [PATCH] Improve docker file (#1) Reviewed-on: http://git.sothink.vn/tungdt/cosmos-prototype-application/pulls/1 --- .dockerignore | 3 ++ Dockerfile | 39 ++++++++------------ docker-compose.yaml | 21 ++--------- src/app/api/customer-dependant/[id]/route.ts | 12 +++--- 4 files changed, 28 insertions(+), 47 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..eac004e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.git +.next +node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 766f441..84f9081 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,39 +1,32 @@ -# Base image -FROM node:22-alpine AS builder +# Stage 1: Build +FROM node:18-slim AS builder -ARG NODE_ENV=production -ARG MONGODB_URI -ARG MONGODB_DB - -# Create app directory WORKDIR /app -# Install dependencies -COPY package.json package-lock.json* ./ -RUN npm ci +# Copy dependencies first to cache better +COPY package.json package-lock.json ./ +RUN npm install -# Copy the rest of the application +# Copy all source code COPY . . -# Build the app +# Build the Next.js app RUN npm run build -# Production image -FROM node:22-alpine AS runner + +# Stage 2: Run production image +FROM node:18-slim WORKDIR /app -# Copy only necessary files -COPY --from=builder /app/package.json ./ +COPY --from=builder /app/package.json /app/package-lock.json ./ +RUN npm install --omit=dev + COPY --from=builder /app/.next .next -COPY --from=builder /app/public ./public -COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/public public COPY --from=builder /app/next.config.ts ./ +COPY --from=builder /app/src src -# Set environment variables (optional) - -# Expose port EXPOSE 3000 -# Start the application -CMD ["npm", "start"] \ No newline at end of file +CMD ["npx", "next", "start"] diff --git a/docker-compose.yaml b/docker-compose.yaml index 6a9572d..0d49f64 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,4 +1,4 @@ -version: '3.9' +version: "3.9" services: app: @@ -7,21 +7,6 @@ services: dockerfile: Dockerfile container_name: cosmos-crm ports: - - '3000:3000' + - "3000:3000" environment: - - NODE_ENV=development - - MONGODB_URI=mongodb://mongo:27017 - - MONGODB_DB=cosmos-crm - depends_on: - - mongo - - mongo: - image: mongo:7 - container_name: mongo - ports: - - '27017:27017' - volumes: - - mongo-data:/data/db - -volumes: - mongo-data: + - JWT_SECRET=8f2e9c4a7b1d6e3f8a5b2c9e6f1a4d7b8e3f6a9c2d5e8b1f4a7c0e3d6f9b2a5c8 diff --git a/src/app/api/customer-dependant/[id]/route.ts b/src/app/api/customer-dependant/[id]/route.ts index 4028154..6755ac6 100644 --- a/src/app/api/customer-dependant/[id]/route.ts +++ b/src/app/api/customer-dependant/[id]/route.ts @@ -3,14 +3,14 @@ import { db } from "@/database/database"; export async function GET( request: NextRequest, - { params }: { params: { id: string } } + { params }: { params: Promise<{ id: string }> } ) { try { // Initialize database await db.read(); // Parse dependant ID from params - const dependantId = parseInt(params.id); + const dependantId = parseInt((await params).id); if (isNaN(dependantId)) { return NextResponse.json( @@ -61,14 +61,14 @@ export async function GET( export async function PUT( request: NextRequest, - { params }: { params: { id: string } } + { params }: { params: Promise<{ id: string }> } ) { try { // Initialize database await db.read(); // Parse dependant ID from params - const dependantId = parseInt(params.id); + const dependantId = parseInt((await params).id); if (isNaN(dependantId)) { return NextResponse.json( @@ -141,14 +141,14 @@ export async function PUT( export async function DELETE( request: NextRequest, - { params }: { params: { id: string } } + { params }: { params: Promise<{ id: string }> } ) { try { // Initialize database await db.read(); // Parse dependant ID from params - const dependantId = parseInt(params.id); + const dependantId = parseInt((await params).id); if (isNaN(dependantId)) { return NextResponse.json(