技术栈
本页面详细介绍 DocuSnap-Backend 系统部署中使用的技术栈,包括服务器环境、运行时环境、Web 服务器、数据库、容器技术和监控工具等。
服务器环境
操作系统
推荐选择:
- Ubuntu Server 20.04 LTS 或更高版本
- 广泛的社区支持
- 长期支持(LTS)提供稳定性
- 丰富的软件包资源
- 良好的安全性和性能
其他选项:
- CentOS 8 / Rocky Linux 8
- 企业级稳定性
- 长期支持
- 与 RHEL 兼容
- Debian 11 或更高版本
- 极高的稳定性
- 轻量级
- 适合资源受限环境
硬件配置
应用服务器:
- CPU:8+ 核心,支持 AVX2 指令集
- 内存:16+ GB RAM
- 存储:100+ GB SSD(推荐 NVMe)
- 网络:1+ Gbps 网络接口
OCR 服务器:
- CPU:8+ 核心,支持 AVX2 指令集
- GPU(推荐):NVIDIA GPU,8+ GB 显存
- 内存:16+ GB RAM
- 存储:100+ GB SSD
- 网络:1+ Gbps 网络接口
数据库服务器(大规模部署):
- CPU:8+ 核心
- 内存:16+ GB RAM
- 存储:200+ GB SSD(推荐 RAID 配置)
- 网络:1+ Gbps 网络接口
运行时环境
Python 环境
Python 版本:
- Python 3.8 或更高版本(推荐 3.9+)
虚拟环境:
- virtualenv:轻量级虚拟环境
- conda(可选):适用于需要复杂依赖管理的场景
包管理:
- pip:安装 Python 依赖
- pip-tools(推荐):锁定依赖版本,确保环境一致性
主要依赖:
Flask==3.1.1
gunicorn==20.1.0
zhipuai==2.1.5
Werkzeug==3.0.1
requests==2.31.0
pycryptodome==3.19.0
依赖管理
依赖文件:
- requirements.txt:列出所有依赖及其版本
- requirements-dev.txt(可选):开发环境特定依赖
版本控制:
- 锁定所有依赖的具体版本,避免意外升级
- 定期更新依赖,修复安全漏洞
- 使用
pip-compile
生成依赖锁文件
Web 服务器
WSGI 服务器
Gunicorn:
- 版本:20.1.0 或更高
- 轻量级、高性能的 WSGI 服务器
- 支持多工作进程和多线程
- 配置示例:
gunicorn --workers=4 --threads=2 --bind=0.0.0.0:8000 app:app
配置参数:
- workers:工作进程数,建议设置为 CPU 核心数的 2-4 倍
- threads:每个工作进程的线程数
- timeout:请求超时时间,建议设置为 120 秒或更长
- max-requests:工作进程处理的最大请求数,用于防止内存泄漏
反向代理
Nginx:
- 版本:1.18.0 或更高
- 高性能的 HTTP 和反向代理服务器
- 提供负载均衡、SSL 终结和静态文件服务
- 配置示例:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ssl_protocols TLSv1.2 TLSv1.3; 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; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; } location /static { alias /path/to/static; expires 30d; } }
配置重点:
- SSL/TLS 配置,确保安全通信
- 代理超时设置,适应长时间运行的请求
- 请求头传递,确保应用能获取客户端信息
- 静态文件服务,提高性能
数据库
SQLite
版本:
- SQLite 3.30.0 或更高版本
配置:
- 数据库文件路径:
/path/to/docusnap.db
- 权限设置:确保应用服务器有读写权限
- 定期备份:使用
sqlite3_backup
API 或文件复制
优化:
- 启用 WAL 模式,提高并发性能
- 定期执行 VACUUM,优化数据库大小
- 添加适当的索引,提高查询性能
PostgreSQL(大规模部署推荐)
版本:
- PostgreSQL 12 或更高版本
配置:
- 连接池:使用 pgBouncer 或应用内连接池
- 主从复制:提高可用性和读取性能
- 定期备份:使用 pg_dump 或连续归档
迁移方案:
- 从 SQLite 迁移到 PostgreSQL 的步骤
- 使用 SQLAlchemy 作为 ORM,简化迁移
- 数据验证和一致性检查
容器技术
Docker
版本:
- Docker 19.03 或更高版本
镜像:
- 应用服务镜像:基于 Python 官方镜像
- OCR 服务镜像:包含 CnOCR 和依赖
Dockerfile 示例(应用服务):
FROM python:3.9-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV FLASK_APP=app.py
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["gunicorn", "--workers=4", "--threads=2", "--bind=0.0.0.0:8000", "app:app"]
Docker Compose
版本:
- Docker Compose 1.25 或更高版本
配置示例:
version: '3'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- ./data:/app/data
environment:
- FLASK_ENV=production
depends_on:
- ocr-service
ocr-service:
build: ./ocr-service
ports:
- "5001:5001"
volumes:
- ./models:/app/models
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- app
Kubernetes(大规模部署)
版本:
- Kubernetes 1.18 或更高版本
组件:
- Deployment:管理应用和 OCR 服务的 Pod
- Service:提供内部服务发现和负载均衡
- Ingress:管理外部访问路由
- ConfigMap:管理配置
- Secret:管理敏感信息
- PersistentVolume:提供持久化存储
配置示例(应用服务部署):
apiVersion: apps/v1
kind: Deployment
metadata:
name: docusnap-app
spec:
replicas: 3
selector:
matchLabels:
app: docusnap-app
template:
metadata:
labels:
app: docusnap-app
spec:
containers:
- name: docusnap-app
image: docusnap-app:latest
ports:
- containerPort: 8000
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
volumeMounts:
- name: data-volume
mountPath: /app/data
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: docusnap-data-pvc
监控与日志
监控工具
Prometheus:
- 收集和存储指标数据
- 支持自定义指标和告警规则
- 与 Grafana 集成,提供可视化界面
配置示例:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'docusnap-app'
static_configs:
- targets: ['docusnap-app:8000']
- job_name: 'ocr-service'
static_configs:
- targets: ['ocr-service:5001']
日志管理
ELK 栈:
- Elasticsearch:存储和索引日志
- Logstash:处理和转换日志
- Kibana:可视化和分析日志
Fluentd/Fluent Bit:
- 收集容器和应用日志
- 转发到 Elasticsearch 或其他存储
日志配置(Flask 应用):
import logging
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('app.log', maxBytes=10000000, backupCount=10)
handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)
安全工具
SSL/TLS
Let’s Encrypt:
- 免费的 SSL/TLS 证书
- 使用 Certbot 自动更新证书
- 配置 HTTPS 重定向和 HSTS
配置示例:
certbot --nginx -d example.com -d www.example.com
Web 应用防火墙
ModSecurity:
- 开源 Web 应用防火墙
- 与 Nginx 集成
- 提供 OWASP 核心规则集
配置示例:
# 在 Nginx 配置中加载 ModSecurity
load_module modules/ngx_http_modsecurity_module.so;
server {
# ... 其他配置 ...
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/main.conf;
# ... 其他配置 ...
}
网络安全
UFW/iptables:
- 配置防火墙规则,限制端口访问
- 只开放必要的端口(80, 443, 22)
- 限制 SSH 访问来源
配置示例:
# 允许 SSH, HTTP, HTTPS
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# 拒绝其他所有入站连接
ufw default deny incoming
# 允许所有出站连接
ufw default allow outgoing
# 启用防火墙
ufw enable
自动化部署
CI/CD 工具
GitHub Actions / GitLab CI:
- 自动化构建、测试和部署流程
- 支持多环境部署
- 集成代码质量检查和安全扫描
配置示例(GitHub Actions):
name: Deploy DocuSnap Backend
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
pytest
- name: Build Docker image
run: |
docker build -t docusnap-app:latest .
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: |
# 部署脚本
./deploy.sh
配置管理
Ansible:
- 自动化服务器配置和应用部署
- 声明式配置,确保环境一致性
- 支持多服务器并行部署
配置示例(Ansible Playbook):
---
- name: Deploy DocuSnap Backend
hosts: app_servers
become: yes
tasks:
- name: Install required packages
apt:
name:
- python3
- python3-pip
- nginx
state: present
update_cache: yes
- name: Clone application repository
git:
repo: https://github.com/JI-DeepSleep/DocuSnap-Backend.git
dest: /opt/docusnap
version: main
- name: Install Python dependencies
pip:
requirements: /opt/docusnap/requirements.txt
virtualenv: /opt/docusnap/venv
virtualenv_command: python3 -m venv
- name: Configure Nginx
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/docusnap
notify: Restart Nginx
- name: Enable Nginx site
file:
src: /etc/nginx/sites-available/docusnap
dest: /etc/nginx/sites-enabled/docusnap
state: link
notify: Restart Nginx
- name: Start application service
systemd:
name: docusnap
state: started
enabled: yes
handlers:
- name: Restart Nginx
systemd:
name: nginx
state: restarted
总结
DocuSnap-Backend 系统的部署技术栈涵盖了服务器环境、运行时环境、Web 服务器、数据库、容器技术、监控工具和自动化部署等多个方面。根据不同的部署规模和需求,可以选择适当的技术组合,从单机部署的简单配置到基于 Kubernetes 的大规模分布式部署。
通过合理选择和配置这些技术,可以构建一个高效、可靠、安全的部署环境,为 DocuSnap-Backend 系统提供稳定的运行基础。同时,自动化部署和监控工具的使用,可以简化系统的维护和运营工作,提高系统的可用性和可维护性。