更新了deploy的方法
This commit is contained in:
136
deploy.sh
136
deploy.sh
@@ -1,27 +1,129 @@
|
||||
#!/bin/bash
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
# 配置
|
||||
LOCAL_DIR="/home/milky/Documents/ASD-backend/rust-backend/target/debug/"
|
||||
# ==============================================================================
|
||||
# 部署脚本 - Rust Backend (支持编译模式选择)
|
||||
# ==============================================================================
|
||||
|
||||
# --- 1. 配置 ---
|
||||
# 项目名称
|
||||
PROJECT_NAME="rust-backend"
|
||||
# 远程服务器信息
|
||||
REMOTE_USER="root"
|
||||
REMOTE_HOST="1panel-server" # 或直接使用IP
|
||||
REMOTE_HOST="1panel-server"
|
||||
REMOTE_DIR="/root/rust/rust_backend"
|
||||
# 远程服务名称 (用于 systemctl restart)
|
||||
SERVICE_NAME="rust-backend.service"
|
||||
|
||||
# 检查本地目录是否存在
|
||||
if [ ! -d "$LOCAL_DIR" ]; then
|
||||
echo "错误:本地目录 $LOCAL_DIR 不存在"
|
||||
# --- 2. 脚本初始化 ---
|
||||
set -euo pipefail
|
||||
|
||||
# 定义日志函数
|
||||
log_info() {
|
||||
echo -e "\033[32m[INFO]\033[0m $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "\033[31m[ERROR]\033[0m $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 打印帮助信息
|
||||
usage() {
|
||||
echo "用法: $0 [--release]"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " --release 以 Release 模式编译并部署 (默认为 Debug 模式)"
|
||||
echo " -h, --help 显示此帮助信息"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# --- 3. 参数解析与动态配置 ---
|
||||
|
||||
# 默认为 Debug 模式
|
||||
IS_RELEASE=false
|
||||
BUILD_MODE="debug"
|
||||
CARGO_ARGS=""
|
||||
TARGET_BASE_DIR="/home/milky/Documents/ASD-backend/rust-backend/target/x86_64-unknown-linux-gnu/"
|
||||
|
||||
# 解析命令行参数
|
||||
if [[ "$#" -gt 0 ]]; then
|
||||
case "$1" in
|
||||
--release)
|
||||
IS_RELEASE=true
|
||||
BUILD_MODE="release"
|
||||
CARGO_ARGS="--release"
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: '$1'。使用 '$0 --help' 查看用法。"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# 编译项目(如果需要)
|
||||
echo "正在编译项目..."
|
||||
cargo build --release --target x86_64-unknown-linux-gnu
|
||||
#cargo build
|
||||
# 根据模式动态设置目标目录
|
||||
TARGET_DIR="${TARGET_BASE_DIR}${BUILD_MODE}/"
|
||||
|
||||
# 上传文件
|
||||
echo "正在上传文件..."
|
||||
rsync -avz --progress \
|
||||
$LOCAL_DIR/rust-backend \
|
||||
$REMOTE_HOST:$REMOTE_DIR/
|
||||
log_info "部署模式: ${BUILD_MODE}"
|
||||
log_info "本地目标目录: ${TARGET_DIR}"
|
||||
|
||||
echo "部署完成!"
|
||||
# --- 4. 核心功能函数 ---
|
||||
|
||||
# 检查必要的命令是否存在
|
||||
check_dependencies() {
|
||||
local deps=("cargo" "rsync" "ssh")
|
||||
for cmd in "${deps[@]}"; do
|
||||
if ! command -v "$cmd" &> /dev/null; then
|
||||
log_error "依赖命令 '$cmd' 未找到,请先安装。"
|
||||
fi
|
||||
done
|
||||
log_info "所有依赖项检查通过。"
|
||||
}
|
||||
|
||||
# 编译项目
|
||||
build_project() {
|
||||
log_info "开始编译项目 (${BUILD_MODE}模式)..."
|
||||
# 使用动态的 CARGO_ARGS
|
||||
if cargo build ${CARGO_ARGS} --target x86_64-unknown-linux-gnu --quiet; then
|
||||
log_info "项目编译成功。"
|
||||
else
|
||||
log_error "项目编译失败!"
|
||||
fi
|
||||
}
|
||||
|
||||
# 上传二进制文件
|
||||
upload_binary() {
|
||||
local binary_path="${TARGET_DIR}${PROJECT_NAME}"
|
||||
if [ ! -f "$binary_path" ]; then
|
||||
log_error "编译产物未找到: $binary_path"
|
||||
fi
|
||||
|
||||
log_info "正在上传二进制文件到 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}..."
|
||||
rsync -avzP --progress "$binary_path" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/"
|
||||
log_info "文件上传成功。"
|
||||
}
|
||||
|
||||
# 重启远程服务
|
||||
restart_remote_service() {
|
||||
log_info "正在重启远程服务 '${SERVICE_NAME}'..."
|
||||
if ssh "${REMOTE_USER}@${REMOTE_HOST}" "systemctl restart ${SERVICE_NAME}"; then
|
||||
log_info "远程服务重启成功。"
|
||||
else
|
||||
log_error "远程服务重启失败!请检查服务状态和日志。"
|
||||
fi
|
||||
}
|
||||
|
||||
# --- 5. 主执行流程 ---
|
||||
|
||||
main() {
|
||||
log_info "========== 开始部署 (${BUILD_MODE}模式) =========="
|
||||
check_dependencies
|
||||
build_project
|
||||
upload_binary
|
||||
restart_remote_service
|
||||
log_info "========== 部署完成! =========="
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main
|
||||
Reference in New Issue
Block a user