赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 实践教程
  5. 搭建网站
  6. 使用Nginx+uWSGI部署Django项目

使用Nginx+uWSGI部署Django项目

  • 搭建网站
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

Django是一个功能丰富、高效且安全的框架,适合各种规模的Web应用程序开发。它不仅能够加速开发过程,还能确保应用程序的质量和稳定性。本文介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。

产品优势

使用Nginx和uWSGI部署Django项目,能够高效处理高并发请求、快速提供静态资源、确保运行、增强安全性以保护敏感数据,并支持灵活扩展以应对流量高峰,从而显著提升用户体验和业务连续性。

  • 高性能:Nginx能处理大量并发连接;而uWSGI专注于Python Web应用的高效执行,两者结合确保Django程序的快速响应。

  • 易于管理和配置:简单直观的配置语法您可以快速设置和调整服务器参数,适应不同的业务需求变化,降低运维复杂度。

  • 模块化设计:高度模块化的特性允许根据具体需求选择必要的组件,节省资源的同时提高了系统的灵活性和效率。

方案架构

image
  1. 用户请求:浏览器发送HTTP请求。

  2. Nginx:接收请求,如果是静态文件,直接返回;否则,转发给uWSGI。

  3. uWSGI:接收请求并通过WSGI协议传递给Django应用。

  4. Django:处理业务逻辑,可能涉及数据库查询或模板渲染,生成响应内容。

  5. 返回响应:Django将处理结果交给uWSGI,uWSGI负责将这些信息打包成适当的格式,再传递回Nginx。

快速部署

您可以单击一键运行进入Terraform Explorer查看并执行Terraform代码,从而实现自动化地在Alibaba Cloud Linux实例中使用Nginx与uWSGI部署Django项目。

  • 选择一个已有Alibaba Cloud Linux实例:参数ecs_instance_id填入已有实例ID,依次点击发起调试 > 预览并执行。

  • 新建实例:参数ecs_instance_id不设置任何值,依次点击发起调试 > 预览并执行。

准备工作

创建或已有ECS实例,ECS实例必须满足以下条件。

  • 操作系统必须为Alibaba Cloud Linux 3/2、CentOS 7/8、Ubuntu 22/20/18。

  • 已分配公网IP或绑定弹性公网IP(EIP),具体操作,请参见开通公网。

  • 安全组的入方向添加安全组规则并放行22、80、8001和8002端口。具体操作,请参见添加安全组规则。

    说明
    • 8001端口为测试uWSGI服务。

    • 8002端口为测试Django项目。

  • 已安装Python 3。

    您可通过以下命令查看已安装的版本信息,如需安装,请参见部署Python环境。

    python3 --version

    回显信息如下所示。

    image

  • 已安装Nginx。如需安装,请参见安装Nginx环境。

重要

请您务必满足以上所有条件。

步骤一:部署uWSGI

  1. 执行以下命令,安装uWSGI。

    sudo pip3 install uwsgi

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

    image

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

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

    sudo mkdir /home/myblog
  3. 执行以下命令,创建并编辑测试程序文件test.py。

    cd /home/myblog
    sudo vim test.py

    输入i进入编辑模式,将以下内容复制到文件中。

    def application(env,start_response):
            start_response('200 ok',[('Content-Type','text/html')])
            return [b"Hello World"]

    按Esc键,输入:wq保存并退出文件。

  4. 执行以下命令,测试运行访问。

    • Alibaba Cloud Linux 3/2 、CentOS 7/8

      sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py
    • Ubuntu 22/20/18

      sudo uwsgi --http :8001 --wsgi-file test.py

    回显信息如下图所示。

    image

  5. 在本地电脑浏览器的地址栏输入http://<ECS实例的公网IP地址>:8001,访问测试文件。

    • 出现如下页面,表示uWSGI环境搭建成功。

      image

    • 同时后台回显信息如下。

      image

