Diterbitkan pada

Panduan Lengkap untuk Mengedarkan Aplikasi Next.js Berdiri Sendiri Menggunakan Bun dan Docker

Penulis

Mengapa Membangunkan Next.js dengan Bun dan Docker?

Apabila Bun mencapai versi stabil 1 dan Vercel mula menyokongnya sebagai pengurus pakej (walaupun masih bergantung pada Node untuk masa jalan), saya tertarik. Bagaimana anda boleh mensimulasikan proses pembangunan Vercel secara tempatan? Lebih spesifik, bagaimana anda boleh membangunkan aplikasi Next.js berdiri sendiri dengan Bun dan Docker? Panduan ini bertujuan untuk menjawab soalan-soalan ini.

Prasyarat

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

  • Node.js dipasang

  • Pengurus pakej Bun dipasang

Panduan Langkah Demi Langkah

Langkah 1: Menyediakan Dockerfile

Berikut adalah dockerfile penuh yang anda perlukan.

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

# Saya menggunakan Asia/Jakarta sebagai zon waktu saya, anda boleh menukarnya kepada zon 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

# Pasang kebergantungan berdasarkan pengurus pakej yang disukai
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

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

RUN bun run build


# Imej pengeluaran, salin semua fail dan jalankan next
FROM node:18-slim AS runner
WORKDIR /app

ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Nyahkomen baris berikut sekiranya anda ingin melumpuhkan telemetri semasa masa jalan.
# ENV NEXT_TELEMETRY_DISABLED 1

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

EXPOSE 3001

ENV PORT 3001

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

Langkah 2: Skrip Shell Tersuai

Cipta skrip shell tersuai ./build.sh.

#!/bin/bash
set -e

# Jalankan pembangunan Next.js dengan hujah yang diluluskan
next build "$@"

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

Kesilapan Umum dan Penyelesaian Masalah

Saya menghadapi beberapa masalah semasa percubaan pertama saya, terutamanya ralat yang berawalan dengan node:. Saya membetulkannya dengan menggunakan imbios/bun-node dan bukannya oven/bun sebagai imej asas. Kerana kita memerlukan kejatuhan balik Node.js untuk ciri Bun yang belum dilaksanakan.

Kesimpulan

Dengan mengikuti panduan ini, anda sepatutnya mempunyai aplikasi Next.js yang dimajukan, meniru proses pembangunan Vercel, dengan Bun dan Docker. Berasa bebas untuk menala dan mengoptimumkan konfigurasi mengikut keperluan projek anda.

Apa Seterusnya?

Kongsi panduan ini jika anda mendapati ia berguna dan tinggalkan komen jika anda mempunyai sebarang pertanyaan atau peningkatan. Nantikan lagi!