From 25d212f884c4705f5ced773102694d3effea3d5c Mon Sep 17 00:00:00 2001 From: m4x809 Date: Sat, 25 Oct 2025 03:37:05 +0200 Subject: [PATCH] Add Docker support with Dockerfile and .dockerignore - Introduced a Dockerfile for building and running the Next.js application using Bun. - Configured multi-stage builds for optimized dependency management and production setup. - Added a .dockerignore file to exclude unnecessary files from the Docker context, improving build efficiency. --- .dockerignore | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ next.config.ts | 1 + 3 files changed, 104 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..76f94ef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,51 @@ +# Dependencies +node_modules +.pnp +.pnp.js + +# Testing +coverage + +# Next.js +.next +out + +# Production +build +dist + +# Misc +.DS_Store +*.pem + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +*.log + +# Local env files +.env*.local +.env + +# Vercel +.vercel + +# Typescript +*.tsbuildinfo + +# Git +.git +.gitignore + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# README +README.md +scripts/README.md + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cd1d84d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +# Use bun as the base image +FROM oven/bun:1 AS base + +# Install dependencies only when needed +FROM base AS deps +WORKDIR /app + +# Copy dependency files +COPY package.json bun.lock ./ + +# Install dependencies +RUN bun install --frozen-lockfile + +# Build the application +FROM base AS builder +WORKDIR /app + +# Copy dependencies from deps stage +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Build Next.js application +RUN bun run build + +# Production image +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production + +# Create a non-root user +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +# Copy necessary files +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static + +# Set ownership to nextjs user +RUN chown -R nextjs:nodejs /app + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +# Start the application +CMD ["bun", "run", "start"] + diff --git a/next.config.ts b/next.config.ts index e402e15..6b83410 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,4 +1,5 @@ const nextConfig: import("next").NextConfig = { + output: "standalone", experimental: { viewTransition: true, },