CertFlow 安装指南¶
系统要求¶
硬件要求¶
CPU: 双核 2.0GHz+ (推荐四核)
内存: 4GB+ (推荐 8GB)
磁盘空间: 1GB+ (含数据和日志)
显示器: 1366x768+ (推荐 1920x1080)
软件要求¶
操作系统:
Windows 10/11 (64位)
Windows Server 2019+
Linux (Ubuntu 20.04+, CentOS 7+)
macOS 11+ (实验性支持)
Python: 3.11, 3.12, 3.13
包管理器: uv 0.5+
数据库: SQLite (内置) 或 MySQL 8.0+ (可选)
网络要求¶
内网部署:无需互联网(首次安装除外)
公网部署:需要访问 PyPI 镜像源
安装步骤¶
1. 克隆项目¶
# 使用 HTTPS
git clone https://github.com/your-repo/CertFlow-PySide6.git
# 使用 SSH
git clone git@github.com:your-repo/CertFlow-PySide6.git
# 进入项目目录
cd CertFlow-PySide6
2. 安装 uv(如果未安装)¶
# Windows (PowerShell 管理员)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Linux/Mac
curl -LsSf https://astral.sh/uv/install.sh | sh
# 验证安装
uv --version
企业内网环境(使用代理):
# Windows PowerShell
$env:HTTP_PROXY="http://proxy.company.com:8080"
$env:HTTPS_PROXY="http://proxy.company.com:8080"
# Linux/Mac
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
3. 安装依赖(新版 uv 方式)¶
# 基础安装(仅生产依赖)
uv sync
# 开发环境安装(推荐)
uv sync --group full-dev
# 文档维护者安装
uv sync --group docs-maintainer
# CI/CD 环境安装
uv sync --group ci
# 安装特定依赖组
uv sync --group docs --group lint
# 查看安装详情
uv tree --depth 2
各场景依赖组说明:
场景 |
命令 |
包含的依赖组 |
说明 |
|---|---|---|---|
生产部署 |
|
无 |
仅运行时依赖 |
普通开发 |
|
dev |
基础开发工具 |
完整开发 |
|
dev, docs, lint, typing, test |
所有开发工具 |
文档编写 |
|
docs, dev |
文档专用环境 |
CI/CD |
|
test, lint, typing |
自动化测试环境 |
代码检查 |
|
lint |
仅代码格式化 |
4. 初始化配置¶
# 创建必要目录(自动)
uv run python scripts/setup_dirs.py
# 或手动创建
mkdir -p config database logs temp output backups
# 复制配置文件模板
cp config/config.yaml.example config/config.yaml
# 编辑配置文件(根据实际环境修改)
# Windows
notepad config/config.yaml
# Linux/Mac
vim config/config.yaml
setup_dirs.py 脚本内容:
#!/usr/bin/env python
import os
from pathlib import Path
def setup_directories():
"""创建项目所需目录"""
dirs = ['config', 'database', 'logs', 'temp', 'output', 'backups']
for dir_name in dirs:
Path(dir_name).mkdir(exist_ok=True)
print(f"✓ 创建目录: {dir_name}")
# 设置权限(Linux/Mac)
if os.name != 'nt':
os.system('chmod 755 config database logs temp output backups')
print("✅ 目录初始化完成")
if __name__ == '__main__':
setup_directories()
5. 配置数据库¶
# 初始化数据库
uv run python scripts/init_db.py
# 或使用数据库迁移
uv run alembic upgrade head
# 验证数据库连接
uv run python -c "
from certflow.utils.database import DatabaseManager
db = DatabaseManager()
db.init_db()
print('✅ 数据库连接成功')
"
6. 运行程序¶
# 开发模式(使用 uv)
uv run python src/certflow/main.py
# 或激活虚拟环境后运行
# Windows
.venv\Scripts\activate
python src/certflow/main.py
# Linux/Mac
source .venv/bin/activate
python src/certflow/main.py
# 生产模式(打包后)
# Windows
dist\certflow\certflow.exe
# Linux
./dist/certflow/certflow
# 带参数运行
python src/certflow/main.py --config config/production.yaml --debug
7. 验证安装¶
# 验证配置文件
uv run python -c "from certflow.config import Config; Config(); print('✅ 配置加载成功')"
# 验证导入模块
uv run python -c "import certflow; print(f'✅ CertFlow v{certflow.__version__}')"
# 测试所有组件
uv run pytest tests/test_imports.py -v
# 查看日志
# Windows
type logs\certflow.log
# Linux/Mac
tail -f logs/certflow.log
环境配置选项¶
开发环境配置¶
# 1. 安装 pre-commit 钩子
uv run pre-commit install
# 2. 配置 Git 钩子
uv run pre-commit run --all-files
# 3. 设置环境变量(可选)
# Windows
set CERTFLOW_ENV=development
set CERTFLOW_DEBUG=1
# Linux/Mac
export CERTFLOW_ENV=development
export CERTFLOW_DEBUG=1
生产环境配置¶
# 1. 设置生产环境变量
export CERTFLOW_ENV=production
export CERTFLOW_LOG_LEVEL=INFO
# 2. 配置 systemd 服务(Linux)
sudo cp scripts/certflow.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable certflow
sudo systemctl start certflow
# 3. 配置 Windows 服务(使用 NSSM)
nssm install CertFlow "C:\CertFlow\certflow.exe"
nssm set CertFlow AppParameters "--config config/production.yaml"
nssm start CertFlow
Windows 服务配置示例¶
@echo off
REM 安装为 Windows 服务
sc create CertFlow binPath= "C:\CertFlow\certflow.exe" start= auto
sc description CertFlow "CertFlow 合格证打印管理系统"
sc start CertFlow
Docker 部署¶
使用 Docker Compose(推荐)¶
创建 docker-compose.yml:
version: '3.8'
services:
certflow:
build: .
container_name: certflow
ports:
- "8080:8080"
volumes:
- ./data:/app/data
- ./config:/app/config
- ./logs:/app/logs
- ./output:/app/output
- ./backups:/app/backups
environment:
- CERTFLOW_ENV=production
- TZ=Asia/Shanghai
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import certflow; exit(0)"]
interval: 30s
timeout: 10s
retries: 3
构建镜像¶
# 标准构建
docker build -t certflow:latest .
# 多架构构建
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t certflow:latest .
# 指定构建参数
docker build \
--build-arg UV_GROUP=full-dev \
--build-arg PYTHON_VERSION=3.11 \
-t certflow:dev .
Dockerfile 示例¶
# 多阶段构建
FROM ghcr.io/astral-sh/uv:python3.11 AS builder
WORKDIR /app
# 复制依赖文件
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
# 复制源代码
COPY src/ ./src/
COPY config/ ./config/
COPY scripts/ ./scripts/
# 最终镜像
FROM python:3.11-slim
WORKDIR /app
# 安装运行时依赖
RUN apt-get update && apt-get install -y \
libxcb-xinerama0 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render-util0 \
libxcb-shape0 \
libxcb-xfixes0 \
libxcb-xkb1 \
libxkbcommon-x11-0 \
&& rm -rf /var/lib/apt/lists/*
# 复制虚拟环境
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/src /app/src
COPY --from=builder /app/config /app/config
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH="/app/src"
# 创建数据目录
RUN mkdir -p /app/data /app/logs /app/output /app/backups
# 非 root 用户运行
RUN useradd -m -u 1000 certflow && \
chown -R certflow:certflow /app
USER certflow
EXPOSE 8080
CMD ["python", "src/certflow/main.py"]
运行容器¶
# 使用 docker-compose
docker-compose up -d
# 查看日志
docker-compose logs -f certflow
# 停止服务
docker-compose down
# 使用 docker run
docker run -d \
--name certflow \
--restart unless-stopped \
-p 8080:8080 \
-v ./data:/app/data \
-v ./config:/app/config \
-v ./logs:/app/logs \
-v ./output:/app/output \
-v ./backups:/app/backups \
-e TZ=Asia/Shanghai \
certflow:latest
# 进入容器调试
docker exec -it certflow bash
打包成可执行文件¶
Windows 打包¶
# 安装打包依赖
uv sync --group full-dev
# 使用 PyInstaller 打包
uv run pyinstaller certflow.spec
# 或使用自动化脚本
scripts\build.bat
# 输出位置
# dist\certflow\certflow.exe
# dist\installer\CertFlow-Setup.exe (如果配置了 Inno Setup)
certflow.spec 示例:
# -*- mode: python -*-
block_cipher = None
a = Analysis(
['src/certflow/main.py'],
pathex=[],
binaries=[],
datas=[
('config/*.yaml', 'config'),
('src/certflow/views/*.ui', 'certflow/views'),
],
hiddenimports=['PySide6.QtXml'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='certflow',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True, # GUI应用改为 False
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='resources/icon.ico',
)
Linux 打包¶
# 安装依赖
uv sync --group full-dev
# 打包
uv run pyinstaller certflow-linux.spec
# 创建 .deb 包(Ubuntu/Debian)
scripts/build-deb.sh
# 创建 .rpm 包(CentOS/RHEL)
scripts/build-rpm.sh
依赖管理最佳实践¶
添加新依赖¶
# 添加到生产依赖
uv add requests
# 指定版本范围
uv add "pandas>=2.0,<3.0"
# 从 GitHub 安装
uv add "sqlalchemy @ git+https://github.com/sqlalchemy/sqlalchemy.git"
# 添加到开发依赖组
uv add --group dev pytest-xdist
# 添加到文档依赖组
uv add --group docs sphinx-rtd-theme
# 同时添加到多个组
uv add --group dev --group test pytest-mock
更新依赖¶
# 更新所有依赖
uv sync --upgrade
# 更新特定包
uv add --upgrade sqlalchemy
# 更新依赖组
uv sync --group docs --upgrade
# 检查可更新的包
uv pip list --outdated
移除依赖¶
# 移除生产依赖
uv remove requests
# 移除开发依赖
uv remove --group dev pytest-xdist
# 清理未使用的依赖
uv remove --unused
配置验证¶
# 完整配置验证
uv run python scripts/validate_config.py
# 验证配置文件
uv run python -c "from certflow.config import Config; Config(); print('✅ 配置加载成功')"
# 测试数据库连接
uv run python -c "
from certflow.utils.database import DatabaseManager
db = DatabaseManager()
db.init_db()
print('✅ 数据库连接成功')
"
# 验证依赖组
uv run python -c "
import importlib.metadata
packages = ['sphinx', 'pytest', 'ruff', 'mypy']
for pkg in packages:
try:
version = importlib.metadata.version(pkg)
print(f'✅ {pkg}: {version}')
except:
print(f'❌ {pkg}: 未安装')
"
# 验证 Qt 环境
uv run python -c "
from PySide6.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
print('✅ Qt 环境正常')
"
故障排除¶
常见问题及解决方案¶
1. 依赖安装失败¶
# 清理缓存重新安装
uv cache clean
uv sync --reinstall
# 使用不同的镜像源
UV_INDEX_URL=https://pypi.org/simple uv sync
# 跳过损坏的包
uv sync --no-build-isolation
# 查看详细错误
RUST_BACKTRACE=1 uv sync
2. 虚拟环境问题¶
# 重新创建虚拟环境
rm -rf .venv # Linux/Mac
rd /s /q .venv # Windows
uv venv --python 3.11
uv sync --group full-dev
# 查看虚拟环境信息
uv venv --info
# 修复虚拟环境路径
uv venv --relocatable
3. 配置文件格式错误¶
# 验证 YAML 语法
uv run python -c "import yaml; yaml.safe_load(open('config/config.yaml'))"
# 使用配置验证工具
uv run python scripts/validate_config.py
# 恢复默认配置
cp config/config.yaml.example config/config.yaml
4. 数据库连接失败¶
# 检查数据库文件权限
ls -la database/ # Linux/Mac
icacls database\ # Windows
# 重建数据库
rm database/certflow.db # 备份后删除
uv run python scripts/init_db.py
# 检查 SQLite 版本
uv run python -c "import sqlite3; print(sqlite3.sqlite_version)"
5. Qt 相关错误(Windows)¶
# 重新安装 PySide6
uv remove PySide6
uv add PySide6
# 检查 DLL 依赖
dumpbin /dependents .venv\Lib\site-packages\PySide6\Qt6Core.dll
# 安装 Visual C++ Redistributable
# 下载: https://aka.ms/vs/17/release/vc_redist.x64.exe
6. 内存不足错误¶
# 限制并行任务数
UV_CONCURRENT_DOWNLOADS=1 uv sync
# 使用交换空间(Linux)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 增加虚拟内存(Windows)
# 系统属性 → 高级 → 性能设置 → 高级 → 虚拟内存
7. 网络超时问题¶
# 增加超时时间
UV_HTTP_TIMEOUT=300 uv sync
# 使用镜像源
# 已在 pyproject.toml 中配置腾讯云镜像
# 如需临时使用官方源
uv sync --index-url https://pypi.org/simple
# 企业代理设置
set HTTP_PROXY=http://proxy.company.com:8080
set HTTPS_PROXY=http://proxy.company.com:8080
8. 权限错误¶
# Linux/Mac - 修复权限
chmod -R 755 .venv
chown -R $USER:$USER .
# Windows - 以管理员运行
# 右键 PowerShell → 以管理员身份运行
# Docker 权限
sudo chown -R $USER:$USER ./data
调试模式¶
# 启用详细日志
set RUST_LOG=debug # Windows
export RUST_LOG=debug # Linux/Mac
# 查看详细安装过程
uv sync --verbose
# 生成依赖图
uv tree --depth 3 > dependencies.txt
# 导出环境信息
uv pip freeze > requirements.txt
uv run python -m certflow.utils.sysinfo
开发工作流¶
首次设置¶
# 克隆项目
git clone <repo-url>
cd CertFlow-PySide6
# 安装完整开发环境
uv sync --group full-dev
# 安装 pre-commit 钩子
uv run pre-commit install
# 初始化数据库
uv run python scripts/init_db.py
# 运行测试验证
uv run pytest tests/ -v
# 启动开发服务器
uv run python src/certflow/main.py --debug
日常开发¶
# 激活环境
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
# 运行应用
python src/certflow/main.py
# 运行测试
pytest tests/ -v
pytest tests/test_certificate.py -v # 特定测试
pytest -m "not slow" # 跳过慢速测试
# 代码格式化
ruff format src/
ruff check --fix src/
# 类型检查
mypy src/
pyright
# 生成测试覆盖率
pytest --cov=certflow --cov-report=html
# 打开 htmlcov/index.html
# 查看文档
cd docs && make html
open _build/html/index.html
代码审查前¶
# 运行所有检查
scripts/pre-commit.sh
# 或单独运行
ruff check src/
black --check src/
mypy src/
pytest tests/
备份与恢复¶
自动备份¶
# 创建备份脚本
cat > scripts/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
cp database/certflow.db $BACKUP_DIR/
cp config/config.yaml $BACKUP_DIR/
tar -czf $BACKUP_DIR/logs.tar.gz logs/
echo "备份完成: $BACKUP_DIR"
EOF
chmod +x scripts/backup.sh
# 定期备份(crontab)
0 2 * * * /path/to/CertFlow-PySide6/scripts/backup.sh
恢复数据¶
# 恢复数据库
cp backups/20240101_020000/certflow.db database/
# 恢复配置
cp backups/20240101_020000/config.yaml config/
# 恢复日志
tar -xzf backups/20240101_020000/logs.tar.gz
性能优化建议¶
依赖缓存优化¶
# 使用本地缓存目录
export UV_CACHE_DIR=/path/to/cache
# 离线安装(需要预先缓存)
uv sync --frozen --offline
# 共享缓存(CI/CD)
export UV_CACHE_DIR=/shared/cache/uv
镜像源配置¶
# pyproject.toml 中已配置腾讯云镜像
# 如需临时使用官方源
uv sync --index-url https://pypi.org/simple
# 多镜像源配置
[[tool.uv.index]]
url = "https://mirrors.cloud.tencent.com/pypi/simple/"
default = true
[[tool.uv.index]]
url = "https://pypi.org/simple"
安全更新¶
# 检查依赖安全漏洞
uv audit
# 更新有漏洞的依赖
uv add --upgrade <package>
# 生成依赖清单(用于安全审计)
uv pip freeze > requirements.txt
# 使用 safety 检查
uv run safety check -r requirements.txt
迁移指南¶
从旧版本迁移¶
# 1. 备份数据
scripts/backup.sh
# 2. 拉取新代码
git pull origin main
# 3. 更新依赖
uv sync --group full-dev --upgrade
# 4. 运行数据库迁移
uv run alembic upgrade head
# 5. 验证配置
uv run python scripts/validate_config.py
# 6. 测试运行
uv run python src/certflow/main.py --test
获取帮助¶
卸载¶
# 删除虚拟环境
rm -rf .venv
# 删除数据(注意备份)
rm -rf database/ logs/ output/
# 删除配置文件
rm -rf config/
# 删除打包文件
rm -rf dist/ build/
# 卸载服务(Windows)
sc delete CertFlow
✅ 安装完成后,请阅读 用户指南 了解如何使用