iToverDose/Yazılım· 4 MAYIS 2026 · 08:03

Next.js Uygulamanızı Docker ve VPS ile Canlıya Alın: Adım Adım Rehber

Next.js projelerinizi Docker ve VPS kullanarak nasıl verimli bir şekilde dağıtabilirsiniz? Standalone moddan Dockerfile optimizasyonuna, NGINX ters proxy ve HTTPS ayarlarından otomatik sertifika yenilemeye kadar tüm adımlar bu rehberde.

DEV Community3 dk okuma0 Yorumlar

Next.js uygulamalarınızı canlı ortama taşımak karmaşık bir süreç gibi görünebilir. Ancak Docker kullanarak uygulamanızı konteynerleştirmek, performansı standartlaştırmak ve ölçeklenebilirliği kolaylaştırmak mümkün. Bu rehberde, Next.js’in standalone modunu etkinleştirmekten başlayarak, Dockerfile optimizasyonunu, NGINX ters proxy kurulumunu ve HTTPS güvenliğini Certbot ile nasıl sağlayacağınızı adım adım öğreneceksiniz. Sonunda, uygulamanızın üretim ortamında verimli ve güvenli bir şekilde çalışmasını sağlayacak tüm bileşenleri bir araya getireceksiniz.

Next.js’i Standalone Modda Yapılandırma

Next.js’in ürettiği standart üretim derlemeleri, gereksiz bağımlılıkları ve geliştirme araçlarını içerir. Ancak standalone mod, yalnızca çalıştırmak için gerekli dosyaları içeren minimal bir derleme üretir. Bu özellik, Docker imajınızın boyutunu önemli ölçüde azaltır.

Standalone modu etkinleştirmek için next.config.ts dosyanızı aşağıdaki gibi güncelleyin:

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  output: "standalone",
};

export default nextConfig;

Bu ayar, Next.js’e yalnızca üretim ortamı için gerekli bileşenleri derlemesini söyler. Ancak üretim ortamında güvenlik ve performans optimizasyonları için ilave adımlar da gereklidir.

Dockerfile’ı Bun ve Next.js için Optimize Etme

Verimli ve güvenli bir Docker imajı oluşturmak, çok aşamalı bir Dockerfile ile mümkündür. Bu yapıda, bağımlılıkların kurulması, uygulamanın derlenmesi ve nihai çalıştırma ortamı olmak üzere üç ayrı aşama bulunur. İşte Bun kullanarak optimize edilmiş bir Dockerfile örneği:

# Aşama 1: Bağımlılıkları Bun ile yükle
FROM oven/bun:1 AS dependencies
WORKDIR /app
COPY package.json bun.lock* ./
RUN --mount=type=cache,target=/root/.bun/install/cache \
  bun install --no-save --frozen-lockfile

# Aşama 2: Next.js uygulamasını derle
FROM oven/bun:1 AS builder
WORKDIR /app
COPY --from=dependencies /app/node_modules ./node_modules
COPY . .
ENV NODE_ENV=production
RUN bun run build

# Aşama 3: Uygulamayı çalıştır
FROM oven/bun:1 AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"

# Yalnızca gerekli dosyaları kopyala ve izinleri ayarla
COPY --from=builder --chown=bun:bun /app/public ./public
RUN mkdir .next && chown bun:bun .next
COPY --from=builder --chown=bun:bun /app/.next/standalone ./
COPY --from=builder --chown=bun:bun /app/.next/static ./.next/static

# Güvenlik için kök kullanıcı olarak değil, 'bun' kullanıcısı olarak çalıştır
USER bun
EXPOSE 3000
CMD ["bun", "server.js"]

Bu Dockerfile’ın en önemli avantajları arasında, bağımlılıkların Docker önbelleğiyle yönetilmesi ve bun install --frozen-lockfile komutu sayesinde yeniden üretilebilir derlemeler elde edilmesi bulunur. Son aşamada uygulama, güvenlik nedenleriyle kök kullanıcı olarak değil, bun kullanıcısı olarak çalıştırılır.

