Docs
Overview
Early project. Nocap Cloud is in active development and not ready for production yet. Follow the roadmap to see what works today.
What it is
Nocap Cloud turns a clean Linux server into your own deployment platform. Connect GitHub or GitLab, push your code, and your app goes live with HTTPS. It is free for everyone, with no paid plans and no telemetry.
- Lightweight: three containers (Nocap, Postgres and Traefik), no Redis.
- Git push to deploy: GitHub App and GitLab integration, set up in a few clicks.
- Zero-downtime deploys with health checks and one-click rollback.
- One-click databases: PostgreSQL, MySQL, MariaDB, MongoDB and Redis, linked to your apps with one click. Backups to any S3-compatible storage are next.
- Migrations built in: a release command runs in the new version before it gets traffic.
Install
Not available yet. The installer ships with v0.1.
curl -fsSL https://get.nocapcloud.click | sudo sh
Requirements: Ubuntu 22.04 or 24.04, amd64 or arm64, 1 GB RAM (2 GB recommended), 20 GB disk, ports 80, 443 and 3000 free.
Roadmap
| Phase | Status |
|---|---|
| 0. Foundations: repo, CI, login, projects, install script, website | Done |
| 1. Deploy: build and run apps, Traefik, SSL, live logs | Done |
| 2. Git: GitHub App, GitLab token, deploy on push, deploy hooks | Done |
| 3. Reliability: encrypted variables, health checks, zero downtime, rollback | In progress |
| 4. Databases, release commands (migrations) and backups | In progress |
| 5. Monitoring: per-app CPU and memory history, alerts, uptime checks | Planned |
| 6. Release v0.1: images on GHCR, in-panel updates, docs | Planned |
Deploying from Git
Public repositories work right away: paste the https:// address when you create an app.
GitHub (private repositories, deploy on push):
- In the panel, open Git providers → Connect GitHub. Check the panel address: GitHub calls it back and sends push events there, so it must be reachable from the internet.
- GitHub opens and creates a private GitHub App just for your server, with read-only access to code. Click Create.
- Choose which repositories the app can see and click Install.
- Create an app, pick the account and the repository from the list. Every push to its branch deploys it.
Code is cloned with short-lived tokens. They are hidden in build logs, and the .git folder is
removed before the build, so tokens never end up in an image.
GitLab (gitlab.com or self-hosted): Git providers → GitLab, paste a personal access token
with the api and read_repository scopes. Nocap adds the push webhook to the project when you
create the app.
Anything else (Bitbucket, Gitea, a cron job): every app has a deploy hook URL under
Settings → Automatic deploys. curl -X POST <url> deploys it.
Databases and migrations
Databases → New database (or New database on a project) starts PostgreSQL, MySQL, MariaDB, MongoDB or Redis in its own container, with its data in a Docker volume and a generated password stored encrypted. It has no public port: only apps on the server can reach it.
Under Used by, link it to an app. The app gets the connection URL as DATABASE_URL (or
REDIS_URL, MONGODB_URI, or a name you pick) on its next deploy.
The project page shows every service in it, apps and databases, with status, CPU, memory and which app uses which database.
Migrations: in an app's Settings → Release command, pick your framework or type a command. It runs in the new image, with the app's variables and linked databases, before traffic moves to it. If it fails, the deployment stops and the current version keeps running. Presets:
| Framework | Command |
|---|---|
| Prisma | npx prisma migrate deploy |
| Drizzle | npx drizzle-kit migrate |
| Django | python manage.py migrate --noinput |
| Alembic (FastAPI, Flask) | alembic upgrade head |
| Laravel | php artisan migrate --force |
| Rails | bin/rails db:migrate |
| Spring Boot | java -Dspring.main.web-application-type=none -jar app.jar |
Knex, Sequelize, TypeORM, EF Core bundles and golang-migrate are in the list too. The command runs
with sh -c, so the image needs a shell.
Develop
You need Node.js 22, pnpm 10 and a PostgreSQL 16 database.
pnpm install
cp apps/server/.env.example apps/server/.env # set DATABASE_URL
pnpm dev # server on :3000, panel on :5173
Other commands: pnpm test, pnpm lint, pnpm typecheck, pnpm build.
To run the panel without a server, start it in demo mode: pnpm --filter @nocap/web dev:demo.
It uses a fake API in the browser with sample data. build:demo builds the version deployed
at demo.nocapcloud.click.
Repository layout
apps/server Fastify API, background worker, serves the built panel
apps/web React panel (Vite, Tailwind)
apps/site Landing page at nocapcloud.click (Vercel), mirrored on GitHub Pages
packages/db Drizzle schema and SQL migrations
packages/shared Zod schemas and types shared by server and panel
infra docker-compose.yml and install.sh
Founder
Nocap Cloud was founded by Ismael Valgy (@LGYx2), who leads the roadmap and reviews every change.
Contributing
Contributions are welcome. Read CONTRIBUTING.md first, and report security issues privately as described in SECURITY.md.