公司需上线一套python编写的代码,需要给搭建一套环境  ,本次采用centos7+python3.6+nginx+uwsgi2+django2+mysql5.7的方式来进行搭建

写在部署前

在线上部署django项目时,比较成熟的方案是:nginx + uWSGI + Django。 nginx和Django 都比较熟悉了,uWSGI是什么呢?WSGI是一个协议,python用于web开发的协议,uWSGI则是一个程序,充当WEB服务器或者中间件。当Nginsx+uWSGI+Django一起使用时,uWSGI就是个中间件,如果直接用django+uWSGI时,uWSGI就是个WEB服务器

说下WEB协议出现的顺序: CGI --> FCGI --> WSGI --> uwsgi。
CGI是最早的协议,然后FCGI顾名思义就是比CGI更快,WSGI是Python专用的协议,uwsgi比FCGI和WSGI都快,是uWSGI项目的自有协议,主要特征是采用二进制来存储数据,
之前的协议都是存储字符串,所以在存储空间和解析速度上,都会优于字符串协议。

附官方资料地址:http://uwsgi-docs.readthedocs.io/en/latest/FAQ.html

CGI = Common Gateway Interface,通用网关接口
顾名思义,它是一种接口规范。该规范详细定义了Web服务器中运行的服务器代理程序,怎样获取及返回网页生成过程中,服务器环境上下文和HTTP协议中的参数名称,
如大家所熟知的:REQUEST_METHOD,QUERY_STRING,CONTENT_TYPE等等。绝大部分的Web服务器程序,是以脚本的形式代理接受并处理HTTP请求,返回HTTP页面或响应。
这些脚本程序,就是大家所熟知的PHP、ASP、JSP等等。 FCGI = Fast CGI
它其实是CGI在具体实现中的的一个变种。其设计思路是,通过减少CGI代理程序和Web宿主服务程序的通信开销,从而达到提高Web服务性能的最终目的。
由此可见,FCGI在规范上跟CGI并没有不同,
只是具体实现方式上有所改进:
CGI的做法是,对于每个HTTP请求,Web宿主服务程序都建立新的进程以调用服务器脚本,响应该请求;大量HTTP请求时,服务器频繁创建进程会影响服务器性能。
FCGI的做法是,建立一个独立的FCGI服务程序进程,和Web宿主服务程序进程通信,FCGI服务进程被一旦启动后,自己分配资源、创建线程响应HTTP请求、并决定自身生命周期,
从而大大降低了系统为了创建进程而做出的资源开销。FCGI还支持分布式,也就是WEB服务器和应用程序可以再不通的机器上。
现代流行的Web服务器程序,如PHP、ASP.Net,基本都是FCGI的实现。 SCGI = Simple CGI
它是FCGI在精简数据协议和响应过程后的产物。其设计目的是为了适应越来越多基于AJAX或REST的HTTP请求,而做出更快更简洁的应答。
并且SCGI约定,当服务器返回对一个HTTP协议请求响应后,立刻关闭该HTTP连接。所以不难看出,SCGI更加适合于普遍意义上SOA所提倡的“请求-忘记”这种通信模式。 WSGI = Web Server Gateway Interface
此协议是Python语言的专利,它定义了一组在Web服务宿主程序和HTTP响应代理程序之间通信的普遍适用的接口。
它的产生是因为Python程序员注意到,对于Web框架和Web宿主服务器程序间,有严重的耦合性,比如说,某些框架是针对Apache的mod_python设计的。
于是,WSGI就定义了一套非常低级别的接口。常见的Python Web框架都实现了这个协议:如 CherryPy, Django, web.py, web2py, TurboGears, Tornado,
Pylons, BlueBream, Google App Engine[dubious – discuss], Trac, Flask, Pyramid,等等.

