فریم‌ورک فول‌استک React

هاست Next.js با رندر سمت سرور

پروژه‌ی Next.js با App Router، Route Handler و Server Action همان‌طور که روی سیستم خودتان اجرا می‌شود، روی سکو کلود اجرا می‌شود. با output: 'standalone' ایمیج سبک‌تری می‌گیرید.

تشخیص
وابستگی next در package.json
اجرا
node server.js در standalone، وگرنه next start
نسخه‌ی Node.js
24، 22 و 20 (پیش‌فرض 22)
پورت پیش‌فرض
3000
لوگوی Next.js

Next.js همان‌طور که نوشته‌اید

بیلدپک سکو کلود وابستگی next را در package.json پیدا می‌کند و پروژه را به‌عنوان Next.js می‌شناسد. اگر در next.config گزینه‌ی output: 'standalone' را فعال کرده باشید، فقط خروجی standalone و فایل‌های static به ایمیج نهایی می‌رود و برنامه با node server.js اجرا می‌شود؛ در غیر این صورت next start اجرا می‌شود.

صفحه‌های SSR، ISR، Middleware، Route Handler و Server Action روی سرور Node.js اجرا می‌شوند و نیازی به سرویس جداگانه ندارند. اگر پروژه را با output: 'export' کاملاً استاتیک ساخته‌اید، پوشه‌ی out به‌عنوان سایت استاتیک سرو می‌شود.

مناسب برای

  • فروشگاه و سایت محتوایی با SSR و ISR
  • داشبورد و پنل با App Router
  • API کنار رابط کاربری با Route Handler
  • لندینگ کاملاً استاتیک با output: 'export'

مسیر بیلد Next.js

  1. تشخیص

    وابستگی next در package.json و لاک‌فایل در ریشه.

    "next": "15.x"
  2. نصب

    پکیج‌منیجر از روی لاک‌فایل انتخاب می‌شود.

    npm ci
  3. بیلد

    اسکریپت build اجرا می‌شود و کش .next/cache بین بیلدها نگه داشته می‌شود.

    next build
  4. اجرا

    در حالت standalone فقط خروجی لازم کپی و با server.js اجرا می‌شود.

    node server.js

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 3.2MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [builder 1/6] FROM node:22-alpine
#6 [builder 3/6] RUN npm ci
#8 [builder 4/6] RUN npm run build
#10 [stage-1 3/4] COPY .next/standalone ./
#12 exporting to image
✔ Deployed — app is running.
→ https://my-site.sakooapps.ir

تنظیم پیشنهادی

خروجی standalone را روشن کنید و مطمئن شوید سرور روی 0.0.0.0 و پورت PORT بالا می‌آید.

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: "standalone",
};

export default nextConfig;

تنظیمات

حالت‌های خروجی Next.js

تنظیم در next.configروی سکو کلود
output: "standalone"ایمیج سبک، اجرا با node server.js (پیشنهادی)
بدون outputاجرا با next start
output: "export"سایت استاتیک از پوشه‌ی out، سرو با nginx

نسخه‌ی Node.js

نسخه‌های 24، 22 و 20 (LTS) در دسترس‌اند. اگر پروژه نسخه‌ای اعلام نکند، Node.js 22 استفاده می‌شود.

از کجا خوانده می‌شودنمونه
.nvmrc یا .node-version22
engines.node در package.json"node": "22.x"
mise.toml یا .tool-versionsnode = "22"
فلگ --runtime-version در CLI--runtime-version 22

پکیج‌منیجر

ابزار از روی لاک‌فایل انتخاب می‌شود و نصب همیشه دقیقاً همان نسخه‌های قفل‌شده را می‌گیرد.

لاک‌فایلابزاردستور نصب
package-lock.jsonnpmnpm ci
yarn.lockyarnyarn install --frozen-lockfile
pnpm-lock.yamlpnpmpnpm install --frozen-lockfile

اتصال به دیتابیس

دیتابیس لینک‌شده DATABASE_URL را به محیط اپ می‌دهد. اگر از Prisma استفاده می‌کنید، prisma generate را جلوی next build بگذارید.

sakoocloud apps link-db <db-id> --app my-site

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

اپ بالا نمی‌آید یا مدام ری‌استارت می‌شود

علتnext start به‌طور پیش‌فرض فقط روی localhost گوش می‌دهد.

راه‌حلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.

package.json
"start": "next start -H 0.0.0.0 -p ${PORT:-3000}"

متغیر NEXT_PUBLIC_ در مرورگر خالی است

علتمتغیرهای NEXT_PUBLIC_ در زمان بیلد داخل باندل قرار می‌گیرند، نه در زمان اجرا.

راه‌حلمتغیر را با --build-time تعریف کنید و دوباره مستقر کنید.

terminal
sakoocloud env set NEXT_PUBLIC_API_URL=https://api.example.com --build-time
sakoocloud deploy

تصویرها یا فایل‌های public در standalone لود نمی‌شوند

علتخروجی standalone پوشه‌های public و .next/static را خودش ندارد.

راه‌حلبیلدپک سکو کلود این دو پوشه را کنار server.js کپی می‌کند؛ اگر Dockerfile خودتان را دارید، همین کار را در آن انجام دهید.

نصب وابستگی‌ها در بیلد شکست می‌خورد

علتلاک‌فایل در مخزن نیست یا با package.json هم‌خوان نیست. محیط بیلد به اینترنت عمومی وصل نیست و بسته‌ها را از میرور داخلی سکو کلود می‌گیرد، پس نصب فقط با نسخه‌های قفل‌شده قابل تکرار است.

راه‌حللاک‌فایل را کامیت کنید و دوباره مستقر کنید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

Server Action و Middleware کار می‌کنند؟

بله. برنامه روی سرور Node.js اجرا می‌شود و همه‌ی قابلیت‌های سمت سرور Next.js در دسترس است.

ISR و revalidate پشتیبانی می‌شوند؟

بله. revalidate روی همان سرور انجام می‌شود. اگر چند نمونه اجرا می‌کنید، برای کش مشترک بین نمونه‌ها از یک ذخیره‌ساز مشترک مثل Redis استفاده کنید.

output: 'standalone' لازم است؟

لازم نیست، ولی ایمیج را بسیار کوچک‌تر و استقرار را سریع‌تر می‌کند. بدون آن، next start اجرا می‌شود.

پروژه‌ی export استاتیک را کجا مستقر کنم؟

همین‌جا. با output: 'export' پوشه‌ی out ساخته و با nginx سرو می‌شود؛ outputDir را در sakoocloud.json روی out بگذارید.

جزئیات بیشتر در راهنمای Next.js در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید