multiversectl GitHub

Reach a universe

From another device, from a domain you own, from a shell, and from a database client.

Reach a universe from your phone

$ multiversectl urls 3
http://app-u3.192-168-1-20.traefik.me
http://api-u3.192-168-1-20.traefik.me:8001

Open a printed URL on any device on the same network. With expose: lan (the default) and domain: auto the hostnames are <host>-u3.<dashed-lan-ip>.traefik.me, a public wildcard DNS name that resolves to this machine, so nothing is installed on the device. If a name does not resolve, see Troubleshooting.

To keep a project on your machine instead, set expose: local: the proxy then publishes on 127.0.0.1 only, so nothing off the box can connect, and domain: auto becomes <host>-u3.localhost, which browsers resolve themselves without asking any DNS server. Worth preferring unless another device has to open a universe — a dev stack's mail catcher, debug pages and seeded data are otherwise readable by anyone on the network.

Point a workspace at a domain you own

Create a wildcard DNS record, *.dev.example.test, pointing at this machine, then replace domain: auto:

# multiverse.yaml
spec:
  domain: dev.example.test   # app-u3.dev.example.test

The domain is stored in a universe when it is created: recreate existing universes (rm, new) to pick up a change.

Reach a universe's database

No universe publishes a host port, so reach the database inside its own container. exec lands in the running one and streams straight to your terminal:

# a client in universe 3's api database
$ multiversectl exec 3 api --service db -- psql -U postgres
# a one-off container instead, when the app itself need not be up
$ multiversectl run 3 api -- python manage.py migrate

Each app is its own compose project, named <workspace>-u<universe>-<app>, so docker compose -p acme-u3-api ps works too.

Need a host port anyway? See Keep a service's published port.