Everything you need to ship on Cloudexa.
Store your code, deploy applications, provision databases, configure domains and manage your projects from one platform.
Getting started
Go from an empty repository to a running application in a few steps.
Create a Cloudexa repository and push your project using Git.
Select the repository, branch and deployment settings.
Cloudexa builds the project and starts it inside an isolated container.
Repositories
Cloudexa repositories are standard Git repositories that can also be used as deployment sources.
Repositories may be public or private. A hosting project points to one repository and branch.
git clone https://cloudexa.dev/git/username/project.git
cd project
git add .
git commit -m "Update project"
git push origin main
Private repositories require authentication when cloning or pushing. Use your Cloudexa Git credentials or access token.
Deployments
Every deployment is created from a specific state of your repository.
Cloudexa resolves the selected branch, checks out the current commit, detects the runtime and creates a Docker image.
Repository → Checkout → Runtime detection → Build → Container start → Running
Redeploying builds a fresh deployment from the latest state of the selected branch.
Runtimes
Cloudexa detects common application types automatically.
Detected from package.json.
npm start
Detected from Python source and dependency files.
python app.py
Detected from composer.json or PHP source.
php -S 0.0.0.0:8080
Static HTML projects can be served directly.
index.html
const http =
require("http");
const port =
Number(
process.env.PORT ||
3000
);
http.createServer(
(req, res) => {
res.end(
"Hello from Cloudexa"
);
}
).listen(
port,
"0.0.0.0"
);
Environment variables
Store configuration and secrets without committing them to Git.
Environment variables are injected into your application when its container starts.
DATABASE_URL=postgresql://...
API_KEY=your-secret
NODE_ENV=production
Passwords, API keys and access tokens should be stored as environment variables.
Ports
Web services must listen on the internal port configured by Cloudexa.
Use process.env.PORT whenever possible and bind
your application to 0.0.0.0.
Logs
Inspect application output and deployment failures from your project.
Anything written to standard output or standard error appears in your runtime logs.
console.log(
"Application started"
);
console.error(
"Something failed"
);
Domains
Give your application a generated Cloudexa hostname or connect your own domain.
Hosted projects can receive a Cloudexa hostname under
cloudexa.dev.
Add your domain to the project and configure the DNS records displayed by Cloudexa.
Databases
Provision PostgreSQL and MySQL databases without running your own database container.
Each database receives an isolated database name, username and generated password.
DATABASE_URL=postgresql://username:[email protected]:5432/database
DATABASE_URL=mysql://username:[email protected]:3306/database
A connection URL contains everything needed to authenticate to your database.
PostgreSQL
PostgreSQL databases include CLI credentials and a dedicated pgAdmin web login.
Cloudexa creates a dedicated PostgreSQL role and database. A matching pgAdmin account is also generated automatically.
psql \
-h db.cloudexa.dev \
-p 5432 \
-U your_database_user \
-d your_database
Open https://pgadmin.cloudexa.dev and sign in using the web credentials displayed on the database page.
MySQL
MySQL-compatible databases can be managed through phpMyAdmin.
mysql \
-h db.cloudexa.dev \
-P 3306 \
-u your_database_user \
-p
Open https://phpmyadmin.cloudexa.dev and use the same username and password as your MySQL database.
Resource limits
Limits depend on your Cloudexa account plan.
| Resource | Normal | Premium |
|---|---|---|
| Running instances | 2 | 10 |
| Memory / instance | 512 MB | 2 GB |
| CPU / instance | 1 vCPU | 2 vCPU |
| Process limit | 256 | 1,024 |
| Build timeout | 10 min | 30 min |
| Databases | 1 | 5 |
CPU limits apply to containers running on shared infrastructure. They are not dedicated physical CPU cores.
Container isolation
Hosted applications run separately from the Cloudexa host.
Your application can execute commands inside its own container, but it does not receive direct access to the Cloudexa host.
Troubleshooting
Common issues and the first things to check.
Deployment stays on Building
Application is running but cannot be opened
process.env.PORT and binds to
0.0.0.0.
Runtime was not detected
Environment variable is missing
PostgreSQL connection fails
db.cloudexa.dev:5432 using the database,
username and password shown by Cloudexa.
MySQL connection fails
db.cloudexa.dev:3306 using your generated
MySQL credentials.
Container exits immediately
Build something on Cloudexa
Push code, deploy it and connect the services your project needs.