腾讯云服务器Ubuntu 22.04部署Django项目性能优化建议?

在腾讯云服务器(Ubuntu 22.04)上部署 Django 项目,性能优化需要从Web 服务器配置、应用层调优、数据库优化、缓存策略、静态资源处理以及云原生特性利用等多个维度入手。以下是系统化的优化建议:


一、基础环境准备

  1. 操作系统层面

    • 更新系统并清理无用包:
      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 生效。

  2. 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 项目级优化

  1. 关闭调试模式

    DEBUG = False
    ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1']
  2. 启用压缩与 Gzip

    • 安装 django-compressor 或使用 Nginx 的 gzip 模块(已启用)。
    • 添加中间件(可选):
      MIDDLEWARE = [
       # ...
       'whitenoise.middleware.WhiteNoiseMiddleware',  # 简化静态文件托管
       # 或自定义 gzip 中间件
      ]
  3. 静态文件服务

    • 开发阶段:python manage.py collectstatic
    • 生产阶段:强烈建议将静态/媒体文件托管到腾讯云对象存储(COS),搭配 CDN 提速:
      STATICFILES_STORAGE = 'storages.backends.cos.COSStorage'
      MEDIA_URL = '/media/'
      COS_BUCKET_NAME = 'your-bucket-name'

      ✅ 优势:降低带宽压力、提升全球访问速度、自动 CDN 缓存。

  4. 数据库查询优化

    • 使用 .select_related().prefetch_related() 减少 N+1 查询。
    • 对常用字段加索引(models.Index, Meta.indexes)。
    • 定期运行 python manage.py shell 中的 django.db.connection.queries 分析慢查询。
    • 启用连接池(如 django-db-connection-pool 或使用 PostgreSQL 的 pgbouncer)。
  5. 缓存策略

    • 后端缓存(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 %}
  6. 异步任务处理

    • 耗时操作(邮件、报表生成)放入 Celery + Redis/RabbitMQ:
      pip install celery[redis]
    • 启动 Celery Worker:
      celery -A yourproject worker -l info --concurrency=4

四、腾讯云特色优化

服务 用途 建议
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 auditsafety check
  • 使用 fail2ban 防暴力破解。

六、性能测试与持续优化

  1. 压测工具
    • Apache Bench (ab):ab -n 10000 -c 100 http://your-domain.com/
    • Wrk:wrk -t12 -c400 -d30s http://your-domain.com/
  2. APM 监控
    • 集成 django-silk(轻量)、Sentry(错误追踪)、Prometheus + Grafana(指标可视化)。
  3. 日志分析
    • 使用 ELK Stack 或腾讯云日志服务(CLS)集中管理日志。

附:快速检查清单 ✅

  • [ ] DEBUG=False
  • [ ] Gunicorn/Nginx 正确配置
  • [ ] 静态/媒体文件走 COS+CDN
  • [ ] 数据库索引齐全 + 慢查询已优化
  • [ ] Redis 缓存启用
  • [ ] 异步任务用 Celery 处理
  • [ ] HTTPS 已配置
  • [ ] 监控告警已设置

如需针对具体业务场景(如电商高并发、实时聊天、大数据导出等)进一步定制方案,欢迎提供细节,我可给出更精准的架构建议。

未经允许不得转载:云知识CLOUD » 腾讯云服务器Ubuntu 22.04部署Django项目性能优化建议?