Yayınlandı

Bun ve Docker Kullanarak Bağımsız Bir Next.js Uygulamasının Dağıtımı İçin Tam Kılavuz

Yazarlar

Neden Bun ve Docker ile Next.js Dağıtımı Yapmalısınız?

Bun kararlı sürüm 1'e ulaştığında ve Vercel, Bun'u paket yöneticisi olarak desteklemeye başlayınca (çalışma zamanı için hala Node'a güvenilir olsa da), oldukça meraklanmıştım. Vercel dağıtım sürecini yerel olarak nasıl simüle edebilirdiniz? Özellikle, Next.js bağımsız bir uygulamasını Bun ve Docker ile nasıl dağıtabilirsiniz? Bu kılavuz, bu sorulara cevap vermeyi amaçlamaktadır.

Ön Koşullar

  • Docker, Next.js ve Bun'un temel bilgisi

  • Yüklü Node.js

  • Yüklü Bun paket yöneticisi

Adım Adım Kılavuz

Adım 1: Dockerfile'ı Ayarlama

İhtiyacınız olan tam dockerfile şu şekildedir:

FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive

# Ben zaman dilimi olarak Asia/Jakarta'yı kullanıyorum, siz kendi zaman diliminizi değiştirebilirsiniz
RUN apt-get -y update && \
  apt-get install -yq openssl git ca-certificates tzdata && \
  ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && \
  dpkg-reconfigure -f noninteractive tzdata
WORKDIR /app

# Tercih edilen paket yöneticisine göre bağımlılıkları yükleyin
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

# Uygulamayı derleyin
FROM deps AS builder
WORKDIR /app
COPY . .

RUN bun run build


# Üretim görüntüsü, tüm dosyaları kopyalayın ve next çalıştırın
FROM node:18-slim AS runner
WORKDIR /app

ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Çalışma zamanında telemetriyi devre dışı bırakmak isterseniz aşağıdaki satırı yorumdan kaldırın.
# ENV NEXT_TELEMETRY_DISABLED 1

COPY --from=builder  /app/.next/standalone ./

EXPOSE 3001

ENV PORT 3001

CMD ["node", "server.js"]

Adım 2: Özel Shell Scripti

Özel bir shell scripti ./build.sh oluşturun.

#!/bin/bash
set -e

# Geçirilen argümanlarla Next.js derlemesini çalıştırın
next build "$@"

# Dosyaları yalnızca CI ortamında değilse kopyalayın
if [ -z "$CI" ]; then
  cp -r ./public ./.next/standalone/public
  cp -r ./.next/static ./.next/standalone/.next/static
fi

Ortak Hatalar ve Sorun Giderme

İlk denediğimde özellikle node: önekiyle başlayan bazı sorunlarla karşılaştım. Bun'un henüz uygulanmamış özelliklerinin Node.js geri dönüşüne ihtiyaç duyduğumuz için, temel görüntü olarak oven/bun yerine imbios/bun-node kullanarak bunları düzelttim.

Sonuç

Bu kılavuzu izleyerek, Vercel dağıtım sürecini taklit ederek, Bun ve Docker ile dağıtılmış bir Next.js uygulamanıza sahip olmanız gerekir. Projenizin ihtiyaçlarına göre kurulumu ayarlamakta ve optimize etmekte özgürsünüz.

Sonraki Adımlar?

Bu kılavuzu faydalı bulduysanız paylaşın ve herhangi bir sorunuz veya iyileştirmeniz varsa yorum bırakın. Daha fazlası için bizi izlemeye devam edin!