6.8 KiB
AI-Homelab Resource Limits Template
Modern deploy.resources configuration for Docker Compose
Based on researched typical usage patterns for homelab services
These are conservative defaults - monitor and adjust as needed
===========================================
SERVICE TYPE TEMPLATES
===========================================
LIGHTWEIGHT SERVICES (Reverse proxy, auth, DNS, monitoring)
lightweight_service: deploy: resources: limits: cpus: '0.25' # 25% of 1 CPU core memory: 128M # 128MB RAM pids: 256 # Max processes reservations: cpus: '0.10' # Reserve 10% of 1 CPU memory: 64M # Reserve 64MB RAM
STANDARD WEB SERVICES (Dashboards, simple web apps)
web_service: deploy: resources: limits: cpus: '0.50' # 50% of 1 CPU core memory: 256M # 256MB RAM pids: 512 # Max processes reservations: cpus: '0.25' # Reserve 25% of 1 CPU memory: 128M # Reserve 128MB RAM
DATABASE SERVICES (PostgreSQL, MariaDB, Redis)
database_service: deploy: resources: limits: cpus: '1.0' # 1 CPU core memory: 1G # 1GB RAM (for caching) pids: 1024 # Max processes reservations: cpus: '0.50' # Reserve 0.5 CPU memory: 512M # Reserve 512MB RAM
MEDIA SERVERS (Jellyfin, Plex - without GPU)
media_server: deploy: resources: limits: cpus: '2.0' # 2 CPU cores (for transcoding) memory: 2G # 2GB RAM pids: 2048 # Max processes reservations: cpus: '1.0' # Reserve 1 CPU memory: 1G # Reserve 1GB RAM
DOWNLOADERS (qBittorrent, Transmission)
downloader_service: deploy: resources: limits: cpus: '1.0' # 1 CPU core memory: 512M # 512MB RAM pids: 1024 # Max processes reservations: cpus: '0.50' # Reserve 0.5 CPU memory: 256M # Reserve 256MB RAM
HEAVY APPLICATIONS (Nextcloud, Gitea with users)
heavy_app: deploy: resources: limits: cpus: '1.5' # 1.5 CPU cores memory: 1G # 1GB RAM pids: 2048 # Max processes reservations: cpus: '0.75' # Reserve 0.75 CPU memory: 512M # Reserve 512MB RAM
MONITORING STACK (Prometheus, Grafana, Loki)
monitoring_service: deploy: resources: limits: cpus: '0.75' # 0.75 CPU cores memory: 512M # 512MB RAM pids: 1024 # Max processes reservations: cpus: '0.25' # Reserve 0.25 CPU memory: 256M # Reserve 256MB RAM
===========================================
SPECIFIC SERVICE RECOMMENDATIONS
===========================================
Core Infrastructure Stack
traefik: # Reverse proxy - handles SSL/TLS/crypto template: lightweight_service notes: "CPU intensive for SSL handshakes, low memory usage"
authelia: # Authentication service template: lightweight_service notes: "Very low resource usage, mostly memory for sessions"
duckdns: # DNS updater template: lightweight_service notes: "Minimal resources, mostly network I/O"
Infrastructure Stack
pihole: # DNS ad blocker template: lightweight_service notes: "Memory intensive for blocklists, low CPU"
dockge: # Docker management UI template: web_service notes: "Light web interface, occasional CPU spikes"
glances: # System monitoring template: web_service notes: "Low resource monitoring tool"
Dashboard Stack
homepage: # Status dashboard template: web_service notes: "Static content, very light"
homarr: # Dashboard with widgets template: web_service notes: "JavaScript heavy but still light"
Media Stack
jellyfin: # Media server template: media_server notes: "CPU intensive for transcoding, high memory for caching"
calibre_web: # Ebook manager template: web_service notes: "Light web app with database"
VPN Stack
qbittorrent: # Torrent client template: downloader_service notes: "Network I/O heavy, moderate CPU for hashing"
Home Assistant Stack
home_assistant: # Smart home hub template: heavy_app notes: "Python app with many integrations, moderate resources"
esphome: # IoT firmware template: web_service notes: "Web interface for device management"
nodered: # Automation workflows template: web_service notes: "Node.js app, moderate memory usage"
Productivity Stack
nextcloud: # File sync/sharing template: heavy_app notes: "PHP app with database, resource intensive with users"
gitea: # Git server template: web_service notes: "Go app, lightweight but scales with repos"
Monitoring Stack
prometheus: # Metrics collection template: monitoring_service notes: "Time-series database, memory intensive for retention"
grafana: # Metrics visualization template: web_service notes: "Web dashboard, moderate resources"
loki: # Log aggregation template: monitoring_service notes: "Log storage, memory for indexing"
uptime_kuma: # Uptime monitoring template: web_service notes: "Monitoring checks, light resource usage"
Development Stack
code_server: # VS Code in browser template: heavy_app notes: "Full IDE, resource intensive for large projects"
Utility Stack
Most utilities are lightweight web services
speedtest_tracker: template: web_service notes: "Speed test monitoring, occasional CPU usage"
===========================================
RESOURCE MONITORING COMMANDS
===========================================
Monitor current usage
docker stats
Monitor specific service
docker stats service_name
Check container resource usage over time
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
Check system resources
docker system df
View running processes in container
docker exec service_name ps aux
Memory usage details
docker exec service_name cat /proc/meminfo | head -10
===========================================
ADJUSTMENT GUIDELINES
===========================================
If container is killed by OOM:
1. Increase memory limit by 50-100%
2. Check for memory leaks in application
3. Consider adding swap space to host
If container is slow/unresponsive:
1. Increase CPU limits
2. Check for CPU bottlenecks
3. Monitor disk I/O if database-related
General rule of thumb:
- Start with conservative limits
- Monitor actual usage with 'docker stats'
- Adjust based on real-world usage patterns
- Leave 20-30% headroom for spikes
/home/kelin/AI-Homelab/docs/resource-limits-template.md