步骤二:部署Django

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

    sudo pip3 install Django

    安装成功回显信息如下图所示。image

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

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

    • Alibaba Cloud Linux 3/2 、CentOS 7/8

      sudo /usr/local/bin/django-admin.py startproject uwsgi_project
    • Ubuntu 22/20/18

      sudo /usr/local/bin/django-admin startproject uwsgi_project
  3. 执行以下命令,编辑settings.py文件。

    sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py
    1. 将ALLOWED_HOSTS = [ ]修改为ALLOWED_HOSTS = ["*"]。

      说明

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

      image

    2. 将DATABASES中的内容注释。

      image

      重要
      • DATABASES用于指定Django项目将要使用的数据库设置。本实例中未使用数据库,所以需要注释。

      • 在实际项目中您可按需配置。

  4. 修改完成后,按Esc键,输入:wq保存并退出文件。执行以下命令,启动Django环境。

    cd /home/myblog/uwsgi_project
    sudo python3 manage.py runserver 0.0.0.0:8002
  5. 在本地电脑浏览器的地址栏输入http://<ECS实例的公网IP地址>:8002,即可访问相关Django页面。

    image

步骤三:配置Nginx、uWSGI与Django的集成

您需要依次修改Nginx和uWSGI配置,目的是在Nginx和uWSGI配置文件中写入Django项目、Nginx和uWSGI的位置或者版本信息,让这个流程可以运转起来。

  1. (可选)如需部署您的Django项目,将本地的项目上传到服务器,同时修改Django配置,操作如下。

    重要

    如果您仅想展示基本的Django网页,测试此方案的可行性,请跳过此步骤。

    1. 将本地的项目上传至服务器,请参见上传和下载文件(SFTP)。

    2. 执行以下命令,修改Django配置文件settings.py。

      #例如 uwsgi_project 为您的项目名称
      sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py
    3. 按i键,进入编辑模式。

    4. 将DEBUG = True修改为DEBUG = False。

      image

    5. 在settings.py文件开头添加如下参数。

      import os

      为什么添加import os?

      • 作用域问题:确保os模块在整个settings.py文件中都是可用的。如果你在文件的中间或者末尾才导入os,那么在此之前使用os的地方就会抛出NameError异常。

      • 性能优化:解释器只需要解析一次导入语句,而不是在遇到时再解析。

    6. 在settings.py文件末尾添加如下参数。

      STATIC_ROOT = os.path.join(BASE_DIR, "static/")

      为什么添加STATIC_ROOT = os.path.join(BASE_DIR, "static/")?

      • 静态文件收集:STATIC_ROOT用于指定一个绝对路径,在这个路径下,Django将收集所有的静态文件(如CSS、JavaScript、图片等),以便在生产环境中由Web服务器提供服务。这个设置通常放在文件的末尾,因为它依赖于之前已经定义好的变量。

      • 避免循环引用:如果某些设置项依赖于其他的设置项,将它们放置在文件的不同位置可以避免潜在的循环引用问题。

    7. 按Esc键,输入:wq保存并退出文件。

    8. 执行如下命令,收集所有静态文件。

      sudo python3 manage.py collectstatic 

      image

  2. 执行以下命令,打开Nginx配置文件。

    • Alibaba Cloud Linux 3/2 、CentOS 7/8

      sudo vim /etc/nginx/nginx.conf
    • Ubuntu 22/20/18

      sudo vim /etc/nginx/sites-enabled/default
  3. 按i键进入编辑模式,在server中修改或添加以下参数。

        upstream django {
            #具体端口必须与您uWSGI配置文件中定义的端口一致
            server 127.0.0.1:8001; 
        }
        server {
            #设置的访问端口
            listen       8002; 
            server_name  test;
            charset      utf-8;
            location /static {
                # 启用目录列表
                autoindex on;
                # 静态文件的绝对路径。请根据实际情况修改这个路径。
                alias /home/myblog/uwsgi_project/static; 
            }
    
            location / {
                # 将请求传递给uWSGI服务器,这里的地址与upstream块中的定义相匹配。
                uwsgi_pass 127.0.0.1:8001;
                # 包含 uwsgi 参数配置
                include uwsgi_params; 
                # Nginx自带的uWSGI参数文件,具体目录请根据实际情况修改
                include /etc/nginx/uwsgi_params; 
                # 指定默认的索引文件。
                index index.html index.htm;
                client_max_body_size 35m;
            }
        }

    具体位置如下图所示。

    image

  4. 执行以下命令,创建日志目录,uWSGI 将会作为守护进程在后台运行,并将它的输出重定向到这个日志文件中。

    sudo mkdir -p /var/log/uwsgi/  #您可根据实际情况修改。
  5. 执行以下命令,新建uWSGI配置文件uwsgi_config.ini。

    sudo vim uwsgi_config.ini

    按i键进入编辑模式,在文件中添加以下参数。编辑完成后,按Esc键,输入:wq保存并退出文件。

    [uwsgi]
    #此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致。
    socket = 127.0.0.1:8001  
    #指定项目目录,根据您的实际项目修改该路径。
    chdir = /home/myblog/uwsgi_project/  
    #指定Django的wsgi file文件,根据项目修改。
    wsgi-file = uwsgi_project/wsgi.py  
    #最大工作进程。
    processes = 4  
    #每个工作进程processes启动后开启的线程个数。
    threads = 2  
    #环境退出时自动清理。
    vacuum = true  
    #设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k。
    buffer-size = 65536  
    #日志文件路径,请确保此路径可写。根据您的实际项目修改该路径。
    daemonize = /var/log/uwsgi/uwsgi_project.log  
    #确保线程支持已启用。
    enable-threads = true                           
  6. 启动程序。

    1. 执行以下命令,重启Nginx服务。

      sudo systemctl restart nginx
    2. 执行以下命令,重启uWSGI服务。

      1. 执行以下命令,停止已启动的uWSGI程序。

        ps aux |grep uwsgi
        sudo kill -9 13187 #13187指通过上述命令获取的pid,具体pid以您现场实时获取的为准

        image

      2. 执行以下命令,启动uWSGI服务。

        • Alibaba Cloud Linux 3/2 、CentOS 7/8

          uwsgi --ini uwsgi_config.ini
        • Ubuntu 22/20/18

          sudo uwsgi --ini uwsgi_config.ini

        同时后台回显信息如下。

        image

  7. 在本地电脑浏览器的地址栏输入http://<ECS实例的公网IP地址>:8002,即可访问相关Django页面。

    说明

    当部署您自己的项目时,访问网站将会直接呈现您的首页。

    image

