Chajio Cloud
App Hosting

Docker Hosting in Kenya

Any language, any system packages, your exact image. Put a Dockerfile in your repository and Chajio Cloud builds it as written, then runs two copies with free SSL and a managed database.

$ git push origin main
▸ Found a Dockerfile: building it as written
▸ FROM golang:1.23-alpine AS build
▸ RUN CGO_ENABLED=0 go build -o /server .
▸ FROM alpine:3.20
▸ Image built and pushed
✓ Live on 2 replicas: https://my-app.live.chajio.cloud

How it works

How we build and run your Docker app

  1. Find

    A Dockerfile in the root of your repository, or in the folder you set as the build context, switches off detection. There is no setting to change.

  2. Build

    Your Dockerfile is built as written. Variables you declare with ARG receive the values on your Environment tab with the same name.

  3. Run

    Your container starts with PORT set. Listen on it, on 0.0.0.0, and answer the health check path, / unless you change it.

  4. Roll out

    The new container takes visitors once it is healthy; the old one gets SIGTERM and a moment to finish its requests.

Get ready

Getting your Docker app ready

Dockerfile
FROM golang:1.23-alpine AS build
WORKDIR /src
COPY go.* ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /server .

FROM alpine:3.20
RUN adduser -D app
USER app
COPY --from=build /server /server
CMD ["/server"]

Build in one stage, copy only the result into a small final one, and run as a non-root user. The image that ships holds a single binary.

.dockerignore
.git
node_modules
.env
*.log

Keeps local clutter, and secrets in .env, out of the build.

Works with

What you can run

Go

A static binary in a tiny image.

Rust

Build with cargo, ship the binary.

Java & Spring Boot

Your own JDK and JVM settings.

Elixir & Phoenix

A release built in the image.

Bun & Deno

Any runtime you can install.

System packages

ffmpeg, ImageMagick, headless Chrome and more.

In production

Running your Docker app in production

Keep secrets out of ARG

Values used during the build are recorded in the image. Database passwords and API keys need no ARG: read them when the app runs, and they never touch the image.

One process, in the foreground

Use an exec-form CMD, such as CMD ["/server"], so SIGTERM reaches your app rather than a shell. Need $PORT in the command? CMD ["sh", "-c", "exec your-server --port $PORT"].

Can’t read PORT?

If your server always listens on one port, set the Container port setting to it instead. EXPOSE lines are fine to keep but change nothing.

Smaller is faster

Smaller images build and roll out faster. Multi-stage builds and a .dockerignore do most of the work.

Every plan

Included on every plan

2 replicas of every app

Two copies behind a load balancer, so a restart or a failed machine never takes you offline.

A managed database

PostgreSQL, MariaDB or MongoDB, with its own standby replica on another machine.

Deploy on every push

Connect GitHub once; every push to your branch builds and goes live.

One-click rollbacks

Go back to any earlier successful deployment from the Deployments tab.

Free SSL, your domain

Certificates issued and renewed for you, plus a free .live.chajio.cloud address.

Build and runtime logs

Watch builds as they run, and see what your app prints as it serves visitors.

CPU, memory and network

Metrics for every app, from the last 15 minutes to the last 30 days.

Zero-downtime deploys

A new version takes visitors only once its health check passes.

Pricing

Docker hosting plans

Free Plan

5GB DB Storage · 2GB RAM

Free 1st month

Then Ksh 350/mo

  • 2 vCPU
  • 2 Apps
  • 1 Database
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Start Free

Growth Plan

10GB DB Storage · 2GB RAM

Ksh 899/mo
  • 3 vCPU
  • 4 Apps
  • 2 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Choose Growth
Most Popular

Business Plan

20GB DB Storage · 4GB RAM

Ksh 1,899/mo
  • 4 vCPU
  • 6 Apps
  • 3 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Choose Business

Pro Plan

30GB DB Storage · 8GB RAM

Ksh 3,798/mo
  • 8 vCPU
  • 10 Apps
  • 5 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Go Pro

FAQ

Docker hosting questions

Not for Node.js, Python, PHP, Ruby, .NET, Go or Java apps, or static sites, which are recognised and built automatically. Add a Dockerfile for anything else, such as Rust or Elixir, or when you want exact control over the image.

Each app is one container built from one Dockerfile. Instead of a database service in Compose, add a managed PostgreSQL, MariaDB or MongoDB database, and deploy other services as apps of their own.

The one in the PORT environment variable, on 0.0.0.0. It matches the Container port setting, 3000 unless you change it. If your server can’t read PORT, set Container port to the port it uses.

Declare each one with an ARG line before it is used. Every ARG receives the variable with the same name from your Environment tab. Secrets should be read at runtime instead, so they stay out of the image.

In the root of your repository, or in the folder you set as the build context, which suits a monorepo with several apps.

You can start on the Free plan: free for your first month, then Ksh 350 a month, with 2 vCPU, 2GB RAM, 2 apps and a managed database. The Growth, Business and Pro plans add more CPU, memory, apps and databases as you grow.

Yes. We accept M-Pesa, Visa, Mastercard, PayPal, and bank transfers, and every plan is priced in Kenyan shillings. M-Pesa is the quickest option for Kenyan customers.

Deploy your Docker app today

Your first month is on us, with a managed database and two replicas from day one.