270 lines
7.2 KiB
Bash
270 lines
7.2 KiB
Bash
#!/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 ""
|