File size: 3,944 Bytes
1ea875f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
# ============================================================
# GitHub RAG Agent - 生产环境部署脚本 (2核2G服务器优化版)
# ============================================================
# 
# 使用方法:
#   chmod +x deploy.sh
#   ./deploy.sh
#
# 前置要求:
#   - Python 3.10+
#   - Docker (用于运行 Qdrant)
#
# ============================================================

set -e

echo "🚀 GitHub RAG Agent 部署脚本"
echo "=========================================="

# 检查是否在项目目录
if [ ! -f "requirements.txt" ]; then
    echo "❌ 请在项目根目录运行此脚本"
    exit 1
fi

# 检查 .env 文件
if [ ! -f ".env" ]; then
    echo "❌ 未找到 .env 文件,请先复制 .env.example 并配置"
    echo "   cp .env.example .env"
    echo "   vim .env"
    exit 1
fi

# ============================================================
# 1. 启动 Qdrant Server (Docker)
# ============================================================
echo ""
echo "📦 步骤 1: 启动 Qdrant Server..."

# 检查 Docker 是否运行
if ! docker info > /dev/null 2>&1; then
    echo "❌ Docker 未运行,请先启动 Docker"
    exit 1
fi

# 检查 Qdrant 容器是否已存在
if docker ps -a --format '{{.Names}}' | grep -q "^qdrant-server$"; then
    echo "   Qdrant 容器已存在,检查状态..."
    if docker ps --format '{{.Names}}' | grep -q "^qdrant-server$"; then
        echo "   ✅ Qdrant 已在运行"
    else
        echo "   🔄 启动已有的 Qdrant 容器..."
        docker start qdrant-server
    fi
else
    echo "   🆕 创建并启动 Qdrant 容器 (内存限制 512MB)..."
    docker run -d \
        --name qdrant-server \
        --restart unless-stopped \
        -p 6333:6333 \
        -p 6334:6334 \
        -v qdrant_data:/qdrant/storage \
        -m 512m \
        -e QDRANT__STORAGE__ON_DISK_PAYLOAD=true \
        qdrant/qdrant:latest
fi

# 等待 Qdrant 就绪
echo "   ⏳ 等待 Qdrant 就绪..."
for i in {1..30}; do
    if curl -s http://localhost:6333/health > /dev/null 2>&1; then
        echo "   ✅ Qdrant 已就绪"
        break
    fi
    sleep 1
done

# ============================================================
# 2. 创建 Python 虚拟环境
# ============================================================
echo ""
echo "🐍 步骤 2: 配置 Python 环境..."

if [ ! -d "venv" ]; then
    echo "   创建虚拟环境..."
    python3 -m venv venv
fi

echo "   激活虚拟环境..."
source venv/bin/activate

echo "   安装依赖..."
pip install -q --upgrade pip
pip install -q -r requirements.txt

# ============================================================
# 3. 创建必要目录
# ============================================================
echo ""
echo "📁 步骤 3: 创建数据目录..."
mkdir -p data/locks
mkdir -p data/contexts
mkdir -p logs

# ============================================================
# 4. 设置环境变量
# ============================================================
echo ""
echo "⚙️ 步骤 4: 配置环境变量..."

# 从 .env 加载
set -a
source .env
set +a

# 设置 Server 模式
export QDRANT_MODE=server
export QDRANT_URL=http://localhost:6333
export LOCK_BACKEND=file
export LOCK_DIR=data/locks
export GUNICORN_WORKERS=2

echo "   QDRANT_MODE=$QDRANT_MODE"
echo "   QDRANT_URL=$QDRANT_URL"
echo "   GUNICORN_WORKERS=$GUNICORN_WORKERS"

# ============================================================
# 5. 启动应用
# ============================================================
echo ""
echo "🌐 步骤 5: 启动 FastAPI 应用..."
echo "=========================================="
echo "   Workers: 2 (优化2核CPU)"
echo "   监听地址: 0.0.0.0:8000"
echo "   Qdrant: http://localhost:6333"
echo "=========================================="
echo ""
echo "   按 Ctrl+C 停止服务"
echo ""

# 使用 Gunicorn 启动 (2 Workers)
gunicorn app.main:app -c gunicorn_conf.py