رانتایم جاوااسکریپت

هاست Node.js برای API و سرویس‌های جاوااسکریپت

سکو کلود پروژه‌ی Node.js را از روی package.json و لاک‌فایل می‌شناسد، با همان پکیج‌منیجر شما نصب و بیلد می‌کند و پشت یک آدرس HTTPS اجرا می‌کند. Dockerfile لازم نیست.

تشخیص
package.json و یک لاک‌فایل
نسخه‌ها
Node.js 24، 22 و 20 (پیش‌فرض 22)
پکیج‌منیجر
npm، yarn، pnpm
پورت پیش‌فرض
3000 از متغیر PORT
لوگوی Node.js

از package.json تا آدرس زنده

برای اجرای یک سرویس Node.js معمولاً باید سرور آماده کنید، نسخه‌ی Node را نصب کنید، PM2 یا systemd را تنظیم کنید و گواهی SSL بگیرید. در سکو کلود همه‌ی این‌ها از روی خود پروژه تعیین می‌شود: نسخه از .nvmrc یا engines، پکیج‌منیجر از لاک‌فایل، و دستور اجرا از اسکریپت start.

Express، Fastify، Koa، NestJS و هر سرور HTTP دیگری که روی پورت PORT گوش بدهد بدون تغییر اجرا می‌شود. پروژه‌های TypeScript هم پشتیبانی می‌شوند: اسکریپت build اجرا می‌شود و فقط خروجی کامپایل‌شده و node_modules به ایمیج نهایی می‌رود.

مناسب برای

  • API با Express، Fastify یا NestJS
  • بک‌اند اپ موبایل و وب
  • وب‌هوک، ربات و پردازش پس‌زمینه
  • سرور WebSocket روی endpoint جدا

سکو کلود با پروژه‌ی شما چه می‌کند

  1. تشخیص

    package.json و یکی از لاک‌فایل‌ها در ریشه یعنی Node.js. اگر Dockerfile در ریشه باشد، همان اولویت دارد.

    package.json · package-lock.json
  2. نصب

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

    npm ci
  3. بیلد

    اگر اسکریپت build تعریف شده باشد اجرا می‌شود؛ مثلاً کامپایل TypeScript.

    npm run build
  4. اجرا

    اسکریپت start اجرا می‌شود و ترافیک HTTPS به پورت PORT می‌رسد.

    npm start

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

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

کمترین چیزی که لازم دارید

دو قانون: برنامه روی پورتی که در PORT می‌آید و روی 0.0.0.0 گوش بدهد، و package.json اسکریپت start داشته باشد.

import express from "express";

const app = express();
const port = process.env.PORT || 3000;

app.get("/health", (req, res) => res.json({ ok: true }));

app.listen(port, "0.0.0.0", () => {
  console.log(`listening on ${port}`);
});

تنظیمات

نسخه‌ی 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

فلگ‌های کاربردی هنگام ساخت اپ

فلگکاربرد
--runtime-versionقفل کردن نسخه‌ی toolchain، مثلاً 22 یا 3.12
--root-dirاستقرار یک پوشه از مونوریپو
--env-fileبارگذاری متغیرهای محیطی از فایل .env بعد از ساخت اپ
--endpointیک endpoint دیگر روی پورت جدا، مثلاً 8000:/ws:websocket

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

دیتابیس را به اپ لینک کنید؛ متغیرهای DATABASE_URL، DATABASE_HOST و بقیه به محیط اپ تزریق می‌شوند و اپ دوباره مستقر می‌شود. رمز عبور هیچ‌جا در کد نمی‌آید.

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

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

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

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

خطاهای رایج

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

علتبرنامه روی پورت ثابت یا فقط روی 127.0.0.1 گوش می‌دهد؛ پلتفرم ترافیک را به پورتِ متغیر PORT می‌فرستد.

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

index.js
app.listen(process.env.PORT || 3000, "0.0.0.0");

خطای «start script not found»

علتpackage.json اسکریپت start ندارد و دستور اجرا معلوم نیست.

راه‌حلاسکریپت start را اضافه کنید، مثلاً "start": "node index.js".

خطای سینتکس یا API ناموجود در زمان اجرا

علتنسخه‌ی Node.js اجرا با نسخه‌ای که پروژه برایش نوشته شده فرق دارد.

راه‌حلنسخه را در .nvmrc یا engines.node اعلام کنید.

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

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

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

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

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

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

terminal
sakoocloud apps scale --memory 1Gi

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

برای Node.js باید Dockerfile بنویسم؟

نه. بیلدپک سکو کلود از روی package.json و لاک‌فایل ایمیج را می‌سازد. اگر Dockerfile اختصاصی دارید، آن را در ریشه بگذارید تا به‌جای بیلدپک استفاده شود.

پروژه‌ی TypeScript چطور اجرا می‌شود؟

اسکریپت build (مثلاً tsc) در بیلد اجرا می‌شود و اسکریپت start باید فایل کامپایل‌شده را اجرا کند، مثل node dist/main.js. NestJS با همین الگو کار می‌کند.

نسخه‌ی Node.js را چطور انتخاب کنم؟

در .nvmrc یا engines.node بنویسید یا هنگام ساخت اپ --runtime-version بدهید. نسخه‌های 20، 22 و 24 در دسترس‌اند و پیش‌فرض 22 است.

مونوریپو را هم می‌شود مستقر کرد؟

بله. با --root-dir پوشه‌ی بسته‌ی قابل استقرار را مشخص کنید؛ workspaceهای pnpm هم پشتیبانی می‌شوند.

migration دیتابیس را کجا اجرا کنم؟

در مرحله‌ی انتشار (Release Phase). این مرحله بعد از بیلد و قبل از جایگزینی نسخه‌ی قبلی اجرا می‌شود و اگر شکست بخورد، نسخه‌ی جدید بالا نمی‌آید.

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

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

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

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