یک کد، سه رانتایم
Hono روی استانداردهای وب ساخته شده و روی Node.js، Bun و Deno بدون تغییر منطق اجرا میشود. در سکو کلود رانتایم را hono میگذارید و با --hono-runtime مشخص میکنید زیر آن کدام رانتایم اجرا شود؛ پیشفرض Node.js است.
روی Node.js از @hono/node-server استفاده کنید، روی Bun شیء app را export کنید یا Bun.serve را صدا بزنید، و روی Deno app.fetch را به Deno.serve بدهید.
مناسب برای
- API سبک و سریع TypeScript
- بکاند اپ موبایل
- میکروسرویس و وبهوک
- BFF کنار اپ فرانتاند
مسیر بیلد Hono
تشخیص
وابستگی
honoدرpackage.jsonیا import map درdeno.json."hono": "^4"انتخاب رانتایم
مقدار
--hono-runtimeتعیین میکند بیلد با Node.js، Bun یا Deno انجام شود.--hono-runtime bunنصب
وابستگیها با ابزار همان رانتایم نصب میشوند.
bun installاجرا
اسکریپت start روی رانتایم انتخابشده اجرا میشود.
bun run src/index.ts
خروجی یک استقرار واقعی
sakoocloud deploy ✔ Packed 0.6MB ✔ Source uploaded ℹ Build started · dep_7k2m9q #4 [build 1/4] FROM oven/bun:1-alpine #6 [build 2/4] RUN bun install --frozen-lockfile #8 [build 3/4] COPY . . #10 exporting to image ✔ Deployed — app is running. → https://my-hono.sakooapps.ir
Hono روی Node.js
روی Node.js سرور را با @hono/node-server روی پورت PORT بالا بیاورید.
import { Hono } from "hono";
import { serve } from "@hono/node-server";
const app = new Hono();
app.get("/health", (c) => c.json({ ok: true }));
serve({
fetch: app.fetch,
port: Number(process.env.PORT) || 3000,
hostname: "0.0.0.0",
});
sakoocloud apps create --name my-hono --runtime hono \
--hono-runtime nodejs --port 3000
sakoocloud deploy
تنظیمات
--hono-runtime
| مقدار | اجرا با | نسخهها |
|---|---|---|
nodejs (پیشفرض) | @hono/node-server | Node.js 20، 22، 24 |
bun | Bun.serve | Bun 1.1، 1.2 |
deno | Deno.serve | Deno 2 |
اتصال به دیتابیس
دیتابیس را به اپ لینک کنید؛ متغیرهای 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 روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتبرنامه روی پورت ثابت یا فقط روی 127.0.0.1 گوش میدهد؛ پلتفرم ترافیک را به پورتِ متغیر PORT میفرستد.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
serve({ fetch: app.fetch, port: Number(process.env.PORT) || 3000, hostname: "0.0.0.0" });
اپ با رانتایم اشتباه بیلد میشود
علت--hono-runtime هنگام ساخت اپ داده نشده و پیشفرض Node.js استفاده شده است.
راهحلاپ را با --hono-runtime bun یا deno بسازید.
دستور اجرا پیدا نمیشود
علتاسکریپت start تعریف نشده است.
راهحلاسکریپت start را برای همان رانتایم بنویسید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
Hono را روی کدام رانتایم اجرا کنم؟
اگر مطمئن نیستید Node.js را انتخاب کنید. Bun شروع سریعتری دارد و Deno مدل مجوز سختگیرانهتری.
Hono روی Cloudflare Workers را میشود منتقل کرد؟
بله. منطق app بدون تغییر میماند؛ فقط نقطهی شروع را با serve همان رانتایم جایگزین کنید.
Middleware های Hono کار میکنند؟
بله، همهی middleware ها روی هر سه رانتایم کار میکنند.
جزئیات بیشتر در راهنمای Hono در مستندات و مرجع CLI.