پروژهای که با 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
- کد را با Git یا آپلود فایل به هاست ببرید (بدون پوشهی node_modules).
- اپلیکیشن را در پنل بسازید: نسخهی Node، پوشهی پروژه، دامنه و فایل یا دستور شروع.
- وابستگیها را نصب کنید (NPM install).
- build بگیرید.
- متغیرهای محیطی را وارد کنید.
- اپلیکیشن را اجرا یا ریاستارت کنید.

در رایکت اپلیکیشن با PM2 اجرا میشود و بعد از ریاستارت سرور خودکار بالا میآید. جزئیات: راهاندازی اپلیکیشن روی هاست و استقرار با Git.
اگر پروژه فقط استاتیک است
اگر سایت شما رندر سمت سرور، مسیر API یا بارگذاری داده در سرور ندارد، میشود با output: 'export' خروجی استاتیک گرفت و روی هاست معمولی گذاشت؛ ارزانتر و سادهتر. (انتشار سایت استاتیک)
خطاهای رایج بعد از استقرار
| خطا | علت |
|---|---|
| صفحهی ۵۰۲ یا ۵۰۳ | اپلیکیشن اجرا نشده یا روی پورت دیگری است |
| Module not found | وابستگی نصب نشده، یا در devDependencies بوده |
| صفحه بالا میآید ولی داده نمیآید | متغیر محیطی یا آدرس API |
| تصاویر بهینه نمیشوند | تنظیم تصویر Next.js یا دسترسی نوشتن در پوشهی کش |
| بعد از بهروزرسانی، نسخهی قدیمی دیده میشود | build دوباره گرفته نشده یا ریاستارت نشده |
اول لاگ اپلیکیشن را بخوانید؛ خطای واقعی آنجاست.
منابع
build گرفتن از خود اجرا حافظهی بیشتری میخواهد. پلنهای هاست Node.js رایکت ۸ هسته و ۸ گیگابایت رم دارند.
سوالهای رایج
هر بار تغییر، باید build بگیرم؟
بله، و بعدش ریاستارت.
دیتابیس چه؟
MySQL روی هاست هست؛ رشتهی اتصال را در متغیر محیطی بگذارید.