更新时间:2024-12-06 GMT+08:00

部署Django服务

简介

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

准备工作

  • 准备一台ECS, 并分配公网IP或者弹性公网IP(EIP)。
  • 安全组入方向已放开80、8001、8002端口。

操作步骤

  1. 安装Nginx服务。

    1. 执行以下命令Nginx。
      dnf install nginx
    2. 执行以下命令启动Nginx服务。
      systemctl start nginx
    3. 执行以下命令查看Nginx服务状态。
      systemctl status nginx

      如果显示active (running),则表示启动成功。

  2. 安装uWSGI服务。

    1. 执行以下命令安装相关依赖。
      dnf install python3-devel gcc
    2. 执行以下命令安装uWSGI。
      pip install uwsgi
    3. 执行以下命令查看uWSGI版本号。
      uwsgi --version
    4. 编辑hello.py文件,并输入以下内容。
      def application(env, reply):
          reply('200 ok',[('Content-Type','text/html')])
          return [b"Hello!"]
    5. 执行以下命令启动uWSGI服务。
      uwsgi --http :8001 --wsgi-file hello.py
    6. 在浏览器中输入网址: http://<公网IP>:8001访问上述服务,效果如下图。

  3. 安装Django环境

    1. 执行以下命令安装Django。
      pip install Django
    2. 执行以下命令初始化项目。
      python -m django startproject django_project
    3. 进入项目目录,编辑配置文件django_project/settings.py,找到ALLOWED_HOSTS属性修改成如下值。
      ALLOWED_HOSTS = ["*"]
    4. 执行如下命令启动django服务。
      python manage.py runserver 0.0.0.0:8002
    5. 浏览器中输入网址http://<公网IP>:8002访问上述服务,效果如下。

  4. 配置环境。

    1. 编辑django_project/settings.py文件。
      1. 在文件开头输入以下语句引入os库。
        import os
      2. 然后在文件末尾添加以下参数。
        STATIC_ROOT = os.path.join(BASE_DIR, "static/")
      3. 再执行以下命令收集所有静态文件。
        sudo python manage.py collectstatic

        执行以后输出类似如下。

        [root@hce2 django_project]# sudo python manage.py collectstatic
        
        125 static files copied to '/root/django_project/static'.

        此时项目目录就会多一个static文件夹,项目结构如下。

        [root@hce2 django_project]# ls
        db.sqlite3  django_project  manage.py  static
    2. 编辑/etc/nginx/nginx.conf文件,配置nginx。
      1. 找到http属性,新增以下内容。
        upstream django {
            server 127.0.0.1:8001;
        }
      2. 找到http内的server属性,将其修改成以下属性。
        server {
            listen       80;
            server_name  django_project;
         
            charset      utf-8;
            location  /static {
                autoindex on;
                alias /root/django_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;
        }

        最终效果如下。

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

      实际环境中,请删掉配置文件中的日志。

  5. 验证。

    1. 执行以下命令重启Nginx。
      systemctl restart nginx
    2. 在项目目录执行以下命令,启动uWSGI。
      uwsgi --ini uwsgi_config.ini
    3. 在浏览器的地址栏输入http://<公网IP>,访问相关Django页面,效果如下。

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