- 新增 deploy/ 目录包含 Docker 部署配置、数据库脚本、部署脚本 - 更新 .gitignore 忽略 deploy 构建产物 - 添加 AGENTS.md AI Agent 指南 - 添加项目构建脚本 build.sh
132 lines
4.7 KiB
Bash
Executable File
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 "$@"
|