Django Nginx+uwsgi 安装配置

直接回答

关键要点
Django 结合 Nginx 和 uWSGI 是生产环境中常用的部署方式,Nginx 作为反向代理处理静态文件和请求转发,uWSGI 作为应用服务器运行 Django 应用。以下是基于 Ubuntu/Debian 系统的安装配置步骤,结合最新信息整理。

安装步骤

  1. 准备环境
  • 确保系统已安装 Python 3 和 pip:sudo apt update && sudo apt install python3-pip python3-dev
  • 安装 virtualenv:pip3 install virtualenv
  • 创建虚拟环境:virtualenv venv && source venv/bin/activate
  • 安装 Django 和 uWSGI:pip install django uwsgi
  1. 配置 Django 项目
  • 创建 Django 项目:django-admin startproject myproject
  • 配置 settings.py
    python ALLOWED_HOSTS = ['your_domain_or_ip'] STATIC_URL = '/static/' STATIC_ROOT = '/path/to/myproject/static/'
  • 收集静态文件:python manage.py collectstatic
  1. 安装并配置 uWSGI
  • 创建 uWSGI 配置文件(myproject_uwsgi.ini):
    ini

[uwsgi]

chdir = /path/to/myproject module = myproject.wsgi:application home = /path/to/venv master = true processes = 5 socket = /tmp/myproject.sock chmod-socket = 664 vacuum = true daemonize = /var/log/uwsgi/myproject.log 测试 uWSGI:uwsgi --ini myproject_uwsgi.ini 检查日志:/var/log/uwsgi/myproject.log

  1. 安装并配置 Nginx
  • 安装 Nginx:sudo apt install nginx
  • 创建 Nginx 配置文件(/etc/nginx/sites-available/myproject):
    nginx server { listen 80; server_name your_domain_or_ip; location /static/ { alias /path/to/myproject/static/; } location / { include uwsgi_params; uwsgi_pass unix:/tmp/myproject.sock; } }
  • 启用配置:sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
  • 测试配置:sudo nginx -t
  • 重启 Nginx:sudo systemctl restart nginx
  1. 设置 systemd 服务(可选):
  • 创建 uWSGI systemd 服务(/etc/systemd/system/uwsgi.service): [Unit] Description=uWSGI Emperor service After=network.target [Service] ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all [Install] WantedBy=multi-user.target
  • 创建 uWSGI 配置文件目录:sudo mkdir -p /etc/uwsgi/sites
  • 链接 uWSGI 配置文件:sudo ln -s /path/to/myproject_uwsgi.ini /etc/uwsgi/sites/
  • 启动服务:sudo systemctl enable uwsgi && sudo systemctl start uwsgi
  1. 验证部署
  • 访问 http://your_domain_or_ip,应看到 Django 首页。
  • 检查日志:/var/log/nginx/error.log/var/log/uwsgi/myproject.log

注意事项

  • 确保防火墙(如 ufw)允许 80 端口:sudo ufw allow 80
  • 为生产环境,建议配置 HTTPS(如 Let’s Encrypt)。
  • 静态文件由 Nginx 直接处理,动态请求通过 uWSGI 处理,提高性能。

参考资源


详细报告

以下是 Django 结合 Nginx 和 uWSGI 的完整安装与配置指南,适用于 Ubuntu/Debian 系统,基于 2025 年 8 月 2 日的最新信息。Nginx 作为高性能 Web 服务器和反向代理,处理静态文件和客户端请求;uWSGI 作为应用服务器,运行 Django 应用并通过 WSGI 协议与 Nginx 通信。本指南覆盖环境准备、安装、配置、测试及优化步骤。

1. 环境准备

在开始之前,确保服务器满足以下要求:

  • Ubuntu/Debian 系统(推荐 Ubuntu 20.04 或更高)。
  • 非 root 用户具有 sudo 权限。
  • 已配置基本防火墙(如 ufw)。

步骤

  1. 更新系统包:
   sudo apt update && sudo apt upgrade
  1. 安装 Python 3 及其开发工具:
   sudo apt install python3 python3-pip python3-dev build-essential
  1. 安装 virtualenv 以隔离项目环境:
   pip3 install virtualenv
  1. 创建并激活虚拟环境:
   virtualenv ~/venv
   source ~/venv/bin/activate
  1. 在虚拟环境中安装 Django 和 uWSGI:
   pip install django uwsgi

2. 配置 Django 项目

创建项目

  1. 创建 Django 项目:
   django-admin startproject myproject
   cd myproject
  1. 配置 settings.py(位于 myproject/myproject/settings.py):
  • 设置允许的主机:
    python ALLOWED_HOSTS = ['your_domain_or_ip', '127.0.0.1']
  • 配置静态文件路径:
    python STATIC_URL = '/static/' STATIC_ROOT = '/path/to/myproject/static/'
  1. 收集静态文件到 STATIC_ROOT
   python manage.py collectstatic
  1. 测试开发服务器:
   python manage.py runserver 0.0.0.0:8000
  • 访问 http://your_server_ip:8000,确认 Django 项目运行正常。
  • 如果遇到防火墙问题,允许 8000 端口:sudo ufw allow 8000

