Django Nginx+uwsgi 安装配置
直接回答
关键要点:
Django 结合 Nginx 和 uWSGI 是生产环境中常用的部署方式,Nginx 作为反向代理处理静态文件和请求转发,uWSGI 作为应用服务器运行 Django 应用。以下是基于 Ubuntu/Debian 系统的安装配置步骤,结合最新信息整理。
安装步骤:
- 准备环境:
- 确保系统已安装 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
- 配置 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
- 安装并配置 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
- 安装并配置 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
- 设置 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
- 验证部署:
- 访问
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)。
步骤:
- 更新系统包:
sudo apt update && sudo apt upgrade
- 安装 Python 3 及其开发工具:
sudo apt install python3 python3-pip python3-dev build-essential
- 安装 virtualenv 以隔离项目环境:
pip3 install virtualenv
- 创建并激活虚拟环境:
virtualenv ~/venv
source ~/venv/bin/activate
- 在虚拟环境中安装 Django 和 uWSGI:
pip install django uwsgi
2. 配置 Django 项目
创建项目:
- 创建 Django 项目:
django-admin startproject myproject
cd myproject
- 配置
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/'
- 收集静态文件到
STATIC_ROOT
:
python manage.py collectstatic
- 测试开发服务器:
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 配置文件:
- 在项目目录下创建
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
)。
- 测试 uWSGI 配置:
uwsgi --ini myproject_uwsgi.ini
- 检查
/var/log/uwsgi/myproject.log
是否有错误。 - 如果正常,访问
http://your_server_ip:8000
应显示 Django 页面。
- 安装 uWSGI 系统级(可选,推荐用于生产):
sudo pip3 install uwsgi
4. 安装并配置 Nginx
Nginx 作为反向代理,处理静态文件并将动态请求转发给 uWSGI。
安装 Nginx:
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
配置 Nginx:
- 创建 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
设置一致。
- 启用配置文件:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
- 测试并重启 Nginx:
sudo nginx -t
sudo systemctl restart nginx
5. 配置 systemd 服务
为确保 uWSGI 在系统启动时自动运行,配置 systemd 服务:
- 创建 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
- 创建 uWSGI 配置文件目录:
sudo mkdir -p /etc/uwsgi/sites
sudo ln -s /path/to/myproject_uwsgi.ini /etc/uwsgi/sites/
- 启用并启动服务:
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 的
processes
和threads
参数以适配服务器性能。 - 防火墙:允许 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 日的最新信息整理,确保内容准确且实用。