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

هاست SvelteKit با adapter-node

SvelteKit با adapter-node یک سرور Node.js می‌سازد که روی سکو کلود با node build اجرا می‌شود؛ load و form action روی سرور انجام می‌شوند.

تشخیص
@sveltejs/kit در package.json
Adapter
@sveltejs/adapter-node
اجرا
node build
پورت پیش‌فرض
3000
لوگوی SvelteKit

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

  1. تشخیص

    @sveltejs/kit و لاک‌فایل در ریشه.

    svelte.config.js
  2. نصب

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

    npm ci
  3. بیلد

    adapter-node خروجی سرور را در build می‌سازد.

    vite build
  4. اجرا

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

    node build

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

sakoocloud deploy
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(),
  },
};

تنظیمات

نسخه‌ی 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، DATABASE_HOST و بقیه به محیط اپ تزریق می‌شوند و اپ دوباره مستقر می‌شود. رمز عبور هیچ‌جا در کد نمی‌آید.

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

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

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

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

خطاهای رایج

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

علتسرور adapter-node روی localhost بالا آمده است.

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

env
HOST=0.0.0.0

پوشه‌ی build ساخته نمی‌شود

علتپروژه هنوز adapter-auto یا adapter-static دارد.

راه‌حلadapter-node را نصب و در svelte.config.js جایگزین کنید.

فرم‌ها خطای Cross-site POST می‌دهند

علتSvelteKit مبدأ درخواست را با آدرس خودش مقایسه می‌کند و آدرس عمومی را نمی‌داند.

راه‌حلمتغیر ORIGIN را برابر آدرس اپ یا دامنه‌ی خودتان تعریف کنید.

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

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

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

terminal
sakoocloud apps scale --memory 1Gi

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

adapter-auto کار نمی‌کند؟

adapter-auto برای سرویس‌هایی است که adapter خودشان را دارند. روی سکو کلود adapter-node را مستقیم استفاده کنید.

سایت کاملاً استاتیک SvelteKit را چطور مستقر کنم؟

با adapter-static بیلد بگیرید و آن را به‌عنوان سایت استاتیک مستقر کنید.

متغیرهای محیطی چطور خوانده می‌شوند؟

متغیرهای $env/dynamic در زمان اجرا و $env/static در زمان بیلد خوانده می‌شوند؛ هر دو از تنظیمات اپ می‌آیند.

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

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

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

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