mnemo_cards/tools/deploy/deploy-nginx-configs.sh

141 lines
4.4 KiB
Bash
Raw Normal View History

2025-11-23 00:00:32 +00:00
#!/bin/bash
# Script to deploy generated nginx configurations to the server
# This script uses the configurations generated by generate-nginx-configs.sh
set -e
SERVER_IP="147.45.152.129"
SERVER_USER="root"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
CONFIG_DIR="$SCRIPT_DIR/generated_configs"
echo "🚀 Deploying nginx configurations to server..."
echo "Server: $SERVER_IP"
echo "Config directory: $CONFIG_DIR"
echo ""
# Check if config directory exists and has files
if [ ! -d "$CONFIG_DIR" ]; then
echo "❌ Config directory not found: $CONFIG_DIR"
echo "Run generate-nginx-configs.sh first"
exit 1
fi
if [ ! "$(ls -A "$CONFIG_DIR"/*.conf 2>/dev/null)" ]; then
echo "❌ No configuration files found in $CONFIG_DIR"
echo "Run generate-nginx-configs.sh first"
exit 1
fi
echo "📤 Uploading configurations..."
scp "$CONFIG_DIR"/*.conf "$SERVER_USER@$SERVER_IP:/tmp/"
echo ""
echo "⚙️ Installing configurations on server..."
ssh "$SERVER_USER@$SERVER_IP" << 'ENDSSH'
set -e
echo "🛑 Stopping nginx service..."
systemctl stop nginx || true
echo "🧹 Cleaning up old configurations..."
rm -f /etc/nginx/sites-enabled/vscode*
rm -f /etc/nginx/sites-enabled/forgejo*
rm -f /etc/nginx/sites-enabled/code*
rm -f /etc/nginx/sites-enabled/mnemo*
echo "🧹 Killing any orphaned nginx processes..."
pkill -9 nginx 2>/dev/null || true
sleep 2
echo "📋 Installing new configurations..."
mv /tmp/vscode.mnemo-cards.online.conf /etc/nginx/sites-available/ 2>/dev/null || true
mv /tmp/code.mnemo-cards.online.conf /etc/nginx/sites-available/ 2>/dev/null || true
mv /tmp/mnemo-cards.online.conf /etc/nginx/sites-available/ 2>/dev/null || true
echo "🔗 Creating symbolic links..."
ln -sf /etc/nginx/sites-available/vscode.mnemo-cards.online.conf /etc/nginx/sites-enabled/ 2>/dev/null || true
ln -sf /etc/nginx/sites-available/code.mnemo-cards.online.conf /etc/nginx/sites-enabled/ 2>/dev/null || true
ln -sf /etc/nginx/sites-available/mnemo-cards.online.conf /etc/nginx/sites-enabled/ 2>/dev/null || true
echo "✅ Configurations installed"
echo ""
echo "📊 Validating configuration..."
if /usr/sbin/nginx -t; then
echo "✅ Configuration syntax is valid"
else
echo "❌ Configuration syntax error!"
echo "Checking configuration files..."
for config in /etc/nginx/sites-enabled/*; do
echo "Testing $(basename "$config")..."
if ! /usr/sbin/nginx -t -c /etc/nginx/nginx.conf 2>&1 | grep -q "$(basename "$config")"; then
echo " ❌ Error in $(basename "$config")"
head -20 "$config"
fi
done
echo "Restoring basic configuration..."
# Create minimal working config
cat > /etc/nginx/sites-available/emergency.conf << 'EMERGENCY'
server {
listen 80;
server_name _;
return 200 "nginx emergency mode\n";
access_log off;
}
EMERGENCY
ln -sf /etc/nginx/sites-available/emergency.conf /etc/nginx/sites-enabled/
systemctl start nginx
echo "Emergency configuration activated"
exit 1
fi
echo ""
echo "🔄 Starting nginx service..."
if systemctl start nginx; then
echo "✅ nginx started successfully"
else
echo "❌ nginx failed to start!"
systemctl status nginx --no-pager
exit 1
fi
echo ""
echo "📊 Verifying services are accessible..."
# Test each service
SERVICES=(
"mnemo-cards.online:80:301" # Should redirect to HTTPS
"code.mnemo-cards.online:80:301"
"vscode.mnemo-cards.online:80:301"
)
for service in "${SERVICES[@]}"; do
DOMAIN=$(echo "$service" | cut -d: -f1)
PORT=$(echo "$service" | cut -d: -f2)
EXPECTED_CODE=$(echo "$service" | cut -d: -f3)
if curl -I --max-time 5 "http://$DOMAIN:$PORT/" 2>/dev/null | grep -q "HTTP/1.1 $EXPECTED_CODE"; then
echo "$DOMAIN redirects correctly"
else
echo "⚠️ $DOMAIN not responding as expected"
fi
done
ENDSSH
echo ""
echo "✅ Deployment completed!"
echo ""
echo "🌐 Services should be accessible at:"
echo " https://mnemo-cards.online/ (main web app)"
echo " https://code.mnemo-cards.online/ (Forgejo)"
echo " https://vscode.mnemo-cards.online/ (VSCode Server)"
echo ""
echo "🔧 To check status: ./check-nginx.sh"
echo "🔧 To regenerate configs: ./generate-nginx-configs.sh"