رفتن به محتوا
cloudhostمستندات
راهنما

برنامه‌ها

سایت استاتیک و برنامهٔ کامل: فایل‌های استاتیک با یک فانکشن اختیاری برای مسیرهایی که فایل ندارند. Next.js و Astro خودکار شناخته و بیلد می‌شوند.

سایت استاتیک#

cloudhost apps deploy my-site ./dist
# deployed app my-site v1 (48 files, 48 uploaded, 1.9 s)
# https://my-site.app.trustpage.ir

فایل‌ها با محتوایشان شناخته می‌شوند: CLI هش هر فایل را می‌فرستد و فقط آن‌هایی را آپلود می‌کند که هنوز نداریم. تعداد فایل‌ها، اندازهٔ هر فایل و حجم کل آن‌ها به پلن بستگی دارد: محدودیت‌ها. /404.html اگر باشد برای مسیرهای ناشناخته برگردانده می‌شود.

آپلود از مرورگر#

در داشبورد، «پروژهٔ جدید» یک پوشه، فایل ‎.zip‎ یا ‎.tar.gz‎ را با کشیدن و رها کردن می‌گیرد. پوشه‌ای با index.html در بالا همان لحظه به‌شکل سایت استاتیک مستقر می‌شود (_headers و _redirects هم اعمال می‌شوند). پروژه‌ای که package.json با فریم‌ورک یا اسکریپت build دارد روی سرور بیلد می‌شود و گزارش بیلد را همان‌جا زنده می‌بینید. پوشه‌های node_modules، .git و خروجی بیلد فرستاده نمی‌شوند.

هر آپلود پیش از ذخیره یا بیلد بررسی می‌شود: مسیرهایی که از پروژه بیرون می‌روند (../)، لینک‌ها و فایل‌های خاص، و اندازه و تعداد فایل‌ها. سقف آپلود در پلن رایگان ۲۵ مگابایت و ۲٬۰۰۰ فایل است و در پلن حرفه‌ای ۱۰۰ مگابایت و ۲۰٬۰۰۰ فایل.

ترمینال
cloudhost apps upload my-site ./dist        # a static site
cloudhost apps upload my-shop site.zip      # a framework project: built, log followed

محدودیت‌ها#

آنچه یک استقرار برنامه می‌تواند داشته باشد، بسته به پلن. کد فانکشن برنامه همان‌طور سنجیده می‌شود که ذخیره می‌شود: همهٔ ماژول‌ها با هم، فشرده با gzip.

محدودیترایگانحرفه‌ایسازمانی
فایل استاتیک در هر استقرار۲۰٬۰۰۰۱۰۰٬۰۰۰طبق قرارداد
اندازهٔ یک فایل۲۵ MB۲۵ MBطبق قرارداد
حجم کل فایل‌های استاتیک هر استقرار۵۰۰ MB۵ GBطبق قرارداد
کد فانکشن، فشرده۳ MB۱۰ MBطبق قرارداد
کد فانکشن پیش از فشرده‌سازی۶۴ MB۶۴ MBطبق قرارداد

cloudhost deploy پیش از آپلود، استقرار را با محدودیت‌های پلن شما می‌سنجد و بیلد روی سرور هم پیش از آپلود خروجی همین کار را می‌کند؛ API هم دوباره بررسی می‌کند. استقرار بیش از محدودیت با کد limit_exceeded (HTTP 413) رد می‌شود و پیام می‌گوید کدام محدودیت، اندازهٔ استقرار شما، سقف پلن‌تان و سقف پلن حرفه‌ای چیست؛ برای نمونه: «فایل استاتیک در هر استقرار: این استقرار ۲۵٬۰۰۰ فایل دارد؛ پلن رایگان ۲۰٬۰۰۰ فایل اجازه می‌دهد و پلن حرفه‌ای ۱۰۰٬۰۰۰ فایل.» سقف‌های پلن سازمانی در قرارداد تعیین می‌شوند. همین سقف‌ها در قیمت‌ها آمده‌اند و GET /v1/limits آن‌ها را برای پلن شما و همهٔ پلن‌ها برمی‌گرداند.

