[原创]智能化运维平台部署(gunicorn+nginx+gevent+superviso。。。
2019年6⽉13⽇
前⾔
简要介绍⼀下,为⼩⽩普及基础知识,⽼司机请⾃⾏略过~
Flask本⾝带着 WSGI server,但是性能差强⼈意,⾃带的web server 更多的是测试⽤途。线上发布时,最好使⽤⾼性能的 wsgi server或者是联合nginx做uwsgi 。
greenlet是⼀个轻量级的协程库。
gevent是基于greenlet的⽹络库,每次遇到io操作,需要耗时等待时,会⾃动跳到下⼀个协程继续执⾏。
guincorn是⽀持wsgi协议的http server,只⽀持在Unix系统上运⾏,来源于Ruby的unicorn项⽬。gevent是它⽀持的模式之⼀ ,是为了解决django、flask这些web框架⾃带wsgi server性能低下的问题。它的特点是与各个web框架结合紧密,实现简单,轻量级,⾼性能,部署⽅便。
Nginx是⼀款轻量级的Web 服务器/反向代理服务器及电⼦邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发⾏。其特点是占有内存少,并发能⼒强,在同类型的⽹页服务器中表现较好,百度、京东、新浪、⽹易、腾讯、淘宝等⽹站都⼴泛使⽤nginx。
Supervisor是⼀个UNIX操作系统上的进程管理⼯具,允许⽤户通过其控制许多进程,包括进程启停、优先级分配等,具有部署简单、管理集中、⾼效等特点。
pipenv能够有效管理Python多个环境,各种依赖包。过去我们⼀般⽤virtualenv搭建虚拟环境,管理python版本,但是跨平台的使⽤不太⼀致,且有时候处理包之间的依赖总存在问题;过去也常常⽤ pip进⾏包的管理,pip已经⾜够好,但是仍然推荐pipenv,相当于virtualenv和pip的合体,更加强⼤,在各个平台的命令都是⼀样的,且使⽤了哈希校验,⽆论安装还是卸载包都⼗分安全。详见
⼀.环境
1.应⽤架构:⼤前端+后端API
(1)⼤前端框架:iview-admin套餐(vue、vue-router、vuex等)
(2)后端框架:flask套餐(flask、flask-sqlalchemy、python-crontab、sqlparse等)
2.部署架构:nginx+gunicorn+gevent+supervisor
3.服务器环境
IP:11.11.11.11
操作系统:centos7.2
4.部署⽬录
安装⽬录:/app/setup
运⾏⽬录:/app/run
nginx⽇志⽬录:/var/log/nginx
gunicorn⽇志⽬录:/var/log/gunicorn
supervisor⽇志⽬录:/var/log/supervisor/
supervisor运⾏⽬录:/var/supervisor/run/
⼆.安装python3.7.1
1.移除默认运⾏python3.6.4
vi ~/.bash_profile
export PATH
#export PATH="/root/.pyenv/bin:$PATH"
#export PYENV_ROOT="$HOME/.pyenv"
#export PATH="$PYENV_ROOT/bin:$PATH"
cd /usr/bin可知
此时默认版本为2.7.5
lrwxrwxrwx. 1 root root 7 Apr 9 2018 python -> python2
lrwxrwxrwx. 1 root root 9 Apr 9 2018 python2 -> python2.7
-rwxr-xr-x. 1 root root 7136 Nov 20 2015 python2.7
2.下载安装包
3.传输
传输到11.11.11.11 的/app/setup⽬录下
4.解压安装包
cd /app/setup
tar -xvzf Python-3.
5.安装
(1)安装依赖(不管装没装,强撸)
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make (2)编译安装软件
cd /app/setup/Python-3.7.1
./configure --prefix=/usr/python3
make && make install
nginx部署前端项目6.修改profile
[root@dbmgt1 bin]# vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
#export PATH="/root/.pyenv/bin:$PATH"
#export PYENV_ROOT="$HOME/.pyenv"
#export PATH="$PYENV_ROOT/bin:$PATH"
#eval "$(pyenv init -)"
export PYENV_ROOT="/usr/python3"
export PATH="$PYENV_ROOT/bin:$PATH"
注意:
yum依赖于/usr/bin/python,指向python2,后续还需使⽤yum进⾏依赖安装,所以不要动这个⽂件7.升级pip
(1)如果没有外⽹
pip install --index 11.4.76.252/simple/ --trusted-host=11.4.76.252 --upgrade pip
(2)如果有外⽹
pip install --upgrade pip
8.安装pipenv
pip install pipenv
三.代码环境安装
1.从gitlab拉取代码
cd /app/run
mkdir www
cd www
git init
git pull gitlab.www/88888/automation.git
输⼊⼯号密码后完成代码拉取
2.创建虚拟环境
cd /app/run/www/AutoDB
yum install postgresql-devel*
pipenv install
pipenv install gunicorn
pipenv install supervisor
pipenv install gevent
说明:由于系统⽤到pg数据库,需要安装psycopg2组件,安装该组件在linux环境下需要先安装postgresql-devel依赖包,否则会报错:Error: pg_config executable not found.
此外,由于部署需要,安装gevent、gunicorn、supervisor组件
3.安装证书(如果已申请证书,该步骤可忽略)
(1)安装依赖
yum install openssl
yum install openssl-devel
(2)制作证书
cd /app/run/www/AutoDB
#⽣成key
openssl genrsa -des3 -out server.key 1024
#⽣成csr
openssl req -new -key server.key -out server.csr
#⽣成免输⼊密码的key,不然⽹站启动时总是要求输⼊key
openssl rsa -in server.key -out server_nopwd.key
#⽣成crt
openssl x509 -req -days 3650 -in server.csr -signkey server_nopwd.key -
4.代码运⾏验证(验证时防⽕墙可开启5000端⼝)
cd /app/run/www/AutoDB
pipenv shell
python start.py
四.wsgi服务器安装部署
WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器⽹关接⼝。具体的来说,WSGI是⼀个规范,定义了Web服务器如何与Python应⽤程序进⾏交互,使得使⽤Python写的Web应⽤程序可以和Web服务器对接起来,基于gunicorn的强⼤性能,采⽤gunicorn作为flask的wsgi服务器是最佳实践之⼀。WSGI的理解详见和
1.安装gunicorn
cd /app/run/www
pipenv install gunicorn
2.编写配置⽂件
在项⽬主⽬录下新增f
import os
bind='0.0.0.0:5000'
workers=4
backlog=2048
worker_class="gevent" #sync, gevent,meinheld
debug=True
proc_name='gunicorn_www.pid'
pidfile='/var/log/gunicorn/wwwpid.log'
errorlog='/var/log/gunicorn/wwwerror.log'
accesslog='/var/log/gunicorn/wwwaccess.log'
loglevel='debug'
threads=4
worker_connections = 2000
keyfile='server.key'
certfile=''
参考
3.创建gunicorn⽇志⽬录
在/var/log⽬录下创建gunicorn⽬录
cd /var/log
mkdir gunicorn
4.验证gunicorn配置
/root/.local/share/virtualenvs/AutoDB-zUItRR7g/bin/gunicorn -f start:autodb_app
如果浏览器可以正常访问平台,说明配置成功
gunicorn的路径由pipenv shell可查看到虚拟环境路径
五.web服务器
基于nginx的强⼤性能,采⽤nginx作为web服务器,
1.安装依赖包
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2.下载nginx安装包
3.传输到/app/setup
4.安装nginx
rpm -Uvh arch.rpm
或者
yum install -y nginx
5.启动nginx
systemctl start nginx.service
systemctl enable nginx.service
6.验证是否安装成功
7.配置nginx
思路:
系统采⽤前后端分离的架构,可以将前端静态⽂件与后端应⽤程序分开部署。为实现更为安全的访问配置,通过nginx反向代理实现应⽤程序部署端⼝的隐藏。
部署⽅案及难点如下:
(1)项⽬前端采⽤VUE⼤前端架构,编译后为html、js等纯静态⽂件,部署在80端⼝。
难点:由于前端vue的路由模块采⽤了history模式,需要解决前端路由请求刷新后报404错误的问题;
(2)后端程序部署在5000端⼝,对外开放443端⼝,nginx监听443端⼝,限制只接收https请求。接到外部请求后,判断路径是静态⽂件还是API请求,静态⽂件请求直接跳转静态⽬录,API请求转发到5000端⼝。
难点:实现https认证⽅式的配置
(1)修改主配置⽂件f
[root@dbmgt1 nginx]# cd /etc/nginx
[root@dbmgt1 nginx]# f
user root root;
worker_processes 10;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/pes;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
(2)创建项⽬配置⽂件
按照部署思路分为f和f两个⽂件,分别实现⼤前端项⽬的部署和后端API程序的部署
先移除默认配置
cd /etc/nginx/conf.d
mv f.bak
a.创建f配置⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论