StackPaaS

A lightweight, self-hosted PaaS that deploys apps from a git remote onto a Docker host via a gRPC daemon.

Architecture

StackPaaS ships as two binaries plus a bundled proxy:

Deploys are pull-on-demand: stackcube deploy myapp tells the daemon "deploy this app at the current commit," and the daemon fetches that commit from the app's configured git remote (e.g. GitHub) using its own deploy key. There's no push-driven hook on the daemon side.

Note: The daemon is macOS-only today (it integrates with launchd as a per-user LaunchAgent because Docker Desktop runs inside the user session). Apple Silicon is the supported host platform.

The app contract

An app repo deployed to StackPaaS must contain:

services:
  web:
    build: .
    env_file: .env
    ports:
      - "${HOST_PORT}:${APP_PORT}"

Containers are attached to the stackcube-net Docker network so the host's front proxy can route traffic to them by container name. stackcube scaffold generates a starter compose.yml + .env for you; stackcube lint checks an existing repo against this contract before deploy.

Choose your setup

There are three ways to bring up StackPaaS depending on what you're trying to do:

Client

You're a developer connecting to a daemon someone else is running. Install stackcube only, point it at the daemon, and start deploying apps that have already been authorized for your key.

Server

You're operating the host. Install stackcubed on the Mac that will run your apps, initialize it with your SSH key as the bootstrap admin, and run it as a launchd LaunchAgent so it survives reboot and crash.

Single machine

Local-dev or solo: both binaries on one Mac. Useful for trying StackPaaS out, building app templates, or running a personal PaaS on your own hardware.