Skip to content

Eza Cloud docs

Deploy your app from Git or the CLI

Connect a GitHub, GitLab or Bitbucket repository. Or run eza deploy from a folder. Eza detects your stack, builds the app and gives you a live HTTPS URL.

  • Git deploys
  • Eza CLI
  • Managed databases
  • PayEdgeBeta

Search deployment, databases, domains, billing or PayEdge.

Quick start

Get an app live

Create an Eza account, connect a repository or open a local project folder. A push to the configured branch deploys automatically by default.

  1. Step 1: Connect your Git provider

    GitHub connects through the Eza GitHub App. Choose the repositories Eza can access.

    GitLab and Bitbucket connect through OAuth.

    Connect GitHub, GitLab or Bitbucket
  2. Step 2: Create an app

    Choose an organisation, project, environment and app. Eza defaults the environment to production.

    Eza detects Next.js, Node, Laravel, PHP, Python, Go, Ruby, WordPress and Dockerfiles.

    Create your first app
  3. Step 3: Deploy

    Push to the app’s configured branch. Eza starts a deploy automatically.

    Or deploy the current folder with the CLI.

    ~/juma-shop
    eza login          # Sign in to Ezaeza orgs create    # Create an organisationcd juma-shop       # Open your project foldereza link           # Link a project and appeza deploy         # Build and deploy
    Deploy with the Eza CLI
  4. Step 4: Open your app

    Every app receives a live HTTPS URL.

    Add a custom domain when you are ready.

    Live URL
    https://juma-shop.app.eza.co.ke
    Add a custom domain

Documentation

Guides for building and running apps

How deploys work

What happens after a Git push

A push to the app’s configured branch starts a deployment. Auto-deploy is on by default and can be turned off for each app.

  1. Eza receives the new commit.
  2. Railpack detects the stack and selects build and start commands. If your repository contains a Dockerfile, Eza uses the Dockerfile.
  3. Eza builds the app and runs the health check.
  • Passing

    A passing health check sends traffic to the new deploy.

  • Failing

    A failing health check keeps the previous deploy live.

You can roll back to an earlier deploy in about 30 seconds.

Read the deployment guide

Build settings

Control the parts your app needs

Railpack selects build and start commands for recognised stacks. You can override these settings in the dashboard, CLI or API:

  • Start command
  • Root directory
  • App port
  • Health check path

Eza does not use an eza.yml file at launch.

For Docker builds, place a Dockerfile in your repository. For advanced Railpack build changes, use railpack.json.

The Eza CLI stores local app links in .eza/config.json. This file does not store build settings.

Configure build settings

Deploy from a folder

Deploy code without a Git remote

Run eza deploy in a local folder.

If Eza cannot find a Git remote, it offers to upload the current folder. This works like eza deploy --local.

Eza respects .gitignore and .ezaignore when it uploads files.

In CI, use eza deploy --local --yes to upload without an interactive prompt.

~/juma-shop
cd juma-shopeza linkeza deploy --local
Deploy a local folder

CLI reference

Commands you will use first

Eza CLI
eza login            # Sign ineza orgs create      # Create an organisationeza link             # Link this foldereza deploy           # Deploy current codeeza logs --follow    # Stream runtime logseza logs --build     # Show build logseza db tunnel        # Open a database tunnel

eza link asks you to choose or create an organisation, project, environment and app.

  • If you belong to one organisation, Eza skips the organisation selection.
  • The environment defaults to production.
  • Eza saves these selections to .eza/config.json, so later commands work without extra flags.
Read the CLI reference

Logs and troubleshooting

Read logs before guessing

Use build logs when an app fails during installation or compilation.

Use runtime logs when an app starts but returns errors after deployment.

~/juma-shop
eza logs --buildeza logs --follow

A failed health check keeps the previous deploy live.

Troubleshoot a failed deploy

Database connections

Connect a database without pasting secrets

Eza injects connection details into your app environment. Managed databases include:

  • PostgreSQL
  • MySQLBeta
  • MongoDB-compatibleBeta
  • Redis-compatible

Use eza db tunnel to connect from your computer through a local TCP port.

~/juma-shop
eza db tunnel production-db

The same tunnel works with psql, mysql, mongosh and redis-cli.

  • PostgreSQL and MongoDB-compatible databases support point-in-time recovery.
  • MySQL uses binlog backups.
  • Valkey uses daily snapshots and append-only files.
Connect to a managed database

Environment variables

Keep secrets out of your repository

Environment variables are encrypted at rest with envelope encryption.

Runtime variables are injected when your app starts. They do not enter the build. Mark a variable as build-time only when the build needs it.

Secret values remain hidden in the dashboard until you reveal them. Eza records each reveal.

Manage environment variables

Cron jobs

Run scheduled work in Nairobi time

Eza scheduled jobs use standard five-field cron syntax. Schedules run in Africa/Nairobi time by default.

Cron schedule
0 8 * * 1-5

This runs at 08:00 from Monday to Friday in Nairobi.

Create a cron job

Docker Compose

Beta

Use Docker Compose for supported services

Docker Compose is Beta.

Eza supports a documented subset of Compose files. Check the supported services before you deploy.

Use a docker-compose.yml file in your repository.

Read Docker Compose support

PayEdge quick start

Beta

Send an M-Pesa STK push

PayEdge works with apps hosted on Eza Cloud or elsewhere.

Create a PayEdge configuration, copy the API key and call the STK push endpoint over HTTPS.

Amounts use whole KES. The minimum amount is KES 1.

Illustrative Node.js SDK interface
import { PayEdge } from '@eza/payedge' const client = new PayEdge({  apiKey: process.env.PAYEDGE_API_KEY}) const result = await client.stkPush({  phone: '254712345678',  amount_kes: 1500,  account_reference: 'INV1024',  idempotency_key: 'request-1024'}) console.log(result.checkout_request_id)

PayEdge hosts the Safaricom callback URL, verifies the result and forwards it to your webhook endpoint.

Read the PayEdge quick start

Security

Protect your Eza account

  • Owners and Admins must use two-factor sign-in.
  • Members and Viewers can use two-factor sign-in.
  • All customer data is stored and processed in Kenya.

Report a security issue to security@eza.co.ke.

Read security practices

FAQ

Common deploy questions

Does Eza deploy automatically after a Git push?

Yes. A push to the app's configured branch starts a deploy by default. You can turn auto-deploy off for each app.

Can I deploy without a Git repository?

Yes. Run eza deploy in a local folder. If Eza cannot find a Git remote, it offers to upload the current folder as eza deploy --local.

What databases can I connect through eza db tunnel?

eza db tunnel supports PostgreSQL, MySQL, MongoDB-compatible and Redis-compatible managed databases through a local TCP port.

Where does Eza store environment variables?

Environment variables are encrypted at rest with envelope encryption. Runtime variables are injected when the app starts and do not enter builds unless marked as build-time.

Need help with a deployment

Start with build logs, runtime logs and the deployment troubleshooting guide.

For account and billing help, email support@eza.co.ke.

Starter and Pro customers can call +254 754 338 689 from Monday to Saturday, 08:00 to 18:00 EAT.