#!/bin/bash # ============================================ # 直播系统一键部署脚本 # 服务器地址: 1.15.149.240 # ============================================ set -e # 配置变量 SERVER_IP="1.15.149.240" SERVER_USER="root" DEPLOY_PATH="/opt/zhibo" ADMIN_API_PORT=30001 FRONT_API_PORT=8081 echo "==========================================" echo " 直播系统部署脚本" echo " 目标服务器: $SERVER_IP" echo "==========================================" # 检查SSH连接 echo "" echo "[1/6] 检查SSH连接..." ssh -o ConnectTimeout=10 ${SERVER_USER}@${SERVER_IP} "echo 'SSH连接成功'" || { echo "错误: 无法连接到服务器 ${SERVER_IP}" echo "请确保:" echo " 1. 服务器IP正确" echo " 2. SSH密钥已配置或准备好密码" exit 1 } # 在服务器上创建目录结构 echo "" echo "[2/6] 创建服务器目录结构..." ssh ${SERVER_USER}@${SERVER_IP} << 'ENDSSH' mkdir -p /opt/zhibo/admin-api mkdir -p /opt/zhibo/front-api mkdir -p /opt/zhibo/admin-web mkdir -p /opt/zhibo/logs mkdir -p /opt/zhibo/scripts echo "目录创建完成" ENDSSH # 上传后端JAR包 echo "" echo "[3/6] 上传后端JAR包..." echo " - 上传 Admin API (Crmeb-admin.jar)..." scp Zhibo/zhibo-h/crmeb-admin/target/Crmeb-admin.jar ${SERVER_USER}@${SERVER_IP}:/opt/zhibo/admin-api/ echo " - 上传 Front API (Crmeb-front.jar)..." scp Zhibo/zhibo-h/crmeb-front/target/Crmeb-front.jar ${SERVER_USER}@${SERVER_IP}:/opt/zhibo/front-api/ # 上传前端文件 echo "" echo "[4/6] 上传前端管理界面..." scp -r Zhibo/admin/dist/* ${SERVER_USER}@${SERVER_IP}:/opt/zhibo/admin-web/ # 创建启动脚本 echo "" echo "[5/6] 创建服务启动脚本..." ssh ${SERVER_USER}@${SERVER_IP} << 'ENDSSH' # 创建Admin API启动脚本 cat > /opt/zhibo/scripts/start-admin-api.sh << 'EOF' #!/bin/bash APP_NAME="Crmeb-admin" APP_PATH="/opt/zhibo/admin-api" LOG_PATH="/opt/zhibo/logs" JAR_FILE="${APP_PATH}/${APP_NAME}.jar" # 停止旧进程 pid=$(ps -ef | grep "${APP_NAME}.jar" | grep -v grep | awk '{print $2}') if [ -n "$pid" ]; then echo "停止旧进程: $pid" kill -9 $pid sleep 2 fi # 启动新进程 if [ -f "$JAR_FILE" ]; then echo "启动 ${APP_NAME}..." nohup java -Xms512m -Xmx1024m -jar $JAR_FILE \ --spring.redis.host=127.0.0.1 \ > ${LOG_PATH}/admin-api.log 2>&1 & echo "Admin API 启动成功,端口: 30001" else echo "错误: JAR文件不存在: $JAR_FILE" exit 1 fi EOF # 创建Front API启动脚本 cat > /opt/zhibo/scripts/start-front-api.sh << 'EOF' #!/bin/bash APP_NAME="Crmeb-front" APP_PATH="/opt/zhibo/front-api" LOG_PATH="/opt/zhibo/logs" JAR_FILE="${APP_PATH}/${APP_NAME}.jar" # 停止旧进程 pid=$(ps -ef | grep "${APP_NAME}.jar" | grep -v grep | awk '{print $2}') if [ -n "$pid" ]; then echo "停止旧进程: $pid" kill -9 $pid sleep 2 fi # 启动新进程 if [ -f "$JAR_FILE" ]; then echo "启动 ${APP_NAME}..." nohup java -Xms512m -Xmx1024m -jar $JAR_FILE \ --spring.redis.host=127.0.0.1 \ > ${LOG_PATH}/front-api.log 2>&1 & echo "Front API 启动成功,端口: 8081" else echo "错误: JAR文件不存在: $JAR_FILE" exit 1 fi EOF # 创建停止脚本 cat > /opt/zhibo/scripts/stop-all.sh << 'EOF' #!/bin/bash echo "停止所有服务..." pkill -f "Crmeb-admin.jar" 2>/dev/null && echo "Admin API 已停止" || echo "Admin API 未运行" pkill -f "Crmeb-front.jar" 2>/dev/null && echo "Front API 已停止" || echo "Front API 未运行" echo "完成" EOF # 创建一键启动脚本 cat > /opt/zhibo/scripts/start-all.sh << 'EOF' #!/bin/bash echo "==========================================" echo " 启动所有直播系统服务" echo "==========================================" cd /opt/zhibo/scripts ./start-admin-api.sh sleep 5 ./start-front-api.sh echo "" echo "所有服务启动完成!" echo " - Admin API: http://localhost:30001" echo " - Front API: http://localhost:8081" EOF # 创建状态检查脚本 cat > /opt/zhibo/scripts/status.sh << 'EOF' #!/bin/bash echo "==========================================" echo " 服务状态检查" echo "==========================================" echo "" echo "Admin API (端口 30001):" if pgrep -f "Crmeb-admin.jar" > /dev/null; then echo " 状态: 运行中" pid=$(pgrep -f "Crmeb-admin.jar") echo " PID: $pid" else echo " 状态: 未运行" fi echo "" echo "Front API (端口 8081):" if pgrep -f "Crmeb-front.jar" > /dev/null; then echo " 状态: 运行中" pid=$(pgrep -f "Crmeb-front.jar") echo " PID: $pid" else echo " 状态: 未运行" fi echo "" echo "端口监听状态:" netstat -tlnp 2>/dev/null | grep -E "30001|8081" || ss -tlnp | grep -E "30001|8081" EOF chmod +x /opt/zhibo/scripts/*.sh echo "启动脚本创建完成" ENDSSH # 创建Nginx配置 echo "" echo "[6/6] 配置Nginx..." ssh ${SERVER_USER}@${SERVER_IP} << 'ENDSSH' # 检查Nginx是否安装 if ! command -v nginx &> /dev/null; then echo "Nginx未安装,正在安装..." apt-get update && apt-get install -y nginx || yum install -y nginx fi # 创建Nginx配置 cat > /etc/nginx/conf.d/zhibo.conf << 'EOF' # 直播系统 - 管理后台前端 server { listen 80; server_name admin.zhibo.local; # 可以改成你的域名 root /opt/zhibo/admin-web; index index.html; # 前端静态文件 location / { try_files $uri $uri/ /index.html; } # 代理Admin API location /api/admin/ { proxy_pass http://127.0.0.1:30001/api/admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 代理公共API location /api/public/ { proxy_pass http://127.0.0.1:30001/api/public/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 直播系统 - 前端API (供APP调用) server { listen 8080; server_name _; # 代理Front API location / { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; } } EOF # 测试Nginx配置 nginx -t && systemctl reload nginx echo "Nginx配置完成" ENDSSH echo "" echo "==========================================" echo " 部署完成!" echo "==========================================" echo "" echo "接下来请在服务器上执行以下命令启动服务:" echo "" echo " ssh ${SERVER_USER}@${SERVER_IP}" echo " cd /opt/zhibo/scripts" echo " ./start-all.sh" echo "" echo "服务访问地址:" echo " - 管理后台: http://${SERVER_IP}" echo " - Admin API: http://${SERVER_IP}:30001" echo " - Front API: http://${SERVER_IP}:8081 (或通过Nginx 8080端口)" echo "" echo "常用命令:" echo " - 启动所有服务: /opt/zhibo/scripts/start-all.sh" echo " - 停止所有服务: /opt/zhibo/scripts/stop-all.sh" echo " - 查看服务状态: /opt/zhibo/scripts/status.sh" echo " - 查看日志: tail -f /opt/zhibo/logs/admin-api.log" echo " tail -f /opt/zhibo/logs/front-api.log" echo ""