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:8001Open 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.