How to Deploy Your App to Chajio Cloud
If you have been looking for a simple way to get your web application live without worrying about servers, configurations, or SSL certificates, Chajio Cloud is built exactly for that. Whether you are shipping a Python API, a Node.js backend, or a React frontend, this guide walks you through every step from signing up to watching your app go live with real code examples you can follow along with.
What Is Chajio Cloud?
Chajio Cloud is a Platform-as-a-Service (PaaS) that takes care of the heavy lifting so you can focus entirely on writing code. You connect your GitHub repository, point it at your app, and Chajio Cloud handles the rest: cloning your code, detecting what language you are using, installing dependencies, building a container, routing traffic, and issuing SSL certificates, all automatically.
You do not touch a server. You do not write deployment scripts. You push code to GitHub and your app updates.
Plans and What Each One Gets You
Before signing up, it helps to know what plan fits your needs. Chajio Cloud currently offers three tiers:
Starter
Designed for solo developers running a single project. One application slot, up to 30 deployments per month, community support, and one custom domain. More than enough for a personal project or a side hustle in early stages.
Professional
For growing projects or small teams. Two applications simultaneously, 75 deployments per month, up to three team members and two custom domains.
Business
For teams shipping seriously. Three applications, 150 deployments per month, up to five team members, three custom domains, and priority support. Includes advanced features like rollbacks and staging environments.
All plans include automatic SSL, real-time build logs, environment variable management, and auto-deploy on git push.
Step 1 — Signing Up
Accounts on Chajio Cloud are created through the billing portal. When you purchase a plan, the system provisions your account automatically. Within a few minutes of your payment being confirmed, you will receive a welcome email containing your login credentials and the link to your dashboard.
Step 2 — Logging In and Exploring the Dashboard
Open the portal URL from your welcome email and log in. The dashboard is clean and task-focused. On the left you will see navigation for Applications, Deployments, Databases, GitHub, and Settings.
Applications
Create and manage your deployed projects.
Deployments
History of every build — successful or otherwise — along with real-time logs.
Databases
Spin up managed PostgreSQL, MySQL, Redis, or MongoDB instances alongside your apps.
GitHub
Connect your account and manage repository access.
Settings
Profile, password, and team members.
Step 3 — Connecting Your GitHub Account
Everything on Chajio Cloud deploys from a GitHub repository, so the first thing you need to do is connect your GitHub account. Click GitHub in the sidebar, then click Connect GitHub. You will be redirected to GitHub where you will be asked to authorize Chajio Cloud's application. This grants the platform read access to your repositories so it can clone your code at deployment time.
You only need to do this once. Once your account is linked, all your repositories and branches are available when creating applications.
Step 4 — Deploying Your First Application
Click Deploy New Application from the dashboard. You will see a form with the following fields:
Name
A label for your app inside the dashboard, for example my-api or portfolio-site.
GitHub Repository
Pick from a dropdown of your connected repos.
Branch
The branch you want to deploy, defaulting to main.
Build Pack
Either default (automatic language detection) or dockerfile (if you have your own Dockerfile).
Port
The port your application listens on.
Custom Domain
Optional — add it now or later.
Auto-deploy
When toggled on, every push to your selected branch triggers a new deployment automatically.
Environment Variables
Key-value pairs that get injected into your container at runtime.
Fill in the form for your app, click Create, and your first deployment starts immediately. The platform clones your repository, detects your language, installs dependencies, builds a container image, and starts routing traffic, all without you doing anything else.
Deploying a Python Application (Flask / FastAPI)
Your repository needs a requirements.txt file at the root. Auto deploy detects this file and automatically sets up a Python environment, installs your dependencies, and runs your application.
Here is a minimal Flask application:
requirements.txt
flask==3.0.0 gunicorn==21.2.0
app.py
from flask import Flask, jsonify
import os
app = Flask(__name__)
@app.route("/")
def home():
return jsonify({"message": "Hello from Chajio Cloud!", "status": "running"})
@app.route("/health")
def health():
return jsonify({"status": "ok"})
if __name__ == "__main__":
port = int(os.environ.get("PORT", 8000))
app.run(host="0.0.0.0", port=port)Important
Notice host="0.0.0.0" — this is required. If your app binds to localhost or 127.0.0.1, the platform's traffic router cannot reach it and your deployment will show as failed even though the app started successfully.
In the dashboard, set:
Build Pack: default
Port: 8000
Environment variables:
FLASK_ENV=production SECRET_KEY=replace-with-a-long-random-string
For FastAPI, the setup is nearly identical. Replace the requirements:
fastapi==0.110.0 uvicorn==0.27.0
Deploying a Node.js Application (Express)
Node.js applications are detected by the presence of a package.json file. Auto deploy reads it, runs npm install, and uses your start script to boot the app.
package.json
{
"name": "my-api",
"version": "1.0.0",
"scripts": {
"start": "node index.js",
"build": "echo 'No build step required'"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
}
}index.js
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
app.get("/", (req, res) => {
res.json({ message: "Hello from Chajio Cloud!", status: "running" });
});
app.get("/health", (req, res) => {
res.json({ status: "ok" });
});
app.listen(PORT, "0.0.0.0", () => {
console.log(`Server running on port ${PORT}`);
});In the dashboard, set:
Build Pack: default
Port: 3000
Environment variables:
NODE_ENV=production PORT=3000 DATABASE_URL=postgresql://user:password@host:5432/mydatabase
For a TypeScript Node.js app, add a build step:
package.json (TypeScript)
{
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
},
"devDependencies": {
"typescript": "^5.0.0",
"@types/express": "^4.17.21",
"@types/node": "^20.0.0"
}
}Auto deploy detects the build script, runs it first, then starts with your start script. No extra configuration needed.
Deploying a React Application
React is a frontend framework that compiles to static files. After the build, you need a small HTTP server to serve those files. The recommended approach is to use the serve package.
package.json
{
"name": "my-react-app",
"version": "1.0.0",
"scripts": {
"build": "vite build",
"start": "npx serve dist -l 3000"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"vite": "^5.0.0",
"@vitejs/plugin-react": "^4.0.0",
"serve": "^14.2.0"
}
}Critical note on React environment variables
Variables like API URLs need to be prefixed with VITE_ (Vite projects) or REACT_APP_ (Create React App). These values are baked into your JavaScript bundle at build time, not injected at runtime. If you update an environment variable, you must trigger a new deployment for the change to take effect.
Environment variables:
VITE_API_URL=https://api.yourapp.com VITE_APP_NAME=My Awesome App
Using them in your code
const apiUrl = import.meta.env.VITE_API_URL;
fetch(`${apiUrl}/api/users`)
.then(res => res.json())
.then(data => console.log(data));Using a Custom Dockerfile
If your app has specific system-level dependencies, uses an unusual runtime, or you simply prefer full control over the build environment, you can provide your own Dockerfile. Set the Build Pack to dockerfile in the dashboard form, and Chajio Cloud will use your file instead of Auto deploy.
Node.js multi-stage build
# Build stage FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Production stage FROM node:20-alpine AS production WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY --from=builder /app/dist ./dist EXPOSE 3000 CMD ["node", "dist/index.js"]
Python with system dependencies
FROM python:3.12-slim
RUN apt-get update && apt-get install -y \
libpq-dev \
gcc \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000", "--workers", "2"]Managing Environment Variables
Environment variables are secrets and configuration values your app needs at runtime — database credentials, API keys, feature flags, and so on. You never hardcode these in your source code.
On the application detail page, go to the Environment Variables tab and add each variable as a key-value pair:
DATABASE_URL postgresql://user:pass@host:5432/mydb REDIS_URL redis://host:6379 API_SECRET_KEY a-long-random-secret-string SMTP_HOST smtp.mailprovider.com SMTP_PORT 587 NODE_ENV production
These are injected into your container at startup. Your application reads them with os.environ.get("DATABASE_URL") in Python or process.env.DATABASE_URL in Node.js.
After adding or changing variables, you need to trigger a new deployment. Variables do not hot-reload into a running container.
Adding a Custom Domain and SSL
By default, your app is accessible on a Chajio Cloud subdomain immediately after deployment. To use your own domain, go to your application's detail page and enter your domain name — for example, myapp.example.com.
Then log in to your DNS provider and add a record pointing to the Chajio Cloud server. For a subdomain, use a CNAME record. For a root domain like example.com, use an A record with the server's IP address provided in your dashboard or welcome email.
SSL is completely automatic. The moment your DNS record propagates and Chajio Cloud can verify domain ownership, it requests a certificate from Let's Encrypt. The certificate is installed, HTTP traffic is redirected to HTTPS, and renewal happens in the background well before the certificate expires. You never think about certificates again.
DNS propagation can take anywhere from a few minutes to 48 hours depending on your provider and TTL settings.
Adding a Managed Database
Go to Databases in the sidebar and click Create Database. Choose from:
PostgreSQL
The most common choice for relational data.
MySQL / MariaDB
Widely used in PHP and legacy stacks.
Redis
For caching, sessions, or queues.
MongoDB
For document storage.
After creation, your connection string is shown. Copy it immediately — for security reasons it is only displayed once. Add it to your application as an environment variable. The connection is internal to the platform and does not traverse the public internet.
Auto-Deploy: Ship Without Leaving Your Editor
When you enable Auto-deploy on an application, Chajio Cloud watches the configured branch for new commits. Any push to that branch — whether it is from you, a collaborator, or a merged pull request automatically triggers a deployment.
Your full workflow
# Make your changes locally git add . git commit -m "feat: add user authentication" git push origin main # That's it. Chajio Cloud picks it up and deploys automatically.
Deployment Limits and Upgrading Your Plan
Each plan comes with a monthly deployment count: Starter allows 30, Professional allows 75, and Business allows 150. The counter resets at the start of each billing cycle. If you hit the limit before the cycle ends, new deployments are blocked and the dashboard will notify you and prompt you to upgrade. Upgrading through the billing portal instantly increases your limits. No redeployment or downtime required.
Common Issues and How to Fix Them
Deployment fails immediately after starting
Check that your app binds to 0.0.0.0 and not localhost. This is the single most common cause of failed deployments on container-based platforms.
Port mismatch
The port you enter in the dashboard must match the port your app actually listens on. If your Express server listens on port 4000 but you entered 3000, traffic will never reach your app and health checks will fail.
React environment variables not working
VITE_ or REACT_APP_ variables are compiled into the bundle. If you change them, you must trigger a new deployment. Restarting the app without rebuilding will not pick up the new values.
Build fails with dependency errors
Check that your package.json or requirements.txt includes all the packages your app needs. Dependencies that exist only on your local machine but are not in your lock file will cause build failures.
Custom domain not working yet
DNS propagation takes time. After adding your domain to the dashboard and updating your DNS records, wait at least 15–30 minutes. You can use an online DNS checker to see if your records have propagated globally.
Monthly deployment limit reached
Upgrade your plan through the billing portal or wait for your billing cycle to reset. The dashboard shows how many deployments you have used and how many remain.
Summary
Chajio Cloud removes the operational complexity from deploying web applications. You write code, push to GitHub, and your app is live with HTTPS, custom domains, environment variable management, managed databases, and real-time build logs all included.
The workflow in its simplest form is:
- Sign up and receive your credentials.
- Log in to the dashboard.
- Connect your GitHub account.
- Click Deploy New Application, fill in the form, and create.
- Watch the build logs as your app comes to life.
- Add your custom domain and environment variables.
- Enable auto-deploy so every git push ships your latest code.
Whether you are shipping a Python API, a Node.js backend, a React frontend, or anything else, the process is the same. Chajio Cloud handles the infrastructure so you can spend your time building features instead of managing servers.
Ready to get started?
Purchase a plan and your account will be ready within minutes.
View App Hosting Plans