From f20784039a94cdfce203602e7c58d9e8cac87f05 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 11 Feb 2026 16:11:12 +0300 Subject: [PATCH] feat: Add multi-stage Dockerfile and docker-compose setup --- .dockerignore | 15 +++++++++++++++ Dockerfile | 36 ++++++++++++++++++++++++++++++++++++ docker-compose.yml | 13 +++++++++++++ next.config.mjs | 1 + 4 files changed, 65 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..51d4a02 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +node_modules +.next +.git +.gitignore +README.md +Dockerfile +docker-compose.yml +.env.local +.env.development.local +.env.test.local +.env.production.local +npm-debug.log +yarn-debug.log +yarn-error.log +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b339064 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# Stage 1: Dependencies +FROM node:20-alpine AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm ci + +# Stage 2: Builder +FROM node:20-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +# Disable Next.js telemetry +ENV NEXT_TELEMETRY_DISABLED 1 +RUN npm run build + +# Stage 3: Runner +FROM node:20-alpine AS runner +WORKDIR /app +ENV NODE_ENV production +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 +ENV PORT 3000 +ENV HOSTNAME "0.0.0.0" + +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..adeb33a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +services: + web: + build: + context: . + dockerfile: Dockerfile + ports: + - "3000:3000" + environment: + - NODE_ENV=development + volumes: + - .:/app + - /app/node_modules + - /app/.next diff --git a/next.config.mjs b/next.config.mjs index db42585..8dc1d3d 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -13,6 +13,7 @@ try { /** @type {import('next').NextConfig} */ const nextConfig = { + output: 'standalone', eslint: { ignoreDuringBuilds: true, },