A collection of Docker Compose stacks for a complete self-hosted home server environment — including networking setup, reverse proxy (Traefik), ad blocking (AdGuard Home), media management (Arrs & Jellyfin), and more.
This project provides ready-to-deploy Docker Compose configurations for a modular and privacy-focused self-hosted ecosystem.
Each stack is isolated but interconnected through shared Docker networks:
proxy— shared reverse proxy network (for Traefik & routed services)static— internal static IP network (for services that need fixed addresses)
Before deploying any containers, create the required Docker networks.
⚠️ Adjust the--subnetvalues to fit your environment and avoid conflicts with your LAN.
Use this network for services like DNS or VPN containers that benefit from stable internal IPs.
docker network create --driver=bridge --subnet=172.7.7.0/24 staticIf you’re using Traefik to manage HTTPS, routing, and certificates:
docker network create --driver=bridge --subnet=172.5.5.0/24 proxy- Create the Docker networks (from the prerequisites above).
- Deploy the stacks in the following sequence to ensure dependencies start correctly:
| Order | Stack | Notes |
|---|---|---|
| 1️⃣ | Traefik | Core reverse proxy. Must be running first. |
| 2️⃣ | AdGuard Home | DNS and ad-blocking service. Routed through Traefik. |
| 3️⃣ | Arrs Stack | Media management suite (Sonarr, Radarr, etc.). |
| 4️⃣ | Jellyfin | Media server. Depends on Jellyseerr (from Arrs stack). |
| 5️⃣ | Other stacks | Deploy any remaining apps in any order. |
- Bring up a stack from its directory:
docker compose up -dThis means the subnet you tried to create overlaps with an existing Docker network or your LAN.
-
Choose a different subnet range that doesn’t collide with your network or existing Docker networks.
-
Remove the conflicting networks if they are unused:
docker network rm <conflicting-network>
-
Recreate with new subnets:
docker network create --driver=bridge --subnet=172.8.8.0/24 static docker network create --driver=bridge --subnet=172.6.6.0/24 proxy
-
Ports 53 (DNS) and 80/443 (HTTP/HTTPS) may already be used by host services. Stop or reconfigure host services before binding these ports.
-
If Traefik manages TLS, ensure it has access to ACME/DNS challenge credentials (e.g., Cloudflare API token) if using DNS-based challenge.