• 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)


    第十二章  Django项目上线部署

      目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django。Nginx作为服务器最前端,负责接收浏览器的所有请求并统一管理。静态请求由Nginx自己处理;非静态请求通过uWSGI服务器传递给Django应用,由Django进行处理并做出相应,从而完成一次Web请求。本章以Nginx+uWSGI+Django为例讲述如何在linux系统上部署Django应用。

    12.1  按照python3

      Centos7系统默认安装python2.7版本,但Django2不支持python2.7版本,因此我们需要在Centos7系统中按照Python3版本。本节主要讲述如何在centos7系统中按照python3.7。

      在安装python3.7之前,我们分别需要安装Linux的wget工具、GCC编译器环境以及python3使用的依赖组件。相关的安装指令如下:

    #安装Linux的wget工具,用于网上下载文件
    yum -y install wget
    #GCC编译器环境,按照python3时所需的编译环境
    yum -y install gcc
    #python3所使用的依赖组件
    yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite*-devel mysql-devel

      完成上述安装后,我们使用wget指令在Python官网下载python3.7的压缩包,wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz

    #解压python3
    tar -zxvf Python-3.6.tar.gz
    #进入 python3.7目录
    cd Python-3.7
    #依次输入编译指令
    ./configure
    make
    make install

    12.3  部署uWSGI服务器

      uWSGI是一个Web服务器,它实现了WSGI、uWSGI和HTTP等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口,它是一个Web服务器(如Nginx服务器)与Web应用(如Django框架实现的应用)通信的一种规范。

      在部署uWSGI服务器之前,需要在python3中安装相应的模块,我们使用pip3安装即可,安装指令如下:

    #安装数据库连接
    pip3 install mysqlclient
    
    #按照django
    pip3 install django
    
    #安装uWSGI
    pip3 install uwsgi

      按照成功后,打开本地系统的项目music,修改项目的配置文件,主要修改数据库连接信息和静态资源路径,修改代码如下:

    #music
    # 设置数据库连接信息
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'music_db',
            'USER':'root',
            'PASSWORD':'root',
            #改为本地系统的IP地址
            'HOST':'192.168.10.100',
            'PORT':'3306',
        }
    }
    
    #静态资源路径
    STATIC_ROOT = 'e:/music/static'

      上传music项目到服务器

      完成上述配置后,在centos7系统中输入uwsgi指令,测试uWSGI服务器能否正常运行,指令如下:

    #/home/music是项目music的绝对路径,music.wsgi是项目music里面的wsgi.py文件
    uwsgi --http :8080 --chdir /home/music -w music.wsgi

      指令运行后,可以在本地系统的浏览器中输入虚拟系统的IP地址+8080端口查看测试结构。在本地系统访问http://192.168.10.100:8080/,浏览器就会显示项目music的首页信息,如下图:

      uWSGI服务器测试成功后,下一步是为项目music编写uWSGI配置文件。当项目运行上线时,只需执行uWSGI配置文件即可运行项目music的uWSGI服务器。在项目music的目录下创建music_uwsgi.ini配置文件,文件代码如下:

    [uwsgi]
    #Django-related settings
    socket= :8080
    
    #the base directory(full path)
    chdir=/home/music
    
    #Django s wsgi file
    module=music.wsgi
    
    #process-related settings
    #master
    master=true
    
    #maximum number of worker processes
    processes=4
    
    #... with appropriate permissions - may be needed
    #chmod-socket =664
    #clear environment on exit
    vacuum=true

      在centos7系统中查看项目music的目录结构,并且在项目music的根目录下输入uwsgi指令,通过配置文件启动uWSGI服务器,如下图:

      注意:因为配置文件设置socket= :8080,所以启动uWSGI服务器时,本地系统不能浏览项目music的首页。配置属性socket= :8080用于uWSGI服务器和Nginx服务器的通信连接。

    12.4  按照Nginx部署项目

      项目上线部署最后一个环节是部署Nginx服务器。由于centos7的yum没有Nginx的安装源,因此将Nginx的安装源添加到yum中,然后使用yum按照Nginx服务器,指令如下:

    #添加Nginx的安装源
    rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    #使用yum按照Nginx
    yum -y install nginx

      Nginx按照成功后,在centos7上输入Nginx启动指令systemctl start nginx,然后在本地系统的浏览器中输入centos7系统的IP地址,可以看到Nginx启动成功,如下图:

      下一步是修改Nginx的配置文件,实现Nginx服务器与uWSGI服务器的通信连接。将Centos7系统路径切换到/etc/nginx/,打开并编辑nginx.conf文件,在nginx.conf文件中编写项目music的配置信息。其代码如下:

    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user root;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    #include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections 1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       8090;
            server_name  127.0.0.1;
            charset UTF-8;
            access_log   /var/log/nginx/myweb_access.log;
            error_log    /var/log/nginx/myweb_error.log;
    
            client_max_body_size 75M;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            #连接uWSGI服务器,uwsgi_pass的端口与uWSGI设置的socket= :8080端口一致
            location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8080;
                uwsgi_read_timeout 2;
            }
    
            #设置静态资源路径
            location /static/ {
                expires 30d;
                autoindex on;
                add_header Cache-Control private;
                alias /home/music/static/;
            }
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    # Settings for a TLS enabled server.
    #
    #    server {
    #        listen       443 ssl http2 default_server;
    #        listen       [::]:443 ssl http2 default_server;
    #        server_name  _;
    #        root         /usr/share/nginx/html;
    #
    #        ssl_certificate "/etc/pki/nginx/server.crt";
    #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    #        ssl_session_cache shared:SSL:1m;
    #        ssl_session_timeout  10m;
    #        ssl_ciphers HIGH:!aNULL:!MD5;
    #        ssl_prefer_server_ciphers on;
    #
    #        # Load configuration files for the default server block.
    #        include /etc/nginx/default.d/*.conf;
    #
    #        location / {
    #        }
    #
    #        error_page 404 /404.html;
    #            location = /40x.html {
    #        }
    #
    #        error_page 500 502 503 504 /50x.html;
    #            location = /50x.html {
    #        }
    #    }
    
    }
    nginx

      完成Nginx的相关配置后,在Centos7系统中结束Nginx的进程或重启系统,确保当前系统没有运行Nginx服务器。然后输入Nginx指令,重新启动Nginx服务器,Nginx启动后,进入项目music,使用uwsgi指令运行music_uwsgi.ini,启动uWSGI服务器。

      12.5  本章小结

      目前部署Django项目有两种主流方案:Nginx+uWSGI+Django或者Apache+uWSGI+Django。Nginx作为服务器最前端,负责接收浏览器的所有请求并统一管理。静态请求由Nginx自己处理;非静态请求通过uWSGI服务器传递给Django应用,由Django进行处理并作出响应,从而完成一次Web请求。

      在虚拟机上安装Linux系统需要设置虚拟机和本地系统之间的网络通信、Linux辅助工具的安装和本地系统与虚拟系统的文件传输设置。这部分知识属于Linux的基本知识,如果读者在实施过程遇到其他问题,可以自行在网上搜索相关解决方案。

      在不删除旧版本Python2的基础上按照Python3版本,实现一个系统共存两个Python版本。安装Python3之前必须安装Linux的wget工具、GCC编译器环境以及Python3使用的依赖组件,否则会导致安装失败。

      uWSGI服务器是由Python编写的服务器,由uwsgi模块实现。uWSGI服务器的启动是由配置文件music_uwsgi.ini执行的,其作用是将uWSGI服务器与Django应用进行绑定。

      Nginx服务器负责接收浏览器的请求并将请求传递给uWSGI服务器。配置文件nginx.conf主要是想Nginx服务器和uWSGI服务器的通信连接。

     

  • 相关阅读:
    Spark 基本概念及入门
    Cron 表达式详解
    VmWare 网络模式
    微信、支付宝各种支付退款
    Spring Security OAuth2 SSO 单点登录
    Git 入门详解
    基于Spring Boot 2.x 的 Spring Cloud Admin 实践
    Git 提交规范
    Linux 安装 Mysql8.0
    Docker入门
  • 原文地址:https://www.cnblogs.com/zhaop8078/p/11620601.html
Copyright © 2020-2023  润新知