نُشر في

دليل شامل لنشر تطبيقات Next.js المستقلة باستخدام Bun و Docker

الكتاب

لماذا نشر Next.js مع Bun و Docker؟

عندما وصل Bun إلى إصداره المستقر 1 وبدأت Vercel في دعمه كمدير حزم (على الرغم من أنه لا يزال يعتمد على Node للتشغيل)، شعرتُ بالفضول. كيف يمكنك محاكاة عملية نشر Vercel محليًا؟ على وجه التحديد، كيف يمكنك نشر تطبيق Next.js مستقل مع Bun و Docker؟ يهدف هذا الدليل إلى الإجابة على هذه الأسئلة.

المتطلبات المسبقة

  • فهم أساسي لـ Docker و Next.js و Bun

  • تثبيت Node.js

  • تثبيت مدير حزم Bun

دليل خطوة بخطوة

الخطوة 1: إعداد Dockerfile

فيما يلي ملف dockerfile الكامل الذي ستحتاجه.

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

# أنا أستخدم Asia/Jakarta كمنطقة زمنية، يمكنك تغييرها إلى منطقتك الزمنية
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

# تثبيت التبعيات بناءً على مدير الحزم المفضل
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

# بناء التطبيق
FROM deps AS builder
WORKDIR /app
COPY . .

RUN bun run build


# صورة الإنتاج، انسخ جميع الملفات وشغل next
FROM node:18-slim AS runner
WORKDIR /app

ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# قم بإلغاء تعليق السطر التالي في حالة رغبتك في تعطيل التلقي أثناء وقت التشغيل.
# ENV NEXT_TELEMETRY_DISABLED 1

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

EXPOSE 3001

ENV PORT 3001

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

الخطوة 2: نص Shell مخصص

أنشئ نص Shell مخصص ./build.sh.

#!/bin/bash
set -e

# تشغيل Build Next.js مع الوسائط الممررة
next build "$@"

# نسخ الملفات فقط إذا لم تكن في بيئة CI
if [ -z "$CI" ]; then
  cp -r ./public ./.next/standalone/public
  cp -r ./.next/static ./.next/standalone/.next/static
fi

الأخطاء الشائعة واستكشاف الأخطاء وإصلاحها

واجهت بعض المشكلات أثناء محاولتي الأولى، خاصة الأخطاء التي تبدأ بـ node:. قمت بإصلاحها باستخدام imbios/bun-node بدلاً من oven/bun كصورة أساسية. لأننا نحتاج إلى Node.js للعودة إلى الميزات غير المُنفّذة بعد في Bun.

الخاتمة

بمتابعة هذا الدليل، يجب أن يكون لديك تطبيق Next.js مُنشَرًا، مُحاكًا لعملية نشر Vercel، باستخدام Bun و Docker. لا تتردد في تعديل وإضفاء التحسينات على الإعداد وفقًا لاحتياجات مشروعك.

ما هو التالي؟

شارك هذا الدليل إذا وجدته مفيدًا واترك تعليقًا إذا كانت لديك أي أسئلة أو تحسينات. ترقبوا المزيد!