diff --git a/.dockerignore b/.dockerignore index e470723..115b801 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,129 +1,16 @@ -# Dependencies -node_modules -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Build outputs -.next/ -out/ -dist/ -build/ - -# Environment variables -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -# IDE and editor files -.vscode/ -.idea/ -*.swp -*.swo -*~ - -# OS generated files -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db - -# Git -.git -.gitignore - -# Docker Dockerfile .dockerignore -docker-compose*.yml - -# Testing -coverage/ -.nyc_output/ -*.lcov - -# Logs -logs -*.log -lerna-debug.log* -.pnpm-debug.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# Dependency directories -jspm_packages/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output +node_modules +npm-debug.log .next - -# Nuxt.js build / generate output -.nuxt - -# Storybook build outputs -.out -.storybook-out - -# Temporary folders -tmp/ -temp/ - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -*.suo -.ntvs -*.njsproj -*.sln -*.sw? - -# MacOS -.DS_Store - -# Windows -Thumbs.db -ehthumbs.db -Desktop.ini - -# README and docs (optional - remove if you want to include them) +.git +.gitignore README.md -*.md \ No newline at end of file +.env +.env.local +.env.production.local +.env.local +coverage +.nyc_output +.DS_Store +*.log \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 2878647..9b27420 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,69 +1,35 @@ -# Use the official Node.js runtime as the base image -FROM node:18-alpine AS base +# Use Node.js 18 Alpine for smaller size and faster builds +FROM node:18-alpine -# Install dependencies only when needed -FROM base AS deps -# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +# Set working directory +WORKDIR /app + +# Install dependencies for native modules RUN apk add --no-cache libc6-compat -WORKDIR /app -# Install dependencies based on the preferred package manager -COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ -RUN \ - if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ - elif [ -f package-lock.json ]; then npm ci; \ - elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ - else echo "Lockfile not found." && exit 1; \ - fi +# Copy package files +COPY package.json pnpm-lock.yaml* ./ -# Rebuild the source code only when needed -FROM base AS builder -WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules +# Enable pnpm and install dependencies +RUN corepack enable pnpm +RUN pnpm install --frozen-lockfile + +# Copy source code COPY . . -# Next.js collects completely anonymous telemetry data about general usage. -# Learn more here: https://nextjs.org/telemetry -# Uncomment the following line in case you want to disable telemetry during the build. -# ENV NEXT_TELEMETRY_DISABLED 1 +# Disable telemetry for faster builds +ENV NEXT_TELEMETRY_DISABLED 1 -RUN \ - if [ -f yarn.lock ]; then yarn run build; \ - elif [ -f package-lock.json ]; then npm run build; \ - elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \ - else echo "Lockfile not found." && exit 1; \ - fi - -# Production image, copy all the files and run next -FROM base AS runner -WORKDIR /app - -ENV NODE_ENV production -# Uncomment the following line in case you want to disable telemetry during runtime. -# ENV NEXT_TELEMETRY_DISABLED 1 - -# Create user and group in one step for faster builds -RUN addgroup --system --gid 1001 nodejs && \ - adduser --system --uid 1001 nextjs - -COPY --from=builder /app/public ./public - -# Set the correct permission for prerender cache -RUN mkdir .next && chown nextjs:nodejs .next - -# Automatically leverage output traces to reduce image size -# https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static - -USER nextjs +# Build the application +RUN pnpm run build +# Expose port EXPOSE 3000 -ENV PORT 3000 -# set hostname to localhost -ENV HOSTNAME "0.0.0.0" +# Set environment variables +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" -# server.js is created by next build from the standalone output -# https://nextjs.org/docs/pages/api-reference/next-config-js/output -CMD ["node", "server.js"] \ No newline at end of file +# Start the application +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6c76778..4908fcc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,13 +9,11 @@ services: - "8091:3000" environment: - NODE_ENV=production - - PORT=3000 - - HOSTNAME=0.0.0.0 + - NEXT_TELEMETRY_DISABLED=1 restart: unless-stopped - container_name: nextjs-app - # Uncomment the following lines if you need to persist data or add volumes + # For development with hot reload, uncomment these lines: # volumes: - # - ./data:/app/data - # If you need environment variables from a file - # env_file: - # - .env.local \ No newline at end of file + # - .:/app + # - /app/node_modules + # - /app/.next + # command: pnpm dev \ No newline at end of file