From 5f0158590e5e32dbb74a9485f66db53f5f189980 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Sun, 16 Mar 2025 07:53:44 -0600 Subject: [PATCH] initial commit --- .dockerignore | 16 ++++++++++++++ Dockerfile | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ compose.yml | 24 ++++++++++++++++++++ next.config.js | 5 ++--- 4 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fdf1c1e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +node_modules +.next +dist +.git +.github +.vscode +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +README.md +.gitignore +.eslintrc.json +.bolt + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1aec27e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +FROM node:18-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +WORKDIR /app + +# Copy package.json and package-lock.json +COPY package.json package-lock.json* ./ + +# Install dependencies +RUN npm ci + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line to disable telemetry during the build. +ENV NEXT_TELEMETRY_DISABLED 1 + +# Build the application +RUN npm run build + +# Production image, copy all the files and run next +FROM base 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/dist ./dist +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json ./package.json +COPY --from=builder /app/next.config.js ./next.config.js + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN 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/dist/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/dist/static ./dist/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +# Start the application +CMD ["node", "server.js"] + diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..a4f9066 --- /dev/null +++ b/compose.yml @@ -0,0 +1,24 @@ +services: + vultr-dns-manager: + build: + context: . + dockerfile: Dockerfile + ports: + - "3000:3000" + restart: unless-stopped + environment: + - NODE_ENV=production + # You can add other environment variables here if needed + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + volumes: + # Optional: Mount a volume for persistent data if needed + - vultr-dns-manager-data:/app/.next/cache + +volumes: + vultr-dns-manager-data: + diff --git a/next.config.js b/next.config.js index 2fcdde1..cd1c953 100644 --- a/next.config.js +++ b/next.config.js @@ -1,12 +1,11 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - // Remove output: 'export' to allow dynamic API routes distDir: 'dist', eslint: { ignoreDuringBuilds: true, }, - images: { unoptimized: true } - // Removed experimental.appDir as it's now enabled by default + images: { unoptimized: true }, + output: 'standalone', }; module.exports = nextConfig;