技术栈¶
本页面详细介绍 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(推荐):锁定依赖版本,确保环境一致性
主要依赖:
依赖管理¶
依赖文件: - requirements.txt:列出所有依赖及其版本 - requirements-dev.txt(可选):开发环境特定依赖
版本控制: - 锁定所有依赖的具体版本,避免意外升级 - 定期更新依赖,修复安全漏洞 - 使用 pip-compile
生成依赖锁文件
Web 服务器¶
WSGI 服务器¶
Gunicorn: - 版本:20.1.0 或更高 - 轻量级、高性能的 WSGI 服务器 - 支持多工作进程和多线程 - 配置示例:
配置参数: - 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
配置示例:
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 系统提供稳定的运行基础。同时,自动化部署和监控工具的使用,可以简化系统的维护和运营工作,提高系统的可用性和可维护性。