Skip to main content
Airship’s control plane is one container plus Postgres. If “whoever administers the hosted service can see our job metadata” is not an acceptable answer, run it yourself: the same code, your infrastructure, your sealing key.

Two different clouds

These pages are about where Airship itself runs. Where runner machines run is a separate choice, made by connecting a credential — see Connecting a cloud. The two are independent: a control plane on Cloud Run can launch EC2 instances, and the reverse.
The control plane needs no cloud permissions of its own. It launches machines with the credentials you connect in the dashboard, never with the identity of the platform it runs on.

What you need

The shape of a deployment

1

Create the GitHub App

Callback URL, webhook URL, permissions and event subscriptions. See GitHub App.
2

Provision Postgres and run the migration

The image ships a migrate entrypoint. Run it once per release, before the new API starts.
3

Generate a credentials key and keep it safe

This key is the only thing that can open the sealed cloud credentials. Losing it loses every connected cloud. Back it up as you would a root key. Configuration
4

Run the API, and the dashboard pointed at it

Several API replicas are fine: launchers claim runners with row locks, and the reconciler elects a leader through a database advisory lock.
5

Install your app and connect a cloud

From then on it is the ordinary Quickstart.

Running it

API documentation is served at /docs on the API itself, and /healthz answers for your load balancer.
The image embeds the cache proxy for linux/amd64 and linux/arm64. A build of the API alone leaves it out, and cache-enabled runners then run their jobs without acceleration — recorded as cache.unavailable on Events rather than failing.

Where to run it

Deployment guides

Container platform plus managed Postgres, or a single server with Docker Compose and automatic TLS.

Configuration reference

Every environment variable, what is required, and what must never be set in production.

What it does not need