206
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
阿里云服务器ECS使用教程-使用Nginx+uWSGI部署Django项目

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/200G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>


阿里云服务器ECS使用教程-使用Nginx+uWSGI部署Django项目

Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目。本教程介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。

准备工作

创建部署Django项目的ECS实例,ECS实例必须满足以下条件:

  • 实例已分配公网IP地址或绑定弹性公网IP(EIP)。具体操作,请参见绑定和解绑弹性公网IP。

  • 操作系统必须为Alibaba Cloud Linux 3.2104、Alibaba Cloud Linux 2.1903、CentOS 7.x、Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04。

    重要
    • 本教程以Alibaba Cloud Linux 3.2104和Ubuntu 20.04 64位操作系统为例。如果您购买的ECS服务器使用了其他版本的操作系统,操作可能与本教程略有差异。

    • 软件包或程序安装具体版本以您使用的实际版本为准。

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

步骤一:安装或核对Python版本

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例。

  2. 运行以下命令,查看具体Python安装信息。

    本示例ECS实例中默认已经安装Python 3,如果您的ECS实例中未安装Python 3,请自行安装。

    Alibaba Cloud Linux 3.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
    Ubuntu 20.04
    which python3 
    ll /usr/bin/python*

    回显信息类似如下所示。

    [ecs-user@iZbp17st8t8txp6po87**** ~]$ which python3
    /usr/bin/python3
    [ecs-user@iZbp17st8t8txp6po87**** ~]$ ll /usr/bin/python*
    lrwxrwxrwx 1 root root 7 Feb 8 10:30 /usr/bin/python -> python2
    lrwxrwxrwx 1 root root 9 Feb 8 10:30 /usr/bin/python2 -> python2.7
    -rwxr-xr-x 1 root root 7144 Jun 28 2022 /usr/bin/python2.7
    lrwxrwxrwx 1 root root 9 Feb 8 10:25 /usr/bin/python3 -> python3.6
    -rwxr-xr-x 2 root root 11328 Nov 17 2020 /usr/bin/python3.6
    lrwxrwxrwx 1 root root 17 Feb 8 10:25 /usr/bin/python3.6-config -> python3.6m-config
    -rwxr-xr-x 2 root root 11328 Nov 17 2020 /usr/bin/python3.6m
    -rwxr-xr-x 1 root root 173 Nov 17 2020 /usr/bin/python3.6m-config
    -rwxr-xr-x 1 root root 3403 Nov 17 2020 /usr/bin/python3.6m-x86_64-config
    lrwxrwxrwx 1 root root 16 Feb 8 10:25 /usr/bin/python3-config -> python3.6-config

步骤二:部署Nginx环境

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

    Alibaba Cloud Linux 3.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
    Ubuntu 22.04/Ubuntu 20.04/Ubuntu 18.04
    sudo yum -y install nginx
  2. 执行以下命令,启动并查看Nginx服务状态。

    sudo systemctl start nginx
    systemctl status nginx

    如果回显信息中出现Active: active (running),表示Nginx服务已启动。

步骤三:部署及测试uWSGI环境

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

    sudo pip3 install uwsgi
    • 如果回显信息如下所示,表示uWSGI已安装成功。

      WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
      Collecting uwsgi
       Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/b3/8e/b4fb9f793745afd6afcc0d2443d5626132e5d3540de98f28a8b8f5c753f9/uwsgi-2.0.21.tar.gz (808kB) 100% |████████████████████████████████| 808kB 72.9MB/s Installing collected packages: uwsgi
       Running setup.py install for uwsgi ... done
      Successfully installed uwsgi-2.0.22
    • 如果在安装中出现如下图所示的报错信息,请您执行以下命令后,重新安装uWSGI。

      Alibaba Cloud Linux 3.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
      Ubuntu 22.04/Ubuntu 20.04
      sudo yum -y install python3-devel.x86_64
      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.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
    Ubuntu 22.04/Ubuntu 20.04
    sudo /usr/local/bin/uwsgi --http :8001 --wsgi-file test.py

    回显信息如下图所示。

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

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

    image

