Chajio Cloud
App Hosting

Python Hosting in Kenya

Django, Flask or FastAPI, with no servers or process managers to look after. Push to GitHub and Chajio Cloud runs your app on two replicas, with free SSL and a managed database.

$ git push origin main
▸ Detected Python: requirements.txt
▸ Using Python 3.12, from .python-version
▸ Installing packages from requirements.txt
▸ Starting the web process from Procfile
▸ gunicorn app:app --bind 0.0.0.0:$PORT
✓ Live on 2 replicas: https://my-app.live.chajio.cloud

How it works

How we build and run your Python app

  1. Detect

    A requirements.txt marks your repository as a Python app. A pyproject.toml or Pipfile works too.

  2. Pick the version

    A .python-version file holding just the version, such as 3.12, picks the Python your app runs on, so production matches your laptop.

  3. Install

    Your packages install, including the server that runs your app in production: gunicorn for Django and Flask, uvicorn for FastAPI.

  4. Run

    The web: line in your Procfile starts the app. Django projects are recognised and started even without one.

Get ready

Getting your Python app ready

Procfile (Flask)
web: gunicorn app:app --bind 0.0.0.0:$PORT --workers 2

app:app means the variable app in app.py. For an app factory, use "app:create_app()".

Procfile (FastAPI)
web: uvicorn main:app --host 0.0.0.0 --port $PORT --proxy-headers --forwarded-allow-ips="*"

--proxy-headers lets FastAPI see that visitors arrived over HTTPS, so the redirects it builds use https://.

Procfile (Django)
web: python manage.py collectstatic --noinput && python manage.py migrate && gunicorn yourproject.wsgi --workers 2

Collects static files for whitenoise, applies migrations, then starts Gunicorn, which reads PORT itself.

Works with

What you can run

Django

Recognised automatically. Add whitenoise for static files.

Django REST Framework

APIs deploy like any Django project.

Wagtail

Django’s CMS, set up the same way.

Flask

Served by Gunicorn. App factories work.

FastAPI

Served by Uvicorn, with proxy headers on.

Starlette

Any ASGI app runs under Uvicorn.

In production

Running your Python app in production

A production server, not the dev one

flask run and manage.py runserver aren’t built for real traffic. Add gunicorn or uvicorn to your requirements and start with it.

Django and ALLOWED_HOSTS

The platform’s health check comes from inside the network, not from your domain, so a strict ALLOWED_HOSTS rejects it. Answer /healthz in a small middleware placed before Django’s host check.

Settings from the environment

Read required values with os.environ["NAME"] and optional ones with os.environ.get("NAME", "default"). With Django, dj-database-url turns DATABASE_URL into your database settings.

HTTPS is handled

Visitors who type http:// are sent to https:// before they reach your app, so Django needs no SECURE_SSL_REDIRECT.

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

Python 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

Python hosting questions

The one in your .python-version file, which holds just the version, for example 3.12. Without it you get a default that may not match the version you develop on.

For Flask and FastAPI, yes: one line starting with web: that runs Gunicorn or Uvicorn. Django projects are recognised without one, but a Procfile that also collects static files is the better setup.

Yes. A pyproject.toml or a Pipfile works as well, as long as it lists the server your app runs on, such as gunicorn or uvicorn.

PostgreSQL or MariaDB through Django’s ORM or SQLAlchemy, and MongoDB through PyMongo. Every plan includes a managed database, and its connection string reaches your app as DATABASE_URL.

Because the check isn’t addressed to a host in ALLOWED_HOSTS. Answer the health check path in a middleware that runs before Django’s host validation, as the Python deploy guide shows.

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 Python app today

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