Overview
Production deployment usesunoverse deploy, which reads your groundβs rendered configuration and runs Ansible playbooks to install and configure services on your VM.
Prerequisites
- Ansible installed locally (
pip install ansible). This is the one thing the CLI does not install for you, and the check lands late in a first deploy, so do it up front. - Terraform and your cloud CLI are handled:
unoverse deployinstalls Terraform when it is missing, and offers to installdoctl.
The cloud API token
Deploying creates infrastructure in your cloud account: server, load balancer, DNS, Postgres, Redis. That takes one credential, asked for once, whenunoverse deploy first runs:
- Generate it at cloud.digitalocean.com/account/api/tokens
- Scope: Full Access (Read Only cannot create infrastructure)
- It stays on your machine and is never shared
unoverse create is different and already
done: your Unoverse admin issued it, and it only pulls platform images.)
Quick Deploy (Single VM)
d prints the full technical plan, and the saved plan is what
runs. Then it installs the platform on what was built, migrations included.
Every deploy after that is the same command, and it does the same comparison: any pending
ground changes are planned and applied first, then the latest images ship.
What the Rendered Configuration Contains
You never write it (Terraform renders it; deploy places it on the server), but for the curious it is the same format as.env, plus:
.env.
Runbooks
For detailed step-by-step guides, see the Runbooks:Deploying Your Own Work
Content does not rideunoverse deploy (that moves platform images only). Your work reaches the server three ways:
- Studio publish: publishes straight to the universe over the API. It lands in the universeβs database and needs no deploy, no restart.
- Marketplace items: installed per item from Studioβs Marketplace tab; database-driven, no restart.
Start on a Test Domain, Swap Later
The domain is a Terraform input, not a commitment. Deploy today under any domain you control (even a delegated subdomain likeacme-poc.yourcompany.com) and move to the real one when it exists. Nothing in the universeβs data references the hostname.
The swap:
- Change
domaininterraform.tfvars, thenterraform apply. A new certificate and DNS records are created; the VM, database, Redis, and everything in them are untouched. - Redeploy: delete
.env.productionat the repo root and rununoverse deploy, it re-renders from the applied ground. - Update your IdP: add the new origins and callback URLs in Auth0 or Cognito. This is the only manual step, and the one people forget.
http://IP:3001 and http://IP:4105 prove a deployment is healthy. You just cannot log in until HTTPS exists, because OIDC providers refuse plain-IP redirect flows.

