目录
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,最终响应返回给客户端。
发表回复