完成Gunicorn启动服务器的指南文档和快速启动停止脚本
This commit is contained in:
63
deploy-k8s.sh
Executable file
63
deploy-k8s.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 开始Docker+K8s部署..."
|
||||
|
||||
# 检查Docker是否运行
|
||||
if ! docker info > /dev/null 2>&1; then
|
||||
echo "❌ Docker未运行,请先启动Docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查Kubernetes集群状态
|
||||
if ! kubectl cluster-info > /dev/null 2>&1; then
|
||||
echo "❌ Kubernetes集群未连接,请先启动Minikube"
|
||||
echo "运行: minikube start --driver=docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Docker和Kubernetes状态正常"
|
||||
|
||||
# 构建Docker镜像
|
||||
echo "🔨 构建Docker镜像..."
|
||||
docker build -t flask-prompt-master:latest .
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Docker镜像构建失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Docker镜像构建成功"
|
||||
|
||||
# 部署到Kubernetes
|
||||
echo "📦 部署到Kubernetes..."
|
||||
kubectl apply -f k8s/simple-deployment.yaml
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Kubernetes部署失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Kubernetes部署成功"
|
||||
|
||||
# 等待Pod启动
|
||||
echo "⏳ 等待Pod启动..."
|
||||
kubectl wait --for=condition=ready pod -l app=flask-prompt-master --timeout=300s
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Pod启动超时"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Pod启动成功"
|
||||
|
||||
# 显示服务状态
|
||||
echo "📊 服务状态:"
|
||||
kubectl get pods -l app=flask-prompt-master
|
||||
kubectl get services -l app=flask-prompt-master
|
||||
|
||||
# 获取访问地址
|
||||
echo "🌐 访问地址:"
|
||||
echo "本地访问: http://localhost:$(kubectl get service flask-prompt-master-service -o jsonpath='{.spec.ports[0].nodePort}')"
|
||||
echo "负载均衡器: $(kubectl get service flask-prompt-master-loadbalancer -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
|
||||
|
||||
echo "🎉 部署完成!"
|
||||
77
docker-compose.simple.yml
Normal file
77
docker-compose.simple.yml
Normal file
@@ -0,0 +1,77 @@
|
||||
version: '3.3'
|
||||
|
||||
services:
|
||||
# Flask应用服务
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: flask-prompt-master:latest
|
||||
container_name: flask-prompt-master-app
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- FLASK_ENV=production
|
||||
- DATABASE_URL=mysql+pymysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/${MYSQL_DATABASE}?charset=utf8mb4
|
||||
- REDIS_URL=redis://redis:6379/0
|
||||
- SECRET_KEY=${SECRET_KEY}
|
||||
- LLM_API_KEY=${LLM_API_KEY}
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
- ./uploads:/app/uploads
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
# MySQL数据库
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
container_name: flask-prompt-master-mysql
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||
- MYSQL_USER=${MYSQL_USER}
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
# Redis缓存
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: flask-prompt-master-redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
# Nginx反向代理
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: flask-prompt-master-nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
|
||||
- ./logs/nginx:/var/log/nginx
|
||||
depends_on:
|
||||
- app
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
volumes:
|
||||
mysql_data:
|
||||
driver: local
|
||||
redis_data:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
app-network:
|
||||
driver: bridge
|
||||
56
docs/deployment/Gunicorn快速参考.md
Normal file
56
docs/deployment/Gunicorn快速参考.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Gunicorn快速参考
|
||||
|
||||
## 🚀 一键操作命令
|
||||
|
||||
### 启动服务
|
||||
```bash
|
||||
./scripts/start_gunicorn.sh
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
```bash
|
||||
./scripts/stop_gunicorn.sh
|
||||
```
|
||||
|
||||
### 重启服务
|
||||
```bash
|
||||
./scripts/restart_gunicorn.sh
|
||||
```
|
||||
|
||||
### 查看状态
|
||||
```bash
|
||||
./scripts/status_gunicorn.sh
|
||||
```
|
||||
|
||||
## 📋 常用命令
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 启动 | `./scripts/start_gunicorn.sh` |
|
||||
| 停止 | `./scripts/stop_gunicorn.sh` |
|
||||
| 重启 | `./scripts/restart_gunicorn.sh` |
|
||||
| 状态 | `./scripts/status_gunicorn.sh` |
|
||||
| 查看日志 | `tail -f logs/gunicorn_access.log` |
|
||||
| 测试访问 | `curl http://localhost:5002/` |
|
||||
|
||||
## 🌐 访问信息
|
||||
|
||||
- **本地访问**: http://localhost:5002
|
||||
- **外网访问**: http://101.43.95.130:5002
|
||||
- **服务端口**: 5002
|
||||
- **Python环境**: 3.12.7 (myenv)
|
||||
|
||||
## 📁 重要文件
|
||||
|
||||
- **配置文件**: `gunicorn.conf.py`
|
||||
- **PID文件**: `logs/gunicorn.pid`
|
||||
- **访问日志**: `logs/gunicorn_access.log`
|
||||
- **错误日志**: `logs/gunicorn_error.log`
|
||||
- **管理脚本**: `scripts/`
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. 确保在项目目录下执行命令
|
||||
2. 确保conda环境已激活
|
||||
3. 确保5002端口未被占用
|
||||
4. 确保防火墙已开放5002端口
|
||||
241
docs/deployment/Gunicorn服务管理指南.md
Normal file
241
docs/deployment/Gunicorn服务管理指南.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# Gunicorn服务管理指南
|
||||
|
||||
## 概述
|
||||
|
||||
本文档介绍如何使用Gunicorn管理Flask提示词大师应用的生产环境服务。
|
||||
|
||||
## 环境信息
|
||||
|
||||
- **Python版本**: 3.12.7
|
||||
- **Conda环境**: myenv
|
||||
- **项目路径**: /home/renjianbo/aitsc
|
||||
- **服务端口**: 5002
|
||||
- **外网地址**: http://101.43.95.130:5002
|
||||
|
||||
## 快速启动命令
|
||||
|
||||
### 一键启动脚本
|
||||
|
||||
```bash
|
||||
# 进入项目目录
|
||||
cd /home/renjianbo/aitsc
|
||||
|
||||
# 激活conda环境并启动服务
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && gunicorn -c gunicorn.conf.py run_dev:app
|
||||
```
|
||||
|
||||
### 后台启动
|
||||
|
||||
```bash
|
||||
# 后台启动服务
|
||||
cd /home/renjianbo/aitsc
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && nohup gunicorn -c gunicorn.conf.py run_dev:app > logs/gunicorn.log 2>&1 &
|
||||
```
|
||||
|
||||
## 服务管理命令
|
||||
|
||||
### 1. 启动服务
|
||||
|
||||
```bash
|
||||
# 方法1: 直接启动
|
||||
cd /home/renjianbo/aitsc
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && gunicorn -c gunicorn.conf.py run_dev:app
|
||||
|
||||
# 方法2: 后台启动
|
||||
cd /home/renjianbo/aitsc
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && nohup gunicorn -c gunicorn.conf.py run_dev:app > logs/gunicorn.log 2>&1 &
|
||||
```
|
||||
|
||||
### 2. 停止服务
|
||||
|
||||
```bash
|
||||
# 方法1: 使用PID文件停止
|
||||
kill -TERM $(cat logs/gunicorn.pid)
|
||||
|
||||
# 方法2: 强制停止
|
||||
kill -9 $(cat logs/gunicorn.pid)
|
||||
|
||||
# 方法3: 查找进程并停止
|
||||
ps aux | grep gunicorn | grep -v grep | awk '{print $2}' | xargs kill -TERM
|
||||
```
|
||||
|
||||
### 3. 重启服务
|
||||
|
||||
```bash
|
||||
# 方法1: 优雅重启(推荐)
|
||||
kill -HUP $(cat logs/gunicorn.pid)
|
||||
|
||||
# 方法2: 停止后重新启动
|
||||
kill -TERM $(cat logs/gunicorn.pid) && sleep 3 && eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && gunicorn -c gunicorn.conf.py run_dev:app
|
||||
```
|
||||
|
||||
### 4. 查看服务状态
|
||||
|
||||
```bash
|
||||
# 查看进程状态
|
||||
ps aux | grep gunicorn | grep -v grep
|
||||
|
||||
# 查看端口监听状态
|
||||
ss -tlnp | grep :5002
|
||||
|
||||
# 查看PID文件
|
||||
cat logs/gunicorn.pid
|
||||
```
|
||||
|
||||
### 5. 查看日志
|
||||
|
||||
```bash
|
||||
# 查看访问日志
|
||||
tail -f logs/gunicorn_access.log
|
||||
|
||||
# 查看错误日志
|
||||
tail -f logs/gunicorn_error.log
|
||||
|
||||
# 查看应用日志
|
||||
tail -f logs/app.log
|
||||
|
||||
# 查看实时日志
|
||||
tail -f logs/gunicorn.log
|
||||
```
|
||||
|
||||
## 服务配置
|
||||
|
||||
### Gunicorn配置文件
|
||||
|
||||
配置文件位置: `gunicorn.conf.py`
|
||||
|
||||
主要配置项:
|
||||
- **端口**: 5002
|
||||
- **工作进程数**: CPU核心数 × 2 + 1
|
||||
- **每个进程连接数**: 1000
|
||||
- **超时时间**: 30秒
|
||||
- **日志级别**: info
|
||||
|
||||
### 环境变量
|
||||
|
||||
```bash
|
||||
# 设置环境变量
|
||||
export FLASK_ENV=production
|
||||
export SECRET_KEY="your-production-secret-key"
|
||||
export LLM_API_KEY="your-api-key"
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 1. 服务无法启动
|
||||
|
||||
```bash
|
||||
# 检查端口是否被占用
|
||||
ss -tlnp | grep :5002
|
||||
|
||||
# 检查日志文件
|
||||
cat logs/gunicorn_error.log
|
||||
|
||||
# 检查Python环境
|
||||
python --version
|
||||
pip list | grep gunicorn
|
||||
```
|
||||
|
||||
### 2. 服务响应慢
|
||||
|
||||
```bash
|
||||
# 检查系统资源
|
||||
top
|
||||
free -h
|
||||
df -h
|
||||
|
||||
# 检查进程状态
|
||||
ps aux | grep gunicorn
|
||||
```
|
||||
|
||||
### 3. 端口访问失败
|
||||
|
||||
```bash
|
||||
# 检查防火墙
|
||||
sudo firewall-cmd --list-ports
|
||||
|
||||
# 开放端口
|
||||
sudo firewall-cmd --add-port=5002/tcp --permanent
|
||||
sudo firewall-cmd --reload
|
||||
```
|
||||
|
||||
## 性能监控
|
||||
|
||||
### 1. 系统资源监控
|
||||
|
||||
```bash
|
||||
# CPU和内存使用情况
|
||||
top -p $(cat logs/gunicorn.pid)
|
||||
|
||||
# 网络连接数
|
||||
ss -s | grep tcp
|
||||
```
|
||||
|
||||
### 2. 应用性能监控
|
||||
|
||||
```bash
|
||||
# 查看请求统计
|
||||
tail -f logs/gunicorn_access.log | grep -E "(GET|POST)"
|
||||
|
||||
# 查看响应时间
|
||||
tail -f logs/gunicorn_access.log | awk '{print $NF}'
|
||||
```
|
||||
|
||||
## 自动化脚本
|
||||
|
||||
### 启动脚本 (start_gunicorn.sh)
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
cd /home/renjianbo/aitsc
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)"
|
||||
conda activate myenv
|
||||
export FLASK_ENV=production
|
||||
gunicorn -c gunicorn.conf.py run_dev:app
|
||||
```
|
||||
|
||||
### 停止脚本 (stop_gunicorn.sh)
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
cd /home/renjianbo/aitsc
|
||||
kill -TERM $(cat logs/gunicorn.pid)
|
||||
echo "Gunicorn服务已停止"
|
||||
```
|
||||
|
||||
### 重启脚本 (restart_gunicorn.sh)
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
cd /home/renjianbo/aitsc
|
||||
kill -TERM $(cat logs/gunicorn.pid)
|
||||
sleep 3
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)"
|
||||
conda activate myenv
|
||||
export FLASK_ENV=production
|
||||
gunicorn -c gunicorn.conf.py run_dev:app
|
||||
```
|
||||
|
||||
## 常用命令速查
|
||||
|
||||
| 操作 | 命令 |
|
||||
|------|------|
|
||||
| 启动服务 | `eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && gunicorn -c gunicorn.conf.py run_dev:app` |
|
||||
| 停止服务 | `kill -TERM $(cat logs/gunicorn.pid)` |
|
||||
| 重启服务 | `kill -HUP $(cat logs/gunicorn.pid)` |
|
||||
| 查看状态 | `ps aux | grep gunicorn \| grep -v grep` |
|
||||
| 查看端口 | `ss -tlnp \| grep :5002` |
|
||||
| 查看日志 | `tail -f logs/gunicorn_access.log` |
|
||||
| 测试访问 | `curl http://localhost:5002/` |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **环境激活**: 每次操作前必须激活conda环境
|
||||
2. **端口冲突**: 确保5002端口未被其他服务占用
|
||||
3. **权限问题**: 确保有logs目录的写入权限
|
||||
4. **防火墙**: 确保5002端口在防火墙中开放
|
||||
5. **日志轮转**: 定期清理日志文件避免磁盘空间不足
|
||||
|
||||
## 联系信息
|
||||
|
||||
如有问题,请查看日志文件或联系系统管理员。
|
||||
71
k8s/simple-deployment.yaml
Normal file
71
k8s/simple-deployment.yaml
Normal file
@@ -0,0 +1,71 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: flask-prompt-master
|
||||
labels:
|
||||
app: flask-prompt-master
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels:
|
||||
app: flask-prompt-master
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: flask-prompt-master
|
||||
spec:
|
||||
containers:
|
||||
- name: app
|
||||
image: flask-prompt-master:latest
|
||||
ports:
|
||||
- containerPort: 5000
|
||||
env:
|
||||
- name: FLASK_ENV
|
||||
value: "production"
|
||||
- name: SECRET_KEY
|
||||
value: "your-secret-key-here"
|
||||
resources:
|
||||
requests:
|
||||
memory: "256Mi"
|
||||
cpu: "250m"
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "500m"
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5000
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5000
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: flask-prompt-master-service
|
||||
spec:
|
||||
selector:
|
||||
app: flask-prompt-master
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
targetPort: 5000
|
||||
type: NodePort
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: flask-prompt-master-loadbalancer
|
||||
spec:
|
||||
selector:
|
||||
app: flask-prompt-master
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5002
|
||||
targetPort: 5000
|
||||
type: LoadBalancer
|
||||
0
scripts/deploy.sh
Normal file → Executable file
0
scripts/deploy.sh
Normal file → Executable file
39
scripts/restart_gunicorn.sh
Executable file
39
scripts/restart_gunicorn.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔄 重启Gunicorn服务..."
|
||||
echo "=========================================="
|
||||
|
||||
# 进入项目目录
|
||||
cd /home/renjianbo/aitsc
|
||||
|
||||
# 停止服务
|
||||
echo "🛑 停止现有服务..."
|
||||
if [ -f "logs/gunicorn.pid" ]; then
|
||||
PID=$(cat logs/gunicorn.pid)
|
||||
if ps -p $PID > /dev/null; then
|
||||
kill -TERM $PID
|
||||
sleep 3
|
||||
fi
|
||||
fi
|
||||
|
||||
# 激活conda环境
|
||||
echo "🔧 激活环境..."
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)"
|
||||
conda activate myenv
|
||||
|
||||
# 设置环境变量
|
||||
export FLASK_ENV=production
|
||||
export SECRET_KEY="your-production-secret-key-must-be-very-secure"
|
||||
export LLM_API_KEY="sk-your-production-api-key"
|
||||
|
||||
# 创建必要目录
|
||||
mkdir -p logs uploads
|
||||
|
||||
echo "✅ 环境已激活: Python $(python --version)"
|
||||
echo "🌐 服务端口: 5002"
|
||||
echo "🔗 访问地址: http://101.43.95.130:5002"
|
||||
echo "=========================================="
|
||||
|
||||
# 启动服务
|
||||
echo "🚀 启动新服务..."
|
||||
gunicorn -c gunicorn.conf.py run_dev:app
|
||||
27
scripts/start_gunicorn.sh
Executable file
27
scripts/start_gunicorn.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 启动Gunicorn服务..."
|
||||
echo "=========================================="
|
||||
|
||||
# 进入项目目录
|
||||
cd /home/renjianbo/aitsc
|
||||
|
||||
# 激活conda环境
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)"
|
||||
conda activate myenv
|
||||
|
||||
# 设置环境变量
|
||||
export FLASK_ENV=production
|
||||
export SECRET_KEY="your-production-secret-key-must-be-very-secure"
|
||||
export LLM_API_KEY="sk-your-production-api-key"
|
||||
|
||||
# 创建必要目录
|
||||
mkdir -p logs uploads
|
||||
|
||||
echo "✅ 环境已激活: Python $(python --version)"
|
||||
echo "🌐 服务端口: 5002"
|
||||
echo "🔗 访问地址: http://101.43.95.130:5002"
|
||||
echo "=========================================="
|
||||
|
||||
# 启动Gunicorn服务
|
||||
gunicorn -c gunicorn.conf.py run_dev:app
|
||||
80
scripts/status_gunicorn.sh
Executable file
80
scripts/status_gunicorn.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "📊 Gunicorn服务状态检查"
|
||||
echo "=========================================="
|
||||
|
||||
# 进入项目目录
|
||||
cd /home/renjianbo/aitsc
|
||||
|
||||
# 检查进程状态
|
||||
echo "🔍 检查进程状态..."
|
||||
PROCESSES=$(ps aux | grep gunicorn | grep -v grep)
|
||||
if [ -n "$PROCESSES" ]; then
|
||||
echo "✅ Gunicorn进程正在运行:"
|
||||
echo "$PROCESSES"
|
||||
else
|
||||
echo "❌ 未找到运行中的Gunicorn进程"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查端口监听
|
||||
echo "🔍 检查端口监听状态..."
|
||||
PORT_STATUS=$(ss -tlnp | grep :5002)
|
||||
if [ -n "$PORT_STATUS" ]; then
|
||||
echo "✅ 端口5002正在监听:"
|
||||
echo "$PORT_STATUS"
|
||||
else
|
||||
echo "❌ 端口5002未在监听"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查PID文件
|
||||
echo "🔍 检查PID文件..."
|
||||
if [ -f "logs/gunicorn.pid" ]; then
|
||||
PID=$(cat logs/gunicorn.pid)
|
||||
echo "📋 PID文件存在: $PID"
|
||||
if ps -p $PID > /dev/null; then
|
||||
echo "✅ PID对应的进程正在运行"
|
||||
else
|
||||
echo "⚠️ PID对应的进程不存在"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ PID文件不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查日志文件
|
||||
echo "🔍 检查日志文件..."
|
||||
if [ -f "logs/gunicorn_access.log" ]; then
|
||||
echo "✅ 访问日志文件存在"
|
||||
echo "📄 最后10行访问日志:"
|
||||
tail -10 logs/gunicorn_access.log
|
||||
else
|
||||
echo "⚠️ 访问日志文件不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [ -f "logs/gunicorn_error.log" ]; then
|
||||
echo "✅ 错误日志文件存在"
|
||||
echo "📄 最后10行错误日志:"
|
||||
tail -10 logs/gunicorn_error.log
|
||||
else
|
||||
echo "⚠️ 错误日志文件不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 测试服务响应
|
||||
echo "🔍 测试服务响应..."
|
||||
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:5002/ 2>/dev/null)
|
||||
if [ "$RESPONSE" = "200" ]; then
|
||||
echo "✅ 服务响应正常 (HTTP $RESPONSE)"
|
||||
else
|
||||
echo "❌ 服务响应异常 (HTTP $RESPONSE)"
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
48
scripts/stop_gunicorn.sh
Executable file
48
scripts/stop_gunicorn.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🛑 停止Gunicorn服务..."
|
||||
echo "=========================================="
|
||||
|
||||
# 进入项目目录
|
||||
cd /home/renjianbo/aitsc
|
||||
|
||||
# 检查PID文件是否存在
|
||||
if [ -f "logs/gunicorn.pid" ]; then
|
||||
PID=$(cat logs/gunicorn.pid)
|
||||
echo "📋 找到Gunicorn进程PID: $PID"
|
||||
|
||||
# 检查进程是否存在
|
||||
if ps -p $PID > /dev/null; then
|
||||
echo "🔄 正在停止进程..."
|
||||
kill -TERM $PID
|
||||
|
||||
# 等待进程停止
|
||||
sleep 3
|
||||
|
||||
# 检查是否成功停止
|
||||
if ps -p $PID > /dev/null; then
|
||||
echo "⚠️ 进程仍在运行,强制停止..."
|
||||
kill -9 $PID
|
||||
fi
|
||||
|
||||
echo "✅ Gunicorn服务已停止"
|
||||
else
|
||||
echo "⚠️ 进程不存在,可能已经停止"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 未找到PID文件,尝试查找进程..."
|
||||
|
||||
# 查找Gunicorn进程
|
||||
PIDS=$(ps aux | grep gunicorn | grep -v grep | awk '{print $2}')
|
||||
|
||||
if [ -n "$PIDS" ]; then
|
||||
echo "📋 找到Gunicorn进程: $PIDS"
|
||||
echo $PIDS | xargs kill -TERM
|
||||
sleep 3
|
||||
echo "✅ Gunicorn服务已停止"
|
||||
else
|
||||
echo "ℹ️ 未找到运行中的Gunicorn进程"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
29
start_production_simple.sh
Executable file
29
start_production_simple.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 Flask 提示词大师 - 简化生产环境部署"
|
||||
echo "=========================================="
|
||||
|
||||
# 激活conda环境
|
||||
eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)"
|
||||
conda activate myenv
|
||||
|
||||
# 设置环境变量
|
||||
export FLASK_ENV=production
|
||||
export SECRET_KEY="your-production-secret-key-must-be-very-secure"
|
||||
export LLM_API_KEY="sk-your-production-api-key"
|
||||
|
||||
# 创建必要目录
|
||||
mkdir -p logs uploads
|
||||
|
||||
# 安装依赖
|
||||
echo "📦 安装Python依赖..."
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 启动Gunicorn服务
|
||||
echo "🌐 启动Gunicorn服务..."
|
||||
echo "访问地址: http://101.43.95.130:5002"
|
||||
echo "按 Ctrl+C 停止服务"
|
||||
echo "=========================================="
|
||||
|
||||
# 使用Gunicorn启动
|
||||
gunicorn -c gunicorn.conf.py run_dev:app
|
||||
Reference in New Issue
Block a user