86 lines
2.2 KiB
Bash
Executable File
86 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 部署脚本
|
|
# 使用方法: ./deploy.sh
|
|
|
|
set -e # 遇到错误立即退出
|
|
|
|
PROJECT_ROOT="/path/to/your/ball-tracking/server-neo" # 请替换为实际路径
|
|
PROJECT_NAME="ball-tracking-server"
|
|
USER="www-data" # 或者你的用户名
|
|
PYTHON_VERSION="python3"
|
|
|
|
echo "🚀 开始部署 $PROJECT_NAME..."
|
|
|
|
# 1. 进入项目目录
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 2. 更新代码 (如果使用 git)
|
|
if [ -d ".git" ]; then
|
|
echo "📥 更新代码..."
|
|
git pull origin main # 或者你的主分支名
|
|
fi
|
|
|
|
# 3. 创建虚拟环境 (如果不存在)
|
|
if [ ! -d "venv" ]; then
|
|
echo "🐍 创建 Python 虚拟环境..."
|
|
$PYTHON_VERSION -m venv venv
|
|
fi
|
|
|
|
# 4. 激活虚拟环境并安装依赖
|
|
echo "📦 安装 Python 依赖..."
|
|
source venv/bin/activate
|
|
pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
pip install gunicorn supervisor # 生产环境依赖
|
|
|
|
# 5. 构建前端
|
|
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
|
|
|
|
# 6. 返回项目根目录
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 7. 创建必要的目录
|
|
echo "📁 创建必要目录..."
|
|
mkdir -p logs
|
|
mkdir -p data/sessions
|
|
|
|
# 8. 设置权限
|
|
echo "🔐 设置文件权限..."
|
|
chown -R $USER:$USER .
|
|
chmod +x deploy.sh
|
|
chmod +x start.sh
|
|
chmod +x stop.sh
|
|
|
|
# 9. 复制配置文件到系统目录 (需要 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"
|