macOS Linux DNS + HTTP + TCP
Install dnsvard
Stable local hostnames for development, without localhost port conflicts.
macOS and Linux installer script.
Upgrade path: dnsvard upgrade
Homebrew cask for macOS.
Upgrade path: brew upgrade --cask comment-slayer/tap/dnsvard
If macOS shows "dnsvard Not Opened", allow it in System Settings -> Privacy & Security (Scroll to the bottom and "Open Anyway"), then run dnsvard again.
Operate running stacks
List active workspaces, stop one workspace, or force-remove an entire project.
$ dnsvard ps
$ dnsvard stop workspace/feat-auth@myproj
$ dnsvard rm --force project/myproj
Browser / curl
|
| *.<suffix>
v
+-----------------------+
| system resolver |
| -> 127.0.0.1:1053 |
+-----------+-----------+
|
v
+-------+--------+
| dnsvard daemon |
| DNS + HTTP/TCP |
+---+--------+---+
| |
| DNS | HTTP/TCP proxy
v v
workspace IP containers
$ setup-worktree feat-1 feat-2 feat-3
worktree ready: sl/feat-1 => ../feat-1
worktree ready: sl/feat-2 => ../feat-2
worktree ready: sl/feat-3 => ../feat-3
$ dnsvard ps
runtime leases: 0
docker containers: 9
- project/breadsticks containers=9
- [running] workspace/feat-1@breadsticks domain=feat-1.breadsticks.test containers=3
- [running] container/feat-1-api-1 service=api
- [running] container/feat-1-frontend-1 service=frontend
- [running] container/feat-1-postgres-1 service=postgres
- [running] workspace/feat-2@breadsticks domain=feat-2.breadsticks.test containers=3
- [running] container/feat-2-api-1 service=api
- [running] container/feat-2-frontend-1 service=frontend
- [running] container/feat-2-postgres-1 service=postgres
- [running] workspace/feat-3@breadsticks domain=feat-3.breadsticks.test containers=3
- [running] container/feat-3-api-1 service=api
- [running] container/feat-3-frontend-1 service=frontend
- [running] container/feat-3-postgres-1 service=postgres
$ curl feat-1.breadsticks.test
frontend: sl/feat-1
$ curl feat-2.breadsticks.test
frontend: sl/feat-2
$ curl api.feat-2.breadsticks.test
{"branch":"sl/feat-2"}
$ psql -c 'select system_identifier from pg_control_system()' -h feat-1.breadsticks.test
7612711402309095461
$ psql -c 'select system_identifier from pg_control_system()' -h feat-2.breadsticks.test
7612711418985173029
$ cd ../feat-1
feat-1$ dnsvard config local set suffix bs
updated local suffix in ~/src/breadsticks/feat-1/dnsvard.yaml
feat-1$ dnsvard config local set host_pattern service-workspace-tld
updated local host_pattern in ~/src/breadsticks/feat-1/dnsvard.yaml
feat-1$ dnsvard ps workspace/feat-1@breadsticks
runtime leases: 0
docker containers: 3
- [running] workspace/feat-1@breadsticks domain=feat-1.bs containers=3
- [running] container/feat-1-api-1 service=api
- [running] container/feat-1-frontend-1 service=frontend
- [running] container/feat-1-postgres-1 service=postgres
feat-1$ curl feat-1.bs
frontend: sl/feat-1
feat-1$ dnsvard rm -f workspace/feat-1@breadsticks
removing containers: 3
done
feat-1$ dnsvard ps
runtime leases: 0
docker containers: 6
- project/breadsticks containers=6
- [running] workspace/feat-2@breadsticks domain=feat-2.breadsticks.test containers=3
- [running] container/feat-2-api-1 service=api
- [running] container/feat-2-frontend-1 service=frontend
- [running] container/feat-2-postgres-1 service=postgres
- [running] workspace/feat-3@breadsticks domain=feat-3.breadsticks.test containers=3
- [running] container/feat-3-api-1 service=api
- [running] container/feat-3-frontend-1 service=frontend
- [running] container/feat-3-postgres-1 service=postgres
feat-1$ dnsvard rm -f project/breadsticks
removing containers: 6
done
feat-1$ dnsvard ps
runtime leases: 0
docker containers: 0