---
title: "Deploying apps on the Apps platform"
slug: "paas-app-deployments"
source: "https://app.cloudpe.com/help/paas-app-deployments"
updated: "2026-08-30T19:03:44.302Z"
---

# Deploying apps on the Apps platform

## Overview

The Apps platform (**Apps**, under **PLATFORM** in the dashboard) builds a web application straight from a Git repository and runs it on CloudPE-managed Kubernetes. When you create an app, the platform clones the repository at the branch you name, builds a container image with Kaniko, pushes it to a private registry, and rolls out a Kubernetes Deployment, Service and Ingress with a TLS certificate issued automatically. The result is reachable at an HTTPS hostname derived from the app slug on the platform apps domain (`<slug>.apps.<region-domain>`).

Three runtimes are supported: `nodejs`, `static` (served through nginx) and `docker` (your own Dockerfile). Runtime selection is manual — there is no automatic framework detection.

Apps is a beta feature. Behaviour and limits may change between releases.

## Before you start

- Identity verification: your organization must have completed KYC before any cloud resource, including an app, can be created.
- Organization and project: you need to belong to an organization and have a provisioned project. The project must live in the region you are deploying into — resources cannot be created from a project belonging to a different region.
- Permissions: reading apps, builds, deployments and logs requires `paas:read`. Creating an app requires `paas:create`. Redeploy, rollback, suspend/resume, environment variables, domains and database links require `paas:update`. Deleting an app requires `paas:delete`.
- Wallet balance: running apps are billed hourly against the organization wallet, so keep the wallet funded.
- Git access: have the repository URL and branch ready, or install the CloudPE GitHub App if you want to deploy from a connected GitHub repository.

## Steps

1. Open **Apps** from the **PLATFORM** group in the sidebar. The list shows every app in the current project with its status; use **Refresh** to force an update.

   ![](/kb/kubernetes-paas/paas-app-deployments-01-list.png)

2. Click **Create App**.

3. Choose the source. Select **GitHub App** to pick a repository from a connected GitHub account — if no account is connected yet, use **Install GitHub App** first. Select **Git URL** to point at a repository by URL instead.

   ![](/kb/kubernetes-paas/paas-app-deployments-02-create.png)

4. Fill in the app details: name, branch, and the runtime (`nodejs`, `static` or `docker`). Then set the build configuration — root directory, build command, start command, Node.js version where applicable, and the port your process listens on.

5. Click **Create App** to submit, or **Cancel** to discard the form. Creating the app immediately queues the first build.

6. You land on the app detail page. Follow progress through the tabs: **Overview** for status and the current build, **Builds** for build history and logs, **Deployments** for rollout history, **Logs** for runtime output, **Environment** for environment variables, **Domains** for custom hostnames, **Databases** for managed database links, and **Settings** for app configuration.

   ![](/kb/kubernetes-paas/paas-app-deployments-03-detail.png)

7. To ship a new commit, use **Redeploy** on the app detail page. Use **Delete** to remove the app and clean up its Kubernetes resources.

## API

The following operations are available on the public API.

| Method | Path |
|---|---|
| POST | `/api/v1/paas/apps` |
| GET | `/api/v1/paas/apps` |
| GET | `/api/v1/paas/apps/{app_id}` |
| PATCH | `/api/v1/paas/apps/{app_id}` |
| DELETE | `/api/v1/paas/apps/{app_id}` |
| POST | `/api/v1/paas/apps/{app_id}/deploy` |
| POST | `/api/v1/paas/apps/{app_id}/rollback` |
| POST | `/api/v1/paas/apps/{app_id}/suspend` |
| POST | `/api/v1/paas/apps/{app_id}/resume` |
| GET | `/api/v1/paas/apps/{app_id}/builds` |
| GET | `/api/v1/paas/apps/{app_id}/builds/{build_id}/logs` |
| GET | `/api/v1/paas/apps/{app_id}/deployments` |
| GET | `/api/v1/paas/apps/{app_id}/logs` |
| GET | `/api/v1/paas/apps/{app_id}/env` |
| PUT | `/api/v1/paas/apps/{app_id}/env` |
| DELETE | `/api/v1/paas/apps/{app_id}/env/{key}` |
| GET | `/api/v1/paas/apps/{app_id}/domains` |
| POST | `/api/v1/paas/apps/{app_id}/domains` |
| DELETE | `/api/v1/paas/apps/{app_id}/domains/{domain_id}` |
| GET | `/api/v1/paas/apps/{app_id}/databases` |
| POST | `/api/v1/paas/apps/{app_id}/databases` |
| DELETE | `/api/v1/paas/apps/{app_id}/databases/{link_id}` |

