141 lines
4.4 KiB
Bash
141 lines
4.4 KiB
Bash
|
|
#!/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"
|