- Organized 252 files across project - Root directory: 187 → 2 files (98.9% reduction) - Moved configuration guides to docs/04-configuration/ - Moved troubleshooting guides to docs/09-troubleshooting/ - Moved quick start guides to docs/01-getting-started/ - Moved reports to reports/ directory - Archived temporary files - Generated comprehensive reports and documentation - Created maintenance scripts and guides All files organized according to established standards.
197 lines
6.5 KiB
Bash
Executable File
197 lines
6.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Verify all services on r630-02 are running and accessible
|
|
# Usage: ./scripts/verify-r630-02-services.sh
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# Configuration
|
|
NODE_IP="192.168.11.12"
|
|
NODE_NAME="r630-02"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
log_section() { echo -e "\n${CYAN}=== $1 ===${NC}\n"; }
|
|
|
|
echo ""
|
|
log_info "═══════════════════════════════════════════════════════════"
|
|
log_info " VERIFYING ALL SERVICES ON $NODE_NAME"
|
|
log_info "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Get all containers
|
|
log_section "Container Status"
|
|
CONTAINERS=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct list 2>/dev/null | tail -n +2" || echo "")
|
|
|
|
if [[ -z "$CONTAINERS" ]]; then
|
|
log_error "No containers found"
|
|
exit 1
|
|
fi
|
|
|
|
printf "%-8s | %-12s | %-30s | %-15s | %s\n" "VMID" "Status" "Hostname" "IP Address" "Connectivity"
|
|
echo "---------|--------------|------------------------------|----------------|-------------"
|
|
|
|
declare -a SERVICE_INFO=()
|
|
|
|
while IFS= read -r line; do
|
|
if [[ -z "$line" ]]; then
|
|
continue
|
|
fi
|
|
|
|
vmid=$(echo "$line" | awk '{print $1}')
|
|
status=$(echo "$line" | awk '{print $2}')
|
|
|
|
# Get container details
|
|
hostname=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct config $vmid 2>/dev/null | grep -oP 'hostname=\\K[^,]+' | head -1" 2>/dev/null || echo "unknown")
|
|
|
|
ip=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct config $vmid 2>/dev/null | grep -oP 'ip=\\K[^,]+' | head -1" 2>/dev/null || echo "")
|
|
|
|
if [[ "$ip" == "dhcp" ]] || [[ -z "$ip" ]]; then
|
|
ip_display="DHCP"
|
|
ip_base=""
|
|
else
|
|
ip_base="${ip%/*}"
|
|
ip_display="$ip_base"
|
|
fi
|
|
|
|
# Test connectivity
|
|
connectivity="N/A"
|
|
if [[ -n "$ip_base" ]]; then
|
|
if ping -c 1 -W 2 "$ip_base" &>/dev/null; then
|
|
connectivity="${GREEN}✓ Reachable${NC}"
|
|
else
|
|
connectivity="${RED}✗ Unreachable${NC}"
|
|
fi
|
|
else
|
|
connectivity="${YELLOW}-${NC}"
|
|
fi
|
|
|
|
# Format status
|
|
if [[ "$status" == "running" ]]; then
|
|
status_display="${GREEN}running${NC}"
|
|
else
|
|
status_display="${RED}$status${NC}"
|
|
fi
|
|
|
|
printf "%-8s | %b | %-30s | %-15s | %b\n" "$vmid" "$status_display" "$hostname" "$ip_display" "$connectivity"
|
|
|
|
if [[ "$status" == "running" ]] && [[ -n "$ip_base" ]]; then
|
|
SERVICE_INFO+=("$vmid:$hostname:$ip_base")
|
|
fi
|
|
|
|
done <<< "$CONTAINERS"
|
|
|
|
log_section "Service Port Verification"
|
|
|
|
# Check common service ports
|
|
declare -A SERVICE_PORTS=(
|
|
["nginxproxymanager"]="8443"
|
|
["monitoring"]="3000"
|
|
["blockscout"]="4000"
|
|
["gitea"]="3000"
|
|
["omada"]="8043"
|
|
["cloudflared"]="N/A"
|
|
["mail-gateway"]="25,587,993"
|
|
["datacenter-manager"]="8006"
|
|
["firefly"]="5000"
|
|
["mim-api"]="8080"
|
|
)
|
|
|
|
for service_info in "${SERVICE_INFO[@]}"; do
|
|
IFS=':' read -r vmid hostname ip <<< "$service_info"
|
|
|
|
log_info "Checking VMID $vmid ($hostname) at $ip..."
|
|
|
|
# Try to get listening ports
|
|
ports=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct exec $vmid -- netstat -tlnp 2>/dev/null | grep LISTEN | awk '{print \$4}' | cut -d':' -f2 | sort -u" 2>/dev/null || echo "")
|
|
|
|
if [[ -n "$ports" ]]; then
|
|
log_success " Listening ports: $(echo $ports | tr '\n' ' ')"
|
|
else
|
|
log_warn " Could not determine listening ports"
|
|
fi
|
|
|
|
# Test HTTP/HTTPS if applicable
|
|
for port in 80 443 3000 4000 5000 8080 8443; do
|
|
if echo "$ports" | grep -q "^$port$"; then
|
|
protocol="http"
|
|
if [[ $port -eq 443 ]] || [[ $port -eq 8443 ]]; then
|
|
protocol="https"
|
|
fi
|
|
|
|
response=$(curl -k -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "${protocol}://${ip}:${port}" 2>/dev/null || echo "000")
|
|
if [[ "$response" =~ ^[23] ]]; then
|
|
log_success " ✓ $protocol://$ip:$port - HTTP $response"
|
|
elif [[ "$response" != "000" ]]; then
|
|
log_warn " ⚠ $protocol://$ip:$port - HTTP $response"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
done
|
|
|
|
log_section "Service Health Checks"
|
|
|
|
# Check container health
|
|
for service_info in "${SERVICE_INFO[@]}"; do
|
|
IFS=':' read -r vmid hostname ip <<< "$service_info"
|
|
|
|
log_info "Health check for VMID $vmid ($hostname)..."
|
|
|
|
# Check if container is responsive
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct exec $vmid -- echo 'OK' 2>/dev/null" &>/dev/null; then
|
|
log_success " ✓ Container is responsive"
|
|
else
|
|
log_error " ✗ Container is not responsive"
|
|
fi
|
|
|
|
# Check systemd services (if applicable)
|
|
services=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${NODE_IP} \
|
|
"pct exec $vmid -- systemctl list-units --type=service --state=running 2>/dev/null | grep -E '^[^ ]+\.service' | wc -l" 2>/dev/null || echo "0")
|
|
|
|
if [[ "$services" -gt 0 ]]; then
|
|
log_info " Running services: $services"
|
|
fi
|
|
|
|
echo ""
|
|
done
|
|
|
|
log_section "Summary"
|
|
|
|
RUNNING_COUNT=$(echo "$CONTAINERS" | grep -c running || echo 0)
|
|
TOTAL_COUNT=$(echo "$CONTAINERS" | wc -l)
|
|
|
|
log_info "Total containers: $TOTAL_COUNT"
|
|
log_info "Running: $RUNNING_COUNT"
|
|
log_info "Services verified: ${#SERVICE_INFO[@]}"
|
|
|
|
if [[ $RUNNING_COUNT -eq $TOTAL_COUNT ]]; then
|
|
log_success "✅ All containers are running"
|
|
else
|
|
log_warn "⚠️ Some containers are not running"
|
|
fi
|
|
|
|
echo ""
|
|
log_success "═══════════════════════════════════════════════════════════"
|
|
log_success " VERIFICATION COMPLETE"
|
|
log_success "═══════════════════════════════════════════════════════════"
|
|
echo ""
|