初次提交
This commit is contained in:
225
backend/smart_deploy.sh
Normal file
225
backend/smart_deploy.sh
Normal file
@@ -0,0 +1,225 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 智能部署脚本 - 自动检测权限并选择合适的安装方式
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 云盘后端智能部署脚本 ==="
|
||||
|
||||
# 检查当前目录
|
||||
if [ ! -f "main.py" ]; then
|
||||
echo "错误: 请在包含main.py的项目根目录下运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "当前目录: $(pwd)"
|
||||
echo "当前用户: $(whoami)"
|
||||
echo "用户ID: $EUID"
|
||||
|
||||
# 1. 检查Python环境
|
||||
echo ""
|
||||
echo "1. 检查Python环境..."
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "错误: 未找到python3,请先安装Python 3.8+"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Python版本: $(python3 --version)"
|
||||
|
||||
# 2. 创建必要目录
|
||||
echo ""
|
||||
echo "2. 创建必要目录..."
|
||||
mkdir -p logs uploads
|
||||
echo "✓ 目录创建完成"
|
||||
|
||||
# 3. 创建和使用虚拟环境
|
||||
echo ""
|
||||
echo "3. 创建Python虚拟环境..."
|
||||
if [ ! -d "venv" ]; then
|
||||
echo "正在创建新的虚拟环境..."
|
||||
python3 -m venv venv
|
||||
echo "✓ 虚拟环境创建成功"
|
||||
else
|
||||
echo "✓ 虚拟环境已存在"
|
||||
fi
|
||||
|
||||
# 4. 激活虚拟环境并安装依赖
|
||||
echo ""
|
||||
echo "4. 激活虚拟环境并安装依赖..."
|
||||
|
||||
if [ -f "venv/bin/activate" ]; then
|
||||
source venv/bin/activate
|
||||
echo "✓ 虚拟环境已激活 (Linux)"
|
||||
elif [ -f "venv/Scripts/activate" ]; then
|
||||
source venv/Scripts/activate
|
||||
echo "✓ 虚拟环境已激活 (Windows)"
|
||||
else
|
||||
echo "✗ 虚拟环境激活文件不存在,重新创建..."
|
||||
rm -rf venv
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
echo "✓ 虚拟环境重新创建并激活成功"
|
||||
fi
|
||||
|
||||
# 升级pip
|
||||
echo "升级虚拟环境中的pip..."
|
||||
pip install --upgrade pip
|
||||
|
||||
# 先安装email-validator
|
||||
echo "安装email-validator..."
|
||||
pip install email-validator
|
||||
|
||||
# 安装其他依赖
|
||||
echo "安装其他依赖..."
|
||||
if [ -f "requirements.txt" ]; then
|
||||
echo "从requirements.txt安装..."
|
||||
pip install -r requirements.txt
|
||||
else
|
||||
echo "安装核心依赖..."
|
||||
pip install fastapi uvicorn sqlalchemy pymysql redis python-jose passlib python-multipart pydantic pydantic-settings httpx python-dotenv loguru alembic bcrypt
|
||||
fi
|
||||
|
||||
echo "✓ 依赖安装完成 (虚拟环境中)"
|
||||
|
||||
# 5. 验证安装
|
||||
echo ""
|
||||
echo "5. 验证依赖安装..."
|
||||
python -c "
|
||||
import sys
|
||||
try:
|
||||
import email_validator
|
||||
print('✓ email-validator')
|
||||
except ImportError:
|
||||
print('✗ email-validator 导入失败')
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
from pydantic import EmailStr
|
||||
print('✓ Pydantic EmailStr')
|
||||
except Exception as e:
|
||||
print(f'✗ Pydantic EmailStr 失败: {e}')
|
||||
sys.exit(1)
|
||||
|
||||
packages = ['fastapi', 'uvicorn', 'sqlalchemy', 'pymysql', 'redis']
|
||||
for pkg in packages:
|
||||
try:
|
||||
__import__(pkg)
|
||||
print(f'✓ {pkg}')
|
||||
except ImportError:
|
||||
print(f'✗ {pkg} 导入失败')
|
||||
sys.exit(1)
|
||||
|
||||
print('\\n✓ 所有依赖验证成功!')
|
||||
"
|
||||
|
||||
# 6. 配置环境变量
|
||||
echo ""
|
||||
echo "6. 配置环境变量..."
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "创建默认 .env 文件..."
|
||||
cat > .env << EOF
|
||||
# 基础配置
|
||||
ENVIRONMENT=production
|
||||
DEBUG=false
|
||||
|
||||
# 数据库配置
|
||||
DATABASE_URL=mysql+pymysql://用户名:密码@localhost:3306/数据库名
|
||||
|
||||
# Redis配置
|
||||
REDIS_URL=redis://localhost:6379
|
||||
|
||||
# JWT配置
|
||||
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-$(date +%s)
|
||||
JWT_ALGORITHM=HS256
|
||||
JWT_EXPIRE_MINUTES=30
|
||||
|
||||
# 文件上传配置
|
||||
UPLOAD_DIR=uploads
|
||||
MAX_FILE_SIZE=10485760
|
||||
|
||||
# CORS配置
|
||||
ALLOWED_HOSTS=["*"]
|
||||
EOF
|
||||
echo "✓ 已创建默认 .env 文件"
|
||||
else
|
||||
echo "✓ .env 文件已存在"
|
||||
fi
|
||||
|
||||
# 7. 创建启动脚本(可选,用于手动启动)
|
||||
echo ""
|
||||
echo "7. 创建启动脚本(用于手动启动)..."
|
||||
cat > start_app.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
# 云盘后端启动脚本
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "错误: .env 文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p logs uploads
|
||||
|
||||
# 激活虚拟环境
|
||||
if [ -f "venv/bin/activate" ]; then
|
||||
source venv/bin/activate
|
||||
elif [ -f "venv/Scripts/activate" ]; then
|
||||
source venv/Scripts/activate
|
||||
fi
|
||||
|
||||
echo "启动云盘后端服务..."
|
||||
echo "服务地址: http://localhost:8002"
|
||||
echo "API文档: http://localhost:8002/docs"
|
||||
echo "按 Ctrl+C 停止服务"
|
||||
echo ""
|
||||
|
||||
python main.py
|
||||
EOF
|
||||
|
||||
chmod +x start_app.sh
|
||||
echo "✓ 启动脚本创建完成: start_app.sh"
|
||||
|
||||
# 8. 测试应用配置
|
||||
echo ""
|
||||
echo "8. 测试应用配置..."
|
||||
python -c "
|
||||
import sys
|
||||
sys.path.insert(0, '.')
|
||||
try:
|
||||
from app.core.config import settings
|
||||
print('✓ 应用配置加载成功')
|
||||
print(f' 环境: {settings.ENVIRONMENT}')
|
||||
print(f' 调试模式: {settings.DEBUG}')
|
||||
except Exception as e:
|
||||
print(f'✗ 应用配置加载失败: {e}')
|
||||
print('请检查.env文件和应用代码')
|
||||
sys.exit(1)
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "=== 智能部署完成 ==="
|
||||
echo ""
|
||||
echo "管理命令:"
|
||||
echo "手动启动: ./start_app.sh"
|
||||
echo "直接启动: source venv/bin/activate && python main.py"
|
||||
echo ""
|
||||
echo "访问地址:"
|
||||
echo "- 服务地址: http://localhost:8002"
|
||||
echo "- API文档: http://localhost:8002/docs"
|
||||
echo "- 健康检查: http://localhost:8002/api/v1/health"
|
||||
echo ""
|
||||
echo "配置文件: .env"
|
||||
echo "日志目录: logs/"
|
||||
echo "上传目录: uploads/"
|
||||
echo "虚拟环境: venv/"
|
||||
|
||||
# 9. 直接启动应用(在虚拟环境中)
|
||||
echo ""
|
||||
echo "=== 正在启动服务 ==="
|
||||
echo "在虚拟环境中启动云盘后端服务..."
|
||||
echo "服务地址: http://localhost:8002"
|
||||
echo "API文档: http://localhost:8002/docs"
|
||||
echo "按 Ctrl+C 停止服务"
|
||||
echo ""
|
||||
|
||||
python main.py
|
||||
Reference in New Issue
Block a user