#!/bin/bash # Post-deployment verification script # Run this after deployment to verify everything is working set -e # Default domain (can be overridden) DOMAIN=${1:-"dt.netcoptech.com"} PROTOCOL=${2:-"https"} # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo "🔍 Verifying deployment for $PROTOCOL://$DOMAIN" # Function to test URL test_url() { local url=$1 local expected_status=${2:-200} local description=$3 echo "Testing: $description" # Use curl to test the URL if command -v curl > /dev/null 2>&1; then response=$(curl -s -o /dev/null -w "%{http_code}" -L "$url" 2>/dev/null || echo "000") else echo -e "${YELLOW}⚠️ curl not found, skipping URL test${NC}" return 0 fi if [ "$response" -eq "$expected_status" ]; then echo -e "${GREEN}✅ $description - HTTP $response${NC}" elif [ "$response" -eq "000" ]; then echo -e "${RED}❌ $description - Connection failed${NC}" return 1 else echo -e "${RED}❌ $description - HTTP $response (expected $expected_status)${NC}" return 1 fi } # Function to test JSON endpoint test_json_endpoint() { local url=$1 local description=$2 echo "Testing: $description" if command -v curl > /dev/null 2>&1; then response=$(curl -s -L "$url" 2>/dev/null || echo "") if echo "$response" | python3 -m json.tool > /dev/null 2>&1; then echo -e "${GREEN}✅ $description - Valid JSON response${NC}" # Pretty print the response echo "$response" | python3 -m json.tool | head -10 else echo -e "${RED}❌ $description - Invalid JSON response${NC}" return 1 fi else echo -e "${YELLOW}⚠️ curl not found, skipping JSON test${NC}" return 0 fi } echo "" echo "🌐 Testing core endpoints..." # Test main endpoints test_url "$PROTOCOL://$DOMAIN/" 200 "Homepage" test_json_endpoint "$PROTOCOL://$DOMAIN/health/" "Health check endpoint" test_url "$PROTOCOL://$DOMAIN/accounts/login/" 200 "Login page" test_url "$PROTOCOL://$DOMAIN/admin/" 302 "Admin panel (should redirect to login)" echo "" echo "🔒 Testing SSL/HTTPS..." if [ "$PROTOCOL" = "https" ]; then # Test SSL certificate if command -v openssl > /dev/null 2>&1; then echo "Checking SSL certificate..." cert_info=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN:443" 2>/dev/null | openssl x509 -noout -dates 2>/dev/null || echo "") if [ -n "$cert_info" ]; then echo -e "${GREEN}✅ SSL certificate is valid${NC}" echo "$cert_info" else echo -e "${RED}❌ SSL certificate check failed${NC}" fi else echo -e "${YELLOW}⚠️ openssl not found, skipping SSL check${NC}" fi # Test HTTP to HTTPS redirect if command -v curl > /dev/null 2>&1; then redirect_response=$(curl -s -o /dev/null -w "%{redirect_url}" "http://$DOMAIN/" || echo "") if [[ "$redirect_response" == "https://"* ]]; then echo -e "${GREEN}✅ HTTP to HTTPS redirect working${NC}" else echo -e "${YELLOW}⚠️ HTTP to HTTPS redirect not detected${NC}" fi fi else echo "Testing HTTP deployment..." fi echo "" echo "🗄️ Testing database connectivity..." # Test if site is configured properly by checking login page login_response=$(curl -s -L "$PROTOCOL://$DOMAIN/accounts/login/" 2>/dev/null || echo "") if echo "$login_response" | grep -q "django_site" 2>/dev/null; then echo -e "${RED}❌ Database error: django_site relation not found${NC}" elif echo "$login_response" | grep -q "Login" 2>/dev/null; then echo -e "${GREEN}✅ Database connectivity working${NC}" else echo -e "${YELLOW}⚠️ Unable to verify database connectivity${NC}" fi echo "" echo "📱 Testing responsive design..." # Test if CSS is loading css_test=$(curl -s -L "$PROTOCOL://$DOMAIN/" 2>/dev/null | grep -o "styles\.css" || echo "") if [ -n "$css_test" ]; then echo -e "${GREEN}✅ CSS files are being loaded${NC}" else echo -e "${YELLOW}⚠️ CSS files may not be loading properly${NC}" fi echo "" echo "🎯 Deployment verification summary:" # Final health check health_url="$PROTOCOL://$DOMAIN/health/" if curl -s "$health_url" > /dev/null 2>&1; then echo -e "${GREEN}🎉 Deployment successful!${NC}" echo -e "${GREEN}✅ Your Django app is live and healthy${NC}" echo "" echo "🔗 Important URLs:" echo " Homepage: $PROTOCOL://$DOMAIN/" echo " Login: $PROTOCOL://$DOMAIN/accounts/login/" echo " Admin: $PROTOCOL://$DOMAIN/admin/" echo " Health: $PROTOCOL://$DOMAIN/health/" echo "" echo "Next steps:" echo "1. Create your admin user: python manage.py createsuperuser" echo "2. Configure social authentication in admin panel" echo "3. Test all functionality thoroughly" else echo -e "${RED}❌ Deployment verification failed${NC}" echo "Check deployment logs and retry" exit 1 fi