常见问题

安装uWSGI报错

如果在安装中出现如下图所示的报错信息,请您执行以下命令后,重新安装uWSGI。

  • Alibaba Cloud Linux 3/2 、CentOS 7/8

    sudo yum -y install python3-devel.x86_64
  • Ubuntu 22/20/18

    sudo apt -y install python3-devel.x86_64

image

相关文章

使用Nginx+uWSGI部署Django项目 2025-04-01 11:57

Django是一个功能丰富、高效且安全的框架,适合各种规模的Web应用程序开发。它不仅能够加速开发过程,还能确保应用程序的质量和稳定性。本文介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。 产品优势 使用Nginx和uWSGI部署Django项目,能够高效处理高并发请求、

手动搭建Discuz!论坛 2025-04-01 11:57

Discuz!是一款通用的社区论坛软件系统,它采用PHP和MySQL组合的基础架构,为您提供高效的论坛解决方案。本文介绍如何在ECS实例上搭建Discuz! X3.5论坛。 前提条件 已创建符合下列要求的Linux操作系统的ECS

搭建Ghost博客(Ubuntu) 2025-04-01 11:57

Ghost是一个基于Node.js开发的免费开源博客平台,用于简化博客的写作、发布等流程。本文介绍如何在Ubuntu 22.04/20.04操作系统的ECS实例上部署Ghost博客。 背景信息

搭建Joomla基础管理平台 2025-04-01 11:57

本教程主要介绍如何通过云市场镜像搭建Joomla基础管理平台。 背景信息 Joomla是一款基于PHP语言和MySQL数据库的免费开源的内容管理系统(CMS),可用于建设和管理各种类型的网站

搭建Moodle课程管理系统 2025-04-01 11:57

Moodle是一个课程管理系统,采用PHP加MySQL方式运行的自由开源软件。使用Moodle为学生建立网上动态网站,可以根据需要随时调整界面、增减内容。本教程介绍如何使用云市场镜像快速搭建Moodle课程管理系统。 操作步骤

搭建PHPWind论坛系统 2025-04-01 11:57

PHPWind论坛系统是一款基于PHP语言开发的开源论坛系统,支持多种数据库(如MySQL、SQL Server等),具有高度的可扩展性和可定制性。它提供了用户管理、帖子管理、板块管理、权限管理等功能,可以轻松搭建一个功能完善、易于管理的论坛网站。本文介绍如何使用阿里云市场镜像快速搭建PHPWind

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号