#!/bin/bash # deploy_all.sh - Master deployment script for all homelab improvements # This script orchestrates the deployment of all components in the correct order set -euo pipefail # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Logging LOG_FILE="/var/log/homelab_deployment.log" exec > >(tee -a "$LOG_FILE") 2>&1 echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}Home Lab Deployment Script${NC}" echo -e "${GREEN}Started at $(date)${NC}" echo -e "${GREEN}========================================${NC}\n" # Check if running as root if [[ $EUID -ne 0 ]]; then echo -e "${RED}This script must be run as root${NC}" exit 1 fi # Deployment phases PHASES=( "network:Network Upgrade" "storage:Storage Enhancements" "services:Service Consolidation" "security:Security Hardening" "monitoring:Monitoring & Automation" "backup:Backup Strategy" ) deploy_network() { echo -e "\n${YELLOW}[PHASE 1/6] Network Upgrade${NC}" echo "This phase requires manual hardware installation." echo "Please ensure the 2.5Gb switch is installed before proceeding." read -p "Has the new switch been installed? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Skipping network upgrade. Please install switch first." return 0 fi echo "Configuring VLAN firewall rules..." bash /workspace/homelab/scripts/vlan_firewall.sh echo -e "${GREEN}✓ Network configuration complete${NC}" } deploy_storage() { echo -e "\n${YELLOW}[PHASE 2/6] Storage Enhancements${NC}" read -p "Create ZFS pool on Proxmox host? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Creating ZFS pool..." bash /workspace/homelab/scripts/zfs_setup.sh fi echo -e "\n${YELLOW}Please mount NAS shares manually using:${NC}" echo " Guide: /workspace/homelab/docs/guides/NAS_Mount_Guide.md" read -p "Press enter when NAS is mounted..." echo "Setting up AI model pruning cron job..." (crontab -l 2>/dev/null; echo "0 3 * * * /workspace/homelab/scripts/prune_ai_models.sh") | crontab - echo -e "${GREEN}✓ Storage configuration complete${NC}" } deploy_services() { echo -e "\n${YELLOW}[PHASE 3/6] Service Consolidation${NC}" read -p "Deploy Traefik Swarm service? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Deploying Traefik stack..." docker stack deploy -c /workspace/homelab/services/swarm/traefik/stack.yml traefik sleep 5 docker service ls | grep traefik fi read -p "Deploy Caddy fallback on Pi Zero? (requires SSH to .62) (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Please deploy Caddy manually on Pi Zero (.62)" echo " cd /workspace/homelab/services/standalone/Caddy" echo " docker-compose up -d" fi read -p "Deploy n8n stack? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Deploying n8n stack..." docker stack deploy -c /workspace/homelab/services/swarm/stacks/n8n-stack.yml n8n sleep 5 docker service ls | grep n8n fi echo -e "${GREEN}✓ Service consolidation complete${NC}" } deploy_security() { echo -e "\n${YELLOW}[PHASE 4/6] Security Hardening${NC}" read -p "Install fail2ban on manager VM? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Installing fail2ban..." bash /workspace/homelab/scripts/install_fail2ban.sh fi echo -e "${GREEN}✓ Security hardening complete${NC}" } deploy_monitoring() { echo -e "\n${YELLOW}[PHASE 5/6] Monitoring & Automation${NC}" read -p "Deploy monitoring stack? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Setting up monitoring..." bash /workspace/homelab/scripts/setup_monitoring.sh fi echo -e "${GREEN}✓ Monitoring setup complete${NC}" } deploy_backup() { echo -e "\n${YELLOW}[PHASE 6/6] Backup Strategy${NC}" echo -e "${YELLOW}Before proceeding, ensure you have:${NC}" echo " 1. Backblaze B2 account created" echo " 2. B2 bucket created" echo " 3. Updated /workspace/homelab/scripts/backup_daily.sh with credentials" read -p "Are credentials configured? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Skipping backup setup. Please configure credentials first." return 0 fi echo "Installing restic backup..." bash /workspace/homelab/scripts/install_restic_backup.sh echo -e "${GREEN}✓ Backup strategy complete${NC}" } # Main deployment flow main() { echo "This script will guide you through the deployment of all homelab improvements." echo "You can skip any phase if needed." echo "" deploy_network deploy_storage deploy_services deploy_security deploy_monitoring deploy_backup echo -e "\n${GREEN}========================================${NC}" echo -e "${GREEN}Deployment Complete!${NC}" echo -e "${GREEN}Completed at $(date)${NC}" echo -e "${GREEN}========================================${NC}\n" echo "Post-deployment verification:" echo " 1. Check Docker services: docker service ls" echo " 2. Check container health: docker ps --filter health=healthy" echo " 3. Check fail2ban: sudo fail2ban-client status" echo " 4. Check monitoring: curl http://192.168.1.196:9100/metrics" echo " 5. Check backups: sudo systemctl status restic-backup.timer" echo "" echo "Full verification guide: /workspace/homelab/docs/guides/DEPLOYMENT_GUIDE.md" echo "Log file: $LOG_FILE" } main "$@"