رانتایم TypeScript

هاست Deno 2 برای API های TypeScript

سرویس Deno را با deno.json و task استارت خودش مستقر کنید. مجوزها همان‌هایی است که در task نوشته‌اید و چیزی بیشتر باز نمی‌شود.

تشخیص
deno.json یا deno.jsonc
نسخه
Deno 2
اجرا
deno task start
پورت پیش‌فرض
8000
لوگوی Deno

Deno با مدل امنیتی خودش

فایل deno.json یا deno.jsonc در ریشه یعنی پروژه Deno است. وابستگی‌ها در بیلد کش می‌شوند تا اجرای برنامه به دانلود وابسته نباشد، و برنامه با deno task start اجرا می‌شود.

Deno به‌طور پیش‌فرض به شبکه و متغیرهای محیطی دسترسی ندارد. مجوزهای لازم را در همان task استارت بنویسید؛ معمولاً --allow-net و --allow-env کافی است.

مناسب برای

  • API با Deno.serve یا Oak
  • Hono روی Deno
  • سرویس TypeScript با مجوزهای محدود
  • ابزارهای وب و پروکسی سبک

مسیر بیلد Deno

  1. تشخیص

    deno.json یا deno.jsonc در ریشه.

    deno.json
  2. کش وابستگی‌ها

    ماژول‌ها در زمان بیلد دانلود و کش می‌شوند.

    deno cache main.ts
  3. اجرا

    task استارت با همان مجوزهای اعلام‌شده اجرا می‌شود.

    deno task start

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

sakoocloud deploy
sakoocloud deploy
✔ Packed 0.4MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [1/4] FROM denoland/deno:alpine-2.1.4
#6 [2/4] COPY . .
#8 [3/4] RUN deno cache main.ts
#10 exporting to image
✔ Deployed — app is running.
→ https://my-deno-api.sakooapps.ir

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

پورت را از PORT بخوانید و task استارت را با مجوزهای لازم تعریف کنید.

const port = Number(Deno.env.get("PORT")) || 8000;

Deno.serve({ port, hostname: "0.0.0.0" }, () =>
  Response.json({ ok: true }),
);

تنظیمات

مجوزهای رایج

فلگبرای چه
--allow-netگوش دادن روی پورت و درخواست‌های شبکه
--allow-envخواندن PORT و متغیرهای دیتابیس
--allow-readخواندن فایل‌های پروژه، مثلاً قالب‌ها

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

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

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

متغیرهای دیتابیس لینک‌شده با Deno.env.get خوانده می‌شوند؛ --allow-env را فراموش نکنید.

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

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

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

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

خطاهای رایج

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

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

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

main.ts
Deno.serve({ port: Number(Deno.env.get("PORT")) || 8000, hostname: "0.0.0.0" }, handler);

خطای PermissionDenied در زمان اجرا

علتtask استارت مجوز لازم، مثلاً --allow-env یا --allow-net، را ندارد.

راه‌حلمجوز را به task استارت در deno.json اضافه کنید.

task استارت پیدا نشد

علتdeno.json بخش tasks.start ندارد.

راه‌حلtask استارت را تعریف کنید.

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

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

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

terminal
sakoocloud apps scale --memory 1Gi

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

کدام نسخه‌ی Deno پشتیبانی می‌شود؟

Deno 2. نسخه‌ی دقیق را می‌توانید با --runtime-version هنگام ساخت اپ تعیین کنید.

بسته‌های npm در Deno کار می‌کنند؟

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

Fresh یا Oak را می‌شود اجرا کرد؟

بله. هر چارچوبی که با deno task start بالا بیاید و روی PORT گوش بدهد اجرا می‌شود.

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

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

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

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