Nuxt و Nitro روی یک سرور
وجود وابستگی nuxt کافی است تا پروژه Nuxt شناخته شود. nuxt build خروجی کامل سرور را در .output میسازد و فقط همین پوشه به ایمیج نهایی میرود، پس node_modules توسعه همراه برنامه منتشر نمیشود.
Nitro متغیرهای PORT و HOST را خودش میخواند. با preset پیشفرض node-server، صفحههای SSR، مسیرهای server/api و میدلورها روی همان سرور اجرا میشوند.
مناسب برای
- سایت و فروشگاه Vue با SSR
- داشبورد با API داخل server/
- سایت محتوایی با Nuxt Content
- پنل مدیریت با رندر سرور
مسیر بیلد Nuxt
تشخیص
وابستگی
nuxtو لاکفایل در ریشه."nuxt": "^3"نصب
پکیجمنیجر از روی لاکفایل انتخاب میشود.
npm ciبیلد
خروجی سرور و فایلهای عمومی در
.outputساخته میشود.nuxt buildاجرا
سرور Nitro اجرا میشود.
node .output/server/index.mjs
خروجی یک استقرار واقعی
sakoocloud deploy ✔ Packed 2.1MB ✔ Source uploaded ℹ Build started · dep_7k2m9q #4 [builder 1/5] FROM node:22-alpine #6 [builder 3/5] RUN npm ci #8 [builder 4/5] RUN npm run build #10 [stage-1 2/3] COPY .output ./.output #12 exporting to image ✔ Deployed — app is running. → https://my-nuxt.sakooapps.ir
تنظیم پیشنهادی
preset را روی node-server نگه دارید و اسکریپت start را به خروجی Nitro اشاره دهید.
export default defineNuxtConfig({
nitro: {
preset: "node-server",
},
});
{
"scripts": {
"build": "nuxt build",
"start": "node .output/server/index.mjs"
}
}
sakoocloud apps create --name my-nuxt --runtime nuxt --port 3000
sakoocloud deploy
تنظیمات
نسخهی Node.js
نسخههای 24، 22 و 20 (LTS) در دسترساند. اگر پروژه نسخهای اعلام نکند، Node.js 22 استفاده میشود.
| از کجا خوانده میشود | نمونه |
|---|---|
.nvmrc یا .node-version | 22 |
engines.node در package.json | "node": "22.x" |
mise.toml یا .tool-versions | node = "22" |
فلگ --runtime-version در CLI | --runtime-version 22 |
پکیجمنیجر
ابزار از روی لاکفایل انتخاب میشود و نصب همیشه دقیقاً همان نسخههای قفلشده را میگیرد.
| لاکفایل | ابزار | دستور نصب |
|---|---|---|
package-lock.json | npm | npm ci |
yarn.lock | yarn | yarn install --frozen-lockfile |
pnpm-lock.yaml | pnpm | pnpm install --frozen-lockfile |
اتصال به دیتابیس
دیتابیس را به اپ لینک کنید؛ متغیرهای DATABASE_URL، DATABASE_HOST و بقیه به محیط اپ تزریق میشوند و اپ دوباره مستقر میشود. رمز عبور هیچجا در کد نمیآید.
sakoocloud apps link-db <db-id> --app my-app
import pg from "pg";
export const pool = new pg.Pool({
connectionString: process.env.DATABASE_URL,
});
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
دیتابیسهایی که معمولاً کنارش میآیند
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتسرور Nitro روی localhost بالا آمده است.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
HOST=0.0.0.0
خروجی .output پیدا نمیشود
علتpreset Nitro روی گزینهای غیر از node-server تنظیم شده و خروجی سرور ساخته نشده است.
راهحلدر nuxt.config.ts مقدار nitro.preset را node-server بگذارید یا حذف کنید.
runtimeConfig مقدار تولید ندارد
علتمتغیرهای NUXT_ در زمان اجرا تعریف نشدهاند.
راهحلمتغیرها را با sakoocloud env set یا از کنسول تعریف کنید؛ Nuxt آنها را در زمان اجرا میخواند.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
Nuxt 2 هم پشتیبانی میشود؟
این مسیر برای Nuxt 3 و خروجی Nitro است. پروژهی Nuxt 2 را با Dockerfile اختصاصی مستقر کنید.
Nuxt را استاتیک مستقر کنم یا SSR؟
اگر nuxt generate میزنید، خروجی را بهعنوان سایت استاتیک مستقر کنید. برای SSR همین رانتایم nuxt را انتخاب کنید.
API های server/api کجا اجرا میشوند؟
روی همان سرور Nitro، کنار صفحهها. سرویس جداگانه لازم نیست.
جزئیات بیشتر در راهنمای Nuxt در مستندات و مرجع CLI.