پروژه‌ای که با npm run dev روی کامپیوتر شما کار می‌کند هنوز آماده‌ی هاست نیست. روی هاست باید نسخه‌ی production ساخته و اجرا شود، پورت از محیط خوانده شود و رمزها در متغیر محیطی باشند. دستیارهای کدنویسی معمولاً این بخش را به شما واگذار می‌کنند.

قبل از آپلود، روی کامپیوتر خودتان

بررسی دستور یا کار
نسخه‌ی production ساخته می‌شود npm run build بدون خطا
با حالت production اجرا می‌شود npm start
نسخه‌ی Node مشخص است فیلد engines در package.json
فایل env. در مخزن نیست در gitignore.
آدرس localhost در کد نیست جستجو در پروژه

پورت

روی هاست، پورت را سرویس تعیین می‌کند. اسکریپت start باید از متغیر محیطی بخواند:

"scripts": {
  "build": "next build",
  "start": "next start -p ${PORT:-3000}"
}

متغیرهای محیطی

  • کلید API، رمز دیتابیس و هر چیز محرمانه را در تنظیمات اپلیکیشن روی هاست وارد کنید، نه در کد.
  • در Next.js هر متغیری که با NEXT_PUBLIC_ شروع شود به مرورگر فرستاده می‌شود. کلید محرمانه را هرگز با این پیشوند نگذارید؛ دستیارهای کدنویسی گاهی این اشتباه را می‌کنند.

مراحل روی هاست Node.js

  1. کد را با Git یا آپلود فایل به هاست ببرید (بدون پوشه‌ی node_modules).
  2. اپلیکیشن را در پنل بسازید: نسخه‌ی Node، پوشه‌ی پروژه، دامنه و فایل یا دستور شروع.
  3. وابستگی‌ها را نصب کنید (NPM install).
  4. build بگیرید.
  5. متغیرهای محیطی را وارد کنید.
  6. اپلیکیشن را اجرا یا ری‌استارت کنید.
مقادیر لازم برای ساخت اپلیکیشن Node.js روی هاست
مقادیری که هنگام ساخت اپلیکیشن Node.js وارد می‌شود

در رایکت اپلیکیشن با PM2 اجرا می‌شود و بعد از ری‌استارت سرور خودکار بالا می‌آید. جزئیات: راه‌اندازی اپلیکیشن روی هاست و استقرار با Git.

اگر پروژه فقط استاتیک است

اگر سایت شما رندر سمت سرور، مسیر API یا بارگذاری داده در سرور ندارد، می‌شود با output: 'export' خروجی استاتیک گرفت و روی هاست معمولی گذاشت؛ ارزان‌تر و ساده‌تر. (انتشار سایت استاتیک)

خطاهای رایج بعد از استقرار

خطا علت
صفحه‌ی ۵۰۲ یا ۵۰۳ اپلیکیشن اجرا نشده یا روی پورت دیگری است
Module not found وابستگی نصب نشده، یا در devDependencies بوده
صفحه بالا می‌آید ولی داده نمی‌آید متغیر محیطی یا آدرس API
تصاویر بهینه نمی‌شوند تنظیم تصویر Next.js یا دسترسی نوشتن در پوشه‌ی کش
بعد از به‌روزرسانی، نسخه‌ی قدیمی دیده می‌شود build دوباره گرفته نشده یا ری‌استارت نشده

اول لاگ اپلیکیشن را بخوانید؛ خطای واقعی آنجاست.

منابع

build گرفتن از خود اجرا حافظه‌ی بیشتری می‌خواهد. پلن‌های هاست Node.js رایکت ۸ هسته و ۸ گیگابایت رم دارند.

سوال‌های رایج

هر بار تغییر، باید build بگیرم؟

بله، و بعدش ری‌استارت.

دیتابیس چه؟

MySQL روی هاست هست؛ رشته‌ی اتصال را در متغیر محیطی بگذارید.

قبل از انتشار کد را بررسی کنم؟

بازبینی امنیتی کد هوش مصنوعی.