插件窝 干货文章 如何用nginx+uwsgi部署自己的django项目

如何用nginx+uwsgi部署自己的django项目

uWSGI Nginx 文件 myproject 513    来源:    2025-04-26

使用Nginx + uWSGI部署Django项目的完整指南

前期准备

  1. 确保你有一个可运行的Django项目
  2. 服务器已安装Python和Django
  3. 服务器已安装Nginx
  4. 服务器已安装uWSGI

详细部署步骤

1. 安装必要组件

# 安装uWSGI
pip install uwsgi

# 安装Nginx (Ubuntu为例)
sudo apt-get install nginx

2. 配置Django项目

确保你的Django项目满足以下条件: - settings.pyALLOWED_HOSTS包含你的域名或IP - 静态文件已收集(python manage.py collectstatic

3. 配置uWSGI

创建uWSGI配置文件

在项目目录下创建myproject_uwsgi.ini文件:

[uwsgi]
# Django项目目录
chdir = /path/to/your/project
# Django的wsgi文件
module = project_name.wsgi:application

# 使用unix socket与Nginx通信
socket = /path/to/your/project/myproject.sock
# socket权限设置
chmod-socket = 664
# 退出时清理环境
vacuum = true

# 进程设置
master = true
processes = 4
threads = 2

# 日志文件
daemonize = /var/log/uwsgi/myproject.log

测试uWSGI配置

uwsgi --ini myproject_uwsgi.ini

4. 配置Nginx

创建Nginx配置文件/etc/nginx/sites-available/myproject

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    # 静态文件处理
    location /static/ {
        alias /path/to/your/project/static/;
    }

    # 媒体文件处理
    location /media/ {
        alias /path/to/your/project/media/;
    }

    # Django应用处理
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/path/to/your/project/myproject.sock;
    }
}

启用站点配置:

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

测试Nginx配置并重启:

sudo nginx -t
sudo systemctl restart nginx

5. 设置系统服务(可选)

创建uWSGI系统服务文件/etc/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable uwsgi
sudo systemctl start uwsgi

常见问题解决

  1. 502 Bad Gateway错误

    • 检查uWSGI是否运行:ps aux | grep uwsgi
    • 检查socket文件权限
    • 确保Nginx用户对socket文件有读写权限
  2. 静态文件无法加载

    • 确认settings.pySTATIC_ROOTSTATIC_URL设置正确
    • 确认Nginx配置中的静态文件路径正确
    • 运行python manage.py collectstatic
  3. 权限问题

    • 确保所有文件和目录对Nginx和uWSGI进程可读
    • 使用chownchmod调整权限

维护命令

# 重启uWSGI
sudo systemctl restart uwsgi

# 重启Nginx
sudo systemctl restart nginx

# 查看日志
tail -f /var/log/nginx/error.log
tail -f /var/log/uwsgi/myproject.log

通过以上步骤,你的Django项目应该已经成功通过Nginx + uWSGI部署运行了。