Skip to Content
Getting Started

Getting Started

Deploy your first application on Ghayma in under 5 minutes.

1. Create an Account

Sign up at dash.ghayma.cloud  using email, GitHub, or Google.

2. Install the CLI

macOS / Linux

curl -fsSL https://dash.ghayma.cloud/install.sh | sh

Windows (PowerShell)

irm https://dash.ghayma.cloud/install.ps1 | iex

Verify the installation:

ghayma version

3. Login

ghayma login

This opens dash.ghayma.cloud in your browser. Approve the login request and the CLI is authenticated automatically — it then creates a long-lived CLI token for this machine (365 days, revocable with ghayma logout or under Settings → API Tokens), so you stay signed in. Use ghayma login --email for email/password login instead.

4. Initialize Your Project

Navigate to your project directory and run:

cd my-app ghayma init

This creates a .ghayma.json configuration file:

{ "project_id": "uuid", "name": "my-app", "slug": "my-app", "framework": "nextjs", "site_name": "main" }

The CLI auto-detects your framework (Next.js, Node, Python, Go, PHP, Ruby, Rust, or a static site) — see Supported frameworks. You also pick a plan during init (or pass --plan <slug>) — each plan comes with a points budget you spend across databases, apps, storage, and auth apps. See Points & Plans.

Your project’s main site is created automatically on your first deploy, which is why site_id and site_slug are absent above. Naming a site other than main at init creates it right away. main isn’t privileged — it can be renamed or deleted later, and it’s simply the site that serves at <slug>.ghayma.app while every other site serves at <slug>-<site>.ghayma.app. For multi-app projects, see Sites.

5. Deploy

ghayma deploy

The CLI will:

  1. Package your source code
  2. Upload it to Ghayma
  3. Build a Docker container using your build command
  4. Deploy it to Kubernetes
  5. Assign a URL: my-app.ghayma.app

You’ll see real-time build logs in your terminal.

6. Add a Custom Domain (Optional)

ghayma domain create my-app.com

Point your domain’s DNS at the IPv4 address shown in your Dashboard (Project → Domains → Add domain) with an A record, and SSL is provisioned automatically via Let’s Encrypt.

One A record, and no AAAA. Ghayma serves IPv4 only: the hostname needs exactly one A record pointing at the address shown in the Dashboard, and no AAAA (IPv6) record. Let’s Encrypt prefers IPv6 whenever an AAAA exists, so a stray AAAA left behind by a previous host blocks the certificate. Delete it, then check the domain again. A Cloudflare-proxied (orange-cloud) domain is fine as-is.

Networking: If your deployed app connects to Ghayma services (Auth, databases, storage API), you must use internal Kubernetes URLs instead of *.ghayma.tech. External URLs will timeout from inside the cluster. See the Networking Guide for details.

What’s Next?