246 lines
6.2 KiB
Bash
246 lines
6.2 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# quick_start.sh - 快速启动脚本
|
|||
|
|
# 适配Docker部署的数据库环境
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
echo "========================================"
|
|||
|
|
echo "AI+合规智能中枢 - 快速启动脚本"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 颜色定义
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
VENV_DIR=".venv"
|
|||
|
|
|
|||
|
|
# 检查Python版本
|
|||
|
|
echo -e "${YELLOW}[1/8] 检查Python环境...${NC}"
|
|||
|
|
if command -v python3 &> /dev/null; then
|
|||
|
|
PYTHON_CMD=python3
|
|||
|
|
else
|
|||
|
|
PYTHON_CMD=python
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
PYTHON_VERSION=$($PYTHON_CMD --version 2>&1 | awk '{print $2}')
|
|||
|
|
echo "Python版本: $PYTHON_VERSION"
|
|||
|
|
|
|||
|
|
if [[ ! "$PYTHON_VERSION" =~ ^3\.1[0-9] ]]; then
|
|||
|
|
echo -e "${RED}需要Python 3.10+,当前版本: $PYTHON_VERSION${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo -e "${GREEN}Python环境检查通过${NC}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 创建虚拟环境
|
|||
|
|
echo -e "${YELLOW}[2/8] 创建虚拟环境...${NC}"
|
|||
|
|
if [ -d "$VENV_DIR" ]; then
|
|||
|
|
echo "虚拟环境已存在: $VENV_DIR"
|
|||
|
|
else
|
|||
|
|
echo "正在创建虚拟环境..."
|
|||
|
|
$PYTHON_CMD -m venv $VENV_DIR
|
|||
|
|
echo -e "${GREEN}虚拟环境创建成功${NC}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 激活虚拟环境
|
|||
|
|
source $VENV_DIR/bin/activate
|
|||
|
|
echo "已激活虚拟环境: $VENV_DIR"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 安装依赖(使用国内镜像源)
|
|||
|
|
echo -e "${YELLOW}[3/8] 安装Python依赖...${NC}"
|
|||
|
|
|
|||
|
|
# 配置pip使用清华镜像源(国内加速)
|
|||
|
|
PIP_MIRROR="https://mirrors.aliyun.com/pypi/simple"
|
|||
|
|
|
|||
|
|
echo "使用镜像源: $PIP_MIRROR"
|
|||
|
|
pip config set global.index-url $PIP_MIRROR -q
|
|||
|
|
|
|||
|
|
pip install --upgrade pip -q
|
|||
|
|
pip install -r requirements.txt -q
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}依赖安装完成${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}依赖安装失败,请检查requirements.txt${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查Docker容器状态
|
|||
|
|
echo -e "${YELLOW}[4/8] 检查Docker容器状态...${NC}"
|
|||
|
|
REQUIRED_CONTAINERS="milvus minio redis postgres"
|
|||
|
|
|
|||
|
|
for container in $REQUIRED_CONTAINERS; do
|
|||
|
|
if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then
|
|||
|
|
echo -e "${GREEN}✓ ${container} 容器运行正常${NC}"
|
|||
|
|
elif docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then
|
|||
|
|
echo -e "${YELLOW}⚠ ${container} 容器已停止,尝试启动...${NC}"
|
|||
|
|
docker start ${container}
|
|||
|
|
sleep 2
|
|||
|
|
if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then
|
|||
|
|
echo -e "${GREEN}✓ ${container} 已启动${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}✗ ${container} 启动失败${NC}"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}✗ ${container} 容器不存在${NC}"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查PostgreSQL连接(通过Python)
|
|||
|
|
echo -e "${YELLOW}[5/8] 检查PostgreSQL连接...${NC}"
|
|||
|
|
python << 'EOF'
|
|||
|
|
import sys
|
|||
|
|
try:
|
|||
|
|
import psycopg2
|
|||
|
|
conn = psycopg2.connect(
|
|||
|
|
host="localhost",
|
|||
|
|
port=5432,
|
|||
|
|
user="postgresql",
|
|||
|
|
password="postgresql123456",
|
|||
|
|
database="postgres"
|
|||
|
|
)
|
|||
|
|
cur = conn.cursor()
|
|||
|
|
|
|||
|
|
# 检查compliance_db是否存在
|
|||
|
|
cur.execute("SELECT 1 FROM pg_database WHERE datname='compliance_db'")
|
|||
|
|
exists = cur.fetchone()
|
|||
|
|
|
|||
|
|
if not exists:
|
|||
|
|
cur.execute("CREATE DATABASE compliance_db")
|
|||
|
|
print("数据库 compliance_db 创建成功")
|
|||
|
|
else:
|
|||
|
|
print("数据库 compliance_db 已存在")
|
|||
|
|
|
|||
|
|
conn.commit()
|
|||
|
|
cur.close()
|
|||
|
|
conn.close()
|
|||
|
|
print("PostgreSQL连接成功")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"PostgreSQL连接失败: {e}")
|
|||
|
|
sys.exit(1)
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}PostgreSQL服务运行正常${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}PostgreSQL连接失败${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查Redis连接(通过Python)
|
|||
|
|
echo -e "${YELLOW}[6/8] 检查Redis连接...${NC}"
|
|||
|
|
python << 'EOF'
|
|||
|
|
import sys
|
|||
|
|
try:
|
|||
|
|
import redis
|
|||
|
|
r = redis.Redis(
|
|||
|
|
host="localhost",
|
|||
|
|
port=6379,
|
|||
|
|
password="redis@123",
|
|||
|
|
decode_responses=True
|
|||
|
|
)
|
|||
|
|
result = r.ping()
|
|||
|
|
if result:
|
|||
|
|
print("Redis连接成功")
|
|||
|
|
else:
|
|||
|
|
sys.exit(1)
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"Redis连接失败: {e}")
|
|||
|
|
sys.exit(1)
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}Redis服务运行正常${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}Redis连接失败${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查Milvus连接(通过Python)
|
|||
|
|
echo -e "${YELLOW}[7/8] 检查Milvus连接...${NC}"
|
|||
|
|
python << 'EOF'
|
|||
|
|
import sys
|
|||
|
|
try:
|
|||
|
|
from pymilvus import connections, utility
|
|||
|
|
connections.connect(host="localhost", port=19530)
|
|||
|
|
print("Milvus连接成功")
|
|||
|
|
connections.disconnect("default")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"Milvus连接失败: {e}")
|
|||
|
|
sys.exit(1)
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}Milvus服务运行正常${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}Milvus连接失败${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查MinIO连接(通过Python)
|
|||
|
|
echo -e "${YELLOW}[8/8] 检查MinIO连接...${NC}"
|
|||
|
|
python << 'EOF'
|
|||
|
|
import sys
|
|||
|
|
try:
|
|||
|
|
from minio import Minio
|
|||
|
|
client = Minio("localhost:9000", "minioadmin", "minioadmin", secure=False)
|
|||
|
|
|
|||
|
|
# 检查bucket是否存在
|
|||
|
|
bucket = "compliance-docs"
|
|||
|
|
if not client.bucket_exists(bucket):
|
|||
|
|
client.make_bucket(bucket)
|
|||
|
|
print(f"MinIO bucket '{bucket}' 创建成功")
|
|||
|
|
else:
|
|||
|
|
print(f"MinIO bucket '{bucket}' 已存在")
|
|||
|
|
print("MinIO连接成功")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"MinIO连接失败: {e}")
|
|||
|
|
sys.exit(1)
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}MinIO服务运行正常${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}MinIO连接失败${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 预下载BGE-M3模型(可选)
|
|||
|
|
echo -e "${YELLOW}[提示] BGE-M3嵌入模型...${NC}"
|
|||
|
|
MODEL_CACHE=~/.cache/huggingface/hub/models--BAAI--bge-m3
|
|||
|
|
|
|||
|
|
if [ -d "$MODEL_CACHE" ]; then
|
|||
|
|
echo -e "${GREEN}BGE-M3模型已存在${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}模型未下载,首次运行时将自动下载(约2GB)${NC}"
|
|||
|
|
echo "手动预下载: python -c \"from FlagEmbedding import BGEM3FlagModel; BGEM3FlagModel('BAAI/bge-m3')\""
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 输出启动命令
|
|||
|
|
echo "========================================"
|
|||
|
|
echo -e "${GREEN}环境检查完成!${NC}"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo ""
|
|||
|
|
echo "虚拟环境: $VENV_DIR"
|
|||
|
|
echo ""
|
|||
|
|
echo "启动API服务:"
|
|||
|
|
echo " ./start_api.sh"
|
|||
|
|
echo ""
|
|||
|
|
echo "后台启动:"
|
|||
|
|
echo " ./start_api_background.sh"
|
|||
|
|
echo ""
|
|||
|
|
echo "API文档地址:"
|
|||
|
|
echo " http://localhost:8000/docs"
|
|||
|
|
echo " http://localhost:8000/health"
|
|||
|
|
echo ""
|