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, },