Create an app (this also queues the first build):

```bash
curl -X POST https://app.cloudpe.com/api/v1/paas/apps \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-app",
    "repo_url": "<GIT_REPO_URL>",
    "branch": "main",
    "runtime": "nodejs",
    "root_directory": "/",
    "build_command": "npm run build",
    "start_command": "npm start",
    "port": 3000
  }'
```

Trigger a redeploy:

```bash
curl -X POST https://app.cloudpe.com/api/v1/paas/apps/<app_id>/deploy \
  -H "Authorization: Bearer <API_KEY>"
```

Fetch the logs of a specific build:

```bash
curl https://app.cloudpe.com/api/v1/paas/apps/<app_id>/builds/<build_id>/logs \
  -H "Authorization: Bearer <API_KEY>"
```

Roll back to the previous successful build:

```bash
curl -X POST https://app.cloudpe.com/api/v1/paas/apps/<app_id>/rollback \
  -H "Authorization: Bearer <API_KEY>"
```

## Limits & billing

- Running apps are charged hourly against the organization wallet, based on the app's plan tariff and its replica count.
- Suspending an app scales its pods to zero and stops billing; resuming restores the pods and resumes billing. Deleting an app also closes its usage record.
- Replica count is fixed per app — there is no auto-scaling on the Apps platform.
- Build layers are not cached between builds, so each build starts from scratch.
- Plans are assigned automatically; there is no plan picker in the customer UI.
- Custom domains configured on the **Domains** tab are not preserved across a redeployment and must be re-added.

## Troubleshooting

| Message | What it means | What to do |
|---|---|---|
| `Complete identity verification to create cloud resources.` | The organization has not finished KYC, so no app can be created. | Complete identity verification, then retry **Create App**. |
| `Project belongs to a different region; cannot create resources here.` | The selected project is scoped to another region than the one you are deploying into. | Switch to a project in the target region, or create one there first. |
| `Billing gate misconfigured for this resource.` | The billing eligibility check for the resource could not be evaluated. | Retry; if it persists, raise a support ticket with the app name and timestamp. |
| `You must belong to an organization to create API keys` | You tried to mint an API key for the Apps API without an organization. | Join or create an organization, then generate the key from **API Keys**. |

For build-time failures, open the **Builds** tab and read the log of the failed build; for crash loops or startup errors after a successful build, check the **Logs** tab.

## FAQ

**How do I ship a new commit?**
Open the app and click **Redeploy**, or call `POST /api/v1/paas/apps/{app_id}/deploy`. The platform re-clones the branch, rebuilds the image and rolls out a new deployment.

**Can I go back to the previous version?**
Yes. Use the rollback endpoint to return to the last successful build. Past builds and rollouts are listed on the **Builds** and **Deployments** tabs.

**How do I stop paying for an app without deleting it?**
Suspend it. Pods are scaled to zero and billing stops until you resume the app.

**Where do environment variables live?**
On the **Environment** tab of the app, or via the env endpoints. They are injected into the container on the next deployment.

**Which runtimes can I use?**
`nodejs`, `static` and `docker`. The runtime is chosen manually when you create the app; there is no automatic framework detection.

## Related

- [Deploying apps from GitHub](/help/app-deployments-from-github)
- [Provisioning a Kubernetes cluster](/help/k8s-cluster-provisioning)