10 min read
ā¢Question 40 of 47hardNext.js Deployment Strategies
Production deployment patterns and considerations.
Deployment Strategies
Vercel Deployment
$ terminalBash
# Zero-config deployment
vercel
# Production deployment
vercel --prod
# Environment variables
vercel env add MONGODB_URI productionDocker Deployment
code.txtDOCKERFILE
# Dockerfile
FROM node:18-alpine AS base
FROM base AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci
FROM base AS builder
WORKDIR /app
COPY /app/node_modules ./node_modules
COPY . .
RUN npm run build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup --system nodejs
RUN adduser --system nextjs
COPY /app/public ./public
COPY /app/.next/standalone ./
COPY /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]Standalone Output
code.txtTSX
// next.config.js
module.exports = {
output: 'standalone',
};
// Results in:
// .next/standalone/server.js - Minimal server
// .next/standalone/node_modules - Only production depsStatic Export
code.txtTSX
// next.config.js
module.exports = {
output: 'export',
// Optional: Change base path
basePath: '/docs',
// Optional: Trailing slashes
trailingSlash: true,
};Environment Configuration
$ terminalBash
# .env.production
DATABASE_URL=prod-url
NEXT_PUBLIC_API_URL=https://api.example.com
# Runtime environment (not in bundle)
# Set in deployment platform
STRIPE_SECRET_KEY=sk_live_xxx