182 lines
5.6 KiB
Bash
Executable File
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 "$@"
|