SvelteKit روی سرور Node.js
برای رندر سمت سرور باید از adapter-node استفاده کنید؛ adapter-auto و adapter-static سرور نمیسازند. خروجی بیلد در پوشهی build قرار میگیرد و با node build اجرا میشود.
سرور تولیدشده متغیرهای PORT و HOST را میخواند. HOST را 0.0.0.0 بگذارید تا ترافیک از بیرون کانتینر برسد.
مناسب برای
- اپ وب با load و form action سمت سرور
- سایت سریع با رندر سرور
- API کنار رابط کاربری با +server.ts
- پنل داخلی با Svelte
مسیر بیلد SvelteKit
تشخیص
@sveltejs/kitو لاکفایل در ریشه.svelte.config.jsنصب
پکیجمنیجر از روی لاکفایل انتخاب میشود.
npm ciبیلد
adapter-node خروجی سرور را در
buildمیسازد.vite buildاجرا
سرور Node.js تولیدشده اجرا میشود.
node build
خروجی یک استقرار واقعی
sakoocloud deploy ✔ Packed 1.6MB ✔ 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 build ./build #12 exporting to image ✔ Deployed — app is running. → https://my-kit.sakooapps.ir
تنظیم لازم
adapter-node را نصب و در svelte.config.js تنظیم کنید.
import adapter from "@sveltejs/adapter-node";
export default {
kit: {
adapter: adapter(),
},
};
{
"scripts": {
"build": "vite build",
"start": "node build"
}
}
npm install -D @sveltejs/adapter-node
sakoocloud apps create --name my-kit --runtime sveltekit --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 روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتسرور adapter-node روی localhost بالا آمده است.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
HOST=0.0.0.0
پوشهی build ساخته نمیشود
علتپروژه هنوز adapter-auto یا adapter-static دارد.
راهحلadapter-node را نصب و در svelte.config.js جایگزین کنید.
فرمها خطای Cross-site POST میدهند
علتSvelteKit مبدأ درخواست را با آدرس خودش مقایسه میکند و آدرس عمومی را نمیداند.
راهحلمتغیر ORIGIN را برابر آدرس اپ یا دامنهی خودتان تعریف کنید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
adapter-auto کار نمیکند؟
adapter-auto برای سرویسهایی است که adapter خودشان را دارند. روی سکو کلود adapter-node را مستقیم استفاده کنید.
سایت کاملاً استاتیک SvelteKit را چطور مستقر کنم؟
با adapter-static بیلد بگیرید و آن را بهعنوان سایت استاتیک مستقر کنید.
متغیرهای محیطی چطور خوانده میشوند؟
متغیرهای $env/dynamic در زمان اجرا و $env/static در زمان بیلد خوانده میشوند؛ هر دو از تنظیمات اپ میآیند.
جزئیات بیشتر در راهنمای SvelteKit در مستندات و مرجع CLI.