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: bridgeBu 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.
Etiketler