Deployment
From a folder to a live URL in one command. Hub packs the code, builds it on your org's host, starts the services, checks the result and returns a URL.
Deploy from where the work already lives.
Local folderInside a git repository Hub follows your ignore rules; outside one it skips node_modules.
$ hub deploy ./customer-portal
Hub deploys the branch head and follows every new push.
$ hub deploy --git acme/customer-portal --branch main
One subfolder, without splitting the repository.
$ hub deploy --git acme/platform --path apps/admin --name admin
Use the app shape you already have. Hub takes the first match:
- 1
A compose file runs as a multi-service project.
- 2
A Dockerfile is used as it is.
- 3
A Node app with a start script is built and started.
- 4
A front end with a build script is built and served as static output.
- 5
A folder with
index.htmlis served as a static site.
For the Node, front-end and static kinds, Hub adds the Dockerfile to the upload. Your folder is not changed.
Bring the normal building blocks. A Dockerfile when the app needs a custom image, Compose when it has several services.
services: web: build: . ports: ["8080:3000"] # the service Hub puts the URL in front of environment: DATABASE_URL: postgres://app:${DB_PASSWORD}@db:5432/app depends_on: [db] db: image: postgres:16-alpine environment: POSTGRES_USER: app POSTGRES_PASSWORD: ${DB_PASSWORD} # from hub env set, never in the file POSTGRES_DB: app volumes: - dbdata:/var/lib/postgresql/data volumes: dbdata:
Each instance runs as its own project, so its services and named volumes stay together, and the data outlives deploys, rollbacks, restarts and env changes.
hub exec crm --service db -- psql -U app app opens that database. A compose file that reaches for the host, a Docker socket or a file outside the folder is refused before anything builds.
The release is not live until the app answers. Hub prints the deploy as it moves through its stages.
$ hub deploy
Deploying crm (node, port 3000) to acme
Uploading 0.4 MB
Building... 12s
Starting...
Live at https://crm.acme.myhub.host
For web apps, Hub waits for an HTTP response from the public service. For worker-only projects, it checks that every service stays running.
A failed release prints the last lines of its build log and the reason. The release that was serving keeps serving.
Connect once. Keep shipping with normal pushes.
A connected instance records its repository, branch and path. New commits on that branch deploy on their own, and a check every ten minutes catches what a webhook missed.
hub git crm --watch off turns that off when an environment should move only by an explicit redeploy.
The useful commands do not stop at deploy.
Environment, status, logs, shell, releases and rollback are on the Get started page, and the same actions are on the dashboard. What the host is and where its limits are: Private host.