osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

Flask_uwsgi_nginx_ubuntu19_centos8_apt安装

转载注明来源: 本文链接 来自osnosn的博客,写于 2019-12-21.

通过 apt 安装 flask (ubuntu 19.04)

  • apt install nginx python3
  • apt install virtualenv python3-virtualenv
    • 还有个选择 apt install python3-venv , 创建虚拟环境的命令是 pyvenvpython3 -m venv
  • apt install python3-flask
  • 如要使用虚拟环境,还需要: apt install python3-dev
  • 指定用py3: virtualenv --python=python3 venv
  • apt install uwsgi uwsgi-plugin-python3

通过 yum 安装 flask (CentOS 7/8)

  • yum install nginx python3
  • yum install python3-virtualenv
  • yum install python3-flask
  • 如要使用虚拟环境,还需要: yum install python3-devel
  • 指定用py3: virtualenv --python=python3 venv
  • pip3 install uwsgi

通过 pip3 安装 flask (ubuntu19/centos7/8) [推荐的]

  • apt install nginx python3 python3-pip / yum install nginx python3 python3-pip
    • 这一步会安装很多比较大的依赖包(下载100多MB,安装后占350多MB)。用apt或yum安装flask不需要装这些依赖包。
      这些依赖包包括但不限于: perl-modules-5.28 libperl5.28(3MB) libc6-dev cpp-8(8MB) libatomic1 libgcc-8-dev gcc-8(9MB) g++-8(9MB) libpython3.7-dev(48MB)
  • pip3 install --upgrade pip 可以考虑把 pip 升级到最新。
  • pip3 install virtualenv
  • 启动虚拟环境。(可选项.启动方法见下文)
  • pip3 install flask ,
    • 装在系统中 /usr/local/lib(64)/python3.6/site-packages/
    • 或虚拟环境中 虚拟环境目录/lib(64)/python3.6/site-packages/
  • pip3 install uwsgi ,
    • 装在系统中 /usr/local/bin/
    • 或虚拟环境中 虚拟环境目录/bin/
  • 创建项目目录。在里头写flask程序。在里头启动uwsgi。

其他注意事项

  • pip3 install uwsgi 如果失败,则需要安装python3-dev(centos:python3-devel)
  • uwsgi 如果不支持 -x 参数,则需安装 libxml2-dev(centos:libxml2-devel)
    • pip3 uninstall uwsgi 然后 pip3 install --no-cache-dir uwsgi 否则不会重新编译。
    • uwsgi 如果不支持 -x ,可以用 --ini ,使用 ini 格式的配置文件。
  • pip3 换镜像/代理。代理使用命令行参数--proxy=http://usr:pwd@ip:port,或者设置用户配置文件~/.pip/pip.conf
[global]
#timeout缺省是15秒
timeout = 60
#更换镜像源
index-url = https://repo.huaweicloud.com/repository/pypi/simple
#index-url = https://mirrors.aliyun.com/pypi/simple/
#proxy = socks5://usr:pwd@192.168.1.22:1080
proxy = http://usr:pwd@192.168.1.22:88

此用户配置文件,在虚拟环境中也有效。

  • 如果出现
ERROR: Could not find a version that satisfies the requirement XXXX (from versions: none)
ERROR: No matching distribution found for XXXX
  • 则执行 pip3 install --no-cache-dir XXXX, 或删除缓存目录 rm -rf ~/.cache/pip/

通过 uwsgi 启动 flask

  • 建议使用虚拟环境
  • 创建虚拟环境的父目录(比如 /myflask),并进入这个目录(cd /myflask)
  • virtualenv test1 (创建目录test1并在目录中创建虚拟环境。仅需执行一次)
    • virtualenv test1 这个虚拟环境不包含系统安装的py包。(import时找不到,除非在虚拟环境中用pip3再装一次)
    • virtualenv test1 --system-site-packages 这个虚拟环境包含系统安装的py包。(可以import)
  • cd test1
    • test1为虚拟环境目录,与flask的项目目录,互不相干。分别可以放在任意位置。只是激活虚拟环境,需要执行 test1/bin/activate,所以test1目录一般放在项目目录边上,方便输入激活虚拟环境的命令。
  • source bin/activate (激活虚拟环境)
    • 虚拟环境中 pip3 也使用 ~/.pip/pip.conf 配置文件。
  • 如果不想用全局的 flask,uwsgi, 可以在虚拟环境中用 pip3 再装一次。
  • 根据项目需要,在虚拟环境中pip3 install各种支持包。
  • uwsgi -x config.xmluwsgi --ini config.ini (启动uwsgi)
    • apt或yum装的uwsgi的配置文件在/etc/中,并有服务启动脚本,可以用service命令启动。不过uwsgi的版本较低。
    • pip3装的uwsgi,没有默认配置文件,不能用service命令启动。只能用 uwsgi -x config.xml 启动。
  • 去项目目录中,创建/修改flask程序,启动/重启/停止uwsgi进程。
  • deactivate (退出虚拟环境,要进入虚拟环境之后才有这个指令,其实就是个shell的func)

