OpenCel is an open source, self-hosted deployment platform inspired by Vercel.
- Connect a GitHub repository to a project
- Build and deploy on push or pull request
- Create preview URLs per deployment
- Promote a deployment to production
- Stream build/runtime logs in the dashboard
- Manage encrypted environment variables
The current target is single-host Docker Compose for v1.
apps/api- Go API serviceapps/worker- background worker for deployment tasksapps/web- Next.js dashboard (shadcn + Tailwind)cmd/opencel- OpenCel CLI (install,migrate, and tooling)deploy/compose- Docker Compose stacks for local/prod-style installs
Prerequisites:
- Docker Desktop / Docker Engine + Compose plugin
- Go
1.24+ - Node.js
22+
Start infrastructure:
cd deploy/compose/dev
docker compose up -dRun DB migrations:
go run ./cmd/opencel migrate --dir ./migrations --dsn "postgres://opencel:opencel@localhost:5432/opencel?sslmode=disable"Run API and worker locally:
export OPENCEL_DSN="postgres://opencel:opencel@localhost:5432/opencel?sslmode=disable"
export OPENCEL_REDIS_ADDR="localhost:6379"
export OPENCEL_BASE_DOMAIN="opencel.localhost"
export OPENCEL_ENV_KEY_B64="$(openssl rand -base64 32)"
go run ./apps/api
go run ./apps/workerRun the dashboard:
cd apps/web
npm install
npm run devRepository checks:
go test ./...Web checks:
cd apps/web
npm run checkInstall directly from GitHub (no custom domain required):
curl -fsSL https://raw.githubusercontent.com/ErzenXz/opencel/main/install/install.sh | shIn-repo installer entrypoint:
sh install/install.shinstall/install.sh downloads a released opencel binary and runs opencel install.
After installing, update services in-place with:
sudo opencel updateThis runs docker compose pull and docker compose up -d in /opt/opencel.
If you also want to refresh the CLI binary itself first:
sudo opencel update --selfIf your VPS currently has an older opencel binary that does not include update, run the installer once:
curl -fsSL https://raw.githubusercontent.com/ErzenXz/opencel/main/install/install.sh | shThen use opencel update for future updates.
If you install from your own GitHub fork, set the release repo:
curl -fsSL https://raw.githubusercontent.com/ErzenXz/opencel/main/install/install.sh | OPENCEL_INSTALL_REPO=ErzenXz/opencel shIf running behind cloudflared, use the installer TLS mode:
opencel install --tls cloudflareUse the tunnel config example at deploy/cloudflared/config.yml.example and route both the base domain and wildcard preview/prod domains to port 80 on your server.