Diterbitkan pada

Panduan Lengkap untuk Menyebarkan Aplikasi Next.js yang Mandiri dengan Bun dan Docker

Penulis

Mengapa Deploy Next.js dengan Bun dan Docker?

Ketika Bun mencapai versi stabil 1 dan Vercel mulai mendukungnya sebagai manajer paket (meskipun masih mengandalkan Node untuk runtime), saya tertarik. Bagaimana Anda dapat mensimulasikan proses deployment Vercel secara lokal? Secara khusus, bagaimana Anda dapat menyebarkan aplikasi Next.js standalone dengan Bun dan Docker? Panduan ini bertujuan untuk menjawab pertanyaan-pertanyaan ini.

Prasyarat

  • Pemahaman dasar tentang Docker, Next.js, dan Bun

  • Node.js terinstal

  • Manajer paket Bun terinstal

Panduan Langkah demi Langkah

Langkah 1: Menyiapkan Dockerfile

Berikut adalah dockerfile lengkap yang Anda perlukan.

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

# Saya menggunakan Asia/Jakarta sebagai zona waktu saya, Anda dapat mengubahnya ke zona waktu Anda
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

# Instal dependensi berdasarkan manajer paket yang dipilih
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

# Bangun aplikasi
FROM deps AS builder
WORKDIR /app
COPY . .

RUN bun run build


# Gambar produksi, salin semua file dan jalankan next
FROM node:18-slim AS runner
WORKDIR /app

ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Hapus komentar pada baris berikut jika Anda ingin menonaktifkan telemetri selama runtime.
# ENV NEXT_TELEMETRY_DISABLED 1

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

EXPOSE 3001

ENV PORT 3001

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

Langkah 2: Skrip Shell Kustom

Buat skrip shell kustom ./build.sh.

#!/bin/bash
set -e

# Jalankan pembuatan Next.js dengan argumen yang diteruskan
next build "$@"

# Salin file hanya jika tidak dalam lingkungan CI
if [ -z "$CI" ]; then
  cp -r ./public ./.next/standalone/public
  cp -r ./.next/static ./.next/standalone/.next/static
fi

Kesalahan Umum dan Pemecahan Masalah

Saya mengalami beberapa masalah selama percobaan pertama saya, terutama kesalahan yang diawali dengan node:. Saya memperbaikinya dengan menggunakan imbios/bun-node sebagai pengganti oven/bun sebagai gambar dasar. Karena kita membutuhkan Node.js fallback untuk fitur Bun yang belum diterapkan.

Kesimpulan

Dengan mengikuti panduan ini, Anda seharusnya memiliki aplikasi Next.js yang di-deploy, meniru proses deployment Vercel, dengan Bun dan Docker. Jangan ragu untuk menyesuaikan dan mengoptimalkan pengaturan sesuai dengan kebutuhan proyek Anda.

Apa Selanjutnya?

Bagikan panduan ini jika Anda merasa bermanfaat dan tinggalkan komentar jika Anda memiliki pertanyaan atau perbaikan. Nantikan lebih banyak lagi!