如需转载,请根据 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 许可,附上本文作者及链接。
本文作者: 执笔成念
作者昵称: zbcn
本文链接: https://1363653611.github.io/zbcn.github.io/2019/10/06/py_03Flask%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2/
Flask 项目打包部署
requirements.txt 文件生成 pip freeze > requirements.txt
安装requirements.txt依赖 pip install -r requirements.txt
- 执行报错
ModuleNotFoundError: No module named ‘_ctypes’
- 解决方案:
1
yum install libffi-dev -y
2
yum update -y
3
4
make install
- 如果还报错,在继续安装下其他基础包.至此,问题解决
1
yum install make curl curl-devel gcc gcc-c++ gcc-g77 gcc* make zlib-devel bzip2-devel openssl-devel xz-libs wget unzip xz vixie-cron crontabs ntpdate tar lrzsz sysstat bind-utils vim -y
2
yum groupinstall 'development tools' -y
3
yum update -y
4
5
#进入解压后的目录,依次执行下面命令进行手动编译
6
sudo ./configure prefix=/usr/local/python3
7
sudo make
8
sudo make install
- 如果还报错,在继续安装下其他基础包.
安装virtualenv
sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper
建立软连接
ln -s /usr/local/python3/lib/python3.8/site-packages
(未执行)切换到你的flask应用项目的根目录
1
# 创建虚拟环境
2
# virtualenv -p python3 py38env (命令失效)
3
python -m virtualenv venv
4
5
source venv/bin/activate
问题: mkvirtualenv: 未找到命令
升级 python 包管理器工具 pip3
pip install --upgrade pip
python 虚拟环境的安装
1
sudo pip3 install virtualenv
2
sudo pip3 install virtualenvwrapper
创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs
在 ~/.bashrc 中添加行
1
vi ~/.bashrc
2
3
export WORKON_HOME=HOME/.virtualenvs
4
# 网上很多教程说在 source /usr/local/bin/virtualenvwrapper.sh,实际上不对
5
source /usr/bin/virtualenvwrapper.sh
运行:
source ~/.bashrc
问题解决
其他命令(估计也有问题,未验证)
1
# 创建虚拟环境
2
mkvirtualenv [虚拟环境名称]
3
workon [虚拟环境名称]
4
5
# 退出虚拟环境 离开
6
deactivate
7
8
# 删除虚拟环境(慎用)
9
rmvirtualenv [虚拟环境名称]
进入虚拟环境后,安装你的flask应用的所有扩展包,最好把所有的扩展包写入requirements.txt
1
pip install -r requirements.txt
安装gunicorn和gevent
1
pip3 install gunicorn
2
pip3 install gevent
启动gunicorn(注:这时必须进入你项目的根目录且处于虚拟环境中,因为gunicorn安装在虚拟环境中)
配置gunicorn启动配置文件,在项目的根目录创建一个gunicron.conf,写入以下内容:
1
import gevent.monkey
2
gevent.monkey.patch_all()
3
import multiprocessing
4
import os
5
6
if not os.path.exists('/var/log/gunicorn'):
7
os.mkdir('/var/log/gunicorn')
8
9
bind='0.0.0.0:5000'
10
# 需要log目录存在。如果不存在,启动会报错
11
#启动的进程数
12
workers = multiprocessing.cpu_count() * 2 + 1
13
backlog=2048
14
worker_class="gevent" #sync, gevent,meinheld
15
debug=True
16
proc_name = 'gunicorn_raab.pid'
17
pidfile = '/var/log/gunicorn/raabpid.log'
18
errorlog = '/var/log/gunicorn/raaberror.log'
19
accesslog = '/var/log/gunicorn/raabaccess.log'
20
loglevel = 'debug'
21
threads = 4
22
worker_connections = 2000
23
24
x_forwarded_for_header = 'X-FORWARDED-FOR'
然后执行以下代码启动
1
# 不显示日志
2
gunicorn -k gevent -c gunicorn.py wsgi:app
3
# 带日志
4
gunicorn -k gevent -c gunicorn.py wsgi:app –preload
5
gunicorn -k gevent -c gunicorn.py wsgi:app --log-level=debug
注:run:app说明
- run为你定义Flask应用实例的py文件
- app是你在该文件中实例化的Flask应用的变量名
gunicorn
命令执行时,如果提示gunicorn commond not found
,需要添加lunix 的环境变量:1
# 打开环境变量的配置位置
2
vi /etc/profile
3
# 添加 路径
4
export PATH=$PATH:/usr/local/python3/bin
5
# 使路径生效:
6
source /etc/profile