Python项目实践--环境准备02 Centos下的Python+Flask环境部署

一、Python环境

1、安装依赖项

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

2、下载代码

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
解压并进入代码目录
tar zxvf xxx

3、配置

在 ./configure 操作前,先进行配置
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
 
然后添加配置
./configure --prefix=/usr/python

4、安装

make
make install
 
重新安装清理
make clean 
make distclean

5、加上软链接

ln -s /usr/python/bin/python3 /usr/bin/python3
ln -s /usr/python/bin/pip3 /usr/bin/pip3

二、虚拟环境

pip install virtualenv
pip install virtualenvwrapper
 
如果没有pip则
pip3 install virtualenv
pip3 install virtualenvwrapper
 
配置环境变量
用vim打开~/.bashrc
export WORKON_HOME=~/.virtualenvs
source /usr/bin/virtualenvwrapper.sh 
或者
source /usr/python/bin/virtualenvwrapper.sh
不同的系统virtualenvwrapper.sh的位置可能会不一样
注意:我安装的时候由于本机没有python,因此都安装到了Python3下
virtualenv和virtualenvwrapper的路径为
/usr/python/bin/virtualenv
/usr/python/bin/virtualenvwrapper.sh
 
加上软链接
ln -s /usr/python/bin/virtualenv /usr/bin/virtualenv
ln -s /usr/python/bin/virtualenvwrapper.sh /usr/bin/virtualenvwrapper.sh
 
source ~/.bashrc
执行.bashrc使文件生效
 
创建PPCMS的虚拟环境(根据实际需要给虚拟环境命名)
mkvirtualenv --python=/usr/bin/python3  ppcms

三、Flask环境

切换到虚拟环境下
workon  ppcms
 
安装Flask
pip install Flask
pip install pymysql
pip install flask-sqlalchemy
pip install pyjwt  # jwt包
pip install requests
 
可合并为
pip install Flask pymysql flask-sqlalchemy pyjwt requests

四、服务部署

安装Gunicorn
pip install gunicorn

五、Gunicorn启动脚本

gunicorn 命令启动
简单地,gunicorn可以通过gunicorn -w 4 -b 127.0.0.1:4000 run:app启动一个Flask应用。其中,
-w 4是指预定义的工作进程数为4,
-b 127.0.0.1:4000指绑定地址和端口
run是flask的启动python文件,app则是flask应用程序实例
 
对应的gunicorn.py配置文件
# gunicorn.py

debug = True

daemon = True

bind = '127.0.0.1:8001'      # 绑定ip和端口号
# backlog = 512                # 监听队列
chdir = '/data/ppcms/ppcms'  # gunicorn要切换到的目的工作目录
timeout = 30      # 超时
# worker_class = 'gevent' # 使用gevent模式,还可以使用sync 模式,默认的是sync模式

# workers = multiprocessing.cpu_count() * 2 + 1    # 进程数
# threads = 2 # 指定每个进程开启的线程数
loglevel = 'debug'   # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'    # 设置gunicorn访问日志格式,错误日志无法设置

"""
其每个选项的含义如下:
h          remote address
l          '-'
u          currently '-', may be user name in future releases
t          date of the request
r          status line (e.g. ``GET / HTTP/1.1``)
s          status
b          response length or '-'
f          referer
a          user agent
T          request time in seconds
D          request time in microseconds
L          request time in decimal seconds
p          process ID
"""

pidfile = "/data/log/ppcms.pid"
accesslog = "/data/log/gunicorn_ppcms_access.log"      # 访问日志文件
errorlog = "/data/log/gunicorn_ppcms_error.log"        # 错误日志文件
View Code
 

六、nginx配置

upstream到本地指定端口即可。
location / {
    proxy_pass http://127.0.0.1:8000 ; # 这里是指向gunicorn host的服务地址
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
}
 
参考文章:
http://www.cnblogs.com/zhanglong8681/p/8421512.html
https://www.jianshu.com/p/fecf15ad0c9a
posted on 2020-03-27 13:43  麦克煎蛋  阅读(497)  评论(0编辑  收藏  举报