App Deployment
Plan Node.js, Python, APIs, dashboards, and SaaS app launches.
App deployment planning
Plan application deployment before connecting domains, SSL, and runtime settings.
Read this guideEnvironment variables
Environment variables should be planned without exposing secrets.
Read this guideConnect an app to a domain
Connecting an app to a domain requires DNS, SSL, and routing review.
Read this guideDeploy a static website
Static sites run as plain HTML, CSS, and JavaScript served directly by nginx — no server process required.
Read this guideDeploy a Node.js app
Node.js apps run as a persistent server process. The platform installs dependencies and starts your app automatically.
Read this guideDeploy a Python app (FastAPI / Flask)
Python apps run inside an isolated virtualenv. The platform installs requirements and starts your ASGI or WSGI server.
Read this guideDeploy a Django app
Django runs under gunicorn in an isolated virtualenv. We apply your migrations and collect your static files on every deploy.
Read this guideDeploy a Laravel app
Laravel apps run via PHP-FPM and nginx. The platform installs Composer dependencies, creates a SQLite database, and runs migrations automatically.
Read this guideDeploy a Java app
Spring Boot, Quarkus and Micronaut run on App Deployment like any other app: push to Git and the platform builds the jar and runs it.
Read this guideDeploy a PocketBase backend
PocketBase is a backend your app talks to: collections and schema, user authentication, file storage, realtime subscriptions, a REST API and an admin dashboard at /_/, all in one binary. It is a service of its own, not a runtime for code you wrote — your app is a separate deployment that reaches this backend over a URL.
Read this guidePocketBase migrations and hooks (pb_migrations / pb_hooks)
Yes — as of 9 August 2026, CM Cloud deploys and runs pb_migrations/ and pb_hooks/ from your repository. Supply a Git repo when you deploy a PocketBase app and the platform clones it, places those directories alongside the PocketBase binary, and starts the service pointed explicitly at them. Migrations are applied at startup and hooks are loaded. This article covers how it works and the two things that can still trip you up.
Read this guideCI/CD deploy hook
Trigger automatic redeploys from GitHub Actions, GitLab CI, or any CI pipeline using a secure webhook.
Read this guideBuild commands
Set a build command for any runtime that requires a compile or optimisation step before the service starts — Node.js, Python, PHP/Laravel, or static sites.
Read this guideSet environment variables in the portal
Add, edit, or delete environment variables for a deployed app — changes persist across redeploys automatically.
Read this guideWhich environment variables does my app need?
CM Cloud never requires specific variable names — your own application code decides which variables it reads. Set exactly those names, and nothing else.
Read this guideUse your own domain with an app (external DNS)
If your domain is registered or managed outside CM Cloud, you can still point it to your deployed app by creating a CNAME record in your DNS provider. This applies to PocketBase, Node.js, Python, Laravel, and static site deployments.
Read this guideConnect your app to a PocketBase backend
If your deployed app (FastAPI, Node, Django, Laravel, etc.) talks to a CM Cloud PocketBase instance, use the correct API endpoints — PocketBase v0.23 changed how admin/superuser login works, which is the most common reason an app fails to connect. These are two separate deployments: your app on its own runtime (node, python_fastapi, laravel, java) and a Pocketbase Backend service of its own, wired together by a POCKETBASE_URL environment variable. Deploying your app on the pocketbase runtime instead will not run it.
Read this guideUse an S3 bucket for file storage
Connect your app to an S3-compatible bucket for scalable file and media storage.
Read this guideEnable PocketBase password-reset emails
By default a new PocketBase ships with email sending turned off, so the built-in 'forgot password' flow silently never delivers. CM Cloud can switch it on for you in one click from your service page.
Read this guideHow to buy an App Deployment plan
Host your own Node, Python, Laravel, Java or static apps. A PocketBase backend is a separate Pocketbase Backend service, not a runtime on this plan.
Read this guide