# Ubuntu服务器PDF生成功能部署和测试指南 ## 概述 本文档提供在Ubuntu服务器上部署和测试家庭日报系统PDF生成功能的完整指南。 ## 系统要求 - Ubuntu 20.04/22.04/24.04 LTS - Python 3.8+ - Django 5.1.4+ - WeasyPrint 67.0+ ## 1. 服务器环境准备 ### 1.1 安装系统依赖 ```bash # 更新包管理器 sudo apt update # 安装WeasyPrint系统依赖 sudo apt install -y \ libpango-1.0-0 \ libpangoft2-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf-2.0-0 \ libcairo2 \ libgobject-2.0-0 \ libglib-2.0-0 \ libxml2 \ libffi7 \ python3-dev \ build-essential sudo apt update && sudo apt install libcairo2-dev pkg-config # 安装中文字体支持 sudo apt install -y fonts-noto-cjk fonts-wqy-microhei ``` ### 1.2 验证系统依赖 ```bash # 检查关键库是否安装 ldconfig -p | grep pango ldconfig -p | grep cairo ldconfig -p | grep glib # 检查字体安装 fc-list :lang=zh ``` ## 2. Python环境配置 ### 2.1 安装Python依赖 ```bash # 激活虚拟环境(如果有) source venv/bin/activate # 安装WeasyPrint pip install weasyprint==67.0 # 验证安装 python -c "from weasyprint import HTML; print('WeasyPrint安装成功')" ``` ### 2.2 验证Python环境 ```bash # 检查Python包 pip list | grep weasyprint # 测试基本功能 python -c " from weasyprint import HTML html = HTML(string='
中文测试
') html.write_pdf('test.pdf') print('PDF生成测试成功') " ``` ## 3. 项目部署 ### 3.1 上传项目文件 ```bash # 上传项目到服务器 scp -r diary-family/ user@your-server:/opt/ # 设置权限 sudo chown -R www-data:www-data /opt/diary-family sudo chmod -R 755 /opt/diary-family ``` ### 3.2 配置Django设置 确保 `diary_family/settings.py` 中的配置正确: ```python # Reports files configuration REPORTS_URL = '/reports/' REPORTS_ROOT = BASE_DIR / 'reports' # 确保此目录可写 # 确保静态文件配置正确 STATICFILES_DIRS = [BASE_DIR / 'static'] STATIC_ROOT = BASE_DIR / 'staticfiles' ``` ### 3.3 创建报告目录 ```bash # 创建报告目录 mkdir -p /opt/diary-family/reports sudo chown -R www-data:www-data /opt/diary-family/reports sudo chmod -R 755 /opt/diary-family/reports ``` ## 4. 运行PDF生成测试 ### 4.1 上传测试脚本 将 `ubuntu_pdf_test.py` 上传到服务器项目根目录。 ### 4.2 运行测试 ```bash cd /opt/diary-family # 运行PDF测试 python ubuntu_pdf_test.py ``` ### 4.3 测试输出说明 测试脚本会检查以下内容: - ✅ Ubuntu环境验证 - ✅ 系统依赖库检查 - ✅ Python依赖检查 - ✅ 字体支持测试 - ✅ PDF生成功能测试 - ✅ Celery PDF任务测试 ## 5. 生产环境配置 ### 5.1 Gunicorn配置 确保 `gunicorn_config.py` 包含正确的设置: ```python # gunicorn_config.py bind = "0.0.0.0:8000" workers = 4 worker_class = "sync" max_requests = 1000 max_requests_jitter = 100 ``` ### 5.2 Nginx配置 ```nginx # /etc/nginx/sites-available/diary-family server { listen 80; server_name your-domain.com; location /reports/ { alias /opt/diary-family/reports/; expires 1h; add_header Cache-Control "public"; } location /static/ { alias /opt/diary-family/staticfiles/; expires 1y; add_header Cache-Control "public, immutable"; } 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; } } ``` ### 5.3 Celery配置 ```bash # 启动Celery worker celery -A diary_family worker --loglevel=info # 启动Celery beat(定时任务) celery -A diary_family beat --loglevel=info ``` ## 6. 故障排除 ### 6.1 常见问题 #### 问题1: WeasyPrint导入错误 ``` ImportError: cannot load library 'libgobject-2.0-0' ``` **解决方案**: ```bash sudo apt install libgobject-2.0-0 libglib-2.0-0 ``` #### 问题2: 中文字体显示异常 **解决方案**: ```bash sudo apt install fonts-noto-cjk fonts-wqy-microhei fc-cache -fv # 刷新字体缓存 ``` #### 问题3: PDF生成权限错误 **解决方案**: ```bash sudo chown -R www-data:www-data /opt/diary-family/reports sudo chmod -R 755 /opt/diary-family/reports ``` ### 6.2 日志检查 ```bash # 检查应用日志 tail -f /var/log/gunicorn/diary-family.log # 检查Celery日志 tail -f /var/log/celery/worker.log # 检查Nginx日志 tail -f /var/log/nginx/error.log ``` ## 7. 自动化测试 ### 7.1 创建测试脚本 创建 `deploy_test.sh` 自动化测试脚本: ```bash #!/bin/bash # deploy_test.sh echo "=== 开始PDF生成功能部署测试 ===" # 检查系统依赖 echo "1. 检查系统依赖..." for lib in libpango-1.0-0 libcairo2 libglib-2.0-0; do if ldconfig -p | grep -q $lib; then echo "✓ $lib 已安装" else echo "✗ $lib 未安装" fi done # 检查Python依赖 echo "2. 检查Python依赖..." if python -c "import weasyprint" &>/dev/null; then echo "✓ WeasyPrint 已安装" else echo "✗ WeasyPrint 未安装" fi # 运行Python测试 echo "3. 运行PDF功能测试..." cd /opt/diary-family python ubuntu_pdf_test.py echo "=== 测试完成 ===" ``` ### 7.2 设置定时健康检查 ```bash # 添加到crontab # 每天检查PDF生成功能 0 2 * * * /opt/diary-family/deploy_test.sh >> /var/log/pdf_health_check.log 2>&1 ``` ## 8. 监控和维护 ### 8.1 监控指标 - PDF文件生成成功率 - 文件大小和生成时间 - 系统资源使用情况 - 错误日志频率 ### 8.2 定期维护 ```bash # 清理旧PDF文件(保留最近30天) find /opt/diary-family/reports -name "*.pdf" -mtime +30 -delete # 检查磁盘空间 df -h /opt/diary-family/reports # 重启服务(如果需要) sudo systemctl restart gunicorn sudo systemctl restart celery ``` ## 总结 通过以上步骤,您可以在Ubuntu服务器上成功部署和测试PDF生成功能。关键点包括: 1. **系统依赖**: 确保所有GTK+相关库正确安装 2. **字体支持**: 安装中文字体以确保中文内容正确显示 3. **权限配置**: 确保报告目录有正确的写入权限 4. **监控维护**: 设置定期检查和清理机制 测试脚本 `ubuntu_pdf_test.py` 提供了全面的功能验证,确保PDF生成在生产环境中稳定运行。