在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目,性能优化需要从Web 服务器配置、应用层调优、数据库优化、缓存策略、静态资源处理以及云原生特性利用等多个维度入手。以下是系统化的优化建议:
一、基础环境准备
-
操作系统层面
- 更新系统并清理无用包:
sudo apt update && sudo apt upgrade -y sudo apt autoremove --purge - 调整内核参数(编辑
/etc/sysctl.conf):net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_tw_reuse = 1 vm.swappiness = 10执行
sudo sysctl -p生效。
- 更新系统并清理无用包:
-
Python 环境
- 使用
pyenv或虚拟环境隔离依赖,避免污染系统 Python。 - 安装最新版 Python 3.10+(Django 4.2+ 推荐)。
- 使用
二、WSGI/ASGI 服务器选型与配置(关键)
❗ 切勿直接使用
python manage.py runserver生产环境!
推荐方案:Gunicorn + Nginx
-
Gunicorn 配置示例(
gunicorn.conf.py):bind = "127.0.0.1:8000" workers = 4 # CPU 核心数 × 2 ~ 4,根据负载调整 worker_class = "sync" # 或 "gevent"/"uvicorn" 用于异步 threads = 2 max_requests = 1000 # 防止内存泄漏 max_requests_jitter = 50 timeout = 120 keepalive = 5 accesslog = "-" errorlog = "-" loglevel = "info"💡 提示:高并发场景可考虑
uvicorn + daphne(支持 WebSocket),或使用hypercorn。 -
Nginx 反向X_X优化(
/etc/nginx/sites-available/django):server { listen 80; server_name your-domain.com; location /static/ { alias /var/www/yourproject/static/; expires 30d; add_header Cache-Control "public, immutable"; } location /media/ { alias /var/www/yourproject/media/; expires 7d; } 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_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }
三、Django 项目级优化
-
关闭调试模式
DEBUG = False ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1'] -
启用压缩与 Gzip
- 安装
django-compressor或使用 Nginx 的gzip模块(已启用)。 - 添加中间件(可选):
MIDDLEWARE = [ # ... 'whitenoise.middleware.WhiteNoiseMiddleware', # 简化静态文件托管 # 或自定义 gzip 中间件 ]
- 安装
-
静态文件服务
- 开发阶段:
python manage.py collectstatic - 生产阶段:强烈建议将静态/媒体文件托管到腾讯云对象存储(COS),搭配 CDN 提速:
STATICFILES_STORAGE = 'storages.backends.cos.COSStorage' MEDIA_URL = '/media/' COS_BUCKET_NAME = 'your-bucket-name'✅ 优势:降低带宽压力、提升全球访问速度、自动 CDN 缓存。
- 开发阶段:
-
数据库查询优化
- 使用
.select_related()和.prefetch_related()减少 N+1 查询。 - 对常用字段加索引(
models.Index,Meta.indexes)。 - 定期运行
python manage.py shell中的django.db.connection.queries分析慢查询。 - 启用连接池(如
django-db-connection-pool或使用 PostgreSQL 的pgbouncer)。
- 使用
-
缓存策略
- 后端缓存(Redis/Memcached):
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } - 视图级缓存:
from django.views.decorators.cache import cache_page @cache_page(60 * 15) def my_view(request): ... - 模板片段缓存:
{% load cache %} {% cache 300 sidebar %} ... {% endcache %}
- 后端缓存(Redis/Memcached):
-
异步任务处理
- 耗时操作(邮件、报表生成)放入 Celery + Redis/RabbitMQ:
pip install celery[redis] - 启动 Celery Worker:
celery -A yourproject worker -l info --concurrency=4
- 耗时操作(邮件、报表生成)放入 Celery + Redis/RabbitMQ:
四、腾讯云特色优化
| 服务 | 用途 | 建议 |
|---|---|---|
| CVM + 弹性公网 IP | 基础计算 | 选择高性能型实例(如 c8/c8a 系列),开启 SSD 云硬盘 |
| CDN | 静态资源提速 | 绑定 COS + 域名,开启 HTTP/2、Brotli 压缩 |
| Redis 集群版 | 缓存 & 会话 | 替代自建 Redis,高可用 + 自动备份 |
| 云数据库 MySQL/PostgreSQL | 数据持久化 | 启用读写分离、慢查询日志、自动备份;连接数限制合理设置 |
| 监控告警(CloudMonitor) | 实时诊断 | 配置 CPU/内存/磁盘/网络阈值告警,集成到企业微信/钉钉 |
五、安全与运维加固
- 禁用 root 登录,使用密钥对 SSH 登录。
- 防火墙只开放必要端口(80/443/SSH 特定 IP)。
- 启用 HTTPS(Let’s Encrypt 免费证书 + Nginx 自动续期)。
- 定期更新依赖:
pip audit或safety check。 - 使用
fail2ban防暴力破解。
六、性能测试与持续优化
- 压测工具:
- Apache Bench (
ab):ab -n 10000 -c 100 http://your-domain.com/ - Wrk:
wrk -t12 -c400 -d30s http://your-domain.com/
- Apache Bench (
- APM 监控:
- 集成
django-silk(轻量)、Sentry(错误追踪)、Prometheus + Grafana(指标可视化)。
- 集成
- 日志分析:
- 使用
ELK Stack或腾讯云日志服务(CLS)集中管理日志。
- 使用
附:快速检查清单 ✅
- [ ] DEBUG=False
- [ ] Gunicorn/Nginx 正确配置
- [ ] 静态/媒体文件走 COS+CDN
- [ ] 数据库索引齐全 + 慢查询已优化
- [ ] Redis 缓存启用
- [ ] 异步任务用 Celery 处理
- [ ] HTTPS 已配置
- [ ] 监控告警已设置
如需针对具体业务场景(如电商高并发、实时聊天、大数据导出等)进一步定制方案,欢迎提供细节,我可给出更精准的架构建议。
云知识CLOUD