浏览器请求一个页面的流程

  1. 浏览器发送请求给服务器,包含请求头和请求体
  2. 服务器解析请求头和请求体
  3. 服务器根据请求信息来处理请求,生成返回内容
  4. 服务器生成响应头和响应体
  5. 服务器返回响应给浏览器,浏览器显示给用户

  步骤1,2,4,5在所有网站的请求中都是一样的,只有步骤3是不固定的。所以把固定的4个步骤抽象出来,让开发者只关注步骤3,可以提高开发效率。
WSGI,全称 Web Server Gateway Interface, 是python专用的协议,其他语言没有。用于处理WEB服务器和应用程序APP的交互信息。很多WEB框架
都有自带的WSGI服务器,不过性能并不理想,只能用于测试用途。

nginx的知识

# nginx 相关

(1)正向代理:浏览器主动请求代理服务器,代理服务器转发请求到对应的目标服务器。
(2)反向代理:部署在WEB服务器上,代理所有外部网络的访问,浏览器访问服务器,必须经过这个代理,是被动的。
正向代理的主动方是客户端,反向代理的主动方是WEB服务器。 反向代理的作用:
(1)安全,客户端对Web服务器的访问需要先经过反向代理服务器。这样可以防止外部程序对Web服务器的直接攻击。
(2)负载均衡,反向代理服务器可以根据Web服务器的负载情况,动态地把HTTP请求交给不同的Web服务器来处理,前提是要有多个Web服务器。
(3)提升Web服务器的IO性能。一个HTTP请求的数据,从客户端传输给服务器,是需要时间的,例如N秒,如果直接传给Web服务器,Web服务器就需要让一个进程阻塞N秒,来接收IO,
这样会降低Web服务器的性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,再把请求发给Web服务器,就能提升Web服务器的性能。还有一些静态文件的请求,
可以直接交给反向代理来处理,不需要经过Web服务器。

二.正式安装

2.1.系统环境

centos7.3
nginx1.14.0
mysql 5.7
Django 2.0.6
django-cors-headers 2.2.0
future 0.16.0
mysqlclient 1.3.12
pip 10.0.1
PyMySQL 0.8.1
pytz 2018.4
setuptools 39.0.1
uWSGI 2.0.17
xlrd 1.1.0
xlwt 1.3.0

2.2 安装python3.6及环境

2.2.1 安装依赖包

# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel python-devel

2.2.2 安装python

(1)安装python
# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
# mkdir -p /usr/local/python365
# tar zxvf Python-3.6.5.tgz
# cd Python-3.6.5
# ./configure --prefix=/usr/local/python365
# make
# make install
# ln -s /usr/local/python365/bin/python3 /usr/local/bin/python3 #配置python3的软连接
# ln -s /usr/local/python365/bin/pip3 /usr/local/bin/pip3 #配置pip的软连接 (2)验证python版本
#python3 -V
Python 3.6.5 (3 )验证pip是否安装
#pip3 -V
pip 10.0.1 from /usr/local/python356/lib/python3.6/site-packages/pip (python 3.6)

2.2.3  安装后续所需要的pip软件包

(3)安装所需要的包
#pip3 install ipython #安装ipython方便调试
#pip3 install Django==2.0.6 #安装Djiango
#pip3 install django-cors-headers==2.2.0
#pip3 install future==0.16.0
#pip3 install mysqlclient==1.3.12
#pip3 install PyMySQL==0.8.1
#pip3 install pytz==2018.4
#pip3 install xlrd==1.1.0
#pip3 install xlwt==1.3.0

2.3 安装配置nginx

此处对nginx安装描述不做太多的描述

代码目录:/data/wwwroot/

日志目录:/data/wwwlogs

安装目录:/usr/local/nginx/

配置文件目录:/usr/local/nginx/conf/vhost/

2.4 安装配置uwsgi

2.4.1 安装测试

