Quick Deploy Guide¶
Get your entire homelab running in under 30 minutes.
Prerequisites¶
- Fresh Ubuntu 22.04 server (VM or bare metal)
- 8GB+ RAM
- 50GB+ storage
- Internet connection
- Domain name (optional but recommended)
Method 1: Fully Automated (5 minutes)¶
One command deploys everything:
This will: 1. Install Docker 2. Configure firewall 3. Clone repository 4. Deploy core services 5. Set up monitoring
What you get: - Traefik (reverse proxy) - Pi-hole (DNS/ad blocking) - Vaultwarden (password manager) - Portainer (Docker UI) - Watchtower (auto-updates) - Uptime Kuma (monitoring)
Total time: 5-10 minutes
Method 2: Step-by-Step (30 minutes)¶
Step 1: Install Docker (2 minutes)¶
Log out and back in, then verify:
Step 2: Clone Repository (1 minute)¶
Step 3: Deploy Core Services (10 minutes)¶
When prompted, enter: - Your domain name - Your email - Cloudflare API token (optional)
Step 4: Deploy Applications (15 minutes)¶
Choose what you want:
Media Server:
Cloud Storage:
Developer Tools:
Home Automation:
Step 5: Verify Everything (2 minutes)¶
You should see all your containers running!
Method 3: Manual Service-by-Service¶
Deploy exactly what you want, in order:
1. Traefik (MUST BE FIRST)¶
cd ~/homelab/Traefikv3
cp .env.example .env
nano .env # Edit DOMAIN, EMAIL, CF_API_TOKEN
docker compose up -d
2. Pi-hole¶
3. Vaultwarden¶
4. Portainer¶
5. Any Other Service¶
Quick Commands Reference¶
Check All Running Services¶
Check Logs¶
# Specific service
docker logs SERVICE_NAME
# Follow logs (live)
docker logs -f SERVICE_NAME
# Via compose
cd ~/homelab/SERVICE_NAME
docker compose logs -f
Restart Service¶
Stop Service¶
Update Service¶
Update All Services¶
cd ~/homelab
for dir in */; do
if [ -f "$dir/docker-compose.yml" ]; then
echo "Updating $dir"
cd "$dir"
docker compose pull
docker compose up -d
cd ..
fi
done
Resource Usage Quick Reference¶
After deploying, check resource usage:
# CPU and RAM usage
docker stats
# Disk usage
docker system df
# Detailed disk usage
du -sh ~/homelab/*
Typical resource usage:
Core Services (~4GB RAM):
- Traefik: ~50MB
- Pi-hole: ~200MB
- Vaultwarden: ~50MB
- Portainer: ~50MB
- Watchtower: ~20MB
- Authelia: ~100MB
Media Services (~4GB RAM):
- Jellyfin: ~500MB (2GB when streaming)
- Nextcloud: ~500MB
- Databases: ~200MB each
Total for 10-15 services: 6-8GB RAM
Troubleshooting Quick Fixes¶
Service Won't Start¶
# Check logs
docker logs SERVICE_NAME
# Check if port is in use
sudo netstat -tulpn | grep PORT
# Restart
docker restart SERVICE_NAME
Can't Access Web UI¶
# Check if running
docker ps | grep SERVICE_NAME
# Check Traefik
docker logs traefik | grep SERVICE_NAME
# Check DNS
nslookup service.yourdomain.com
Out of Disk Space¶
Container Keeps Restarting¶
# Check logs for errors
docker logs SERVICE_NAME
# Check .env file
cat ~/homelab/SERVICE_NAME/.env
# Check permissions
ls -la ~/homelab/SERVICE_NAME/
Common Deployment Patterns¶
Pattern 1: Minimal (1 VM, 8GB RAM)¶
Services: Traefik, Pi-hole, Vaultwarden, Portainer
Pattern 2: Media Server (1 VM, 16GB RAM)¶
Services: Core + Jellyfin
Pattern 3: Full Stack (1 VM, 32GB RAM)¶
Services: 20-30 services
Pattern 4: Multi-VM (Proxmox)¶
VM 1 (Core): Traefik, Pi-hole, Authelia
VM 2 (Media): Jellyfin, *arr stack
VM 3 (Apps): Nextcloud, Gitea, etc.
Post-Deployment Checklist¶
After deploying services:
- [ ] All containers running (
docker ps) - [ ] Can access Traefik dashboard
- [ ] Pi-hole blocking ads
- [ ] Vaultwarden accessible
- [ ] Portainer showing containers
- [ ] DNS configured
- [ ] Firewall configured
- [ ] Backups scheduled
- [ ] Monitoring set up
- [ ] Documentation updated with your IPs/domains
Getting Help¶
If something doesn't work:
- Check logs:
docker logs SERVICE_NAME - Verify config:
cat .env - Test connection:
curl -I http://localhost:PORT - Search issues: GitHub Issues
- Ask community: r/homelab or r/selfhosted
What's Next?¶
After basic deployment:
- Secure it:
- Deploy Authelia for 2FA
- Configure firewall rules
-
Set up VPN access
-
Monitor it:
- Deploy Uptime Kuma
- Set up Grafana + Prometheus
-
Configure alerts
-
Back it up:
- Schedule automated backups
- Test restore process
-
Document recovery steps
-
Share it:
- Post your setup on r/homelab
- Contribute improvements
- Help other beginners
Example: Complete Fresh Server to Running Homelab¶
# Start with fresh Ubuntu 22.04 server
# SSH in
# Install Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Log out and back in
exit
ssh user@server
# Deploy everything
curl -sSL https://raw.githubusercontent.com/SmartMur/homelab/main/scripts/install-homelab.sh | bash
# Enter your domain and email when prompted
# Wait 10 minutes
# Done! Access services at:
# - https://traefik.yourdomain.com
# - https://vault.yourdomain.com
# - https://portainer.yourdomain.com
Total time: 15 minutes
That's it! You now have a production-ready homelab.