zoukankan      html  css  js  c++  java
  • Flask_uwsgi_nginx_ubuntu19_centos8_apt安装

    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-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 = 60  #缺省是15秒
    #更换镜像源
    index-url = https://mirrors.huaweicloud.com/repository/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
    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()函数 和 类视图详解


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

  • 相关阅读:
    关于上传的种种(一)
    由SharePoint:ChangeContentType想到的
    关于上传的种种(二)
    关于上传的种种(三)
    SharePoint 2013 Suite Bar
    SharePoint 2013 商城
    自定义列表默认的视图文件
    InfoPath表单与SPD无代码工作流(一)
    列表的展示分页
    无处不在的SharePoint按钮(二)
  • 原文地址:https://www.cnblogs.com/osnosn/p/12076812.html
Copyright © 2011-2022 走看看