Files
full-stack-doc/backend/quick_deploy_linux.sh
2025-10-14 20:05:29 +08:00

218 lines
5.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 快速部署脚本 - 修复虚拟环境问题
set -e
echo "=== 云盘后端快速部署脚本 ==="
# 检查当前目录
if [ ! -f "main.py" ]; then
echo "错误: 请在包含main.py的项目根目录下运行此脚本"
exit 1
fi
echo "当前目录: $(pwd)"
# 1. 检查Python环境
echo "1. 检查Python环境..."
if ! command -v python3 &> /dev/null; then
echo "错误: 未找到python3请先安装Python 3.8+"
exit 1
fi
echo "✓ Python版本: $(python3 --version)"
# 2. 创建必要目录
echo "2. 创建必要目录..."
mkdir -p logs uploads
echo "✓ 目录创建完成"
# 3. 直接安装依赖(不使用虚拟环境)
echo "3. 安装Python依赖系统级..."
echo "注意: 这将在系统级别安装依赖包"
# 检查是否为root用户
if [ "$EUID" -eq 0 ]; then
echo "检测到root用户使用pip3安装..."
pip3 install --upgrade pip
# 先安装email-validator
echo "安装email-validator..."
pip3 install email-validator
if [ -f "requirements.txt" ]; then
echo "从requirements.txt安装依赖..."
pip3 install -r requirements.txt
else
echo "安装基础依赖包..."
pip3 install fastapi uvicorn sqlalchemy pymysql redis python-jose passlib python-multipart pydantic pydantic-settings httpx python-dotenv loguru alembic bcrypt
fi
else
echo "使用用户级pip安装..."
# 检查是否有用户目录写入权限
USER_LOCAL="$HOME/.local"
if [ ! -w "$USER_LOCAL" ]; then
echo "⚠ 用户目录无写入权限,尝试使用系统级安装..."
pip3 install --upgrade pip
pip3 install email-validator
if [ -f "requirements.txt" ]; then
pip3 install -r requirements.txt
else
pip3 install fastapi uvicorn sqlalchemy pymysql redis python-jose passlib python-multipart pydantic pydantic-settings httpx python-dotenv loguru alembic bcrypt
fi
else
pip3 install --user --upgrade pip
# 先安装email-validator
echo "安装email-validator..."
pip3 install --user email-validator
if [ -f "requirements.txt" ]; then
echo "从requirements.txt安装依赖..."
pip3 install --user -r requirements.txt
else
echo "安装基础依赖包..."
pip3 install --user fastapi uvicorn sqlalchemy pymysql redis python-jose passlib python-multipart pydantic pydantic-settings httpx python-dotenv loguru alembic bcrypt
fi
fi
fi
echo "✓ 依赖安装完成"
# 4. 配置环境变量
echo "4. 配置环境变量..."
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 文件"
echo "请编辑 .env 文件配置数据库连接等参数"
else
echo "✓ .env 文件已存在"
fi
# 5. 创建启动脚本
echo "5. 创建启动脚本..."
cat > start_service.sh << 'STARTEOF'
#!/bin/bash
# 云盘后端启动脚本
# 进入脚本所在目录
cd "$(dirname "$0")"
# 检查环境文件
if [ ! -f ".env" ]; then
echo "错误: .env 文件不存在"
exit 1
fi
# 创建必要目录
mkdir -p logs uploads
# 启动服务
echo "启动云盘后端服务..."
echo "服务地址: http://localhost:8002"
echo "API文档: http://localhost:8002/docs"
echo "按 Ctrl+C 停止服务"
echo ""
python3 main.py
STARTEOF
chmod +x start_service.sh
echo "✓ 启动脚本创建完成: start_service.sh"
# 6. 创建停止脚本
echo "6. 创建停止脚本..."
cat > stop_service.sh << 'STOPEOF'
#!/bin/bash
# 云盘后端停止脚本
echo "停止云盘后端服务..."
pkill -f "python3 main.py" || echo "服务未运行"
echo "服务已停止"
STOPEOF
chmod +x stop_service.sh
echo "✓ 停止脚本创建完成: stop_service.sh"
# 7. 创建状态检查脚本
echo "7. 创建状态检查脚本..."
cat > check_status.sh << 'STATUSEOF'
#!/bin/bash
# 云盘后端状态检查脚本
if pgrep -f "python3 main.py" > /dev/null; then
echo "✓ 云盘后端服务正在运行"
echo "进程ID: $(pgrep -f 'python3 main.py')"
echo "端口: 8002"
echo "服务地址: http://localhost:8002"
echo "API文档: http://localhost:8002/docs"
# 测试健康检查
if command -v curl &> /dev/null; then
if curl -s http://localhost:8002/api/v1/health > /dev/null; then
echo "✓ 服务响应正常"
else
echo "⚠ 服务运行但可能有问题"
fi
else
echo "⚠ curl命令不可用无法测试服务响应"
fi
else
echo "✗ 云盘后端服务未运行"
echo "启动服务: ./start_service.sh"
fi
STATUSEOF
chmod +x check_status.sh
echo "✓ 状态检查脚本创建完成: check_status.sh"
# 8. 完成提示
echo ""
echo "=== 快速部署完成 ==="
echo "当前目录: $(pwd)"
echo ""
echo "管理命令:"
echo "1. 启动服务: ./start_service.sh"
echo "2. 停止服务: ./stop_service.sh"
echo "3. 查看状态: ./check_status.sh"
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 ""
echo "注意: 请确保数据库和Redis服务已启动并正确配置"
# 9. 自动启动服务
echo ""
echo "=== 正在启动服务 ==="
echo "启动云盘后端服务..."
./start_service.sh