Docker Compose ile Geliştirme ve Üretime Hazırlık

Docker Compose, Next.js uygulamanızın yanı sıra NGINX ters proxy ve HTTPS sertifikalarını yönetmenizi kolaylaştırır. İşte üretim ortamına hazır bir docker-compose.yml örneği:

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: nextjs-standalone-bun-image
    container_name: nextjs-app
    environment:
      NODE_ENV: production
      PORT: "3000"
      HOSTNAME: "0.0.0.0"
    expose:
      - "3000"
    restart: unless-stopped
    networks:
      - app-network

  nginx:
    image: nginx:stable-alpine
    container_name: nginx-proxy
    depends_on:
      - app
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/nginx.conf:ro
      - certbot_www:/var/www/certbot
      - certbot_conf:/etc/letsencrypt
    restart: unless-stopped
    networks:
      - app-network

  certbot:
    image: certbot/certbot:latest
    container_name: certbot
    volumes:
      - certbot_www:/var/www/certbot
      - certbot_conf:/etc/letsencrypt
    entrypoint: >
      sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot --quiet; sleep 12h; done'
    restart: unless-stopped

volumes:
  certbot_www:
  certbot_conf:

networks:
  app-network:
    driver: bridge

Bu yapıda, NGINX uygulamanızın trafiğini yönetirken, Certbot da otomatik sertifika yenilemesi gerçekleştirir. nginx/default.conf dosyasını, alan adınıza göre özelleştirebilirsiniz.

NGINX ile Ters Proxy ve HTTPS Ayarları

NGINX, hem HTTP hem de HTTPS trafiğini yönetmek için kullanabileceğiniz güçlü bir ters proxy aracıdır. Öncelikle, nginx klasörünüzde yer alan default.conf dosyasını aşağıdaki gibi yapılandırın:

server {
  listen 80;
  server_name ornek.com www.ornek.com;
  location / {
    return 301 
  }
  location /.well-known/acme-challenge/ {
    root /var/www/certbot;
  }
}

server {
  listen 443 ssl;
  server_name ornek.com www.ornek.com;

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

  location / {
    proxy_pass 
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Bu yapılandırma, HTTP trafiğini otomatik olarak HTTPS’e yönlendirir ve uygulama trafiğini Next.js konteynerine iletir. Üretime geçmeden önce, alan adınızın DNS kayıtlarını VPS IP adresine yönlendirmeyi unutmayın.

Üretime Geçiş için Son Adımlar

Docker Compose kullanarak yerel ortamınızda kurulumu test edin:

# Servisleri oluştur ve başlat
docker compose up --build

# Next.js uygulamasının çalışıp çalışmadığını doğrula
curl 

# NGINX ve HTTPS yapılandırmasını kontrol et
curl -I 

Üretim ortamında, uygulamanızı izlemek, loglamak ve yedeklemek için ek stratejiler uygulamayı düşünebilirsiniz. Next.js’in standalone modu ve Docker’ın çok aşamalı derlemeleri, sağlam bir temel sunar. Ancak uygulamanız büyüdükçe performans ve güvenliği sürekli iyileştirmek önemlidir.

Geleceğin dağıtım altyapısı, otomasyon ve ölçeklenebilirlik üzerine kuruludur. Next.js uygulamanızı Docker ve Bun ile konteynerleştirmek, yalnızca dağıtım sürecini basitleştirmekle kalmaz, aynı zamanda altyapınızı geleceğe hazırlar. Bu sayede, güncellemeleri ve ölçeklendirmeleri sorunsuz bir şekilde gerçekleştirebilirsiniz.

Yapay zeka özeti

Next.js projelerinizi Docker ve VPS kullanarak nasıl verimli şekilde dağıtabilirsiniz? Standalone mod, Dockerfile optimizasyonu, NGINX ters proxy ve HTTPS ayarları hakkında adım adım rehber.

Yorumlar

00
YORUM BIRAK
ID #7DDCDN

0 / 1200 KARAKTER

İnsan doğrulaması

8 + 7 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.