feat: add dnsmasq DNS record admin UI
- store records in SQLite via built-in node:sqlite, no native deps - wrap DB reads in await io() so they stay out of the static shell - add CRUD pages backed by Server Actions with per-request data - generate managed config and restart container via Docker socket - add /resolve page to query dnsmasq for A and CNAME records - add Dockerfile and compose setup with shared config volume
This commit is contained in:
27 files changed
+1344
-130
No files matched your search
@@ -0,0 +1,38 @@
|
||||
services:
|
||||
# If you already run dnsmasq elsewhere, you can delete this service and simply mount the
|
||||
# dnsmasq-conf volume at /etc/dnsmasq.d inside your existing container.
|
||||
dnsmasq:
|
||||
image: jpillora/dnsmasq
|
||||
container_name: dnsmasq
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
ports:
|
||||
- "53:53/udp"
|
||||
volumes:
|
||||
- dnsmasq-conf:/etc/dnsmasq.d
|
||||
restart: unless-stopped
|
||||
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
DNSMASQ_ADMIN_DB_PATH: /data/dnsmasq-admin.db
|
||||
# Same mounted config directory dnsmasq reads from.
|
||||
DNSMASQ_ADMIN_CONF_PATH: /etc/dnsmasq.d/dnsmasq-admin.conf
|
||||
DNSMASQ_CONTAINER_NAME: dnsmasq
|
||||
DNSMASQ_ADMIN_DOCKER_SOCKET: /var/run/docker.sock
|
||||
# Composed DNS name of the dnsmasq service; use its LAN IP if it lives elsewhere.
|
||||
DNSMASQ_SERVER_IP: dnsmasq
|
||||
volumes:
|
||||
# Shared with the dnsmasq container so the generated config is visible to it.
|
||||
- dnsmasq-conf:/etc/dnsmasq.d
|
||||
# Holds the SQLite database — keep this volume or you lose all records.
|
||||
- app-data:/data
|
||||
# Used only to restart the dnsmasq container after an apply.
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
dnsmasq-conf:
|
||||
app-data:
|
||||
Reference in new issue
Block a user