Files
zsglpt/README.md
Yu Yon 0fd7137cea Initial commit: 知识管理平台
主要功能:
- 多用户管理系统
- 浏览器自动化(Playwright)
- 任务编排和执行
- Docker容器化部署
- 数据持久化和日志管理

技术栈:
- Flask 3.0.0
- Playwright 1.40.0
- SQLite with connection pooling
- Docker + Docker Compose

部署说明详见README.md
2025-11-16 19:03:07 +08:00

696 lines
14 KiB
Markdown
Raw Permalink 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.
# 知识管理平台自动化工具 - Docker部署版
这是一个基于 Docker 的知识管理平台自动化工具支持多用户、定时任务、代理IP、VIP管理等功能。
---
## 项目简介
本项目是一个 **Docker 容器化应用**,使用 Flask + Playwright + SQLite 构建,提供:
- 多用户注册登录系统
- 浏览器自动化任务
- 定时任务调度
- 截图管理
- VIP用户管理
- 代理IP支持
- 后台管理系统
---
## 技术栈
- **后端**: Python 3.8+, Flask
- **数据库**: SQLite
- **自动化**: Playwright (Chromium)
- **容器化**: Docker + Docker Compose
- **前端**: HTML + JavaScript + Socket.IO
---
## 项目结构
```
zsgpt2/
├── app.py # 主应用程序
├── database.py # 数据库模块
├── playwright_automation.py # 浏览器自动化
├── browser_installer.py # 浏览器安装检查
├── app_config.py # 配置管理
├── app_logger.py # 日志系统
├── app_security.py # 安全模块
├── app_state.py # 状态管理
├── app_utils.py # 工具函数
├── db_pool.py # 数据库连接池
├── password_utils.py # 密码工具
├── requirements.txt # Python依赖
├── Dockerfile # Docker镜像构建文件
├── docker-compose.yml # Docker编排文件
├── templates/ # HTML模板
│ ├── index.html # 主页面
│ ├── login.html # 登录页
│ ├── register.html # 注册页
│ ├── admin.html # 后台管理
│ └── ...
└── static/ # 静态资源
└── js/ # JavaScript文件
```
---
## 部署前准备
### 1. 环境要求
- **服务器**: Linux (Ubuntu 20.04+ / CentOS 7+)
- **Docker**: 20.10+
- **Docker Compose**: 1.29+
- **内存**: 4GB+ (推荐8GB)
- **磁盘**: 20GB+
### 2. SSH连接
**注意**: 本文档假设你已经有服务器的SSH访问权限。
你需要准备:
- 服务器IP地址
- SSH用户名和密码或SSH密钥
- SSH端口默认22
**SSH连接示例**:
```bash
ssh root@your-server-ip
# 或使用密钥
ssh -i /path/to/key root@your-server-ip
```
---
## 快速部署
### 步骤1: 上传项目文件
将整个 `zsgpt2` 文件夹上传到服务器的 `/www/wwwroot/` 目录:
```bash
# 在本地执行Windows PowerShell 或 Git Bash
scp -r C:\Users\Administrator\Desktop\zsgpt2 root@your-server-ip:/www/wwwroot/
# 或者使用 FileZilla、WinSCP 等工具上传
```
上传后,服务器上的路径应该是:`/www/wwwroot/zsgpt2/`
### 步骤2: SSH登录服务器
```bash
ssh root@your-server-ip
```
### 步骤3: 进入项目目录
```bash
cd /www/wwwroot/zsgpt2
```
### 步骤4: 创建必要的目录
```bash
mkdir -p data logs 截图 playwright
chmod 777 data logs 截图 playwright
```
### 步骤5: 构建并启动Docker容器
```bash
# 构建镜像
docker build -t knowledge-automation .
# 启动容器
docker-compose up -d
# 查看容器状态
docker ps | grep knowledge-automation
```
### 步骤6: 检查容器日志
```bash
docker logs -f knowledge-automation-multiuser
```
如果看到以下信息,说明启动成功:
```
服务器启动中...
用户访问地址: http://0.0.0.0:5000
后台管理地址: http://0.0.0.0:5000/yuyx
```
---
## 配置Nginx反向代理可选但推荐
如果你想通过域名访问需要配置Nginx反向代理。
### 1. 安装Nginx
```bash
# Ubuntu/Debian
apt update && apt install nginx -y
# CentOS/RHEL
yum install nginx -y
```
### 2. 创建Nginx配置文件
创建文件 `/etc/nginx/conf.d/zsgpt.conf`:
```nginx
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
# 日志
access_log /var/log/nginx/zsgpt_access.log;
error_log /var/log/nginx/zsgpt_error.log;
# 反向代理
location / {
proxy_pass http://127.0.0.1:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50M;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
```
### 3. 重启Nginx
```bash
nginx -t # 测试配置
nginx -s reload # 重新加载配置
```
### 4. 配置SSL推荐
```bash
# 安装certbot
apt install certbot python3-certbot-nginx -y
# 申请证书
certbot --nginx -d your-domain.com
# 自动续期
certbot renew --dry-run
```
---
## 访问系统
### 用户端
- **HTTP**: `http://your-server-ip:5001`
- **域名**: `http://your-domain.com` (配置Nginx后)
- **HTTPS**: `https://your-domain.com` (配置SSL后)
### 后台管理
- **路径**: `/yuyx`
- **默认账号**: `admin`
- **默认密码**: `admin`
**首次登录后请立即修改密码!**
---
## 系统配置
登录后台后,在"系统配置"页面可以设置:
### 1. 并发控制
- **全局最大并发**: 2 (根据服务器配置调整)
- **单用户并发**: 1
### 2. 定时任务
- **启用定时浏览**: 是/否
- **执行时间**: 02:00 (CST时间)
- **浏览类型**: 应读/注册前未读/未读
- **执行日期**: 周一到周日
### 3. 代理配置
- **启用代理**: 是/否
- **API地址**: http://your-proxy-api.com
- **IP有效期**: 3分钟
---
## Docker常用命令
### 容器管理
```bash
# 启动容器
docker start knowledge-automation-multiuser
# 停止容器
docker stop knowledge-automation-multiuser
# 重启容器
docker restart knowledge-automation-multiuser
# 删除容器
docker rm -f knowledge-automation-multiuser
# 查看容器状态
docker ps -a | grep knowledge-automation
```
### 日志查看
```bash
# 查看实时日志
docker logs -f knowledge-automation-multiuser
# 查看最近100行日志
docker logs --tail 100 knowledge-automation-multiuser
# 查看应用日志文件
tail -f /www/wwwroot/zsgpt2/logs/app.log
```
### 进入容器
```bash
# 进入容器Shell
docker exec -it knowledge-automation-multiuser bash
# 在容器内执行命令
docker exec knowledge-automation-multiuser python -c "print('Hello')"
```
### 重新构建
如果修改了代码,需要重新构建:
```bash
cd /www/wwwroot/zsgpt2
# 停止并删除旧容器
docker-compose down
# 重新构建并启动
docker-compose build
docker-compose up -d
```
---
## 数据备份与恢复
### 1. 备份数据
```bash
cd /www/wwwroot
# 备份整个项目
tar -czf zsgpt2_backup_$(date +%Y%m%d).tar.gz zsgpt2/
# 仅备份数据库
cp /www/wwwroot/zsgpt2/data/app_data.db /backup/app_data_$(date +%Y%m%d).db
# 备份截图
tar -czf screenshots_$(date +%Y%m%d).tar.gz /www/wwwroot/zsgpt2/截图/
```
### 2. 恢复数据
```bash
# 停止容器
docker stop knowledge-automation-multiuser
# 恢复整个项目
cd /www/wwwroot
tar -xzf zsgpt2_backup_20251027.tar.gz
# 恢复数据库
cp /backup/app_data_20251027.db /www/wwwroot/zsgpt2/data/app_data.db
# 重启容器
docker start knowledge-automation-multiuser
```
### 3. 定时备份
添加cron任务自动备份
```bash
crontab -e
```
添加以下内容:
```bash
# 每天凌晨3点备份
0 3 * * * tar -czf /backup/zsgpt2_$(date +\%Y\%m\%d).tar.gz /www/wwwroot/zsgpt2/data
```
---
## 常见问题
### 1. 容器启动失败
**问题**: `docker-compose up -d` 失败
**解决方案**:
```bash
# 查看详细错误
docker-compose logs
# 检查端口占用
netstat -tlnp | grep 5001
# 重新构建
docker-compose build --no-cache
docker-compose up -d
```
### 2. 502 Bad Gateway
**问题**: Nginx返回502错误
**解决方案**:
```bash
# 检查容器是否运行
docker ps | grep knowledge-automation
# 检查端口是否监听
netstat -tlnp | grep 5001
# 测试直接访问
curl http://127.0.0.1:5001
# 检查Nginx配置
nginx -t
```
### 3. 数据库锁定
**问题**: "database is locked"
**解决方案**:
```bash
# 重启容器
docker restart knowledge-automation-multiuser
# 如果问题持续,优化数据库
cd /www/wwwroot/zsgpt2
cp data/app_data.db data/app_data.db.backup
sqlite3 data/app_data.db "VACUUM;"
```
### 4. 内存不足
**问题**: 容器OOM (Out of Memory)
**解决方案**:
修改 `docker-compose.yml`
```yaml
services:
knowledge-automation:
mem_limit: 2g
memswap_limit: 2g
```
然后重启:
```bash
docker-compose down
docker-compose up -d
```
### 5. 浏览器下载失败
**问题**: Playwright浏览器下载失败
**解决方案**:
```bash
# 进入容器手动安装
docker exec -it knowledge-automation-multiuser bash
playwright install chromium
# 或使用国内镜像
export PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/
playwright install chromium
```
---
## 性能优化
### 1. 调整并发参数
根据服务器配置调整:
- **2核4GB**: 全局并发=1, 单用户并发=1
- **4核8GB**: 全局并发=2, 单用户并发=1
- **8核16GB**: 全局并发=4, 单用户并发=2
### 2. 启用代理IP
避免IP被封提高成功率
- 选择稳定的代理服务商
- 设置合适的IP有效期3-5分钟
- 启用自动重试机制
### 3. 定期清理数据
系统会自动清理7天前的数据也可以手动清理
```bash
# 清理7天前的截图
find /www/wwwroot/zsgpt2/截图 -name "*.jpg" -mtime +7 -delete
# 清理旧日志
find /www/wwwroot/zsgpt2/logs -name "*.log" -mtime +30 -delete
# 优化数据库
sqlite3 /www/wwwroot/zsgpt2/data/app_data.db "VACUUM;"
```
---
## 安全建议
### 1. 修改默认密码
首次登录后立即修改:
- 管理员密码
- 用户密码
### 2. 配置防火墙
```bash
# 只开放必要端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
# 禁止直接访问5001端口仅Nginx可访问
iptables -A INPUT -p tcp --dport 5001 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 5001 -j DROP
```
### 3. 启用HTTPS
强烈建议使用HTTPS加密传输
```bash
certbot --nginx -d your-domain.com
```
### 4. 限制SSH访问
```bash
# 修改SSH端口可选
vi /etc/ssh/sshd_config
# Port 22222
# 禁止root密码登录使用密钥
PermitRootLogin prohibit-password
PasswordAuthentication no
# 重启SSH服务
systemctl restart sshd
```
---
## 监控与维护
### 1. 系统监控
推荐使用以下工具:
- **Docker Stats**: `docker stats knowledge-automation-multiuser`
- **Grafana + Prometheus**: 可视化监控
- **Uptime Kuma**: 服务可用性监控
### 2. 日志分析
```bash
# 统计今日任务数
grep "浏览完成" /www/wwwroot/zsgpt2/logs/app.log | grep $(date +%Y-%m-%d) | wc -l
# 查看错误日志
grep "ERROR" /www/wwwroot/zsgpt2/logs/app.log | tail -20
# 查看最近的登录
grep "登录成功" /www/wwwroot/zsgpt2/logs/app.log | tail -10
```
### 3. 数据库维护
```bash
# 定期优化数据库(每月一次)
docker exec knowledge-automation-multiuser python3 << 'EOF'
import sqlite3
conn = sqlite3.connect('/app/data/app_data.db')
conn.execute('VACUUM')
conn.close()
print("数据库优化完成")
EOF
```
---
## 更新升级
### 1. 更新代码
```bash
# 停止容器
docker-compose down
# 备份数据
cp -r data data.backup
cp -r 截图 截图.backup
# 上传新代码(覆盖旧文件)
# 使用 scp 或 FTP 工具上传
# 重新构建并启动
docker-compose build
docker-compose up -d
```
### 2. 数据库迁移
如果数据库结构有变化,应用会自动迁移。
查看迁移日志:
```bash
docker logs knowledge-automation-multiuser | grep "数据库"
```
---
## 端口说明
| 端口 | 说明 | 映射 |
|------|------|------|
| 5000 | 容器内应用端口 | - |
| 5001 | 主机映射端口 | 容器5000 → 主机5001 |
| 80 | HTTP端口 | Nginx |
| 443 | HTTPS端口 | Nginx |
---
## 环境变量
可以在 `docker-compose.yml` 中设置的环境变量:
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| TZ | 时区 | Asia/Shanghai |
| PYTHONUNBUFFERED | Python输出缓冲 | 1 |
| PLAYWRIGHT_BROWSERS_PATH | 浏览器路径 | /ms-playwright |
---
## 技术支持
### 项目信息
- **项目名称**: 知识管理平台自动化工具
- **版本**: Docker 多用户版
- **技术栈**: Python + Flask + Playwright + SQLite + Docker
### 常用文档链接
- [Docker 官方文档](https://docs.docker.com/)
- [Flask 官方文档](https://flask.palletsprojects.com/)
- [Playwright 官方文档](https://playwright.dev/python/)
### 故障排查
遇到问题时,请按以下顺序检查:
1. **容器日志**: `docker logs knowledge-automation-multiuser`
2. **应用日志**: `cat /www/wwwroot/zsgpt2/logs/app.log`
3. **Nginx日志**: `cat /var/log/nginx/zsgpt_error.log`
4. **系统资源**: `docker stats`, `htop`, `df -h`
---
## 许可证
本项目仅供学习和研究使用。
---
**文档版本**: v1.0
**更新日期**: 2025-10-29
**适用版本**: Docker多用户版
---
## 快速上手命令清单
```bash
# 1. 上传文件
scp -r zsgpt2 root@your-ip:/www/wwwroot/
# 2. SSH登录
ssh root@your-ip
# 3. 进入目录并创建必要目录
cd /www/wwwroot/zsgpt2
mkdir -p data logs 截图 playwright
chmod 777 data logs 截图 playwright
# 4. 启动容器
docker-compose up -d
# 5. 查看日志
docker logs -f knowledge-automation-multiuser
# 6. 访问系统
# 浏览器打开: http://your-ip:5001
# 后台管理: http://your-ip:5001/yuyx
# 默认账号: admin / admin
```
完成!🎉