zhibo/deploy-to-server.sh

270 lines
7.2 KiB
Bash
Raw Normal View History

2025-12-30 17:28:20 +08:00
#!/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 ""