(1)安装
# pip3 install uwsgi
#ln -s /usr/local/python365/bin/uwsgi /usr/local/bin/uwsgi #建立软链接
#uwsgi --version #检查安装成功
2.0.17 (2)测试
方法一: 创建test.py文件,添加如下代码
# cat test.py
def application(environ, start_response):
status = '200 OK'
output = 'Hello World! powerde by wsgi'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output] #执行如下代码
uwsgi --http :8001 --wsgi-file test.py 浏览器访问http://your-ip:8001输出Hello World表示安装正常 方法二: 以下ln命令为了在终端中使用django-admin命令
ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin 创建一个测试的项目
django-admin startproject testProject
cd testProject
uwsgi --http :8000 --module testProject.wsgi 浏览器访问http://your-ip:8000输出It worked页面表示安装正常 

2.4.2 配置

将代码上传到服务器上面/data/wwwroot下

(在django项目project目录下(manage.py下)创建配置文件分两种 ini 与xml此次安装是通过uwsgi.ini的方式来进行配置的,也可以通过xml的方式来进行配置)

# cd  /data/wwwroot/huayun/huayun
# vim uwsgi.ini
[uwsgi]
socket = 127.0.0.1:9090
chdir = /data/wwwroot/huayun
module = huayun.wsgi
master = true
processes = 2
threads = 2
max-requests = 2000
vacuum = true
daemonize = /data/wwwlogs/uwsgi.log
post-buffering = 65535
buffer-size = 65535
harakiri-verbose = true
harakiri = 300
uid = root
pidfile = /var/run/uwsgi.pid

参数说明:

socket:指定监听地址和端口

chdir:指定工程的绝对路径,如Django的项目路径

module:指定web应用的入口模块,如Django项目下的wsgi.py接口文件

master:启动主进程

processes:启动进程数

threads:启动线程数

max-requests:最大请求数

daemonize:指定uWSGI日志文件路径

stats:指定状态查询端口,如:127.0.0.1:9001

wsgi-file:指定启动的文件

post-buffering:设置缓冲区

buffer-size:设置缓冲区文件大小

harakiri-verbose:设置超时true为开启

harakiri:设置超时时间

uid、gid:设置用户和组

pidfile:指定启动时的pid文件路径

2.5 编写开机启动脚本

# vim /usr/lib/systemd/system/uwsgi.service
[Unit]
Description=uwsgi service
After=network.target [Service]
Type=forking
PIDFile=/var/run/uwsgi.pid
ExecStartPre=/usr/bin/rm -f /var/run/uwsgi.pid
ExecStart=/usr/local/python365/bin/uwsgi --ini /data/wwwroot/huayun/huayun/uwsgi.ini
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true [Install]
WantedBy=multi-user.target
[root@host-10-0-100-111 system]# systemctl daemon-reload

 

2.6 通过配置文件进行启动 

#uwsgi --ini   /data/wwwroot/huayun/huayunuwsgi.ini #启动服务

可以先直接用命令看项目是否能够跑成功
uwsgi --http :8000 --module huayun.wsgi #ps -ef|grep "uwsgi" #查看进程
root 8616 1 0 18:45 ? 00:00:00 uwsgi --ini /data/wwwroot/huayun/huayun/uwsgi.ini
root 8627 8616 0 18:45 ? 00:00:00 uwsgi --ini /data/wwwroot/huayun/huayun/uwsgi.ini
root 8628 8616 0 18:45 ? 00:00:00 uwsgi --ini /data/wwwroot/huayun/huayun/uwsgi.ini

#netstat -lntp|grep "uwsgi"
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 103596/uwsgi

  

2.7 配置nginx的转发规则

配置nginx转发uwsgi配置
# cd /usr/local/nginx/conf/vhost/
[root@host-10-0-100-135 vhost]# vim djiango.conf
server {
listen 8080;
server_name localhost;
charset utf-8;
access_log /data/wwwlogs/huayun__access.log;
error_log /data/wwwlogs/huayun_error.log;
client_max_body_size 75M; location /static {
alias /data/wwwroot/huayun/huayun/static; #配置静态页面地址
} location / {
include /usr/local/nginx/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:9090; #转发
}
}
# systemctl restart nginx

