- Diterbitkan pada
Panduan Lengkap untuk Menyebarkan Aplikasi Next.js yang Mandiri dengan Bun dan Docker
- Penulis
- Nama
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
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 /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!