This commit is contained in:
Iliyan Angelov
2025-12-10 01:36:00 +02:00
parent 2f6dca736a
commit 6a9e823402
84 changed files with 5293 additions and 1836 deletions

283
verify-deployment.sh Executable file
View File

@@ -0,0 +1,283 @@
#!/bin/bash
# GNX-WEB Deployment Verification Script
# Checks if all components are properly configured and running
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}=========================================="
echo "GNX-WEB Deployment Verification"
echo "==========================================${NC}"
echo ""
ERRORS=0
WARNINGS=0
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to check if port is listening
port_listening() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1 || netstat -tlnp 2>/dev/null | grep -q ":$port " || ss -tlnp 2>/dev/null | grep -q ":$port "; then
return 0
else
return 1
fi
}
# Check required commands
echo -e "${BLUE}Checking required commands...${NC}"
for cmd in python3 node npm nginx psql; do
if command_exists $cmd; then
echo -e "${GREEN}${NC} $cmd is installed"
else
echo -e "${RED}${NC} $cmd is NOT installed"
((ERRORS++))
fi
done
# Check PM2
if command_exists pm2; then
echo -e "${GREEN}${NC} PM2 is installed"
else
echo -e "${YELLOW}${NC} PM2 is not installed (recommended for process management)"
((WARNINGS++))
fi
echo ""
# Check backend
echo -e "${BLUE}Checking Backend...${NC}"
if [ -f "backEnd/.env" ]; then
echo -e "${GREEN}${NC} Backend .env file exists"
# Check for critical variables
if grep -q "SECRET_KEY=" backEnd/.env && ! grep -q "your-super-secret" backEnd/.env; then
echo -e "${GREEN}${NC} SECRET_KEY is set"
else
echo -e "${RED}${NC} SECRET_KEY not properly configured"
((ERRORS++))
fi
if grep -q "INTERNAL_API_KEY=" backEnd/.env && ! grep -q "PLACEHOLDER\|your-secure-api-key" backEnd/.env; then
echo -e "${GREEN}${NC} INTERNAL_API_KEY is set"
else
echo -e "${RED}${NC} INTERNAL_API_KEY not properly configured"
((ERRORS++))
fi
if grep -q "DATABASE_URL=" backEnd/.env && ! grep -q "your_password_here" backEnd/.env; then
echo -e "${GREEN}${NC} DATABASE_URL is configured"
else
echo -e "${YELLOW}${NC} DATABASE_URL may not be configured"
((WARNINGS++))
fi
else
echo -e "${RED}${NC} Backend .env file not found"
((ERRORS++))
fi
if [ -d "backEnd/venv" ]; then
echo -e "${GREEN}${NC} Backend virtual environment exists"
else
echo -e "${YELLOW}${NC} Backend virtual environment not found"
((WARNINGS++))
fi
if port_listening 1086; then
echo -e "${GREEN}${NC} Backend is running on port 1086"
else
echo -e "${YELLOW}${NC} Backend is not running on port 1086"
((WARNINGS++))
fi
echo ""
# Check frontend
echo -e "${BLUE}Checking Frontend...${NC}"
if [ -f "frontEnd/.env.production" ]; then
echo -e "${GREEN}${NC} Frontend .env.production exists"
else
echo -e "${YELLOW}${NC} Frontend .env.production not found"
((WARNINGS++))
fi
if [ -d "frontEnd/node_modules" ]; then
echo -e "${GREEN}${NC} Frontend node_modules exists"
else
echo -e "${YELLOW}${NC} Frontend node_modules not found (run npm install)"
((WARNINGS++))
fi
if [ -d "frontEnd/.next" ]; then
echo -e "${GREEN}${NC} Frontend build exists"
else
echo -e "${YELLOW}${NC} Frontend not built (run npm run build)"
((WARNINGS++))
fi
if port_listening 1087; then
echo -e "${GREEN}${NC} Frontend is running on port 1087"
else
echo -e "${YELLOW}${NC} Frontend is not running on port 1087"
((WARNINGS++))
fi
echo ""
# Check database
echo -e "${BLUE}Checking Database...${NC}"
if port_listening 5433; then
echo -e "${GREEN}${NC} PostgreSQL is running on port 5433"
else
echo -e "${YELLOW}${NC} PostgreSQL is not running on port 5433"
((WARNINGS++))
fi
if command_exists psql; then
DB_URL=$(grep "^DATABASE_URL=" backEnd/.env 2>/dev/null | cut -d'=' -f2-)
if [ -n "$DB_URL" ] && [[ "$DB_URL" == postgresql://* ]]; then
# Extract components from postgresql://user:password@host:port/database
DB_USER=$(echo "$DB_URL" | sed -n 's|.*://\([^:]*\):.*|\1|p')
DB_PASS=$(echo "$DB_URL" | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
DB_HOST=$(echo "$DB_URL" | sed -n 's|.*@\([^:]*\):.*|\1|p')
DB_PORT=$(echo "$DB_URL" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
DB_NAME=$(echo "$DB_URL" | sed -n 's|.*/\([^?]*\).*|\1|p')
if [ -n "$DB_USER" ] && [ -n "$DB_PASS" ] && [ -n "$DB_NAME" ]; then
if PGPASSWORD="$DB_PASS" psql -h "${DB_HOST:-localhost}" -p "${DB_PORT:-5433}" -U "$DB_USER" -d "$DB_NAME" -c "SELECT 1;" >/dev/null 2>&1; then
echo -e "${GREEN}${NC} Database connection successful"
else
echo -e "${YELLOW}${NC} Could not verify database connection (check credentials)"
((WARNINGS++))
fi
else
echo -e "${YELLOW}${NC} Could not parse DATABASE_URL for connection test"
((WARNINGS++))
fi
else
echo -e "${YELLOW}${NC} DATABASE_URL not found or invalid format"
((WARNINGS++))
fi
fi
echo ""
# Check nginx
echo -e "${BLUE}Checking Nginx...${NC}"
if [ -f "/etc/nginx/sites-available/gnxsoft" ]; then
echo -e "${GREEN}${NC} Nginx configuration exists"
if [ -L "/etc/nginx/sites-enabled/gnxsoft" ]; then
echo -e "${GREEN}${NC} Nginx site is enabled"
else
echo -e "${YELLOW}${NC} Nginx site is not enabled"
((WARNINGS++))
fi
if grep -q "PLACEHOLDER_INTERNAL_API_KEY" /etc/nginx/sites-available/gnxsoft; then
echo -e "${RED}${NC} Nginx config still has PLACEHOLDER_INTERNAL_API_KEY"
((ERRORS++))
else
echo -e "${GREEN}${NC} Nginx INTERNAL_API_KEY is configured"
fi
else
echo -e "${YELLOW}${NC} Nginx configuration not found"
((WARNINGS++))
fi
if systemctl is-active --quiet nginx 2>/dev/null; then
echo -e "${GREEN}${NC} Nginx is running"
else
echo -e "${YELLOW}${NC} Nginx is not running"
((WARNINGS++))
fi
if port_listening 80; then
echo -e "${GREEN}${NC} HTTP port 80 is listening"
else
echo -e "${YELLOW}${NC} HTTP port 80 is not listening"
((WARNINGS++))
fi
if port_listening 443; then
echo -e "${GREEN}${NC} HTTPS port 443 is listening"
else
echo -e "${YELLOW}${NC} HTTPS port 443 is not listening"
((WARNINGS++))
fi
echo ""
# Check firewall
echo -e "${BLUE}Checking Firewall...${NC}"
if command_exists ufw; then
if ufw status | grep -q "Status: active"; then
echo -e "${GREEN}${NC} UFW firewall is active"
else
echo -e "${YELLOW}${NC} UFW firewall is not active"
((WARNINGS++))
fi
else
echo -e "${YELLOW}${NC} UFW not found (firewall may be managed differently)"
((WARNINGS++))
fi
echo ""
# Check PM2 services
if command_exists pm2; then
echo -e "${BLUE}Checking PM2 Services...${NC}"
if pm2 list | grep -q "gnxsoft-backend"; then
if pm2 list | grep -q "gnxsoft-backend.*online"; then
echo -e "${GREEN}${NC} Backend service is running in PM2"
else
echo -e "${YELLOW}${NC} Backend service exists but may not be online"
((WARNINGS++))
fi
else
echo -e "${YELLOW}${NC} Backend service not found in PM2"
((WARNINGS++))
fi
if pm2 list | grep -q "gnxsoft-frontend"; then
if pm2 list | grep -q "gnxsoft-frontend.*online"; then
echo -e "${GREEN}${NC} Frontend service is running in PM2"
else
echo -e "${YELLOW}${NC} Frontend service exists but may not be online"
((WARNINGS++))
fi
else
echo -e "${YELLOW}${NC} Frontend service not found in PM2"
((WARNINGS++))
fi
fi
echo ""
echo -e "${BLUE}=========================================="
echo "Verification Summary"
echo "==========================================${NC}"
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
echo -e "${GREEN}✓ All checks passed!${NC}"
exit 0
elif [ $ERRORS -eq 0 ]; then
echo -e "${YELLOW}$WARNINGS warning(s) found${NC}"
echo -e "${GREEN}✓ No critical errors${NC}"
exit 0
else
echo -e "${RED}$ERRORS error(s) found${NC}"
if [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW}$WARNINGS warning(s) found${NC}"
fi
exit 1
fi