zhibo/deploy-to-server.sh
2025-12-30 17:28:20 +08:00

270 lines
7.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 ""