feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
223
backend/deploy/quick_deploy.sh
Normal file
223
backend/deploy/quick_deploy.sh
Normal file
@@ -0,0 +1,223 @@
|
||||
#!/bin/bash
|
||||
# 快速部署脚本 - 考陪练 SQL 执行器
|
||||
# 使用方法: bash quick_deploy.sh
|
||||
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
echo "==================================="
|
||||
echo "考陪练 SQL 执行器快速部署脚本"
|
||||
echo "服务器: 120.79.247.16"
|
||||
echo "==================================="
|
||||
|
||||
# 配置变量
|
||||
APP_DIR="/opt/kaopeilian/backend"
|
||||
SERVICE_NAME="kaopeilian-backend"
|
||||
PYTHON_VERSION="python3"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 打印带颜色的信息
|
||||
print_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查是否为 root 用户
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
print_error "此脚本必须以 root 用户运行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. 安装系统依赖
|
||||
print_info "安装系统依赖..."
|
||||
apt update
|
||||
apt install -y python3 python3-pip python3-venv git mysql-client
|
||||
|
||||
# 2. 创建应用目录
|
||||
print_info "创建应用目录..."
|
||||
mkdir -p $APP_DIR
|
||||
|
||||
# 3. 检查代码是否存在
|
||||
if [ ! -f "$APP_DIR/app/main.py" ]; then
|
||||
print_warning "代码不存在,请先上传代码到 $APP_DIR"
|
||||
print_info "可以使用以下命令上传:"
|
||||
echo "scp -r /path/to/kaopeilian-backend/* root@120.79.247.16:$APP_DIR/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $APP_DIR
|
||||
|
||||
# 4. 创建虚拟环境
|
||||
print_info "创建 Python 虚拟环境..."
|
||||
if [ ! -d "venv" ]; then
|
||||
$PYTHON_VERSION -m venv venv
|
||||
fi
|
||||
|
||||
# 5. 激活虚拟环境并安装依赖
|
||||
print_info "安装 Python 依赖..."
|
||||
source venv/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 6. 创建环境配置文件
|
||||
if [ ! -f ".env" ]; then
|
||||
print_info "创建环境配置文件..."
|
||||
cat > .env << EOF
|
||||
# 应用配置
|
||||
APP_NAME=KaoPeiLian
|
||||
DEBUG=False
|
||||
HOST=0.0.0.0
|
||||
PORT=8000
|
||||
|
||||
# 数据库配置
|
||||
DATABASE_URL=mysql+aiomysql://root:Kaopeilian2025!@#@localhost:3306/kaopeilian?charset=utf8mb4
|
||||
|
||||
# Redis配置
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
|
||||
# JWT配置
|
||||
SECRET_KEY=production-secret-key-for-kaopeilian-2025-at-least-32-chars
|
||||
ALGORITHM=HS256
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||
|
||||
# CORS配置
|
||||
CORS_ORIGINS=["http://120.79.247.16:8000", "http://aiedu.ireborn.com.cn", "http://localhost:3000"]
|
||||
|
||||
# 日志配置
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FORMAT=json
|
||||
EOF
|
||||
print_info "环境配置文件已创建"
|
||||
else
|
||||
print_warning "环境配置文件已存在,跳过创建"
|
||||
fi
|
||||
|
||||
# 7. 创建 systemd 服务
|
||||
print_info "配置 systemd 服务..."
|
||||
cat > /etc/systemd/system/${SERVICE_NAME}.service << EOF
|
||||
[Unit]
|
||||
Description=KaoPeiLian Backend API
|
||||
After=network.target mysql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=$APP_DIR
|
||||
Environment="PATH=$APP_DIR/venv/bin"
|
||||
Environment="PYTHONPATH=$APP_DIR"
|
||||
ExecStart=$APP_DIR/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 2
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 8. 重新加载 systemd 并启动服务
|
||||
print_info "启动服务..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable ${SERVICE_NAME}
|
||||
|
||||
# 检查服务是否已经运行
|
||||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||||
print_info "重启服务..."
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
else
|
||||
print_info "启动服务..."
|
||||
systemctl start ${SERVICE_NAME}
|
||||
fi
|
||||
|
||||
# 9. 等待服务启动
|
||||
print_info "等待服务启动..."
|
||||
sleep 5
|
||||
|
||||
# 10. 检查服务状态
|
||||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||||
print_info "服务启动成功!"
|
||||
else
|
||||
print_error "服务启动失败,请检查日志"
|
||||
journalctl -u ${SERVICE_NAME} -n 50
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 11. 配置防火墙
|
||||
print_info "配置防火墙..."
|
||||
if command -v ufw &> /dev/null; then
|
||||
ufw allow 8000/tcp
|
||||
ufw --force enable
|
||||
elif command -v firewall-cmd &> /dev/null; then
|
||||
firewall-cmd --permanent --add-port=8000/tcp
|
||||
firewall-cmd --reload
|
||||
else
|
||||
print_warning "未检测到防火墙,请手动配置端口 8000"
|
||||
fi
|
||||
|
||||
# 12. 测试部署
|
||||
print_info "测试部署..."
|
||||
sleep 2
|
||||
|
||||
# 健康检查
|
||||
if curl -s http://localhost:8000/health > /dev/null; then
|
||||
print_info "健康检查通过 ✓"
|
||||
else
|
||||
print_error "健康检查失败"
|
||||
fi
|
||||
|
||||
# 测试 SQL 执行器
|
||||
print_info "测试 SQL 执行器..."
|
||||
RESPONSE=$(curl -s -X POST http://localhost:8000/api/v1/sql/execute-simple \
|
||||
-H "X-API-Key: dify-2025-kaopeilian" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"sql": "SELECT COUNT(*) as total FROM users"}')
|
||||
|
||||
if [[ $RESPONSE == *"SQL 执行成功"* ]]; then
|
||||
print_info "SQL 执行器测试通过 ✓"
|
||||
echo "响应: $RESPONSE"
|
||||
else
|
||||
print_error "SQL 执行器测试失败"
|
||||
echo "响应: $RESPONSE"
|
||||
fi
|
||||
|
||||
# 13. 打印部署信息
|
||||
echo ""
|
||||
echo "==================================="
|
||||
echo -e "${GREEN}部署完成!${NC}"
|
||||
echo "==================================="
|
||||
echo ""
|
||||
echo "服务信息:"
|
||||
echo "- 服务状态: $(systemctl is-active ${SERVICE_NAME})"
|
||||
echo "- API 地址: http://120.79.247.16:8000"
|
||||
echo "- 健康检查: http://120.79.247.16:8000/health"
|
||||
echo "- SQL 执行器: http://120.79.247.16:8000/api/v1/sql/execute-simple"
|
||||
echo ""
|
||||
echo "认证信息:"
|
||||
echo "- API Key: dify-2025-kaopeilian"
|
||||
echo "- 请求头: X-API-Key"
|
||||
echo ""
|
||||
echo "常用命令:"
|
||||
echo "- 查看日志: journalctl -u ${SERVICE_NAME} -f"
|
||||
echo "- 重启服务: systemctl restart ${SERVICE_NAME}"
|
||||
echo "- 停止服务: systemctl stop ${SERVICE_NAME}"
|
||||
echo "- 服务状态: systemctl status ${SERVICE_NAME}"
|
||||
echo ""
|
||||
echo "Dify 配置:"
|
||||
echo "1. 鉴权类型: 请求头"
|
||||
echo "2. 鉴权头部前缀: Custom"
|
||||
echo "3. 键: X-API-Key"
|
||||
echo "4. 值: dify-2025-kaopeilian"
|
||||
echo "==================================="#
|
||||
|
||||
|
||||
285
backend/deploy/server_setup_guide.md
Normal file
285
backend/deploy/server_setup_guide.md
Normal file
@@ -0,0 +1,285 @@
|
||||
# 考陪练系统 SQL 执行器服务器部署指南
|
||||
|
||||
## 服务器信息
|
||||
- **IP地址**: 120.79.247.16
|
||||
- **域名**: aiedu.ireborn.com.cn
|
||||
- **端口**: 8000
|
||||
- **数据库**: MySQL (已配置在同一服务器)
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 1. 连接到服务器
|
||||
|
||||
```bash
|
||||
ssh root@120.79.247.16
|
||||
```
|
||||
|
||||
### 2. 准备环境
|
||||
|
||||
```bash
|
||||
# 更新系统包
|
||||
apt update && apt upgrade -y
|
||||
|
||||
# 安装 Python 3.9+
|
||||
apt install python3 python3-pip python3-venv -y
|
||||
|
||||
# 安装 MySQL 客户端(如果需要)
|
||||
apt install mysql-client -y
|
||||
|
||||
# 安装 Git
|
||||
apt install git -y
|
||||
|
||||
# 创建应用目录
|
||||
mkdir -p /opt/kaopeilian
|
||||
cd /opt/kaopeilian
|
||||
```
|
||||
|
||||
### 3. 克隆或上传代码
|
||||
|
||||
```bash
|
||||
# 如果使用 Git
|
||||
git clone <your-repo-url> backend
|
||||
cd backend
|
||||
|
||||
# 或者使用 scp 上传
|
||||
# 在本地执行:
|
||||
# scp -r /Users/nongjun/Desktop/Ai公司/本地开发与测试/kaopeilian-backend root@120.79.247.16:/opt/kaopeilian/backend
|
||||
```
|
||||
|
||||
### 4. 创建虚拟环境和安装依赖
|
||||
|
||||
```bash
|
||||
cd /opt/kaopeilian/backend
|
||||
|
||||
# 创建虚拟环境
|
||||
python3 -m venv venv
|
||||
|
||||
# 激活虚拟环境
|
||||
source venv/bin/activate
|
||||
|
||||
# 升级 pip
|
||||
pip install --upgrade pip
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 5. 配置环境变量
|
||||
|
||||
创建 `.env` 文件:
|
||||
|
||||
```bash
|
||||
cat > .env << EOF
|
||||
# 应用配置
|
||||
APP_NAME=KaoPeiLian
|
||||
DEBUG=False
|
||||
HOST=0.0.0.0
|
||||
PORT=8000
|
||||
|
||||
# 数据库配置
|
||||
DATABASE_URL=mysql+aiomysql://root:Kaopeilian2025!@#@localhost:3306/kaopeilian?charset=utf8mb4
|
||||
|
||||
# Redis配置(如果有)
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
|
||||
# JWT配置
|
||||
SECRET_KEY=your-production-secret-key-at-least-32-chars
|
||||
ALGORITHM=HS256
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||
|
||||
# CORS配置
|
||||
CORS_ORIGINS=["http://120.79.247.16:8000", "http://aiedu.ireborn.com.cn", "http://localhost:3000"]
|
||||
|
||||
# 日志配置
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FORMAT=json
|
||||
EOF
|
||||
```
|
||||
|
||||
### 6. 创建 systemd 服务
|
||||
|
||||
```bash
|
||||
cat > /etc/systemd/system/kaopeilian-backend.service << EOF
|
||||
[Unit]
|
||||
Description=KaoPeiLian Backend API
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/kaopeilian/backend
|
||||
Environment="PATH=/opt/kaopeilian/backend/venv/bin"
|
||||
ExecStart=/opt/kaopeilian/backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
|
||||
### 7. 启动服务
|
||||
|
||||
```bash
|
||||
# 重新加载 systemd
|
||||
systemctl daemon-reload
|
||||
|
||||
# 启用服务(开机自启)
|
||||
systemctl enable kaopeilian-backend
|
||||
|
||||
# 启动服务
|
||||
systemctl start kaopeilian-backend
|
||||
|
||||
# 查看服务状态
|
||||
systemctl status kaopeilian-backend
|
||||
|
||||
# 查看日志
|
||||
journalctl -u kaopeilian-backend -f
|
||||
```
|
||||
|
||||
### 8. 配置防火墙
|
||||
|
||||
```bash
|
||||
# 如果使用 ufw
|
||||
ufw allow 8000/tcp
|
||||
ufw reload
|
||||
|
||||
# 如果使用 iptables
|
||||
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
|
||||
iptables-save > /etc/iptables/rules.v4
|
||||
```
|
||||
|
||||
### 9. 测试部署
|
||||
|
||||
```bash
|
||||
# 健康检查
|
||||
curl http://localhost:8000/health
|
||||
|
||||
# 测试 SQL 执行器(简化认证)
|
||||
curl -X POST http://localhost:8000/api/v1/sql/execute-simple \
|
||||
-H "X-API-Key: dify-2025-kaopeilian" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"sql": "SELECT COUNT(*) as total FROM users"
|
||||
}'
|
||||
```
|
||||
|
||||
## 更新部署
|
||||
|
||||
```bash
|
||||
# 进入项目目录
|
||||
cd /opt/kaopeilian/backend
|
||||
|
||||
# 拉取最新代码(如果使用 Git)
|
||||
git pull
|
||||
|
||||
# 或者重新上传文件
|
||||
|
||||
# 重启服务
|
||||
systemctl restart kaopeilian-backend
|
||||
```
|
||||
|
||||
## 日志和监控
|
||||
|
||||
### 查看实时日志
|
||||
```bash
|
||||
journalctl -u kaopeilian-backend -f
|
||||
```
|
||||
|
||||
### 查看错误日志
|
||||
```bash
|
||||
journalctl -u kaopeilian-backend -p err -n 100
|
||||
```
|
||||
|
||||
### 检查服务状态
|
||||
```bash
|
||||
systemctl status kaopeilian-backend
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 1. 服务无法启动
|
||||
```bash
|
||||
# 检查 Python 路径
|
||||
which python3
|
||||
|
||||
# 检查虚拟环境
|
||||
ls -la /opt/kaopeilian/backend/venv/bin/
|
||||
|
||||
# 手动测试启动
|
||||
cd /opt/kaopeilian/backend
|
||||
source venv/bin/activate
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
```
|
||||
|
||||
### 2. 数据库连接失败
|
||||
```bash
|
||||
# 测试数据库连接
|
||||
mysql -h localhost -u root -p'Kaopeilian2025!@#' -e "SELECT 1"
|
||||
|
||||
# 检查数据库服务
|
||||
systemctl status mysql
|
||||
```
|
||||
|
||||
### 3. 端口被占用
|
||||
```bash
|
||||
# 查看端口占用
|
||||
netstat -tlnp | grep 8000
|
||||
|
||||
# 或
|
||||
lsof -i :8000
|
||||
```
|
||||
|
||||
## 性能优化(可选)
|
||||
|
||||
### 使用 Gunicorn + Uvicorn
|
||||
```bash
|
||||
# 安装 gunicorn
|
||||
pip install gunicorn
|
||||
|
||||
# 修改服务文件的 ExecStart
|
||||
ExecStart=/opt/kaopeilian/backend/venv/bin/gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
|
||||
```
|
||||
|
||||
### 使用 Nginx 反向代理
|
||||
```bash
|
||||
# 安装 Nginx
|
||||
apt install nginx -y
|
||||
|
||||
# 配置 Nginx
|
||||
cat > /etc/nginx/sites-available/kaopeilian << EOF
|
||||
server {
|
||||
listen 80;
|
||||
server_name aiedu.ireborn.com.cn;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# 启用配置
|
||||
ln -s /etc/nginx/sites-available/kaopeilian /etc/nginx/sites-enabled/
|
||||
nginx -t
|
||||
systemctl restart nginx
|
||||
```
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **修改默认 API Key**:编辑 `/opt/kaopeilian/backend/app/core/simple_auth.py`
|
||||
2. **使用 HTTPS**:配置 SSL 证书
|
||||
3. **限制 IP 访问**:只允许 Dify 服务器访问
|
||||
4. **定期备份**:数据库和代码
|
||||
5. **监控日志**:及时发现异常
|
||||
|
||||
## Dify 配置
|
||||
|
||||
部署完成后,在 Dify 中使用:
|
||||
- **URL**: http://120.79.247.16:8000/api/v1/sql/execute-simple
|
||||
- **认证方式**: 请求头
|
||||
- **X-API-Key**: dify-2025-kaopeilian
|
||||
|
||||
|
||||
Reference in New Issue
Block a user