Self-host AdGuard Home
A single-binary, network-wide DNS ad and tracker blocker with a modern UI, built-in DoH/DoT encrypted DNS, and per-client rules out of the box. The polished alternative to Pi-hole.
Key facts
Pick AdGuard Home when you want DNS-level blocking with encrypted DNS built in: one GPL-3.0 Go binary that resolves over DoH, DoT, DoQ or DNSCrypt upstream and can serve them too, with per-client rules, parental and safe-search filters and an optional DHCP server, all configured from a web UI after a one-page wizard. The README's own comparison lists what Pi-hole needs extra software for. It is still a 0.107.x release stream — solid in practice, but read the changelog when you pull `latest`.
What you need
- Any VPS with at least 512 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Paid link — we earn a commission if you shop through it.
Install with Docker Compose
Save this as compose.yml and run docker compose up -d:
# AdGuard Home — network-wide DNS filtering
services:
adguardhome:
image: adguard/adguardhome:latest
ports: ["53:53/tcp", "53:53/udp", "3000:3000/tcp", "80:80/tcp"]
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
restart: unless-stopped
# On Ubuntu, free port 53 first (adguard-dns.io/kb → AdGuard Home → Docker → "resolved daemon"):
# sudo mkdir -p /etc/systemd/resolved.conf.d
# printf '[Resolve]\nDNS=127.0.0.1\nDNSStubListener=no\n' | sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf
# sudo mv /etc/resolv.conf /etc/resolv.conf.backup && sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
# sudo systemctl reload-or-restart systemd-resolved
# docker compose up -d → http://SERVER_IP:3000 for the first-run wizardWhat you take on
AdGuard Home's Docker notes and README are candid about the limits of the approach and the container: