目录

  1. 简介
  2. 安装依赖
  3. 配置 uWSGI
  4. 配置 Nginx
  5. 运行 Django 项目
  6. 参考资料

1. 简介

在生产环境中,Django 通常并不直接提供对外服务,而是通过 uWSGI 作为 WSGI 服务器来处理请求,然后使用 Nginx 作为反向代理服务器来转发请求。uWSGI 和 Nginx 的组合为 Django 提供了高效、可扩展的生产环境部署方式。

  • uWSGI:是一个应用服务器,它处理与 Django 应用之间的请求/响应交互,并将其暴露为 WSGI(Web Server Gateway Interface)接口。
  • Nginx:是一个高性能的 HTTP 和反向代理服务器,它将客户端请求转发给 uWSGI,并返回 uWSGI 的响应。

2. 安装依赖

2.1 安装 Nginx

首先,我们需要安装 Nginx 服务器:

# 使用 apt 安装 Nginx(Ubuntu/Debian 系统)
sudo apt update
sudo apt install nginx

安装完成后,可以通过以下命令检查 Nginx 是否成功安装并启动:

sudo systemctl status nginx

如果 Nginx 没有自动启动,可以通过以下命令启动 Nginx:

sudo systemctl start nginx


2.2 安装 uWSGI

可以通过 pip 安装 uWSGI:

# 安装 uWSGI
pip install uwsgi

或者可以全局安装:

sudo apt install uwsgi

安装完成后,可以通过以下命令检查 uWSGI 是否安装成功:

uwsgi --version


3. 配置 uWSGI

uWSGI 的配置可以通过配置文件或者命令行参数来完成。我们需要创建一个 uWSGI 配置文件,用于指定 Django 项目如何启动。

创建一个 uwsgi.ini 配置文件:

# uwsgi.ini

[uwsgi]

chdir = /path/to/your/project # 项目目录 module = your_project_name.wsgi:application # Django 项目的 wsgi 文件 home = /path/to/your/virtualenv # 虚拟环境路径(如果有的话) socket = /path/to/your/socket.sock # socket 文件位置 chmod-socket = 660 # 设置 socket 文件的权限 vacuum = true # 清理资源 master = true # 启动 master 进程 processes = 5 # 启动 5 个工作进程

  • chdir:Django 项目的根目录。
  • module:指定 WSGI 模块,通常为 project_name.wsgi:application
  • home:虚拟环境的路径(如果你使用虚拟环境)。
  • socket:uWSGI 使用的 Unix socket 文件。
  • chmod-socket:设置 socket 文件的权限。
  • vacuum:启用资源清理。
  • master:启用 master 进程。
  • processes:设置工作进程的数量。

然后,使用以下命令启动 uWSGI:

uwsgi --ini /path/to/your/uwsgi.ini


4. 配置 Nginx

Nginx 作为反向代理服务器将请求转发给 uWSGI。我们需要配置 Nginx 来指向 uWSGI 生成的 Unix socket。

首先,创建一个新的 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/your_project

配置文件内容如下:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;  # 你的域名

    location / {
        uwsgi_pass unix:/path/to/your/socket.sock;  # uWSGI socket 文件
        include uwsgi_params;  # 包含 uWSGI 配置文件
    }

    # 静态文件和媒体文件处理
    location /static/ {
        alias /path/to/your/project/static/;  # Django 项目的静态文件目录
    }

    location /media/ {
        alias /path/to/your/project/media/;  # Django 项目的媒体文件目录
    }
}

  • uwsgi_pass:设置 Nginx 将请求转发给 uWSGI 使用的 Unix socket 文件。
  • location /static/location /media/:配置静态文件和媒体文件的访问路径。

配置完成后,创建符号链接到 sites-enabled 目录:

sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/

然后重新加载 Nginx 配置:

sudo nginx -t  # 检查配置文件是否正确
sudo systemctl reload nginx  # 重新加载 Nginx


5. 运行 Django 项目

确保 Django 项目已经正确配置,并且静态文件和媒体文件已经收集。如果没有收集静态文件,可以使用以下命令:

# 在 Django 项目目录中运行
python manage.py collectstatic

通过以下命令启动 uWSGI:

uwsgi --ini /path/to/your/uwsgi.ini

此时,Nginx 会将客户端请求转发给 uWSGI,uWSGI 会将请求处理后返回给 Nginx,最终响应返回给客户端。


6. 参考资料

出站链接

站内链接