第十二章  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服务器的通信连接。

玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)的更多相关文章

  1. 玩转Django2.0---Django笔记建站基础十(二)(常用的Web应用程序)

    10.3 CSRF防护 CSRF(跨站请求伪造)也成为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,窃取网站的用户信息来制作 ...

  2. 玩转Django2.0---Django笔记建站基础十一(二)((音乐网站开发))

    11.5 歌曲排行榜 歌曲排行榜是通过首页的导航链接进入的,按照歌曲的播放次数进行降序显示.从排行榜页面的设计图可以看到,网页实现三个功能:网页顶部搜索.歌曲分类筛选和歌曲信息列表,其说明如下: 1. ...

  3. 玩转Django2.0---Django笔记建站基础十(一)(常用的Web应用程序)

    第十章 常用的Web应用程序 Django为开发者提供了常见的Web应用程序,如会话控制.高速缓存.CSRF防护.消息提示和分页功能.内置的Web应用程序大大优化了网站性能,并且完善了安全防护机制,而 ...

  4. 玩转Django2.0---Django笔记建站基础九(二)(Auth认证系统)

    9.4 设置用户权限 用户权限主要是对不同的用户设置不同的功能使用权限,而每个功能主要以模型来划分.以9.3节的MyDjango项目为例,在Admin后台管理系统可以查看并设置用户权限,如下图: 用户 ...

  5. 玩转Django2.0---Django笔记建站基础十三(第三方功能应用)

    第13章 第三方功能应用 在前面的章节中,我们主要讲述Django框架的内置功能以及使用方法,而本章主要讲述Django的第三方功能应用以及使用方法.通过本章的学习,读者能够在网站开发过程中快速开发网 ...

  6. 玩转Django2.0---Django笔记建站基础五(模板)

    第五章 模板 Django作为web框架,需要一种很便利的方法去动态地生成HTML网页,因此有了模板这个概念.模板包含所需HTML的部分代码以及一些特殊语法 Django可以配置一个或多个模板引擎(甚 ...

  7. 玩转Django2.0---Django笔记建站基础十一(一)(音乐网站开发)

    第十一章 音乐网站开发 本章以音乐网站项目为例,介绍Django在实际项目开发中的应用,该网站共分为6个功能模块分别是:网站首页.歌曲排行榜.歌曲播放.歌曲点评.歌曲搜索和用户管理. 11.1 网站需 ...

  8. 玩转Django2.0---Django笔记建站基础九(一)(Auth认证系统)

    第九章 Auth认证系统 Django除了有强大的Admin管理系统之外,还提供了完善的用户管理系统.整个用户管理系统可分为三大部分:用户信息.用户权限和用户组,在数据库中分别对应数据表auth_us ...

  9. 玩转Django2.0---Django笔记建站基础八(admin后台系统)

    第八章 admin后台系统 admin后台系统也成为网站后台管理系统,主要用于对网站前台的信息进行管理,如文字.图片.影音和其他日常使用文件的发布.更新.删除等操作,也包括功能信息的统计和管理,如用户 ...

随机推荐

  1. 【hdu 1849】Rabbit and Grass

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  2. SPOJ - DISUBSTR Distinct Substrings (后缀数组)

    Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...

  3. Python安装jpype调用java,安装jaydebeapi通过jdbc连接数据库

    pip install JPype1或下载JPype1-0.7.0.tar.gz包 经常出现需要安装VC++服务等 测试代码如下: # Author: zfh import jpype,os,time ...

  4. Java 注解与单元测试

    注解 Java注解是在JDK1.5 之后出现的新特性,用来说明程序的,注解的主要作用体现在以下几个方面: 编译检查,例如 @Override 编写文档,java doc 会根据注解生成对应的文档 代码 ...

  5. JMeter JMS测试计划

    在本节中,我们将学习如何编写一个简单的测试计划来测试Java Messaging Service(JMS). 出于测试目的,我们使用Apache ActiveMQ.有各种JMS服务器,如:glassf ...

  6. b方式操作文件

    f=open('test11.py','rb',encoding='utf-8') #b的方式不能指定编码 f=open('test11.py','rb') #b的方式不能指定编码 data=f.re ...

  7. Linux 创建网络会话

    Linux 创建网络会话 RHEL7系统支持网络会话功能,允许用户在多个配置文件中快速切换(非常类似于firewalld防火墙服务中的区域技术).如果我们在公司网络中使用笔记本电脑时需要手动指定网络的 ...

  8. word HTML文件与Markdwon互相转换的几种方式

    Tip:word文件与Markdwon转换往往是可逆的.无论使用哪种方式,要想完美转换,必须要预先处理掉markdown与word不兼容的格式,如word文件对象,带边框的代码块等等 方法一:借助pa ...

  9. node多进程的创建与守护

    node是单线程运行,我们的node项目如何利用多核CPU的资源,同时提高node服务的稳定性呢? 1. node的单线程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系 ...

  10. 【题解】有标号的DAG计数3

    [HZOI 2015] 有标号的DAG计数 III 我们已经知道了\(f_i\)表示不一定需要联通的\(i\)节点的dag方案,考虑合并 参考[题解]P4841 城市规划(指数型母函数+多项式Ln), ...