xlcp/deploy/scripts/deploy-xlcp.sh
tangweijie bc40155ef0 chore: 添加部署配置及文档
- 新增 deploy/ 目录包含 Docker 部署配置、数据库脚本、部署脚本
- 更新 .gitignore 忽略 deploy 构建产物
- 添加 AGENTS.md AI Agent 指南
- 添加项目构建脚本 build.sh
2026-01-22 21:10:49 +08:00

132 lines
4.7 KiB
Bash
Executable File

#!/bin/bash
set -e
PROJECT_NAME="xlcp"
REMOTE_SERVER="${1:-root@192.168.10.150}"
REMOTE_DEPLOY_DIR="${REMOTE_DEPLOY_DIR:-/projects/data/xlcp}"
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)/.."
log_info() { echo "[INFO] $1"; }
log_success() { echo "[SUCCESS] $1"; }
log_error() { echo "[ERROR] $1"; exit 1; }
check_files() {
log_info "检查必要文件..."
local files=(
"$LOCAL_DIR/backend/yudao-server/target/yudao-server.jar"
"$LOCAL_DIR/frontend/dist/index.html"
"$LOCAL_DIR/deploy/docker-compose.yml"
"$LOCAL_DIR/deploy/config/application-prod.yaml"
"$LOCAL_DIR/deploy/docker/frontend/nginx.conf"
"$LOCAL_DIR/deploy/sql/prison_schema.sql"
)
for file in "${files[@]}"; do
[ -f "$file" ] || log_error "文件不存在: $file"
done
log_success "所有必要文件存在"
}
upload_files() {
log_info "上传文件到 $REMOTE_SERVER..."
ssh "$REMOTE_SERVER" "mkdir -p $REMOTE_DEPLOY_DIR/{config,docker/frontend,sql,data,logs,backend/yudao-server/target}"
rsync -avz --delete --exclude '*.tar.gz' --exclude '.git' \
--exclude 'node_modules' --exclude 'target' \
"$LOCAL_DIR/deploy/" "$REMOTE_SERVER:$REMOTE_DEPLOY_DIR/deploy/"
rsync -avz --progress "$LOCAL_DIR/backend/yudao-server/target/yudao-server.jar" \
"$REMOTE_SERVER:$REMOTE_DEPLOY_DIR/backend/yudao-server/target/"
rsync -avz --delete --progress --exclude 'node_modules' \
"$LOCAL_DIR/frontend/dist/" "$REMOTE_SERVER:$REMOTE_DEPLOY_DIR/frontend/dist/"
log_success "文件上传完成"
}
init_remote_dirs() {
log_info "初始化远程目录..."
ssh "$REMOTE_SERVER" "cd $REMOTE_DEPLOY_DIR && mkdir -p data/{mysql,redis,upload} logs/{backend,nginx} ssl && chmod -R 777 data/ logs/"
log_success "远程目录初始化完成"
}
start_services() {
log_info "启动服务..."
ssh "$REMOTE_SERVER" "cd $REMOTE_DEPLOY_DIR/deploy && docker compose down -v 2>/dev/null; docker compose up -d"
log_success "服务启动命令已执行"
}
health_check() {
log_info "进行健康检查..."
local server_ip=$(echo "$REMOTE_SERVER" | cut -d'@' -f2)
for i in {1..30}; do
curl -f -s "http://$server_ip:48080/actuator/health" > /dev/null 2>&1 && { log_success "后端服务正常"; break; }
echo -n "."
sleep 2
done
log_info "检查前端..."
curl -f -s "http://$server_ip/" > /dev/null 2>&1 && log_success "前端服务正常" || log_warn "前端可能未启动"
}
show_access_info() {
local server_ip=$(echo "$REMOTE_SERVER" | cut -d'@' -f2)
echo ""
echo "========================================="
echo "部署成功!"
echo "========================================="
echo ""
echo "访问地址:"
echo " 前端: http://$server_ip/"
echo " 后端 API: http://$server_ip:48080/admin-api/"
echo " 健康检查: http://$server_ip:48080/actuator/health"
echo ""
echo "管理命令:"
echo " SSH: ssh $REMOTE_SERVER"
echo " 查看日志: ssh $REMOTE_SERVER 'cd $REMOTE_DEPLOY_DIR/deploy && docker compose logs -f'"
echo " 重启服务: ssh $REMOTE_SERVER 'cd $REMOTE_DEPLOY_DIR/deploy && docker compose restart'"
echo " 停止服务: ssh $REMOTE_SERVER 'cd $REMOTE_DEPLOY_DIR/deploy && docker compose down'"
echo ""
echo "数据目录: $REMOTE_DEPLOY_DIR/data"
echo "日志目录: $REMOTE_DEPLOY_DIR/logs"
}
show_help() {
echo "用法: $0 [remote_server]"
echo ""
echo "参数:"
echo " remote_server 远程服务器地址 (默认: root@192.168.10.150)"
echo ""
echo "环境变量:"
echo " REMOTE_DEPLOY_DIR 远程部署目录 (默认: /projects/data/xlcp)"
echo ""
echo "示例:"
echo " $0 # 部署到默认服务器"
echo " $0 root@192.168.10.150 # 部署到指定服务器"
echo " REMOTE_DEPLOY_DIR=/opt/xlcp $0 # 自定义部署目录"
echo ""
echo "检查文件:"
echo " backend/yudao-server/target/yudao-server.jar"
echo " frontend/dist/"
echo " deploy/docker-compose.yml"
echo " deploy/config/application-prod.yaml"
echo " deploy/docker/frontend/nginx.conf"
echo ""
}
main() {
echo "========================================="
echo "XL监狱综合管理平台 - 部署脚本"
echo "========================================="
[[ "$1" == "--help" || "$1" == "-h" ]] && { show_help; exit 0; }
log_info "项目: $PROJECT_NAME, 服务器: $REMOTE_SERVER"
log_info "部署目录: $REMOTE_DEPLOY_DIR"
echo ""
check_files
upload_files
init_remote_dirs
start_services
health_check
show_access_info
}
main "$@"