Files
asd-backend/deploy.sh
Milky0217 da4e6f557e feat: 实现后端多环境配置机制
- 使用 toml crate 替代 config crate 直接读取配置文件
- 创建 config/default.toml、config/development.toml、config/production.toml
- 重写 config.rs 支持多环境配置加载
- 增强 deploy.sh 支持 development/production 环境参数
- 更新 IMPROVEMENTS.md 标记环境区分完成
2026-04-17 11:11:13 +08:00

99 lines
2.7 KiB
Bash
Executable File
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
set -euo pipefail
PROJECT_NAME="rust-backend"
REMOTE_USER="root"
REMOTE_HOST="1panel-server"
APP_ENV="${1:-production}"
# 根据环境选择远程目录和服务
case "${APP_ENV}" in
development)
REMOTE_DIR="/root/rust/rust_backend_dev"
SERVICE_NAME="rust-backend-dev.service"
;;
production)
REMOTE_DIR="/root/rust/rust_backend"
SERVICE_NAME="rust-backend.service"
;;
*)
echo "无效的环境: ${APP_ENV}"
echo "支持的環境: development, production"
exit 1
;;
esac
log_info() {
echo -e "\033[32m[INFO]\033[0m $1"
}
log_error() {
echo -e "\033[31m[ERROR]\033[0m $1" >&2
exit 1
}
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 "开始编译项目 (release模式),环境=${APP_ENV}..."
if APP_ENV="${APP_ENV}" cargo build --release; then
log_info "项目编译成功。"
else
log_error "项目编译失败!"
fi
}
upload_binary() {
local binary_path="./target/release/${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 "文件上传成功。"
}
upload_config() {
# development 环境跳过(远程已有正确配置,使用 localhost 连接)
if [ "${APP_ENV}" = "development" ]; then
log_info "跳过配置文件上传development 环境使用远程已有配置)..."
return 0
fi
log_info "正在上传配置文件到 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/config/..."
rsync -avzP --progress ./config/ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/config/"
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
}
main() {
log_info "========== 开始部署 (环境: ${APP_ENV}) =========="
log_info "远程目录: ${REMOTE_DIR}"
log_info "服务名称: ${SERVICE_NAME}"
check_dependencies
build_project
upload_binary
upload_config
restart_remote_service
log_info "========== 部署完成! =========="
}
main