قاعده‌های _headers و _redirects#

/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
/assets/*
  Cache-Control: public, max-age=31536000, immutable

این دو فایل را در ریشهٔ پوشهٔ فایل‌ها بگذارید. _headers تا ۱۰۰ قاعده دارد و _redirects تا ۲۰۰۰ قاعده با کدهای 200 (بازنویسی)، 301، 302، 303، 307 یا 308.

برنامهٔ تک‌صفحه‌ای#

برنامه‌ای که فقط فایل استاتیک دارد، /index.html دارد و /404.html ندارد، خودکار تک‌صفحه‌ای فرض می‌شود: هر مسیر ناشناخته /index.html را می‌گیرد تا مسیریاب سمت مرورگر کارش را بکند. برنامه‌ای که فانکشن هم دارد با --spa (یا spa = true) همین رفتار را می‌گیرد.

استقرار
cloudhost apps deploy my-spa ./dist --function api.ts --spa

برنامه با فانکشن#

// runs only when no static file matches the path (here, /api/*)
export default {
  async fetch(request: Request): Promise<Response> {
    const url = new URL(request.url);
    if (url.pathname.startsWith("/api/")) return Response.json({ api: url.pathname, ok: true });
    return new Response("not found", { status: 404 });
  },
};

فانکشن برنامه فقط برای مسیرهایی اجرا می‌شود که فایل ندارند؛ فایل‌های استاتیک مستقیم سرو می‌شوند و هزینهٔ اجرای فانکشن ندارند. هر چیزی که فانکشن‌ها دارند (متغیرهای محیطی برای هر محیط، cron، اتصال، لاگ) برای فانکشن برنامه هم هست، با cloudhost apps …. خود فایل‌ها هم در env.ASSETS در دسترس فانکشن‌اند.

Next.js و Astro#

استقرار
cd my-shop
cloudhost init
cloudhost deploy
# Next.js: building on our builder
# build 1a2b3c4d queued (412 KB of source)
# ── install (npm ci)
# ── prepare Next.js for the edge runtime
# ── build (Next.js)
# ── deploy
# deployed app my-shop v1 (…)
# https://my-shop.app.trustpage.ir

cloudhost deploy فریم‌ورک را از package.json تشخیص می‌دهد و پروژه را روی بیلدر ما بیلد می‌کند، همان‌طور که git push بیلد می‌کند: بیلدر آداپتور اجرا را در نسخهٔ خودش از کد اضافه و تنظیم می‌کند، پس چیزی نصب نمی‌کنید و هیچ فایلی به پروژه‌تان اضافه نمی‌شود. خروجی به شکل فایل استاتیک و فانکشن مستقر می‌شود: صفحه‌های از پیش ساخته، صفحه‌هایی که با هر درخواست بیلد می‌شوند، route handlerها و endpointها. در این پروژه‌ها [build] command اجرا نمی‌شود؛ بیلد فریم‌ورک جای آن است. با framework = "none" در cloudhost.toml تشخیص خاموش می‌شود.

فریم‌ورککار می‌کندهنوز نه
Next.js 16صفحه‌های استاتیک و سروری، route handlerها، صفحهٔ ۴۰۴ISR و بهینه‌سازی تصویر؛ در next.config.ts مقدار cacheComponents: false بگذارید
Astro 7صفحه‌های استاتیک و درخواستی، endpointها، صفحهٔ ۴۰۴نشست‌ها (Astro.session) و تبدیل تصویر؛ تصویرها همان‌طور که هستند فرستاده می‌شوند

پیش‌نمایش، بیلد و git#

git remote add cloudhost https://git.ibel.ai/my-shop.git
git push cloudhost main          # production
git push cloudhost new-menu      # https://new-menu--my-shop.app.trustpage.ir

برنامه‌ها همان پیش‌نمایش، بیلد روی سرور و git push فانکشن‌ها را دارند؛ فانکشن‌ها را ببینید. پیش‌نمایش جای خوبی برای بازبینی تغییر محتوا پیش از ادغام در main است.