DEV Community

Cover image for πŸš€ Dockerize Your Next.js App for CI/CD & Deployment \[Complete Guide]
Raj Aryan
Raj Aryan

Posted on

πŸš€ Dockerize Your Next.js App for CI/CD & Deployment \[Complete Guide]

Want to deploy your Next.js app like a pro? This post will help you Dockerize your app and set up a seamless CI/CD pipeline using GitHub Actions, then deploy it to any cloud provider or server.


🧱 1. Start with Your Next.js App

npx create-next-app my-nextjs-app
cd my-nextjs-app
Enter fullscreen mode Exit fullscreen mode

πŸ“¦ 2. Create a Production-Ready Dockerfile

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
EXPOSE 3000
CMD ["npm", "start"]
Enter fullscreen mode Exit fullscreen mode

πŸ“‚ 3. Add a .dockerignore

node_modules
.next/cache
Dockerfile
.dockerignore
Enter fullscreen mode Exit fullscreen mode

πŸ§ͺ 4. Test Locally

docker build -t my-nextjs-app .
docker run -p 3000:3000 my-nextjs-app
Enter fullscreen mode Exit fullscreen mode

πŸ€– 5. GitHub Actions CI/CD Workflow

Create .github/workflows/deploy.yml:

name: Deploy

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - run: |
          docker build -t myuser/nextjs-app:${{ github.sha }} .
          docker push myuser/nextjs-app:${{ github.sha }}
      - uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            docker pull myuser/nextjs-app:${{ github.sha }}
            docker stop nextjs-app || true
            docker rm nextjs-app || true
            docker run -d -p 3000:3000 --name nextjs-app myuser/nextjs-app:${{ github.sha }}
Enter fullscreen mode Exit fullscreen mode

☁️ 6. Where Can You Deploy?

  • VPS (DigitalOcean, Linode, etc.)
  • Render / Railway
  • AWS ECS + ECR
  • Google Cloud Run
  • Fly.io

βœ… Summary

With this setup:

  • You Dockerize your Next.js app
  • Automate builds & deployment via CI/CD
  • Ensure portability, consistency, and scalability

πŸ‘‰ Read the Full Guide on Medium

This was a quick overview. For detailed steps, visuals, and pro tips:

πŸ“– Read full tutorial here


Let me know in the comments how you deploy your Next.js apps or if you'd like a version with PostgreSQL, Redis, or NGINX reverse proxy! 🐳πŸ’₯

Top comments (0)