Install
Install Patchvia DNS with Docker.
You need Docker with the Compose plugin and a host where port 53 is free. Install takes about five commands; the console is then on port 3000 and the DNS server answers on port 53.
What you need
Docker with the Compose plugin (`docker compose version` should print a version), and a host with port 53 free over UDP and TCP. You download two small files; you do not need git, Node.js or the source code.
- Docker Engine with the Compose plugin
- Port 53 (UDP and TCP) free on the host
- Port 3000 for the console, and port 8081 for the API, which stays on localhost unless you change API_BIND
1. Install
Download the compose file and the environment template into a new folder. Set two values in the environment file: ADMIN_PASSWORD (at least 10 characters, used only the first time) and SESSION_SECRET (at least 32 characters, random). Then pull the published images and start both services.
$ mkdir patchvia && cd patchvia$ curl -fsSLO https://raw.githubusercontent.com/patchvia/patchvia/main/deploy/docker-compose.yml$ curl -fsSL -o .env https://raw.githubusercontent.com/patchvia/patchvia/main/deploy/.env.example$ nano .env # set ADMIN_PASSWORD and SESSION_SECRET$ docker compose pull$ docker compose up -d --no-build2. Check it runs
Open the console on port 3000 and sign in as admin with the password you set. To check DNS, create a zone in the console, add a record to it, then ask the server for that record. The example uses localhost; use the server’s address from another machine.
$ docker compose ps$ dig @127.0.0.1 www.example.comThe images
Both images are public on GitHub’s container registry, built for linux/amd64 and linux/arm64. You can pull them without logging in, and read their package pages for the tags.
3. Update
Pull the newer images and restart. Your data stays in the dns-data volume.
$ docker compose pull$ docker compose up -d --no-buildPin a version
The default tag is latest. To stay on one release, set PATCHVIA_TAG in .env (for example 0.1.0, or a commit as sha-<short commit>), then pull and start again.
$ PATCHVIA_TAG=0.1.0 # in .env$ docker compose pull$ docker compose up -d --no-buildRun Patchvia DNS on Provelox
Provelox, another Floms product, runs Compose projects on your own server and gives each public service a domain with HTTPS. Install Provelox from its website, then paste this project into New → Compose project. It asks for the variables declared at the top and refuses to deploy without the required ones.
x-provelox: variables: ADMIN_PASSWORD: { secret: true, minLength: 10, label: Admin password (first start only) } SESSION_SECRET: { secret: true, minLength: 32, label: Session secret } DEFAULT_NS: { label: Default nameservers } services: dns-server: image: ghcr.io/patchvia/dns-server:latest restart: unless-stopped ports: - "53:53/udp" - "53:53/tcp" environment: ADMIN_PASSWORD: ${ADMIN_PASSWORD:?ADMIN_PASSWORD is required, at least 10 characters} DEFAULT_NS: ${DEFAULT_NS:-} volumes: - dns-data:/data dns-console: image: ghcr.io/patchvia/dns-console:latest restart: unless-stopped depends_on: [dns-server] environment: SESSION_SECRET: ${SESSION_SECRET:?SESSION_SECRET is required, at least 32 characters} DNS_API_URL: http://dns-server:8081 x-provelox: expose: true port: 3000 volumes: dns-data:If port 53 is taken
On many Ubuntu servers systemd-resolved already listens on port 53, so the DNS server cannot start. The deployment guide in the repository explains how to free the port, which firewall rules to add, and how to undo the change.
Read the full self-hosting guide
Ports, backups, the cluster settings and the firewall rules are on the self-hosting page.