如需转载,请根据 知识共享署名-非商业性使用-相同方式共享 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’ - 解决方案:
1yum install libffi-dev -y2yum update -y34make install- 如果还报错,在继续安装下其他基础包.至此,问题解决
1yum 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 -y2yum groupinstall 'development tools' -y3yum update -y45#进入解压后的目录,依次执行下面命令进行手动编译6sudo ./configure prefix=/usr/local/python37sudo make8sudo make install
- 如果还报错,在继续安装下其他基础包.
安装virtualenv
sudo pip3 install virtualenvsudo pip3 install virtualenvwrapper建立软连接
ln -s /usr/local/python3/lib/python3.8/site-packages(未执行)切换到你的flask应用项目的根目录
1# 创建虚拟环境2# virtualenv -p python3 py38env (命令失效)3python -m virtualenv venv45source venv/bin/activate问题: mkvirtualenv: 未找到命令
升级 python 包管理器工具 pip3
pip install --upgrade pippython 虚拟环境的安装
1sudo pip3 install virtualenv2sudo pip3 install virtualenvwrapper创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs在 ~/.bashrc 中添加行
1vi ~/.bashrc23export WORKON_HOME=HOME/.virtualenvs4# 网上很多教程说在 source /usr/local/bin/virtualenvwrapper.sh,实际上不对5source /usr/bin/virtualenvwrapper.sh运行:
source ~/.bashrc问题解决
其他命令(估计也有问题,未验证)
1# 创建虚拟环境2mkvirtualenv [虚拟环境名称]3workon [虚拟环境名称]45# 退出虚拟环境 离开6deactivate78# 删除虚拟环境(慎用)9rmvirtualenv [虚拟环境名称]
进入虚拟环境后,安装你的flask应用的所有扩展包,最好把所有的扩展包写入requirements.txt
1pip install -r requirements.txt安装gunicorn和gevent
1pip3 install gunicorn2pip3 install gevent启动gunicorn(注:这时必须进入你项目的根目录且处于虚拟环境中,因为gunicorn安装在虚拟环境中)
配置gunicorn启动配置文件,在项目的根目录创建一个gunicron.conf,写入以下内容:
1import gevent.monkey2gevent.monkey.patch_all()3import multiprocessing4import os56if not os.path.exists('/var/log/gunicorn'):7os.mkdir('/var/log/gunicorn')89bind='0.0.0.0:5000'10# 需要log目录存在。如果不存在,启动会报错11#启动的进程数12workers = multiprocessing.cpu_count() * 2 + 113backlog=204814worker_class="gevent" #sync, gevent,meinheld15debug=True16proc_name = 'gunicorn_raab.pid'17pidfile = '/var/log/gunicorn/raabpid.log'18errorlog = '/var/log/gunicorn/raaberror.log'19accesslog = '/var/log/gunicorn/raabaccess.log'20loglevel = 'debug'21threads = 422worker_connections = 20002324x_forwarded_for_header = 'X-FORWARDED-FOR'然后执行以下代码启动
1# 不显示日志2gunicorn -k gevent -c gunicorn.py wsgi:app3# 带日志4gunicorn -k gevent -c gunicorn.py wsgi:app –preload5gunicorn -k gevent -c gunicorn.py wsgi:app --log-level=debug注:run:app说明
- run为你定义Flask应用实例的py文件
- app是你在该文件中实例化的Flask应用的变量名
gunicorn命令执行时,如果提示gunicorn commond not found,需要添加lunix 的环境变量:1# 打开环境变量的配置位置2vi /etc/profile3# 添加 路径4export PATH=$PATH:/usr/local/python3/bin5# 使路径生效:6source /etc/profile