Files
portainer-core/Makefile
T

259 lines
7.2 KiB
Makefile

# tower-of-joy Makefile
# Common operations for home server infrastructure management
.PHONY: help status health gpu-check disk backup cleanup deploy-% stop-% logs-% update-%
# Default target - show help
help:
@echo "tower-of-joy Infrastructure Management"
@echo ""
@echo "Common Commands:"
@echo " make status - Show project status and running containers"
@echo " make health - Run comprehensive health check"
@echo " make gpu-check - Verify GPU passthrough"
@echo " make disk - Show disk usage report"
@echo " make backup - Backup all Docker configs"
@echo " make cleanup - Clean up unused Docker resources"
@echo ""
@echo "Stack Management:"
@echo " make deploy-<name> - Deploy a stack (e.g., make deploy-portainer)"
@echo " make stop-<name> - Stop a stack"
@echo " make logs-<name> - Show stack logs"
@echo " make update-<name> - Update stack to latest images"
@echo ""
@echo "Available Stacks:"
@echo " - portainer, nginx-proxy-manager, ollama"
@echo " - headscale, uptime-kuma, netdata, heimdall"
@echo " - watchtower, maintenance"
@echo " - jellyfin, nextcloud, samba"
@echo ""
@echo "Setup Commands:"
@echo " make setup-dirs - Create all required directories"
@echo " make mount-media - Mount the 4TB media drive"
@echo ""
@echo "Examples:"
@echo " make deploy-portainer # Deploy Portainer"
@echo " make logs-ollama # View Ollama logs"
@echo " make update-jellyfin # Update Jellyfin to latest"
# Show current status
status:
@echo "=== tower-of-joy Status ==="
@echo ""
@echo "Running Containers:"
@docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null || echo "Docker not running"
@echo ""
@echo "Disk Usage:"
@df -h / /mnt/media 2>/dev/null | grep -E "Filesystem|/dev" || echo "Unable to check disk"
@echo ""
@echo "GPU Status:"
@nvidia-smi --query-gpu=name,utilization.gpu,memory.used,memory.total --format=csv,noheader 2>/dev/null || echo "GPU not detected"
# Comprehensive health check
health:
@./scripts/health-check.sh
# GPU verification
gpu-check:
@./scripts/gpu-check.sh
# Disk usage report
disk:
@./scripts/disk-usage.sh
# Backup configs
backup:
@./scripts/backup-configs.sh
# Cleanup unused resources
cleanup:
@./scripts/cleanup.sh
# Deploy a stack
deploy-%:
@if [ ! -f stacks/$*.yml ]; then \
echo "❌ Stack not found: $*"; \
echo "Available stacks:"; \
ls -1 stacks/*.yml | xargs -n 1 basename | sed 's/.yml$$//' | sed 's/^/ - /'; \
exit 1; \
fi
@echo "Deploying $*..."
@docker compose -f stacks/$*.yml up -d
@echo "✅ $* deployed"
@echo "Checking status..."
@sleep 2
@docker compose -f stacks/$*.yml ps
# Stop a stack
stop-%:
@if [ ! -f stacks/$*.yml ]; then \
echo "❌ Stack not found: $*"; \
exit 1; \
fi
@echo "Stopping $*..."
@docker compose -f stacks/$*.yml down
@echo "✅ $* stopped"
# Show logs for a stack
logs-%:
@if [ ! -f stacks/$*.yml ]; then \
echo "❌ Stack not found: $*"; \
exit 1; \
fi
@docker compose -f stacks/$*.yml logs -f
# Update a stack
update-%:
@./scripts/update-stacks.sh $*
# Setup directories
setup-dirs:
@echo "Creating directory structure..."
@mkdir -p ~/docker-data/{portainer,nginx-proxy-manager,ollama,headscale,uptime-kuma,netdata,heimdall,jellyfin,nextcloud,samba}
@mkdir -p /mnt/media/{jellyfin,nextcloud,game-servers,backups,downloads}
@echo "✅ Directories created"
@echo ""
@echo "SSD directories: ~/docker-data/"
@ls -la ~/docker-data/
@echo ""
@echo "HDD directories: /mnt/media/"
@ls -la /mnt/media/ 2>/dev/null || echo "⚠️ Media drive not mounted"
# Mount media drive
mount-media:
@echo "Mounting 4TB media drive..."
@if mountpoint -q /mnt/media; then \
echo "✅ Media drive already mounted"; \
else \
sudo mount /dev/sdb /mnt/media && echo "✅ Media drive mounted" || echo "❌ Failed to mount media drive"; \
fi
@df -h /mnt/media 2>/dev/null || echo "Unable to verify mount"
# Quick deploy - Phase 1 infrastructure
deploy-phase1:
@echo "=== Deploying Phase 1: Foundation ==="
@echo ""
@echo "[1/3] Deploying Portainer..."
@make deploy-portainer
@sleep 5
@echo ""
@echo "[2/3] Deploying Nginx Proxy Manager..."
@make deploy-nginx-proxy-manager
@sleep 5
@echo ""
@echo "[3/3] Deploying Ollama..."
@make deploy-ollama
@echo ""
@echo "=== Phase 1 Complete ==="
@echo ""
@echo "Access services:"
@echo " Portainer: http://localhost:8080"
@echo " NPM: http://localhost:8000"
@echo " Ollama: http://localhost:11434"
# Quick deploy - Phase 2 networking
deploy-phase2:
@echo "=== Deploying Phase 2: Networking ==="
@echo ""
@make deploy-headscale
@echo ""
@echo "=== Phase 2 Complete ==="
@echo ""
@echo "Configure Headscale:"
@echo " 1. Generate config: docker exec headscale headscale config generate"
@echo " 2. Create user: docker exec headscale headscale users create homelab"
@echo " 3. Generate key: docker exec headscale headscale preauthkeys create --user homelab"
# Quick deploy - Phase 3 monitoring
deploy-phase3:
@echo "=== Deploying Phase 3: Monitoring ==="
@echo ""
@echo "[1/3] Deploying Uptime Kuma..."
@make deploy-uptime-kuma
@sleep 3
@echo ""
@echo "[2/3] Deploying Netdata..."
@make deploy-netdata
@sleep 3
@echo ""
@echo "[3/3] Deploying Heimdall..."
@make deploy-heimdall
@echo ""
@echo "=== Phase 3 Complete ==="
@echo ""
@echo "Access monitoring:"
@echo " Uptime Kuma: http://localhost:3001"
@echo " Netdata: http://localhost:19999"
@echo " Heimdall: http://localhost:8888"
# Quick deploy - Phase 4 optimization
deploy-phase4:
@echo "=== Deploying Phase 4: Optimization ==="
@echo ""
@echo "[1/2] Deploying Watchtower..."
@make deploy-watchtower
@sleep 3
@echo ""
@echo "[2/2] Deploying Maintenance Container..."
@make deploy-maintenance
@echo ""
@echo "=== Phase 4 Complete ==="
@echo ""
@echo "Automated backups configured (daily at 3 AM)"
# Quick deploy - Applications
deploy-apps:
@echo "=== Deploying Applications ==="
@echo ""
@echo "[1/3] Deploying Jellyfin..."
@make deploy-jellyfin
@sleep 5
@echo ""
@echo "[2/3] Deploying Nextcloud..."
@make deploy-nextcloud
@sleep 5
@echo ""
@echo "[3/3] Deploying Samba..."
@make deploy-samba
@echo ""
@echo "=== Applications Deployed ==="
@echo ""
@echo "Access applications:"
@echo " Jellyfin: http://localhost:8096"
@echo " Nextcloud: http://localhost:8082"
@echo " Samba: \\\\tower-of-joy\\Media"
# Full deployment (all phases)
deploy-all:
@echo "⚠️ This will deploy ALL services. This may take 10-15 minutes."
@read -p "Continue? (y/N) " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
make deploy-phase1 && \
make deploy-phase2 && \
make deploy-phase3 && \
make deploy-phase4 && \
make deploy-apps && \
echo "" && \
echo "=== All Services Deployed ===" && \
make status; \
else \
echo "Deployment cancelled"; \
fi
# Development helpers
dev-setup:
@echo "Setting up development environment..."
@chmod +x scripts/*.sh
@echo "✅ Scripts made executable"
@echo "✅ Development setup complete"
# Show all containers
ps:
@docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Show all stacks
stacks:
@echo "Available stacks:"
@ls -1 stacks/*.yml | xargs -n 1 basename | sed 's/.yml$$//' | sed 's/^/ /'