第十二章  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. addEventListener() 方法,事件监听(去哪儿网用到过)

    addEventListener() 方法,事件监听 你可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(event ...

  2. vue-learning:38 - router - 前端路由的发展

    前端路由的发展 参考博客 前端路由是什么东西? 什么是路由 在jQuery时代,我们使用<a href="https://www.example.com/example/home.ht ...

  3. CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置

    国内服务器在运行命令yum -y install wget的时候,出现: Could not retrieve mirrorlist http://mirrorlist.centos.org/?rel ...

  4. 原生js重写each方法

    js原生有个for-each方法,但是只能遍历数组不能遍历对象; jq有个$.each倒是可以遍历数组和对象,但是项目中如果不想用jq呢,我们就用原生来写一个吧. [12,23,34].forEach ...

  5. dotnet 获取程序所在路径的方法

    在 dotnet 有很多方法可以获取当前程序所在的路径,但是这些方法获取到的路径有一点不相同,特别是在工作路径不是当前的程序所在的路径的时候 通过下面几个方法都可以拿到程序所在的文件夹或程序文件 Ap ...

  6. vue-cli 3.0 eslint

    1.关闭eslint module.exports = { configureWebpack: { devtool: 'source-map' }, lintOnSave: false } 2.修改e ...

  7. React父组件调用子组件的方法

    16.3.0之前的设置方法为 var HelloMessage = React.createClass({ childMethod: function(){ alert("组件之间通信成功& ...

  8. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  9. CentOs7.X下配置FTP

    https://blog.csdn.net/cc_want/article/details/85337241 CentOS7.x自带firewall防火墙,FTP使用需要开启20 21 22 3000 ...

  10. 小白学 Python 爬虫(31):自己构建一个简单的代理池

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...