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

شروع کار در چند دقیقه

حساب ایجاد کنید، CLI را نصب کنید، از ترمینال وارد شوید و اولین فانکشن و برنامه را مستقر کنید. بعد دیتابیس، کش و فضای ذخیره‌سازی را به کدتان متصل کنید.

۱. حساب ایجاد کنید#

در صفحهٔ ثبت‌نام ایمیل و شمارهٔ موبایل ایرانی‌تان را بدهید. رمز عبوری در کار نیست: یک کد ۶ رقمی به ایمیل و یکی به موبایل می‌رسد و بعدها هم با کدی که به یکی از این دو می‌آید وارد می‌شوید.

فعلاً ثبت‌نام با کد دعوت است. دعوت یک تیم هم کافی است و حتی وقتی ثبت‌نام بسته است کار می‌کند.

هر حساب با یک تیم شخصی روی پلن رایگان شروع می‌شود. هر چیزی که ایجاد می‌کنید مال یک تیم است؛ دربارهٔ نقش‌ها و هم‌تیمی‌ها در تیم‌ها و نقش‌ها بخوانید.

۲. CLI را نصب کنید#

curl -fsSL https://ibel.ai/install/install.sh | sh
cloudhost help

نصب‌کننده یک فایل اجرایی تنها را از سرور خود ما می‌گیرد، امضا و چک‌سامش را بررسی می‌کند و چیز دیگری لازم ندارد؛ بستهٔ npm به Node.js نسخهٔ ۲۲ یا بالاتر نیاز دارد. cloudhost update آن را به‌روز می‌کند (CLI). CLI فقط همان API عمومی را صدا می‌زند که داشبورد صدا می‌زند؛ پس هر کاری که اینجا می‌بینید از داشبورد و API هم شدنی است.

۳. از ترمینال وارد شوید#

cloudhost login
# Open https://dash.ibel.ai/device?code=WDJB-MJHT
# and check the code shown there is WDJB-MJHT.
# logged in as you@example.com (owner)
cloudhost whoami

cloudhost login یک لینک و یک کد چاپ می‌کند. لینک را باز کنید، ببینید کد همان است و تایید کنید؛ داشبورد برای تایید یک عامل دوم می‌خواهد. CLI یک کلید API با نقش شما در تیم می‌گیرد که ۹۰ روز اعتبار دارد و آن را در ~/.config/cloudhost/config.json نگه می‌دارد. در ترمینال هیچ رمز یا کدی تایپ نمی‌کنید.

۴. یک فانکشن مستقر کنید#

فانکشن یک handler استاندارد وب است: ماژولی که خروجی پیش‌فرضش fetch(request, env, ctx) دارد. TypeScript هم کار می‌کند؛ CLI فایل ورودی و importهایش را در یک ماژول می‌بندد.

export default {
  async fetch(request: Request): Promise<Response> {
    const url = new URL(request.url);
    return Response.json({
      hello: url.searchParams.get("name") ?? "world",
      path: url.pathname,
    });
  },
};

هر فانکشن آدرس خودش را دارد: https://<name>.fn.trustpage.ir.

هر استقرار یک نسخهٔ جدید ایجاد می‌کند. cloudhost functions versions hello نسخه‌ها را نشان می‌دهد و cloudhost functions rollback hello بی‌آنکه چیزی دوباره ایجاد شود به نسخهٔ قبلی برمی‌گردد. بیشتر در فانکشن‌ها.

۵. یک برنامه مستقر کنید#

برنامه مجموعه‌ای از فایل‌های ایستاست، با یک فانکشن اختیاری برای مسیرهایی که فایل ندارند. سایت‌تان را در یک پوشه بگذارید و مستقرش کنید:

mkdir public && echo '<h1>salam</h1>' > public/index.html
cloudhost apps deploy my-site ./public
# deployed app my-site v1 (1 files, 1 uploaded, 640 ms)
# https://my-site.app.trustpage.ir

فقط فایل‌های جدید یا تغییرکرده آپلود می‌شوند. برای Next.js، Astro، سایت‌های تک‌صفحه‌ای و قاعده‌های _headers و _redirects برنامه‌ها را ببینید.

۶. دیتابیس متصل کنید#

cloudhost db create shop
# created database shop (branch main)
#   host      shop.database.trustpage.ir:5432
#   database  shop
#   user      app
#   password  …   (shown once)

رمز فقط یک بار نشان داده می‌شود؛ cloudhost db password shop رمز جدید ایجاد می‌کند. دیتابیس وقتی کاری ندارد می‌خوابد و با اولین اتصال بیدار می‌شود.

برای استفاده از فانکشن، دیتابیس را به آن متصل کنید (binding). فانکشن آن را با نام env.DB می‌خواند و هیچ رمزی در کدتان نیست:

type Env = { DB: { query(sql: string, params?: unknown[]): Promise<{ rows: Record<string, unknown>[] }> } };

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    await env.DB.query("create table if not exists visits (at timestamptz default now())");
    await env.DB.query("insert into visits default values");
    const { rows } = await env.DB.query("select count(*) as n from visits");
    return Response.json(rows[0]);
  },
};

۷. کش و فضای ذخیره‌سازی#

cloudhost cache create sessions
cloudhost cache run sessions SET greeting salam
cloudhost cache run sessions GET greeting
# salam

کش با هر کلاینت کش هم کار می‌کند و باکت با هر کلاینت ذخیره‌سازی؛ جزئیات در کش و فضای ذخیره‌سازی.

قدم‌های بعدی#