2.8 测试是否能够访问

成功访问  

  

  

  

  

  

  

centos7+python3.6+nginx+uwsgi+django2的搭建笔记的更多相关文章

  1. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  2. Python3 flask nginx uwsgi 环境搭建

    配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理.至于如何使用搜索即可,并不难 1.安装python3 yum -y install zlib-devel bzip2-devel ...

  3. centos7下采用Nginx+uwsgi来部署django

    之前写过采用Apache和mod_wsgi部署django,因为项目需要,并且想比较一下Nginx和Apache的性能,尝试采用Nginx+uwsgi的模式来部署django. 1.安装uwsgi以及 ...

  4. centos7.4+mysql5.6+virtualenv+python3.6+nginx+uwsgi+django生产环境搭建

    一 更新yum # yum update 二 安装gcc  lrzsz软件 # yum install gcc 用来编译python3.6源码 # yum install lrzsz 用来上传文件 三 ...

  5. centos7 下通过nginx+uwsgi部署django应用

    1. 安装python3.6 1. 获取 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz tar -xzvf Python- ...

  6. Nginx + uWSGI + web.py 搭建示例

    (1)安装Nginx1.1 下载nginx-1.0.5.tar.gz并解压1.2 ./configure (也可以增加--prefix= path指定安装路径)此时有可能会提示缺少pcre支持,如果要 ...

  7. CentOS7部署Django,nginx,uwsgi,redis

    前期准备 把所有的软件都传到这个tools文件夹 cd - mkdir tools cd tools/ mkdir /application 安装nginx yum install pcre pcre ...

  8. nginx+uwsgi+django+supervisor+mysql+redis

    目录 1. 概述 3 2. 安装与配置 3 2.1 django项目与应用创建 3 2.2 uwsgi安装与配置 6 2.3 supervisor安装与配置 8 2.4 nginx安装与作为反向代理服 ...

  9. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

随机推荐

  1. 科学计算三维可视化---Mayavi入门(Mayavi管线)

    一:Mayavi管线 mlab.show_pipeline() #显示管线层级,来打开管线对话框 (一)管线中的对象scene Mayavi Scene:处于树的最顶层的对象,他表示场景,配置界面中可 ...

  2. java 修饰符总结

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种.    1.权限访问修饰符    public,protected,default,private,这四种级别 ...

  3. Linux安装配置SVN服务器

    1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ...

  4. A Gentle Guide to Machine Learning

    A Gentle Guide to Machine Learning Machine Learning is a subfield within Artificial Intelligence tha ...

  5. Matlab——GUI初涉

    Matlab——GUI初涉 MATLAB GUI教学视频0:GUI中的基本操作—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMjM2Mjk0MjM2. ...

  6. 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值

    [题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...

  7. yii验证系统学习记录,基于yiicms(一)写的太长了,再写一篇(二)

    项目地址:https://gitee.com/templi/yiicms 感谢七觞酒大神的付出,和免费分享.当然也感谢yii2的开发团队们. 项目已经安全完毕,不知道后台密码,这种背景下,后台无法进去 ...

  8. [转]ubuntu16.04~qt 5.8无法输入中文

    编译fcitx-qt需要cmake,安装cmake命令,如果已经安装,请略过. sudo apt-get install cmake 安装 fcitx-libs-dev sudo apt-get in ...

  9. python(32):多进程(2) multiprocessing

    python 多线程:多线程 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心. Python提供了非常好用的多进程包multiprocessing,你只需要 ...

  10. aarch64_g4

    golang-github-inconshreveable-muxado-devel-0-0.7.gitf693c7e.fc26.noarch.rpm 2017-02-11 16:47 30K fed ...