multiversectl GitHub

Troubleshooting

Hostnames that do not resolve, ports in use, missing secrets and dev servers that answer 403.

Hostnames do not resolve

doctor warns: does not resolve; a router or local DNS server may be stripping private-IP answers. Some routers and resolvers drop DNS answers that point to private addresses. Compare your resolver with a public one:

$ dig +short app-u3.192-168-1-20.traefik.me
$ dig +short app-u3.192-168-1-20.traefik.me @1.1.1.1

Empty from the first and an address from the second means your resolver strips it. Allow private answers for that domain (often called DNS rebinding protection), point the device at another resolver, or use a domain you own.

Port 80 or 8001 is already in use

doctor fails with entrypoint web needs port 80, which is taken by another process when the proxy is not running yet. Find the owner and stop it:

$ ss -ltnp 'sport = :80'
$ multiversectl doctor

Or move the entrypoint in the manifest (spec.proxy.entrypoints); urls then prints the port.

A secret file is missing

new warns, and doctor 3 fails with secret <app>: missing <path>. Secrets listed under an app's secrets: are copied from the shared clone into each universe. Put the file in the clone, then run new again (existing checkouts are kept):

$ cp .env ~/acme/api/.env
$ multiversectl new 3
$ multiversectl doctor 3

A dev server answers 403

Many dev servers reject Host headers they do not know, and a universe answers on app-u3.<domain>. Allow the hostname, using the variable the manifest passes in, through an inline overlay (the environment variable is whatever your server reads):

apps:
  - name: web
    repo: web
    overlay:
      services:
        app-dev:
          environment:
            ALLOWED_HOSTS: "${APP_HOST}"

Also check that the hostname is the one multiversectl urls 3 prints, and that the service has the label or the single port that routes it.