3. 配置 uWSGI

uWSGI 是一个高性能的应用服务器,通过 WSGI 协议与 Django 交互。以下是配置步骤:

创建 uWSGI 配置文件

  1. 在项目目录下创建 myproject_uwsgi.ini
   [uwsgi]
   # Django 项目设置
   chdir = /path/to/myproject
   module = myproject.wsgi:application
   home = /path/to/venv
   env = DJANGO_SETTINGS_MODULE=myproject.settings

   # 进程设置
   master = true
   processes = 5
   socket = /tmp/myproject.sock
   chmod-socket = 664
   vacuum = true
   daemonize = /var/log/uwsgi/myproject.log
   pidfile = /tmp/myproject.pid
   max-requests = 5000
   harakiri = 20
  • chdir:项目根目录(包含 manage.py 的目录)。
  • module:Django 的 WSGI 模块(myproject.wsgi:application)。
  • home:虚拟环境路径。
  • socket:uWSGI 与 Nginx 通信的 Unix 套接字文件。
  • daemonize:日志文件路径,确保目录存在(sudo mkdir -p /var/log/uwsgi && sudo chown www-data:www-data /var/log/uwsgi)。
  1. 测试 uWSGI 配置:
   uwsgi --ini myproject_uwsgi.ini
  • 检查 /var/log/uwsgi/myproject.log 是否有错误。
  • 如果正常,访问 http://your_server_ip:8000 应显示 Django 页面。
  1. 安装 uWSGI 系统级(可选,推荐用于生产):
   sudo pip3 install uwsgi

4. 安装并配置 Nginx

Nginx 作为反向代理,处理静态文件并将动态请求转发给 uWSGI。

安装 Nginx

sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

配置 Nginx

  1. 创建 Nginx 配置文件(/etc/nginx/sites-available/myproject):
   server {
       listen 80;
       server_name your_domain_or_ip;

       location /static/ {
           alias /path/to/myproject/static/;
       }

       location / {
           include uwsgi_params;
           uwsgi_pass unix:/tmp/myproject.sock;
       }
   }
  • server_name:替换为域名或服务器 IP。
  • location /static/:Nginx 直接提供静态文件,绕过 uWSGI,提高性能。
  • uwsgi_pass:与 uWSGI 的 socket 设置一致。
  1. 启用配置文件:
   sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
  1. 测试并重启 Nginx:
   sudo nginx -t
   sudo systemctl restart nginx

5. 配置 systemd 服务

为确保 uWSGI 在系统启动时自动运行,配置 systemd 服务:

  1. 创建 uWSGI 服务文件(/etc/systemd/system/uwsgi.service):
   [Unit]
   Description=uWSGI Emperor service
   After=network.target

   [Service]
   ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown www-data:www-data /run/uwsgi'
   ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
   Restart=always
   KillSignal=SIGQUIT
   Type=notify
   NotifyAccess=all

   [Install]
   WantedBy=multi-user.target
  1. 创建 uWSGI 配置文件目录:
   sudo mkdir -p /etc/uwsgi/sites
   sudo ln -s /path/to/myproject_uwsgi.ini /etc/uwsgi/sites/
  1. 启用并启动服务:
   sudo systemctl enable uwsgi
   sudo systemctl start uwsgi

6. 验证部署

  • 访问 http://your_domain_or_ip,应看到 Django 项目首页。
  • 检查日志以排查问题:
  • Nginx 日志:/var/log/nginx/error.log/var/log/nginx/access.log
  • uWSGI 日志:/var/log/uwsgi/myproject.log

7. 优化与注意事项

  • HTTPS 配置:使用 Let’s Encrypt 配置 SSL:
  sudo apt install python3-certbot-nginx
  sudo certbot --nginx -d your_domain
  • 权限问题:确保 www-data 用户对 /tmp/myproject.sock 和静态文件目录有访问权限:
  sudo chown www-data:www-data /tmp/myproject.sock
  sudo chmod -R 755 /path/to/myproject/static
  • 性能优化
  • 配置 Nginx 缓存静态文件。
  • 调整 uWSGI 的 processesthreads 参数以适配服务器性能。
  • 防火墙:允许 80 和 443 端口:
  sudo ufw allow 80
  sudo ufw allow 443
  • Unicode 问题:若上传非 ASCII 文件名时出现 UnicodeEncodeError,在 myproject_uwsgi.ini 中添加:
  env = LC_ALL=C.UTF-8
  env = LANG=C.UTF-8

8. 参考资源

9. 结论

通过以上步骤,可在 Ubuntu/Debian 系统上成功部署 Django 项目,使用 Nginx 提供静态文件服务和反向代理,uWSGI 运行 Django 应用。此配置高效、稳定,适合生产环境。开发者可根据项目需求调整 uWSGI 进程数或 Nginx 缓存策略以优化性能。

本文基于 2025 年 8 月 2 日的最新信息整理,确保内容准确且实用。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注