#!/bin/bash # TSP智能助手部署脚本 # 支持多环境部署、版本管理、自动备份 set -e # 遇到错误立即退出 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查依赖 check_dependencies() { log_info "检查系统依赖..." # 检查Python if ! command -v python3 &> /dev/null; then log_error "Python3 未安装" exit 1 fi # 检查pip if ! command -v pip3 &> /dev/null; then log_error "pip3 未安装" exit 1 fi # 检查Git if ! command -v git &> /dev/null; then log_error "Git 未安装" exit 1 fi log_info "依赖检查完成" } # 创建虚拟环境 setup_venv() { local venv_path=$1 log_info "创建虚拟环境: $venv_path" if [ ! -d "$venv_path" ]; then python3 -m venv "$venv_path" fi source "$venv_path/bin/activate" pip install --upgrade pip log_info "虚拟环境设置完成" } # 安装依赖 install_dependencies() { log_info "安装Python依赖..." pip install -r requirements.txt log_info "依赖安装完成" } # 数据库迁移 run_migrations() { log_info "运行数据库迁移..." # 检查数据库文件 if [ ! -f "tsp_assistant.db" ]; then log_info "初始化数据库..." python init_database.py fi log_info "数据库迁移完成" } # 创建systemd服务文件 create_systemd_service() { local service_name=$1 local app_path=$2 local service_file="/etc/systemd/system/${service_name}.service" log_info "创建systemd服务文件: $service_file" sudo tee "$service_file" > /dev/null < /dev/null </dev/null || echo "unknown") log_info "当前版本: $version" else log_warn "版本文件不存在" fi } # 创建部署包 create_deployment_package() { local package_name="tsp_assistant_$(date +%Y%m%d_%H%M%S).tar.gz" log_info "创建部署包: $package_name" # 排除不需要的文件 tar --exclude='.git' \ --exclude='__pycache__' \ --exclude='*.pyc' \ --exclude='.env' \ --exclude='logs/*' \ --exclude='backups/*' \ --exclude='dev_deploy' \ -czf "$package_name" . log_info "部署包创建完成: $package_name" echo "$package_name" } # 主函数 main() { case ${1:-deploy} in deploy) check_version deploy "$2" "$3" "$4" ;; rollback) rollback "$2" ;; package) create_deployment_package ;; *) echo "用法: $0 {deploy|rollback|package} [environment] [domain] [port]" echo "环境: development, staging, production" echo "" echo "命令说明:" echo " deploy - 部署到指定环境" echo " rollback - 回滚到指定备份" echo " package - 创建部署包" exit 1 ;; esac } main "$@"