步骤四:部署及测试Django环境

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

    sudo pip3 install Django
    image
  2. 执行以下命令,创建项目。

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

    Alibaba Cloud Linux 3.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
    Ubuntu 22.04/Ubuntu 20.04
    sudo /usr/local/bin/django-admin.py startproject uwsgi_project
  3. 执行以下命令,编辑settings.py文件。

    sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py

    输入i进入编辑模式,将ALLOWED_HOSTS = [ ]修改为ALLOWED_HOSTS = ["*"]。修改完成后,按Esc键,输入:wq保存并退出文件。

    说明

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

    image
  4. 执行以下命令,启动Django环境。

    cd /home/myblog/uwsgi_project
    sudo python3 manage.py runserver 0.0.0.0:8002

    如果出现以下类似报错:

    django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).
    image

    您可以将settings.py文件中的DATABASES注释掉,重新启动Django环境即可。修改settings.py文件的具体操作,请参见编辑settings.py文件。

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

    image

步骤五:配置Nginx、uWSGI、Django

  1. 执行以下命令,修改Djang配置文件settings.py

    重要

    如您修改以下配置项,需要在对应目录添加静态文件以及网站文件,具体以您部署的网站项目为准。本步骤仅以展示基本的Django网页为准,请忽略此步骤。

    sudo vim /home/myblog/uwsgi_project/uwsgi_project/settings.py
    1. i键,进入编辑模式。

    2. DEBUG = True修改为DEBUG = False

      image
    3. settings.py文件开头添加如下参数。

      import os
    4. settings.py文件末尾添加如下参数。

      STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    5. Esc键,输入:wq保存并退出文件。

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

      sudo python3 manage.py collectstatic
      image
  2. 执行以下命令,打开Nginx配置文件。

    Alibaba Cloud Linux 3.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
    Ubuntu 22.04/Ubuntu 20.04
    sudo vim /etc/nginx/nginx.conf
  3. i键进入编辑模式,在server中修改或添加以下参数。编辑完成后,按Esc键,输入:wq保存并退出文件。

        upstream django {
            server 127.0.0.1:8001; #具体端口必须与您uWSGI配置文件中定义的端口一致
        }
        server {
            listen       80; #设置的nginx访问端口
            server_name  test;
            charset      utf-8;
            location /static {
                autoindex on;
                alias /home/myblog/uwsgi_project/static; #具体目录以您现场具体部署的目录为准
            }
    
            location / {
                uwsgi_pass 127.0.0.1:8001;
                include uwsgi_params; #具体目录以您现场具体部署的目录为准
                include /etc/nginx/uwsgi_params; #具体目录以您现场具体部署的目录为准
                uwsgi_param UWSGI_SCRIPT iCourse.wsgi; #具体目录以您现场具体部署的目录为准
                uwsgi_param UWSGI_CHDIR /iCourse; #具体目录以您现场具体部署的目录为准
                index  index.html index.htm;
                client_max_body_size 35m;
                index index.html index.htm;
            }
        }
    image
  4. 执行以下命令,新建uWSGI配置文件uwsgi_config.ini

    sudo vim uwsgi_config.ini

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

    [uwsgi]
    socket = 127.0.0.1:8001 #此处的8001端口需要和nginx配置文件中定义的uwsgi_pass端口一致
    chdir = /home/myblog/uwsgi_project/ #指定项目目录,本示例中为/home/myblog/uwsgi_project,根据项目修改
    wsgi-file = uwsgi_project/wsgi.py #指定Django's wsgi file文件,根据项目修改
    processes = 4 #最大工作进程
    threads = 2 #每个工作进程processes启动后开启的线程个数
    vacuum = true #环境退出时自动清理
    buffer-size = 65536 #设置用于uwsgi包解析的内部缓存区大小为64k,默认是4k
    image

    其他参数配置请根据项目自定义添加。

  5. 启动程序。

    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.2104/Alibaba Cloud Linux 2.1903/CentOS 7.x
        Ubuntu 22.04/Ubuntu 20.04
        uwsgi --ini uwsgi_config.ini
        image
  6. 在本地电脑浏览器的地址栏输入http://<ECS实例的公网IP地址>,即可访问相关Django页面。

    image


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!