Run your own controller with zero-ui in 5 minutes.

In some case, you have to build your own controller without any connection to public planets. I have built an container based zerotier controller with zero-ui web interface. You can clone, modify config/planets.json in the repo, then build you own private zerotier controller.

1. Customize controller planets settings

Modify patch/planets.json as you needed, then build the docker image.

  "planets": [
      "Location": "Somewhere", // Where this planet located
      "Identity": "a4de2130c2:0:ab5257bb05cd2fb8044fe26483f6d27b57124ca7b350fb3e0f07d405c68c4416094dbc836bf62ed483072501aa3384dff3c74ac50050c1bfbb1dc657001ef6a1", // The planet's public key
      "Endpoints": [""] // The list of endpoints in 'ip/port' format. IPv6 is supportted

2. Build docker image

Build docker image in the repo.

docker build --force-rm . -t sbilly/zerotier-controller:latest

3. Run you own controller

You can run your own controller. Here are some examples.

# Run with default settings
docker run --rm -ti -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest

# Run with custom envirments settings
docker run --rm -ti -e ZU_SECURE_HEADERS=false -e ZU_CONTROLLER_ENDPOINT= -e ZU_DEFAULT_USERNAME=admin -e ZU_DEFAULT_PASSWORD=zero-ui -p 4000:4000 -p 3000:3000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest

# Run with docker volumes
docker run --rm -ti -v `pwd`/config/identity.public:/app/config/identity.public -v `pwd`/config/identity.secret:/app/config/identity.secret -v `pwd`/config/authtoken.secret:/app/config/authtoken.secret -p 3000:3000 -p 4000:4000 -p 9993:9993 -p 9993:9993/udp sbilly/zerotier-controller:latest
  • The default username/password (admin/zero-ui) is defined by ZU_DEFAULT_USERNAME and ZU_DEFAULT_PASSWORD.
  • The environment variable ZT_PRIMARY_PORT is ZeroTierOne’s primaryPort in local.conf.
  • Other environment variables please check zero-ui