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、下载代码
解压并进入代码目录
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" # 错误日志文件
六、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;
}