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

时间:2022-09-26 06:10:06

第十二章  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':'',
}
} #静态资源路径
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服务器的通信连接。