212 lines
7.7 KiB
Bash
212 lines
7.7 KiB
Bash
#!/bin/bash
|
|
# Veza V5 Ultra Deployment Demo Script
|
|
# Shows the deployment process and configuration
|
|
|
|
set -euo pipefail
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Functions
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
show_header() {
|
|
echo
|
|
echo "========================================"
|
|
echo "Veza V5 Ultra Deployment Demo"
|
|
echo "========================================"
|
|
echo
|
|
}
|
|
|
|
check_system() {
|
|
log_info "Checking system information..."
|
|
|
|
echo "System: $(uname -a)"
|
|
echo "Python: $(python3 --version 2>/dev/null || echo 'Not available')"
|
|
echo "User: $(whoami)"
|
|
echo "Home: $HOME"
|
|
echo
|
|
}
|
|
|
|
check_packages() {
|
|
log_info "Checking required packages..."
|
|
|
|
local packages=("python3" "curl" "git" "wget" "ansible")
|
|
for pkg in "${packages[@]}"; do
|
|
if command -v "$pkg" &> /dev/null; then
|
|
log_success "$pkg: Available"
|
|
else
|
|
log_warning "$pkg: Not installed"
|
|
fi
|
|
done
|
|
echo
|
|
}
|
|
|
|
check_ansible() {
|
|
log_info "Checking Ansible setup..."
|
|
|
|
echo "Ansible version: $(ansible --version | head -1)"
|
|
echo "Ansible collections:"
|
|
ansible-galaxy collection list 2>/dev/null | grep -E "(community|incus)" || echo " No relevant collections found"
|
|
echo
|
|
}
|
|
|
|
check_network() {
|
|
log_info "Checking network configuration..."
|
|
|
|
echo "Network interfaces:"
|
|
ip addr show | grep -E "(inet |UP)" | head -10
|
|
echo
|
|
|
|
echo "Default route:"
|
|
ip route show | grep default
|
|
echo
|
|
}
|
|
|
|
check_target_host() {
|
|
log_info "Checking target host connectivity..."
|
|
|
|
local target_host="192.168.0.12"
|
|
if ping -c 1 -W 1 "$target_host" &> /dev/null; then
|
|
log_success "Target host $target_host is reachable"
|
|
else
|
|
log_warning "Target host $target_host is not reachable"
|
|
echo " This is expected if the host is not currently running"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
show_deployment_steps() {
|
|
log_info "Veza V5 Ultra Deployment Steps:"
|
|
echo
|
|
echo "1. Bootstrap Host (00-bootstrap-remote.yml)"
|
|
echo " - Install Python, sudo, curl, gnupg, net-tools"
|
|
echo " - Configure SSH and firewall"
|
|
echo " - Install Incus dependencies"
|
|
echo
|
|
echo "2. Install Incus + OVN (10-incus-ovn.yml)"
|
|
echo " - Install Incus via snap"
|
|
echo " - Install OVN packages"
|
|
echo " - Create OVN network 'veza-ovn'"
|
|
echo
|
|
echo "3. Create Containers (20-incus-containers.yml)"
|
|
echo " - veza-haproxy (Debian 12) - Edge proxy"
|
|
echo " - veza-backend (Debian 12) - Go API on 8080"
|
|
echo " - veza-chat (Debian 12) - Rust WebSocket on 8081"
|
|
echo " - veza-stream (Debian 12) - Rust HLS on 8082"
|
|
echo " - veza-web (Debian 12) - React + nginx on 80"
|
|
echo
|
|
echo "4. Configure HAProxy + ACME (30-haproxy-in-container.yml)"
|
|
echo " - Install HAProxy in container"
|
|
echo " - Setup Let's Encrypt HTTP-01 validation"
|
|
echo " - Configure routing and SSL termination"
|
|
echo " - Generate certificates for veza.talas.fr"
|
|
echo
|
|
echo "5. Deploy Applications (40-veza-apps.yml)"
|
|
echo " - Build and run Go backend with systemd"
|
|
echo " - Build and run Rust chat server with systemd"
|
|
echo " - Build and run Rust stream server with systemd"
|
|
echo " - Build React app and serve with nginx"
|
|
echo
|
|
echo "6. Run Smoke Tests (50-smoke.yml)"
|
|
echo " - Test HTTPS access"
|
|
echo " - Test API endpoints"
|
|
echo " - Test WebSocket connectivity"
|
|
echo " - Test HLS streaming"
|
|
echo
|
|
}
|
|
|
|
show_architecture() {
|
|
log_info "Veza V5 Ultra Architecture:"
|
|
echo
|
|
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
echo "│ Internet (veza.talas.fr) │"
|
|
echo "└─────────────────────┬───────────────────────────────────────┘"
|
|
echo " │"
|
|
echo "┌─────────────────────▼───────────────────────────────────────┐"
|
|
echo "│ HAProxy Container (80/443) │"
|
|
echo "│ - SSL Termination │"
|
|
echo "│ - Let's Encrypt ACME │"
|
|
echo "│ - Request Routing │"
|
|
echo "└─────────────────────┬───────────────────────────────────────┘"
|
|
echo " │"
|
|
echo "┌─────────────────────▼───────────────────────────────────────┐"
|
|
echo "│ OVN Network │"
|
|
echo "│ (veza-ovn) │"
|
|
echo "└─────┬─────────┬─────────┬─────────┬─────────────────────────┘"
|
|
echo " │ │ │ │"
|
|
echo "┌─────▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐"
|
|
echo "│ Backend │ │ Chat │ │Stream │ │ Web │"
|
|
echo "│ :8080 │ │ :8081 │ │ :8082 │ │ :80 │"
|
|
echo "│ (Go) │ │(Rust) │ │(Rust) │ │(React)│"
|
|
echo "└─────────┘ └───────┘ └───────┘ └───────┘"
|
|
echo
|
|
}
|
|
|
|
show_commands() {
|
|
log_info "Deployment Commands:"
|
|
echo
|
|
echo "# Full deployment:"
|
|
echo "./deploy-veza.sh"
|
|
echo
|
|
echo "# Step-by-step deployment:"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/00-bootstrap-remote.yml"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/10-incus-ovn.yml"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/20-incus-containers.yml"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/30-haproxy-in-container.yml -e domain=veza.talas.fr -e acme_email=ops@talas.fr"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/40-veza-apps.yml"
|
|
echo "ansible-playbook -i inventory/prod/hosts.yml playbooks/50-smoke.yml"
|
|
echo
|
|
echo "# Custom domain:"
|
|
echo "./deploy-veza.sh -d myapp.example.com -e admin@example.com"
|
|
echo
|
|
}
|
|
|
|
show_next_steps() {
|
|
log_info "Next Steps:"
|
|
echo
|
|
echo "1. Ensure target host (192.168.0.12) is running and accessible"
|
|
echo "2. Verify SSH key authentication works:"
|
|
echo " ssh senke@192.168.0.12 'echo \"SSH test successful\"'"
|
|
echo "3. Run the deployment:"
|
|
echo " ./deploy-veza.sh"
|
|
echo "4. Point DNS A record for veza.talas.fr to 192.168.0.12"
|
|
echo "5. Re-run HAProxy playbook to get Let's Encrypt certificate"
|
|
echo
|
|
}
|
|
|
|
main() {
|
|
show_header
|
|
check_system
|
|
check_packages
|
|
check_ansible
|
|
check_network
|
|
check_target_host
|
|
show_deployment_steps
|
|
show_architecture
|
|
show_commands
|
|
show_next_steps
|
|
|
|
log_success "Demo completed! Veza V5 Ultra deployment is ready to run."
|
|
echo
|
|
}
|
|
|
|
main "$@"
|