feat: 实现后端多环境配置机制

- 使用 toml crate 替代 config crate 直接读取配置文件
- 创建 config/default.toml、config/development.toml、config/production.toml
- 重写 config.rs 支持多环境配置加载
- 增强 deploy.sh 支持 development/production 环境参数
- 更新 IMPROVEMENTS.md 标记环境区分完成
This commit is contained in:
2026-04-17 11:11:13 +08:00
parent ca7ddcc55e
commit da4e6f557e
8 changed files with 314 additions and 62 deletions

View File

@@ -1,18 +1,28 @@
#!/bin/bash
# ==============================================================================
# 部署脚本 - Rust Backend
# ==============================================================================
set -euo pipefail
# --- 1. 配置 ---
PROJECT_NAME="rust-backend"
REMOTE_USER="root"
REMOTE_HOST="1panel-server"
REMOTE_DIR="/root/rust/rust_backend"
SERVICE_NAME="rust-backend.service"
APP_ENV="${1:-production}"
# --- 2. 脚本初始化 ---
set -euo pipefail
# 根据环境选择远程目录和服务
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"
@@ -23,7 +33,6 @@ log_error() {
exit 1
}
# --- 3. 检查依赖 ---
check_dependencies() {
local deps=("cargo" "rsync" "ssh")
for cmd in "${deps[@]}"; do
@@ -34,17 +43,15 @@ check_dependencies() {
log_info "所有依赖项检查通过。"
}
# --- 4. 编译项目 ---
build_project() {
log_info "开始编译项目 (release模式)..."
if cargo build --release; then
log_info "开始编译项目 (release模式),环境=${APP_ENV}..."
if APP_ENV="${APP_ENV}" cargo build --release; then
log_info "项目编译成功。"
else
log_error "项目编译失败!"
fi
}
# --- 5. 上传二进制文件 ---
upload_binary() {
local binary_path="./target/release/${PROJECT_NAME}"
if [ ! -f "$binary_path" ]; then
@@ -56,7 +63,18 @@ upload_binary() {
log_info "文件上传成功。"
}
# --- 6. 重启远程服务 ---
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
@@ -66,14 +84,16 @@ restart_remote_service() {
fi
}
# --- 7. 主执行流程 ---
main() {
log_info "========== 开始部署 =========="
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
main