A cross-platform home media server with monitoring, metrics, and secure remote access
Features • Architecture • Quick Start • Documentation • Screenshots
|
|
|
|
Text Diagram
┌─────────────────────────────────────────────────────────────────────────────┐
│ HOME SERVER │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Jellyfin │ │ Prometheus │ │ Grafana │ │ WireGuard │ │
│ │ :8096 │ │ :9090 │ │ :3000 │ │ :51820 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ │ ┌──────┴──────┐ │ │ │
│ │ │ Loki │───────────┘ │ │
│ │ │ :3100 │ │ │
│ │ └──────┬──────┘ │ │
│ │ │ │ │
│ ┌──────┴──────────────────┴─────────────────────────────────────┴──────┐ │
│ │ System Layer │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ rclone │ │ Node Export │ │ cAdvisor │ │ Promtail │ │ │
│ │ │ mount │ │ :9100 │ │ :8080 │ │ (logs) │ │ │
│ │ └──────┬──────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────┼────────────────────────────────────────────────────────────┘ │
│ │ │
└────────────┼───────────────────────────────────────────────────────────────┘
│
▼
┌─────────────┐
│ Seedbox │
│ (SFTP) │
└─────────────┘
| Platform | Requirements |
|---|---|
| Linux | curl, git, Docker (optional for monitoring) |
| macOS | Homebrew, Docker Desktop (optional for monitoring) |
# Clone the repository
git clone https://github.com/yourusername/home-server.git
cd home-server
# Make installer executable
chmod +x install.sh
# Run the interactive installer
./install.sh./install.sh --full # Full setup (Jellyfin + Seedbox + Monitoring + VPN)
./install.sh --media # Media server only
./install.sh --monitoring # Monitoring stack only
./install.sh --vpn # VPN setup only
./install.sh --health # System health checkhome-server/
├── install.sh # Main interactive installer
├── README.md
│
├── scripts/
│ ├── common/ # Shared utilities
│ │ ├── colors.sh # Terminal colors
│ │ ├── utils.sh # Helper functions
│ │ ├── health.sh # Health check
│ │ └── monitoring.sh # Monitoring deployment
│ │
│ ├── linux/ # Linux-specific scripts
│ │ ├── setup.sh
│ │ ├── rclone.sh
│ │ └── vpn.sh
│ │
│ └── macos/ # macOS-specific scripts
│ ├── setup.sh
│ ├── rclone.sh
│ └── vpn.sh
│
├── monitoring/ # Docker-based monitoring stack
│ ├── docker-compose.yml
│ ├── prometheus/
│ ├── grafana/
│ ├── loki/
│ └── promtail/
│
├── vpn/
│ ├── wireguard/ # Configuration templates
│ └── clients/ # Generated client configs
│
├── config/
│ └── .env.example
│
└── docs/
├── LINUX.md
├── MACOS.md
└── VPN.md
The monitoring stack includes pre-configured Grafana dashboards:
| Dashboard | Metrics |
|---|---|
| System Overview | CPU, Memory, Disk, Network |
| Container Metrics | Docker container stats via cAdvisor |
| Logs Explorer | Centralized logs from all services |
| Alerts | Active and historical alerts |
| Service | URL | Default Credentials |
|---|---|---|
| Grafana | http://<server-ip>:3000 |
admin / admin |
| Prometheus | http://<server-ip>:9090 |
— |
| Alertmanager | http://<server-ip>:9093 |
— |
| Jellyfin | http://<server-ip>:8096 |
Setup on first access |
WireGuard provides secure, high-performance VPN access to your home server from anywhere.
Key Features:
- Fast — significantly faster than OpenVPN
- Secure — modern cryptography (Curve25519, ChaCha20, Poly1305)
- Mobile Ready — QR codes for easy phone setup
- Split Tunnel — route only home network traffic through VPN
- Run VPN setup on server:
./install.sh --vpn - Generate client config
- Scan QR code with WireGuard app (iOS/Android)
- Or import
.conffile on desktop
| Platform | App |
|---|---|
| iOS | WireGuard |
| Android | WireGuard |
| macOS | WireGuard |
| Windows | WireGuard |
| Linux | apt install wireguard |
| Alert | Severity | Condition |
|---|---|---|
| High CPU | Warning | CPU > 80% for 5min |
| High Memory | Warning | Memory > 85% for 5min |
| Disk Space Low | Warning | Disk > 85% full |
| Disk Space Critical | Critical | Disk > 95% full |
| Host Down | Critical | Target unreachable for 1min |
| Seedbox Mount Down | Critical | Mount unavailable for 2min |
Copy and customize the example config:
cp config/.env.example config/.env| Variable | Description | Default |
|---|---|---|
SEEDBOX_HOST |
Seedbox SFTP hostname | — |
SEEDBOX_PORT |
Seedbox SFTP port | 22 |
GRAFANA_ADMIN_PASSWORD |
Grafana admin password | admin |
VPN_SUBNET |
WireGuard VPN subnet | 10.200.200 |
VPN_PORT |
WireGuard UDP port | 51820 |
./install.sh --health# View monitoring logs
cd monitoring && docker compose logs -f
# Restart monitoring stack
cd monitoring && docker compose restart
# Check rclone mount (Linux)
systemctl status rclone-seedbox
# Check rclone mount (macOS)
launchctl list | grep rclone
# WireGuard status
sudo wg show- Change default passwords — especially Grafana admin
- Keep services updated — regular
docker compose pull - Firewall — only expose necessary ports
- VPN — use VPN for remote access instead of exposing services
- Backups — regular backups of Grafana dashboards and configs
ufw allow 22/tcp # SSH
ufw allow from 192.168.0.0/16 to any port 8096 # Jellyfin (local only)
ufw allow 51820/udp # WireGuard
ufw default deny incomingContributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.