使用 uWSGI 和 Nginx 部署 Django 应用

在本文中,我们将介绍如何使用 uWSGI 和 Nginx 部署 Django 应用。这种组合能够为 Django 提供高效、可靠的运行环境。

前提条件

在开始之前,请确保你已经完成以下准备工作:

  1. 安装了 Django 应用并进行了基本配置。
  2. 安装了 Python 3 和 pip。
  3. 拥有一个运行在 Linux 服务器上的用户,并且该用户具有 sudo 权限。

安装必要的软件

安装 uWSGI

使用 pip 安装 uWSGI:

pip3 install uwsgi

安装 Nginx

在 Debian/Ubuntu 系统上安装 Nginx:

sudo apt update
sudo apt install nginx -y

在 CentOS/RHEL 系统上安装 Nginx:

sudo yum install epel-release -y
sudo yum install nginx -y

配置 uWSGI

在你的 Django 项目根目录下创建一个 uwsgi.ini 配置文件,内容如下:

[uwsgi]
# 用于和 Nginx 进行数据交互的端口
socket = 127.0.0.1:22200
# Django 项目的主目录
chdir = /mxdyeah/epg
# Django 的 wsgi 文件路径
wsgi-file = /mxdyeah/epg/epg/wsgi.py
# 最大工作进程数
processes = 4
# 每个工作进程中的线程数
threads = 8
# 清理环境变量
vacuum = true
# 后台运行并输出日志
daemonize = /mxdyeah/epg/uwsgi/uwsgi-server-1.log
# PID 文件路径
pidfile = /mxdyeah/epg/uwsgi/uwsgi-server-1.pid
# 启用主进程来管理其他进程
master = true
# 启用线程
enable-threads = true
# 服务停止时自动移除 Unix Socket 和 PID 文件
vacuum = true
# 只记录错误和内部消息,不记录信息日志
disable-logging = true
# 设置最大日志文件大小
log-maxsize = 5000000
# 设置每个工作进程的最大请求数
max-requests = 500000
# 设置每个请求的最大处理时间
harakiri = 60
# 设置请求缓冲区大小
buffer-size = 65536

请根据实际情况替换 /mxdyeah/epg 和相关路径为你的 Django 项目的实际路径。

配置 systemd 服务

为了使 uWSGI 在系统启动时自动运行,我们可以创建一个 systemd 服务单元文件。

创建并编辑 /etc/systemd/system/uwsgi.service 文件:

[Unit]
Description=uWSGI Emperor service

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /mxdyeah/epg/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

请将 /mxdyeah/epg/uwsgi.ini 替换为你实际的 uwsgi.ini 文件路径。

启动并启用 uWSGI 服务:

sudo systemctl start uwsgi
sudo systemctl enable uwsgi

配置 Nginx

创建一个 Nginx 配置文件来代理 uWSGI 请求。

/etc/nginx/sites-available/ 目录下创建一个名为 myproject 的文件,并添加以下内容:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:22200;
    }

    location /static/ {
        alias /mxdyeah/epg/static/;
    }

    location /media/ {
        alias /mxdyeah/epg/media/;
    }
}

请将 yourdomain.com 替换为你的域名,将 /mxdyeah/epg/static//mxdyeah/epg/media/ 替换为实际的静态文件和媒体文件路径。

创建一个符号链接,使配置文件生效:

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

测试 Nginx 配置是否正确:

sudo nginx -t

如果没有错误,重新加载 Nginx:

sudo systemctl reload nginx

确保文件权限正确

确保 Nginx 和 uWSGI 有权访问 socket 文件和 Django 项目的所有文件。你可能需要调整文件和目录的权限和所有权。例如:

sudo chown -R www-data:www-data /mxdyeah/epg
sudo chmod -R 775 /mxdyeah/epg

确保 Nginx 和 uWSGI 使用相同的组,并且 socket 文件有正确的权限:

sudo usermod -aG www-data your_user

验证部署

打开浏览器,访问你的域名或服务器 IP 地址。如果一切配置正确,你应该能够看到 Django 应用的首页。

总结

通过以上步骤,你已经成功使用 uWSGI 和 Nginx 部署了 Django 应用。这种部署方式能够提供高效、可靠的运行环境,同时具备良好的可扩展性和安全性。如果在部署过程中遇到问题,可以查阅相关的文档或社区资源获取帮助。