flask 本地运行测试

  • 如果修改了程序,暂时不使用 uwsgi 启动。可以直接运行 .py 程序执行(要求程序最后两行如下所示)。
if __name__ == '__main__':
   app.run(debug=True)  #默认是127.0.0.1:5000
   #函数原型 run(self, host=None, port=None, debug=None, **options)

配置参考

  • uwsgi-config.ini
[uwsgi]
chdir=/home/u01/flask01/mysite   ("wsgi-file="相对位置,"/templates/"目录位置)
home=/home/u01/flask01    (虚拟环境目录)
wsgi-file=mysite.py     (相对chdir目录)
callable=app
master=true
processes=2
threads=4
#socket=%(chdir)/mysite.sock
socket=127.0.0.1:8081
chmod-socket=666
logfile-chmod=644
daemonize=%(home)/uwsgi.log
pidfile=%(home)/uwsgi.pid
harakiri=3600         (超时就杀掉重启)
harakiri-verbose=true
uid=u01
gid=u01
#指定静态文件映射
static-map=/mydir/mystat=/home/u01/flask01/mysite/static
  • nginx.conf, location{ },
# 需要 @app.route('/flk/hello')
location /flk/ {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8081;
}

templates 文件存放目录

  • app = Flask(__name__,template_folder='templates') ,可以用template_folder=修改

static 静态文件目录

(Flask 1.1.2 , uwsgi 2.0.18)

  • 静态文件存放目录,
    app = Flask(__name__,static_folder='static') ,可以用static_folder=修改
  • 静态文件的 URL 访问位置
    app = Flask(__name__,static_url_path='/mydir/mystat') ,可以用static_url_path=修改
  • 提供静态文件访问支持
    • 如果是本地运行测试,则由 Flask 自己提供就好。
    • 可以由 Flask 自身提供。app.run(... , debug=True) 无论 debug 是 True 还是 False。都能提供静态文件支持。但性能不佳。
      Flask返回头多出cache-control:,etag:,expires: ,uwsgi返回头没有。
    • 可以由 uwsgi 提供。用 static-map= 参数指定(见上面的配置例子)。但性能不佳,比 Flask 好一点。
    • 由 nginx 或 apache 提供。这是推荐的配置,性能最佳。

使用静态文件 url 路径 (flask-1.1.2)

  • 在 templates 中
<img src="{{url_for('static',filename='img.jpg')}}">
<img src="{{url_for('static',filename='')}}img.jpg">
  • 在 py 程序中
from flask import url_for
url=url_for('static',filename='img.jpg')
url=url_for('static',filename='')+'img.jpg'

程序分成多个文件

  • 用装饰器
import otherfile
@app.route('/path1')
def path1_func():
   return otherfile.appfunc()
  • add_url_rule()
import otherfile
app.add_url_rule('/path2',view_func=otherfile.appfunc)

路由写到多个文件

  • 用蓝图 blueprint , 自行搜索用法。

参考:
Ubuntu+Nginx+uWSGI+Flask应用
简单的方法部署Flask + uwsgi + nginx到ubuntu 16.04服务器
Docs » uWSGI选项

使用virtualenv, uwsgi, nginx来布署flask
ubuntu部署python项目: virtualenv + flask + uwsgi + nginx + python3.6
在flask中使用蓝图将路由分开写在不同文件,Blueprint简介
Lazily Loading Views
flask--app.add_url_rule()函数 和 类视图详解

uwsgi配置详解,uwsgi的3个容易掉坑的配置(timeout、harakiri、buffer-size),uWSGI参考资料


转载注明来源: 本文链接 来自osnosn的博客.

posted on 2019-12-21 14:42  osnosn  阅读(617)  评论(0编辑  收藏  举报