ok... ok... I'll add it to git...
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
# 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/^/ /'
|
||||
Reference in New Issue
Block a user