文档首页/ 弹性云服务器 ECS/ 最佳实践/ 搭建应用/ 使用Nginx+uWSGI部署Django项目
更新时间:2025-08-27 GMT+08:00
分享

使用Nginx+uWSGI部署Django项目

Django是一个功能全面、高效且安全的Web框架,旨在帮助开发者快速构建高性能、安全且可维护的Web应用程序。本文主要介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。

前提条件·

  • 已购买一台弹性云服务器,且为其绑定弹性公网IP。
  • 操作系统为CentOS 7/8、Ubuntu 22/10/18、Huawei Cloud EulerOS 2.0。
  • 弹性云服务器所在安全组添加了如下表所示的安全组规则,具体步骤参见为安全组添加安全组规则
    表1 安全组规则

    方向

    优先级

    策略

    类型

    协议端口

    源地址

    入方向

    1

    允许

    IPv4

    TCP: 22

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 80

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 8001

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 8002

    0.0.0.0/0

    入方向

    1

    允许

    IPv4

    TCP: 8003

    0.0.0.0/0

  • 为了更好的获取和更新系统和软件,建议您更新镜像源为华为云镜像源,详细操作,请参见如何使用华为云开源镜像配置yum源(x86_64和鲲鹏)?

操作步骤

  1. 登录弹性云服务器。
  2. 搭建Python环境。具体操作请参见搭建Python环境
  3. 已安装Nginx。具体操作请参见搭建LNMP环境
  4. 部署uWSGI。

    1. 执行以下命令,安装uWSGI。
      sudo pip3 install uwsgi

      回显信息如下所示,表示uWSGI已安装成功。

    2. 执行以下命令,创建测试目录。

      本示例以创建/home/myblog目录为例,您可以根据需求自定义文件路径。

      sudo mkdir /home/myblog
    3. 执行以下命令,创建并编辑测试程序文件test.py。
      cd /home/myblog
      sudo vim test.py
    4. i键进入编辑模式,将以下内容复制到文件中。
      def application(env,start_response):
              start_response('200 ok',[('Content-Type','text/html')])
              return [b"Hello World"]
    5. Esc键,输入:wq,按Enter键关闭并保存配置文件。
    6. 执行以下命令,测试运行访问。
      • CentOS 7/8
        sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py
      • Ubuntu 18/20/22
        sudo uwsgi --http :8001 --wsgi-file test.py

      回显信息如下图所示。

    7. 使用浏览器访问“http://服务器IP地址:8001”,显示如下页面,说明环境搭建成功。

      在运行test.py命令执行期间才可以正常通过8001访问内容,访问期间会新增如下回显。

  5. 部署Django。

    1. 执行以下命令,安装Django。
      sudo pip3 install Django

      回显信息如下图所示。

    2. 执行以下命令,创建项目。

      本示例以创建项目文件django_project为例,您可以根据需求自定义文件夹。

      sudo /usr/local/bin/django-admin startproject django_project
    3. 执行以下命令,编辑settings.py文件。
      sudo vim /home/myblog/django_project/django_project/settings.py
      1. i键进入编辑模式。
      2. 将ALLOWED_HOSTS = [ ]属性修改成如下值:
        ALLOWED_HOSTS = ["*"]

        表示允许任何IP地址访问,否则访问会被拒绝,具体以您实际环境为准。

      3. 将DATABASES中的内容注释。

        DATABASE用于指定Django项目的数据库设置,此次未使用数据库,因此注释。部署时以实际情况为准,按需配置。

      4. 修改完成后,按Esc键,输入:wq保存并退出文件。
    4. 执行以下命令,启动Django环境。
      cd /home/myblog/django_project
      sudo python3 manage.py runserver 0.0.0.0:8003

      此处端口号可以自由配置,下一步访问时按执行命令中的端口号访问。

    5. 使用浏览器访问“http://服务器IP地址:8003”,即可访问相关Django页面。

      在启动Django环境期间才可以正常通过8003访问内容。

  6. 配置nginx+uwsgi+Django应用集成。

    1. 执行以下命令,打开Nginx配置文件。
      • CentOS 7/8
        sudo vim /etc/nginx/nginx.conf
      • Ubuntu 22/20/18
        sudo vim /etc/nginx/sites-enabled/default
    2. i键进入编辑模式,在server中修改或添加以下参数。
          upstream django { 
              server 127.0.0.1:8001;   #具体端口必须与您uWSGI配置文件中定义的端口一致 
          } 
          server { 
              listen       8002;    #设置的访问端口 
              server_name  test; 
              charset      utf-8; 
              location /static { 
                  autoindex on;     # 启用目录列表 
                  alias /home/myblog/django_project/static; # 静态文件的绝对路径。请根据实际情况修改这个路径。 
              } 
       
              location / { 
                   
                  uwsgi_pass 127.0.0.1:8001;  # 将请求传递给uWSGI服务器,这里的地址与upstream块中的定义相匹配。 
                  include uwsgi_params;   # 包含 uwsgi 参数配置 
                  include /etc/nginx/uwsgi_params;  # Nginx自带的uWSGI参数文件,具体目录请根据实际情况修改 
                  index index.html index.htm;   # 指定默认的索引文件。 
                  client_max_body_size 35m; 
              } 
          }

    3. 编辑完成后,按Esc键,输入:wq保存并退出文件。
    4. 执行以下命令,创建日志目录,uWSGI 将会作为守护进程在后台运行,并将它的输出重定向到这个日志文件中。
      sudo mkdir -p /var/log/uwsgi/
    5. 执行以下命令,新建uWSGI配置文件uwsgi_config.ini。
      sudo vim uwsgi_config.ini
    6. i键进入编辑模式,在文件中配置以下参数。
      [uwsgi] 
      socket = 127.0.0.1:8001  #此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致。 
      chdir = /home/myblog/django_project/  #指定项目目录,根据您的实际项目修改该路径。  
      wsgi-file = django_project/wsgi.py   #指定Django的wsgi file文件,根据项目修改。 
      processes = 4  #最大工作进程。 
      threads = 2  #每个工作进程processes启动后开启的线程个数。 
      vacuum = true  #环境退出时自动清理。 
      buffer-size = 65536  #设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k。 
      daemonize = /var/log/uwsgi/uwsgi_project.log  #日志文件路径,请确保此路径可写。根据您的实际项目修改该路径。 
      enable-threads = true  #确保线程支持已启用。
    7. 编辑完成后,按Esc键,输入:wq保存并退出文件。

  7. 验证。

    1. 执行以下命令,重启Nginx服务。
      sudo systemctl restart nginx
    2. 执行以下命令,启动uWSGI服务。
      • CentOS 7/8
        uwsgi --ini uwsgi_config.ini
      • Ubuntu 22/20/18
        sudo uwsgi --ini uwsgi_config.ini

      回显信息如下。

      可以通过netstat -tuln| grep 8002观察到8002端口已配置成功,处于监听中状态。

      sudo netstat -tuln | grep 8002

    3. 使用浏览器访问“http://服务器IP地址:8002”,即可访问相关Django页面。

      以上相关配置仅用于测试演示,业务环境请谨慎使用。

相关文档