django-unfold 生产环境部署指南:静态文件、请求链路与慢查询的逐项排查

📅 发布时间:2026/9/20 21:45:12
django-unfold 生产环境部署指南:静态文件、请求链路与慢查询的逐项排查
django-unfold 生产环境部署指南静态文件、请求链路与慢查询的逐项排查【免费下载链接】QuickRecorderA lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具项目地址: https://gitcode.com/GitHub_Trending/qu/QuickRecorderdjango-unfold 是面向 Django 的现代管理框架用 Tailwind CSS 构建的界面替代默认后台适合需要快速交付且便于维护的内部管理系统。本文不堆配置模板而是按真实请求链路组织先验证是否有问题再决定改什么最后用什么证据确认。目标是把上线首周常见的三类问题一次解决静态资源缺失、管理列表页变慢、安全项被漏掉。一、30 秒结论先做哪三件事适用对象已有 Django 项目、已引入 django-unfold、需要迁到生产服务器的人。优先做三件事用 collectstatic 生成静态文件交给 Nginx 直接返回应用用 Gunicorn 启动并放在 Nginx 之后不要使用 runserver列表页跑通后给常用过滤字段补数据库索引。能避免CSS 缺失导致的白屏或 404、查询未优化造成列表页不可用、DEBUG 未关导致暴露面扩大。二、上线前诊断逐项判断有没有问题诊断不需要新工具有浏览器和命令行即可。1. 静态资源检查打开管理页看网络请求.css 或 .js 出现 404 就是有问题。标准静态文件应在服务器生成由 Nginx 直接返回Django 只处理动态请求。动作确认 STATIC_ROOT 目录执行python manage.py collectstatic --noinput核对输出列表包含 unfold 相关资源。2. 应用服务检查看进程列表runserver 还在跑或 Gunicorn 只有 1 个 worker 都有问题。标准worker 数约等于 CPU 核数每 worker 配 2 到 4 个线程进程要在登出后存活systemd 或进程管理器托管。3. 数据库检查用 Django Debug Toolbar 看列表页 SQL逐行查一次N1时数据一多必然变慢。标准列表、过滤、搜索都是高频查询确认对应字段建了数据库索引。4. 安全检查跑python manage.py check --deploy它会逐条提示常见的生产风险。标准不必全绿但 DEBUG 与 HTTPS 跳转相关项必须处理。三、请求链路优化静态、代理与应用服务器如何分工以一次访问管理列表页的请求为例分工是浏览器到 Nginx/static/ 请求直接命中 staticfiles 目录不进入 Python 进程这里设置一年缓存是安全的因为 collectstatic 的 Manifest 存储会生成带内容哈希的文件名。Nginx 到 Gunicorn其余请求代理到 127.0.0.1:8000。Host 与转发协议头必须传否则 HTTPS 判断和 CSRF 会出错。Gunicorn 到 Djangoworker 数按 CPU 核数gthread 模式加少量线程即可。请求慢时先查数据库。Nginx 关键只有两个 locationlocation /static/ { alias /path/to/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-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }Django 侧在收集静态文件前配置 Manifest 存储配置名以你的 Django 版本为准STATIC_ROOT BASE_DIR / staticfiles STATICFILES_STORAGE django.contrib.staticfiles.storage.ManifestStaticFilesStorage验证重启后访问首页确认 CSS 请求出现 304 或命中缓存/static/ 响应头带有长缓存指令。四、数据访问优化从列表、过滤与搜索开始管理后台是 Django 项目里查询最集中的地方这一步是 Django Admin 性能优化的主战场顺序跟着用户动作走列表页列表里展示的关联字段默认逐行查询。在 ModelAdmin 的 get_queryset 中对相关字段加select_related()多对多或一对多用 prefetch。过滤条件落在 WHERE 子句里常用字段有单列索引即可若总是两个字段组合过滤考虑复合索引。搜索走的是 LIKE大表上全表扫描慢优先收窄搜索列。Django 缓存是补充把访问频繁、变更少的数据如站点配置缓存起来不能替代查询优化。确认方法同一页面在小数据集下跑一遍记录 SQL 条数与耗时再对照生产数据规模判断。单请求超过 1 秒就先处理。不要给每个字段都加索引索引有写入成本加给你能证明慢的字段。五、安全与回滚最小配置集与判断标准最小安全项不要一次加满先保证这几项落地DEBUG False ALLOWED_HOSTS [yourdomain.com] SECURE_SSL_REDIRECT True SESSION_COOKIE_SECURE True CSRF_COOKIE_SECURE True SECURE_HSTS_SECONDS 31536000验证用 http 访问站点确认 301 到 https查看响应头里是否有 HSTS 字段。日志与会话LOGGING 配一个文件 handler把项目和 django 的日志器输出到同一目录如 /var/log/django/。目标是慢请求或报错发生时5 分钟内能定位到时间窗口。多实例部署时把会话切到缓存后端保证登录状态一致。回滚判断满足任一条先回滚再查原因上线后静态资源 404 成批出现通常是漏跑 collectstatic列表页耗时明显变差且能从 SQL 里认出新增代码报错日志量上涨或健康检查接口不再返回 200。回滚动作本身应该是一条命令切版本号或重启旧进程而不是现场排查。六、验收清单检查项、预期结果与异常处理检查项预期结果异常处理manage.py check --deploy与 DEBUG 或 HTTPS 相关的告警为 0逐条处理完再上线collectstatic --dry-run输出文件列表与服务器目录一致重新收集并核对 STATIC_ROOT打开管理页看网络请求CSS 与 JS 全部 200 或 304无 404检查 Nginx 静态目录是否指向收集后的目录HTTP 访问被 301 到 HTTPS响应头带 HSTS核对 SSL_REDIRECT 与 ALLOWED_HOSTS列表页抓一次查询SQL 条数不随数据量增长而上升按第 4 节补关联查询与索引Gunicorn 进程多 worker登出后仍存活加 systemd 并验证重启自启错误日志目录报错后有新文件生成且时间戳可辨修正 LOGGING 文件路径与轮转最后强调一句清单是一次性验收不替代长期监控。上线后定期看两个数慢请求数量与列表页耗时用真实数据调优。【免费下载链接】QuickRecorderA lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具项目地址: https://gitcode.com/GitHub_Trending/qu/QuickRecorder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考