- منتشر شده در
راهنمای کامل برای استقرار یک برنامه Next.js مستقل با استفاده از Bun و Docker
- نویسندگان
- نام
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
چرا Next.js را با Bun و Docker مستقر کنیم؟
وقتی Bun به نسخه پایدار 1 رسید و Vercel از آن به عنوان یک مدیر بسته (با وجود اینکه هنوز به Node برای زمان اجرا متکی بود) پشتیبانی کرد، کنجکاو شدم. چگونه می توانید فرآیند استقرار Vercel را به صورت محلی شبیه سازی کنید؟ به طور خاص، چگونه می توانید یک برنامه مستقل Next.js را با Bun و Docker مستقر کنید؟ این راهنما برای پاسخ به این سؤالات است.
پیش نیازها
- درک اولیه از Docker، Next.js و Bun
- Node.js نصب شده
- Bun package manager نصب شده
راهنمای گام به گام
مرحله 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 /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
مرحله 2: اسکریپت پوسته سفارشی
یک اسکریپت پوسته سفارشی ./build.sh ایجاد کنید.
#!/bin/bash
set -e
# اجرای ساخت 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
به عنوان تصویر پایه برطرف کردم. زیرا به دلیل ویژگی های هنوز پیاده سازی نشده Bun، ما به Node.js به عنوان پشتیبان نیاز داریم.
نتیجه گیری
با دنبال کردن این راهنما، باید یک برنامه Next.js استقرار یافته داشته باشید که فرآیند استقرار Vercel را با Bun و Docker شبیه سازی می کند. با توجه به نیازهای پروژه خود، آزادانه تنظیمات را تغییر داده و بهینه سازی کنید.
قدم بعدی چیست؟
اگر این راهنما برای شما مفید بود، آن را به اشتراک بگذارید و اگر سوالی دارید یا پیشنهادی برای بهبود وجود دارد، نظر بگذارید. منتظر مطالب بیشتر باشید!