玩转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服务器的通信连接。

 

posted @ 2019-10-05 15:25  python坚持者  阅读(739)  评论(0编辑  收藏  举报