فریم‌ورک API

هاست Hono روی Node.js، Bun یا Deno

API Hono را روی رانتایمی که دوست دارید اجرا کنید: Node.js، Bun یا Deno. فقط --hono-runtime را هنگام ساخت اپ انتخاب کنید.

تشخیص
وابستگی hono
رانتایم اجرا
Node.js، Bun یا Deno
انتخاب
--hono-runtime
پورت
از متغیر PORT
لوگوی Hono

یک کد، سه رانتایم

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

  1. تشخیص

    وابستگی hono در package.json یا import map در deno.json.

    "hono": "^4"
  2. انتخاب رانتایم

    مقدار --hono-runtime تعیین می‌کند بیلد با Node.js، Bun یا Deno انجام شود.

    --hono-runtime bun
  3. نصب

    وابستگی‌ها با ابزار همان رانتایم نصب می‌شوند.

    bun install
  4. اجرا

    اسکریپت start روی رانتایم انتخاب‌شده اجرا می‌شود.

    bun run src/index.ts

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

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

تنظیمات

--hono-runtime

مقداراجرا بانسخه‌ها
nodejs (پیش‌فرض)@hono/node-serverNode.js 20، 22، 24
bunBun.serveBun 1.1، 1.2
denoDeno.serveDeno 2

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

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

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

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

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

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

خطاهای رایج

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

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

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

src/index.ts
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 متوقف می‌شود

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

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

terminal
sakoocloud apps scale --memory 1Gi

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

Hono را روی کدام رانتایم اجرا کنم؟

اگر مطمئن نیستید Node.js را انتخاب کنید. Bun شروع سریع‌تری دارد و Deno مدل مجوز سخت‌گیرانه‌تری.

Hono روی Cloudflare Workers را می‌شود منتقل کرد؟

بله. منطق app بدون تغییر می‌ماند؛ فقط نقطه‌ی شروع را با serve همان رانتایم جایگزین کنید.

Middleware های Hono کار می‌کنند؟

بله، همه‌ی middleware ها روی هر سه رانتایم کار می‌کنند.

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

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

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

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