Next.js'i Docker ile kendi sunucunda yayınlamak
Standalone çıktı, çok aşamalı bir Dockerfile ve önünde Nginx. Bu sitenin de yayında olduğu kurulum.
Next.js'i bir platforma bağlı kalmadan, kendi VPS'inde çalıştırmak düşündüğünden kolay. Bu site de aşağıdaki kurulumla yayında.
Standalone çıktıyı aç
next.config.ts içinde tek satır, derlemenin sadece çalışması için gereken dosyaları ayrı bir klasöre koymasını sağlar:
const nextConfig = { output: "standalone" };Böylece imajın içine bütün node_modules klasörü girmez. İmaj boyutu ciddi şekilde küçülür.
Çok aşamalı Dockerfile
Bağımlılıkları kur, derle, sonra sadece çıktıyı küçük bir imaja kopyala:
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production HOSTNAME=0.0.0.0 PORT=3000
COPY --from=build /app/.next/standalone ./
COPY --from=build /app/.next/static ./.next/static
COPY --from=build /app/public ./public
USER node
CMD ["node", "server.js"]Önüne Nginx koy
Konteyner sadece 127.0.0.1:3000 üzerinde dinler. Dış dünyayla Nginx konuşur:
server {
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Sertifika için sudo certbot --nginx -d example.com yeterli. Certbot yenilemeyi de kendisi kurar.
Güncelleme
Yeni sürümü yayına almak iki komut:
docker compose build
docker compose up -dİstersen bunu bir GitHub Actions iş akışına bağlayıp her main gönderiminde otomatik çalıştırabilirsin.
Aklında bir proje mi var?
Bir fikir, yarım kalmış bir iş ya da taşınması gereken bir sunucu. Ne olursa yaz, aynı gün dönerim.
İletişime geç
