Deploy from the CLI

Push-to-deploy, the Vercel way: hand nebula a GitHub URL and get back a running, HTTPS-secured service. No Docker, nothing to containerize.

Before you start

Install the CLI and log in once — see Getting started. Confirm you're authenticated:

$ nebula whoami
jeremy · Captain plan · 3 / 10 nebulae in use

Deploy a repository

Pass any GitHub URL. Nebulae provisions a fresh nebula, clones the repo, and starts it:

$ nebula deploy github.com/jeremy/hello-spaceport
→ provisioning nebula…
→ cloning repository…
→ config.spaceport detected → starting service
→ routing hello-spaceport.jeremy.spaceport.host
✓ live at https://hello-spaceport.jeremy.spaceport.host

From inside a repo's directory you can omit the URL — nebula deploy uses the current repo's origin.

How a deploy runs

Every project runs the same way: Nebulae clones it, runs a one-time build if one is needed, then launches your start command as a managed service — a supervised screen session that comes back on its own after a reboot or a redeploy. What gets run is detected from the repo:

If the repo has…Nebulae will…
config.spaceportRun it as a service: java -jar spaceport-latest.jar --start config.spaceport. No build step.
nebula.tomlRun build once (if set), then supervise start.
NeitherStop and ask you to add a nebula.toml.

nebula.toml

For anything that isn't a Spaceport app, drop a nebula.toml in the repo root. start is the long-running command Nebulae keeps alive and must bind $PORT; build is optional and runs once per deploy.

# nebula.toml
build = "npm ci && npm run build"
start = "node server.js"   # must listen on $PORT

Environment variables

Nebulae injects $PORT (the port your service must bind) automatically. Set your own with nebula env:

$ nebula env set STRIPE_KEY=sk_live_… --nebula hello-spaceport
$ nebula env list --nebula hello-spaceport

Changes take effect on the next deploy.

Multiple projects on one nebula

By default each nebula deploy creates its own single-project box. To run several projects on the same nebula, target it by name with --nebula — each project gets its own port and subdomain:

$ nebula deploy github.com/jeremy/api
✓ new nebula 'api' · https://api.jeremy.spaceport.host
$ nebula deploy github.com/jeremy/web --nebula api
✓ added 'web' to nebula 'api' · https://web.api.jeremy.spaceport.host

Redeploying

Run nebula deploy again to ship the latest commit to the same project — the URL stays put:

$ nebula deploy --nebula hello-spaceport
✓ redeployed · service restarted in 4s
Tip: want a memorable address? Attach a custom domain once and every redeploy keeps it. See Custom domains.