Files
Homelab/scripts/deploy_all.sh

182 lines
5.6 KiB
Bash
Executable File

#!/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 "$@"