Initial commit: homelab configuration and documentation
This commit is contained in:
181
scripts/deploy_all.sh
Executable file
181
scripts/deploy_all.sh
Executable file
@@ -0,0 +1,181 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user