|
| 1 | +# Home Network Setup |
| 2 | + |
| 3 | +A centralized Docker Compose configuration for managing your home network services, including AdGuard, Syncthing, Jellyfin, and Homepage, all accessible through a unified dashboard with Traefik as the reverse proxy. |
| 4 | + |
| 5 | +## Services Included |
| 6 | + |
| 7 | +- **Homepage** - Unified dashboard to access all services |
| 8 | +- **AdGuard Home** - DNS ad-blocker and network-wide tracker blocker |
| 9 | +- **Syncthing** - Continuous file synchronization |
| 10 | +- **Jellyfin** - Media server for movies, TV shows, and music |
| 11 | +- **Traefik** - Reverse proxy and load balancer (no need to remember port numbers!) |
| 12 | + |
| 13 | +## Prerequisites |
| 14 | + |
| 15 | +- Docker and Docker Compose installed on your server |
| 16 | +- Basic knowledge of Docker and networking |
| 17 | +- A domain name (optional - can use local domain like `home.local`) |
| 18 | + |
| 19 | +## Quick Start |
| 20 | + |
| 21 | +1. **Clone or download this repository** to your server |
| 22 | + |
| 23 | +2. **Run the setup script** (optional but recommended): |
| 24 | + ```bash |
| 25 | + ./setup.sh |
| 26 | + ``` |
| 27 | + This will create necessary directories and help you get started. |
| 28 | + |
| 29 | +3. **Create environment file** (if not done by setup script): |
| 30 | + ```bash |
| 31 | + cp env.example .env |
| 32 | + ``` |
| 33 | + Edit `.env` and set your domain, timezone, and media path: |
| 34 | + ```bash |
| 35 | + DOMAIN=home.local |
| 36 | + TZ=America/New_York |
| 37 | + MEDIA_PATH=/path/to/your/media |
| 38 | + ``` |
| 39 | + |
| 40 | +4. **Start all services**: |
| 41 | + ```bash |
| 42 | + docker compose up -d |
| 43 | + ``` |
| 44 | + |
| 45 | +5. **Configure DNS/hosts file**: |
| 46 | + |
| 47 | + For local network access, add entries to your router's DNS or your device's `/etc/hosts` file: |
| 48 | + ``` |
| 49 | + 192.168.1.100 home.local |
| 50 | + 192.168.1.100 homepage.home.local |
| 51 | + 192.168.1.100 adguard.home.local |
| 52 | + 192.168.1.100 syncthing.home.local |
| 53 | + 192.168.1.100 jellyfin.home.local |
| 54 | + 192.168.1.100 traefik.home.local |
| 55 | + ``` |
| 56 | + Replace `192.168.1.100` with your server's IP address. |
| 57 | + |
| 58 | +## Accessing Services |
| 59 | + |
| 60 | +Once everything is running, you can access: |
| 61 | + |
| 62 | +- **Homepage Dashboard**: `https://homepage.home.local` or `https://home.local` |
| 63 | +- **AdGuard Home**: `https://adguard.home.local` |
| 64 | +- **Syncthing**: `https://syncthing.home.local` |
| 65 | +- **Jellyfin**: `https://jellyfin.home.local` |
| 66 | +- **Traefik Dashboard**: `https://traefik.home.local:8080` (or via Homepage) |
| 67 | + |
| 68 | +All services are also accessible through the Homepage dashboard, so you don't need to remember individual URLs! |
| 69 | + |
| 70 | +## Initial Setup for Each Service |
| 71 | + |
| 72 | +### AdGuard Home |
| 73 | + |
| 74 | +1. Access `https://adguard.home.local` (or `http://YOUR_SERVER_IP:3001`) |
| 75 | +2. Follow the initial setup wizard |
| 76 | +3. Configure your DNS settings (typically port 53) |
| 77 | +4. Set up admin credentials |
| 78 | + |
| 79 | +### Syncthing |
| 80 | + |
| 81 | +1. Access `https://syncthing.home.local` (or `http://YOUR_SERVER_IP:8384`) |
| 82 | +2. Set up your first folder to sync |
| 83 | +3. Add devices you want to sync with |
| 84 | +4. Configure sharing settings |
| 85 | + |
| 86 | +### Jellyfin |
| 87 | + |
| 88 | +1. Access `https://jellyfin.home.local` (or `http://YOUR_SERVER_IP:8096`) |
| 89 | +2. Complete the initial setup wizard |
| 90 | +3. Add your media libraries |
| 91 | +4. Configure users and permissions |
| 92 | + |
| 93 | +### Homepage |
| 94 | + |
| 95 | +1. Access `https://homepage.home.local` (or `http://YOUR_SERVER_IP:3000`) |
| 96 | +2. The services should already be configured in `homepage/config/services.yaml` |
| 97 | +3. Customize the appearance in `homepage/config/settings.yaml` |
| 98 | + |
| 99 | +## Configuration Files |
| 100 | + |
| 101 | +- `docker-compose.yml` - Main service definitions |
| 102 | +- `.env` - Environment variables (create from `.env.example`) |
| 103 | +- `homepage/config/` - Homepage configuration files |
| 104 | +- `traefik/letsencrypt/` - SSL certificates (auto-generated) |
| 105 | + |
| 106 | +## Ports Used |
| 107 | + |
| 108 | +- **80** - HTTP (Traefik) |
| 109 | +- **443** - HTTPS (Traefik) |
| 110 | +- **53** - DNS (AdGuard) |
| 111 | +- **3000** - Homepage (direct access) |
| 112 | +- **3001** - AdGuard Web UI (direct access) |
| 113 | +- **8096** - Jellyfin (direct access) |
| 114 | +- **8384** - Syncthing (direct access) |
| 115 | +- **8080** - Traefik Dashboard (direct access) |
| 116 | + |
| 117 | +## SSL Certificates |
| 118 | + |
| 119 | +Traefik is configured to automatically obtain SSL certificates from Let's Encrypt. For local networks: |
| 120 | + |
| 121 | +- If using a real domain, ensure it points to your server and ports 80/443 are accessible |
| 122 | +- If using a local domain (like `home.local`), you may need to use self-signed certificates or disable SSL verification in your browser |
| 123 | + |
| 124 | +## Troubleshooting |
| 125 | + |
| 126 | +### Services not accessible via Traefik |
| 127 | + |
| 128 | +1. Check that services are running: `docker compose ps` |
| 129 | +2. Verify Traefik labels are correct in `docker-compose.yml` |
| 130 | +3. Check Traefik logs: `docker compose logs traefik` |
| 131 | + |
| 132 | +### DNS not working |
| 133 | + |
| 134 | +1. Ensure AdGuard is configured correctly |
| 135 | +2. Check that port 53 is not blocked by firewall |
| 136 | +3. Verify your router's DNS settings point to your server |
| 137 | + |
| 138 | +### Can't access services |
| 139 | + |
| 140 | +1. Check firewall rules allow ports 80, 443, and service-specific ports |
| 141 | +2. Verify DNS/hosts file entries are correct |
| 142 | +3. Try accessing services directly via IP:port (e.g., `http://192.168.1.100:3000`) |
| 143 | + |
| 144 | +## Updating Services |
| 145 | + |
| 146 | +To update all services to their latest versions: |
| 147 | + |
| 148 | +```bash |
| 149 | +docker compose pull |
| 150 | +docker compose up -d |
| 151 | +``` |
| 152 | + |
| 153 | +## Stopping Services |
| 154 | + |
| 155 | +To stop all services: |
| 156 | + |
| 157 | +```bash |
| 158 | +docker compose down |
| 159 | +``` |
| 160 | + |
| 161 | +To stop and remove all volumes (⚠️ **WARNING**: This deletes all data): |
| 162 | + |
| 163 | +```bash |
| 164 | +docker compose down -v |
| 165 | +``` |
| 166 | + |
| 167 | +## Backup |
| 168 | + |
| 169 | +Important data is stored in the following directories: |
| 170 | +- `adguard/` - AdGuard configuration |
| 171 | +- `syncthing/` - Syncthing configuration and data |
| 172 | +- `jellyfin/` - Jellyfin configuration |
| 173 | +- `homepage/config/` - Homepage configuration |
| 174 | + |
| 175 | +Regularly backup these directories to preserve your settings. |
| 176 | + |
| 177 | +## Security Notes |
| 178 | + |
| 179 | +⚠️ **Important**: This setup does not include authentication by default. For security: |
| 180 | + |
| 181 | +1. Deploy behind a VPN for remote access |
| 182 | +2. Use a reverse proxy with authentication (e.g., Authelia, Authentik) |
| 183 | +3. Keep services updated regularly |
| 184 | +4. Use strong passwords for all services |
| 185 | +5. Consider firewall rules to restrict access |
| 186 | + |
| 187 | +## License |
| 188 | + |
| 189 | +This configuration is provided as-is for personal use. |
| 190 | + |
| 191 | +## Contributing |
| 192 | + |
| 193 | +Feel free to submit issues or pull requests if you have improvements or find bugs. |
| 194 | + |
0 commit comments