# Resource Allocation Guide *CPU, memory, and storage recommendations for homelab services* --- ## Overview This guide provides resource allocation recommendations for services running in the homelab. Values are based on typical usage and should be adjusted based on actual usage patterns. --- ## Host Capacity ### Current Resources | Host | CPU | RAM | Storage | Workload | |------|-----|-----|---------|----------| | Atlantis | 8 cores | 32GB | 40TB | Media, Vault | | Calypso | 4 cores | 32GB | 12TB | Infrastructure | | Concord NUC | 2 cores | 16GB | 256GB | Light services | | Homelab VM | 4 cores | 28GB | 100GB | Monitoring | | RPi5 | 4 cores | 16GB | 512GB | Edge | ### Available Headroom | Host | CPU Available | RAM Available | Notes | |------|---------------|---------------|-------| | Atlantis | 2 cores | 8GB | ~25% headroom | | Calypso | 1 core | 12GB | ~37% headroom | | Concord NUC | 0.5 core | 4GB | Limited | | Homelab VM | 1 core | 8GB | ~28% headroom | | RPi5 | 2 cores | 8GB | ~50% headroom | --- ## Service Resource Guidelines ### Infrastructure Services | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Nginx Proxy Manager | 0.5 | 256MB | 1GB | Minimal | | Authentik | 1 | 1GB | 10GB | With PostgreSQL | | Prometheus | 1 | 2GB | 20GB | Adjust for retention | | Grafana | 0.5 | 512MB | 1GB | Dashboards | | Alertmanager | 0.25 | 128MB | - | Minimal | ### Database Services | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | PostgreSQL | 1 | 1GB | 10GB+ | Per database | | Redis | 0.5 | 512MB | - | In-memory | | MariaDB/MySQL | 1 | 512MB | 5GB | Legacy services | ### Media Services | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Plex | 2+ | 2GB | - | Transcoding | | Jellyfin | 2+ | 2GB | - | Hardware assist | | Sonarr | 0.5 | 256MB | - | Low usage | | Radarr | 0.5 | 256MB | - | Low usage | | Lidarr | 0.5 | 256MB | - | Low usage | | Prowlarr | 0.25 | 128MB | - | Minimal | | Bazarr | 0.5 | 512MB | - | Subtitle processing | | qBittorrent | 1 | 512MB | - | Upload/download | | SABnzbd | 0.5 | 256MB | - | Download | ### Photo Services | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Immich | 2 | 2GB | 100GB+ | ML processing | | PhotoPrism | 2 | 2GB | 100GB+ | Optional | ### Communication Services | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Matrix/Synapse | 2 | 1GB | 10GB | Federation | | Element | 0.5 | 256MB | - | Web client | | Mastodon | 2 | 2GB | 20GB | Social | | Mattermost | 1 | 1GB | 5GB | Team chat | | Jitsi | 2 | 2GB | - | Video | ### Home Automation | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Home Assistant | 1 | 2GB | 5GB | Core | | Zigbee2MQTT | 0.5 | 256MB | - | MQTT broker | | Z-Wave JS | 0.5 | 512MB | - | Z-Wave | ### Development | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Gitea | 1 | 512MB | 5GB | Git hosting | | Gitea Runner | 1 | 512MB | - | CI/CD | | Portainer | 0.5 | 256MB | - | Management | | OpenHands | 2 | 4GB | 10GB | AI dev (on-demand) | ### Productivity | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Paperless-NGX | 1 | 1GB | 50GB | Document OCR | | Wallabag | 0.5 | 256MB | 5GB | Read later | | Reactive Resume | 0.5 | 256MB | 1GB | Resume builder | | Seafile | 2 | 2GB | 100GB+ | File sync | ### Security | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Vaultwarden | 1 | 512MB | 1GB | Passwords | | Bitwarden | 2 | 1GB | 5GB | (if using official) | ### Privacy | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Invidious | 1 | 1GB | - | YouTube frontend | | Piped | 1 | 1GB | - | Music frontend | | Libreddit | 0.5 | 256MB | - | Reddit frontend | ### DNS & Network | Service | CPU | Memory | Storage | Notes | |---------|-----|--------|---------|-------| | Pi-hole | 0.5 | 256MB | 2GB | DNS filtering | | AdGuard | 1 | 512MB | 2GB | DNS + ads | | WireGuard | 0.25 | 128MB | - | VPN | | Headscale | 0.5 | 256MB | - | WireGuard server | --- ## Memory Limits by Host ### Atlantis (32GB) ``` System: 4GB Container overhead: 4GB Vaultwarden: 512MB Immich: 2GB Plex: 2GB ARR stack: 1GB Jitsi: 2GB Matrix: 1GB Mastodon: 2GB Misc services: 2GB --------------------------- Reserved: ~15GB ``` ### Calypso (32GB) ``` System: 4GB Docker overhead: 4GB Authentik: 1GB NPM: 256MB Prometheus: 2GB Grafana: 512MB PostgreSQL: 1GB ARR stack: 512MB Other services: 3GB --------------------------- Reserved: ~16GB ``` ### Concord NUC (16GB) ``` System: 2GB Docker: 2GB Home Assistant: 2GB AdGuard: 512MB Plex: 2GB Other services: 2GB --------------------------- Reserved: ~5.5GB ``` --- ## CPU Limits by Service ### High CPU (2+ cores) - Plex/Jellyfin (transcoding) - Immich (ML processing) - OpenHands - Ollama - Video processing ### Medium CPU (1 core) - Databases (PostgreSQL, MariaDB) - Matrix/Synapse - Mastodon - Seafile - Paperless-NGX (OCR) ### Low CPU (<1 core) - Nginx Proxy Manager - Authentik - Pi-hole/AdGuard - Vaultwarden - Arr suite (Sonarr, Radarr) - Prometheus (scraping) --- ## Storage Guidelines ### Media Storage - **Movies/TV**: On Atlantis, shared via NFS/SMB - **Music**: Dedicated volume - **Photos**: Immich primary on Atlantis, backup on RPi5 ### Application Data - **Prometheus**: SSD required (fast writes) - **Databases**: SSD required - **Cache**: Can be small/fast ### Backup Storage - Local: Dedicated volume on Calypso - Remote: Backblaze B2 / cold storage --- ## Docker Compose Examples ### Memory Limits ```yaml services: prometheus: image: prom/prometheus deploy: resources: limits: memory: 2G reservations: memory: 1G ``` ### CPU Limits ```yaml services: plex: image: plexinc/pms-docker deploy: resources: limits: cpus: '2.0' ``` --- ## Monitoring Resource Usage ### Check Current Usage ```bash # All containers docker stats --no-stream # Specific host curl http://:9100/metrics | grep node_memory_MemAvailable # Grafana dashboard # Infrastructure → Host Resources ``` ### Alerts | Metric | Warning | Critical | |--------|---------|----------| | CPU | >70% | >90% | | Memory | >80% | >95% | | Disk | >80% | >90% | --- ## Optimization Tips 1. **Use :latest sparingly** - Pin versions for stability 2. **Enable GPU transcoding** - For Plex/Jellyfin 3. **Use SSD for databases** - Prometheus, PostgreSQL 4. **Limit concurrent transcode** - In Plex settings 5. **Enable Prometheus targerhs** - For better monitoring --- ## Capacity Planning ### Growth Projections | Service | Current | 6 Months | 12 Months | |---------|---------|----------|-----------| | Media storage | 20TB | 25TB | 30TB | | Photo storage | 500GB | 750GB | 1TB | | Prometheus | 10GB | 15GB | 20GB | | Database | 5GB | 7GB | 10GB | ### Warning Signs - Disk usage >80% sustained - Memory pressure alerts daily - Container restarts increasing - CPU throttling visible --- ## Links - [Grafana Dashboards](../services/individual/grafana.md) - [Docker Guide](../DOCKER_COMPOSE_GUIDE.md) - [Monitoring Architecture](../infrastructure/MONITORING_ARCHITECTURE.md)