Bun، بدون تنظیمات اضافه
وجود bun.lock یا bun.lockb کنار package.json کافی است تا پروژه Bun شناخته شود. وابستگیها با bun install و از میرور داخلی نصب میشوند و برنامه با اسکریپت start یا فیلد main اجرا میشود.
Bun فایلهای TypeScript را مستقیم اجرا میکند، پس برای یک API ساده مرحلهی build لازم ندارید. اگر خروجی باندلشده میخواهید، اسکریپت build را تعریف کنید تا قبل از اجرا ساخته شود.
مناسب برای
- API سبک با Bun.serve یا Elysia
- سرویس TypeScript بدون مرحلهی کامپایل
- Hono روی Bun
- ابزارهای داخلی و وبهوک
مسیر بیلد Bun
تشخیص
package.jsonو یکی ازbun.lockیاbun.lockbدر ریشه.bun.lockنصب
وابستگیها با نسخههای قفلشده نصب میشوند.
bun install --frozen-lockfileبیلد
اگر اسکریپت build باشد اجرا میشود؛ برای اجرای مستقیم TypeScript لازم نیست.
bun run buildاجرا
اسکریپت start یا فایل
mainاجرا میشود.bun run index.ts
خروجی یک استقرار واقعی
sakoocloud deploy ✔ Packed 0.9MB ✔ 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-bun-api.sakooapps.ir
کمترین چیزی که لازم دارید
Bun.serve را روی پورت PORT و 0.0.0.0 بالا بیاورید و اسکریپت start را تعریف کنید.
const port = Number(process.env.PORT) || 3000;
Bun.serve({
port,
hostname: "0.0.0.0",
fetch() {
return Response.json({ ok: true });
},
});
{
"scripts": {
"start": "bun run index.ts"
},
"engines": { "bun": "1.2.x" }
}
bun install
sakoocloud apps create --name my-bun-api --runtime bun --port 3000
sakoocloud deploy
تنظیمات
نسخهی Bun
اگر نسخهای اعلام نشود، آخرین نسخهی 1.x استفاده میشود.
| از کجا خوانده میشود | نمونه |
|---|---|
.bun-version | 1.2.4 |
engines.bun در package.json | "bun": "1.2.x" |
فلگ --runtime-version | --runtime-version 1.2 |
فلگهای کاربردی هنگام ساخت اپ
| فلگ | کاربرد |
|---|---|
--runtime-version | قفل کردن نسخهی toolchain، مثلاً 22 یا 3.12 |
--root-dir | استقرار یک پوشه از مونوریپو |
--env-file | بارگذاری متغیرهای محیطی از فایل .env بعد از ساخت اپ |
--endpoint | یک endpoint دیگر روی پورت جدا، مثلاً 8000:/ws:websocket |
اتصال به دیتابیس
بعد از لینک کردن دیتابیس، DATABASE_URL در process.env و Bun.env در دسترس است.
sakoocloud apps link-db <db-id> --app my-bun-api
import postgres from "postgres";
export const sql = postgres(process.env.DATABASE_URL!);
دیتابیسهایی که معمولاً کنارش میآیند
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتبرنامه روی پورت ثابت یا فقط روی 127.0.0.1 گوش میدهد؛ پلتفرم ترافیک را به پورتِ متغیر PORT میفرستد.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
Bun.serve({ port: Number(process.env.PORT) || 3000, hostname: "0.0.0.0", fetch });
دستور اجرا پیدا نمیشود
علتنه اسکریپت start تعریف شده و نه فیلد main.
راهحلیکی از این دو را در package.json اضافه کنید.
پروژه Node.js تشخیص داده میشود، نه Bun
علتلاکفایل Bun در مخزن نیست و فقط package-lock.json وجود دارد.
راهحلbun install را اجرا کنید و bun.lock را کامیت کنید، یا هنگام ساخت اپ --runtime bun بدهید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
TypeScript را باید کامپایل کنم؟
نه. Bun فایل .ts را مستقیم اجرا میکند. اگر باندل بهینهشده میخواهید، bun build را در اسکریپت build بگذارید.
کدام نسخههای Bun پشتیبانی میشوند؟
Bun 1.1 و 1.2. نسخه را در engines.bun یا .bun-version اعلام کنید.
Hono را روی Bun اجرا کنم؟
بله. برای Hono رانتایم hono را انتخاب کنید و --hono-runtime bun بدهید؛ صفحهی Hono جزئیاتش را دارد.
جزئیات بیشتر در راهنمای Bun در مستندات و مرجع CLI.