FeaturesDocs Pricing
Contact us →
Feature • Push to deploy

Push to deploy. On a server or a cluster.

Connect a GitHub repo and every push builds and ships. Rubuz detects the runtime, builds the image on your server, adds SSL and swaps to the new version with zero downtime. On managed Kubernetes, the same push rolls out across your cluster.

Runtime detected for you Zero-downtime swap Docker Hub & GHCR images Automatic Let's Encrypt SSL
pipeline // github.com/rubuz-org/api-gateway:main • commit 49c2e0b
Live: api.rubuz.cloud
Total Build Time
14.2s
85% layer cache hit
Detected Runtime
Node 22 LTS
pnpm • TypeScript 5.6
Swap
No downtime
Old container drained
TLS / SSL Route
Valid 89d
Automated Let's Encrypt
Build log
Run #248
[00:00.4] ✓
GitHub Webhook Received: Verified HMAC-SHA256 signature for branch refs/heads/main
[00:01.2] ✓
Git Fetch: Shallow checkout commit 49c2e0b ("feat(api): add health endpoint")
[00:02.1] ✓
Auto-Detection: Found package.json and pnpm-lock.yaml. Selecting Node.js 22 alpine runtime.
[00:04.6] ✓
Cache Layer Reused: 4 cached layers restored. Skipping npm dependency download (saved ~32s).
[00:11.8] ✓
Image Built on Server: Built image rubuz/app-green:49c2e0b (size: 94 MB).
[00:13.2] ✓
Preflight Health Probe: Sent 3 HTTP requests to internal port 3000 -> 200 OK (latency: 3ms). Health verified.
[00:14.2] ★
Swap: Traffic moved to the new container. Old container stopped.
Previous Release: #b7190f8 (Node 22 • 1h ago)
01 // Before and after

Deploy scripts break. Pushes shouldn't.

A script that pulls the code and restarts the process works until a build fails halfway. Then your site is down while you fix it.

✕ Hand-rolled deploy scripts

Deploying by hand

  • ✕
    Downtime on every restart: The old process stops before the new one is ready, so visitors see errors until it comes back.
  • ✕
    A failed build takes the site down: If a dependency is missing or the build errors out, the running version is already gone.
  • ✕
    SSL and proxy config by hand: You set up Nginx, certbot and renewal jobs yourself, and fix them when they drift.
  • ✕
    Files lost on redeploy: Uploads written inside the app folder disappear the next time you rebuild.
With Rubuz
✓ Push, build, swap

Deploying with Rubuz

  • ✓
    Zero-downtime swap: The new container starts beside the old one. Traffic moves over once it is up.
  • ✓
    Failed builds change nothing: If a build fails, nothing is swapped. The running version keeps serving.
  • ✓
    SSL included: Every app gets its own domain and a Let's Encrypt certificate, with no proxy config to write.
  • ✓
    Persistent /data: Each app has a /data directory that survives every redeploy, so uploads and files stay put.
  • ✓
    Roll back in one click: Pick an earlier commit and Rubuz deploys it again, so a bad push is one click from undone.
02 // How it works

From push to live.

No pipeline to write and no build server to run. The image is built on your own server.

Pillar 01

Runtime detection

No Dockerfile needed. Rubuz reads your repo, picks the runtime and builds the image on your server.

Detected runtimes:
• Node.js • Python • Go
• Rust • PHP • Ruby
• Or deploy a ready-made image
Pillar 02

Zero-downtime swaps

Your app keeps serving while the new version starts. Rubuz switches traffic once the new container is running, then stops the old one.

On every deploy:
• New container starts beside the old one
• Traffic switches once it is up
• Old container stops after the swap
Pillar 03

Images from Docker Hub or GHCR

Already build images in CI? Point Rubuz at an image on docker.io or ghcr.io and it runs the same way as a repo deploy, under a domain like app.example.com.

Each image gets:
• Its own rootless Podman container
• Its own domain and Let's Encrypt SSL
• A persistent /data directory
Pillar 04

Databases beside your app

Add Postgres, MySQL, Mongo or Valkey and it runs in its own container next to your app. Credentials arrive as environment variables.

Databases:
• Postgres and MySQL
• Mongo and Valkey
• Credentials injected as env vars
When one server is not enough

The same push. Across a cluster.

Rubuz runs managed Kubernetes in your own DigitalOcean, Vultr or Linode account. Your app rolls out across the cluster with high availability and autoscaling, without the cost and complexity of EKS or GKE. Your provider bills you for the nodes directly.

DigitalOcean Vultr Linode
VPS
One server
  • • Image built on the server
  • • Health check, then switch
  • • Old container stops
Kubernetes
A cluster
  • • Rolling deploy across nodes
  • • High availability
  • • Autoscaling
03 // Runtimes

Bring the stack you already use.

Rubuz detects the runtime from your repo. If you already publish an image, deploy that instead.

Node.js Node.js package.json
Python Python pyproject.toml
Go Go go.mod
Rust Rust Cargo.toml
PHP PHP composer.json
Ruby Ruby Gemfile
🐳
Already have an image? Deploy it from Docker Hub or GHCR. It gets the same container, domain and SSL as a repo deploy.
No lock-in
04 // Questions

Questions about deploying with Rubuz.

Does a deploy interrupt live traffic? ↓

No. The new container starts beside the old one, and traffic switches only once it is running. If the build fails, nothing changes and the current version keeps serving.

Can I deploy to Kubernetes instead of a VPS? ↓

Yes. Rubuz runs managed Kubernetes clusters in your own DigitalOcean, Vultr or Linode account, with rolling deploys, high availability and autoscaling. Start on a VPS and add a cluster when one server is no longer enough; both stay in the same console.

Do I need to write a Dockerfile? ↓

No. Rubuz detects the runtime from files such as package.json, pyproject.toml or go.mod and builds the image on your server, so there is no Dockerfile to write. If you already publish an image, deploy it from Docker Hub or GHCR instead.

How do I connect a repository? ↓

Connect your GitHub account in Rubuz, then pick a repo and a branch. From then on, every push to that branch builds and ships.

Where does the build run? ↓

On your own server. Rubuz connects over SSH, builds the image there and runs it in a rootless Podman container. Nothing else is installed or left running.

What happens to my files when I redeploy? ↓

Anything your app writes to /data stays. Each app's /data directory survives every redeploy, so uploads and generated files are not lost.

What if a push breaks something? ↓

Roll back. Your app's deploy history lists the commits it has run; pick the last good one and Rubuz builds and deploys it again with the same zero-downtime swap. Your next push carries on from the branch as usual.

Push to deploy

Connect a repo. Push to ship.

Your first deploy runs on the server you already rent, with databases, SSL and backups handled for you.

✓ No card needed • 14-day free trial