Full Stack 47:352025-06-30

Deploy Next.js on a VPS with Docker, Nginx, and SSL

Skip Vercel for production control. Set up a complete deployment pipeline: Docker containerisation, Nginx reverse proxy, Let's Encrypt SSL, and GitHub Actions CI/CD.

Watch on YouTube

Click to open in YouTube

Video Notes & Code

Key takeaways, code snippets, and resources from this video.

Dockerfile

dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

Nginx Config

nginx
server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Found this useful?

Subscribe for weekly content on AI engineering, SaaS building, and full stack development.

Book a Call