#!/bin/bash # 部署脚本 # 使用方法: ./deploy.sh set -e # 遇到错误立即退出 PROJECT_NAME="ball-tracking-server" USER="root" PYTHON_VERSION="python3" echo "🚀 开始部署 $PROJECT_NAME..." # 1. 检查当前目录和权限 echo "📍 当前目录: $(pwd)" echo "👤 当前用户: $(whoami)" # 2. 更新代码 (如果使用 git) if [ -d ".git" ]; then echo "📥 更新代码..." git pull origin main # 或者你的主分支名 fi # 3. 检查 Python 版本 echo "🐍 检查 Python 版本..." $PYTHON_VERSION --version which $PYTHON_VERSION # 4. 创建虚拟环境 (如果不存在) if [ ! -d "venv" ]; then echo "🐍 创建 Python 虚拟环境..." $PYTHON_VERSION -m venv venv if [ ! -f "venv/bin/activate" ]; then echo "❌ 错误: 虚拟环境创建失败,检查 Python 安装" echo "尝试使用以下命令手动创建:" echo "$PYTHON_VERSION -m venv venv" exit 1 fi echo "✅ 虚拟环境创建成功" else echo "✅ 虚拟环境已存在" fi # 5. 检查虚拟环境激活脚本 if [ ! -f "venv/bin/activate" ]; then echo "❌ 错误: 找不到虚拟环境激活脚本" echo "虚拟环境目录内容:" ls -la venv/ || echo "venv 目录不存在或无法访问" echo "尝试删除并重新创建虚拟环境..." rm -rf venv $PYTHON_VERSION -m venv venv fi # 6. 激活虚拟环境并安装依赖 echo "📦 安装 Python 依赖..." source venv/bin/activate echo "🐍 虚拟环境已激活: $(which python)" pip install --upgrade pip pip install -r requirements.txt pip install gunicorn supervisor # 生产环境依赖 # 7. 构建前端 echo "🏗️ 构建前端..." cd app/web if command -v bun &> /dev/null; then echo "使用 Bun 构建..." bun install bun run build elif command -v npm &> /dev/null; then echo "使用 npm 构建..." npm install npm run build else echo "❌ 错误: 未找到 bun 或 npm" exit 1 fi # 8. 返回项目根目录 cd "../.." # 9. 创建必要的目录 echo "📁 创建必要目录..." mkdir -p logs mkdir -p data/sessions # 10. 设置权限 echo "🔐 设置文件权限..." chown -R $USER:$USER . chmod +x deploy.sh chmod +x start.sh chmod +x stop.sh # 11. 复制配置文件到系统目录 (需要 sudo) echo "⚙️ 配置系统服务..." if [ -f "/etc/supervisor/conf.d/$PROJECT_NAME.conf" ]; then sudo cp supervisor.conf /etc/supervisor/conf.d/$PROJECT_NAME.conf sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart $PROJECT_NAME else sudo cp supervisor.conf /etc/supervisor/conf.d/$PROJECT_NAME.conf sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start $PROJECT_NAME fi echo "✅ 部署完成!" echo "📝 查看日志: sudo supervisorctl tail -f $PROJECT_NAME" echo "🔄 重启服务: sudo supervisorctl restart $PROJECT_NAME" echo "⏹️ 停止服务: sudo supervisorctl stop $PROJECT_NAME"