日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask部署和分发

發布時間:2025/4/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask部署和分发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.bjhee.com/flask-ad8.html

到目前為止,我們啟動Flask應用都是通過”app.run()”方法,在開發環境中,這樣固然可行,不過到了生產環境上,勢必需要采用一個健壯的,功能強大的Web應用服務器來處理各種復雜情形。同時,由于開發過程中,應用變化頻繁,手動將每次改動部署到生產環境上很是繁瑣,最好有一個自動化的工具來簡化持續集成的工作。本篇,我們就會介紹如何將上一篇中Flask的應用程序自動打包,分發,并部署到像Apache, Nginx等服務器中去。

系列文章

  • Flask進階系列(一)–上下文環境
  • Flask進階系列(二)–信號
  • Flask進階系列(三)–Jinja2模板引擎
  • Flask進階系列(四)–視圖
  • Flask進階系列(五)–文件和流
  • Flask進階系列(六)–藍圖(Blueprint)
  • Flask進階系列(七)–應用最佳實踐
  • Flask進階系列(八)–部署和分發
  • Flask進階系列(九)–測試

使用setuptools打包Flask應用

首先,你要了解基本的使用setuptools打包分發Python應用程序的方法。接下來,就讓我們開始寫一個”setup.py”文件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from setuptools import setup setup( ????name='MyApp', ????version='1.0', ????long_description=__doc__, ????packages=['myapp','myapp.main','myapp.admin'], ????include_package_data=True, ????zip_safe=False, ????install_requires=[ ????????'Flask>=0.10', ????????'Flask-Mail>=0.9', ????????'Flask-SQLAlchemy>=2.1' ????] )

把文件放在項目的根目錄下。另外,別忘了,還要寫一個”MANIFEST.in”文件:

1 2 recursive-include myapp/templates * recursive-include myapp/static *

編寫完畢后,你可以創建一個干凈的虛擬環境,然后運行安裝命令試下效果。

$ python setup.py install

使用Fabric遠程部署Flask應用

同樣,你需要先了解如何使用Fabric來遠程部署Python應用。然后,我們來編寫”fabfile.py”文件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from fabric.api import * env.hosts = ['example1.com', 'example2.com'] env.user = 'bjhee' def package(): ????local('python setup.py sdist --formats=gztar', capture=False) def deploy(): ????dist = local('python setup.py --fullname', capture=True).strip() ????put('dist/%s.tar.gz' % dist, '/tmp/myapp.tar.gz') ????run('mkdir /tmp/myapp') ????with cd('/tmp/myapp'): ????????run('tar xzf /tmp/myapp.tar.gz') ????????run('/home/bjhee/virtualenv/bin/python setup.py install') ????run('rm -rf /tmp/myapp /tmp/myapp.tar.gz') ????run('touch /var/www/myapp.wsgi')

上例中,”package”任務是用來將應用程序打包,而”deploy”任務是用來將Python包安裝到遠程服務器的虛擬環境中,這里假設虛擬環境在”/home/bjhee/virtualenv”下。安裝完后,我們將”/var/www/myapp.wsgi”文件的修改時間更新,以通知WSGI服務器(如Apache)重新加載它。對于非WSGI服務器,比如uWSGI,這條語句可以省去。

編寫完后,運行部署腳本測試下:

$ fab package deploy

使用Apache+mod_wsgi運行Flask應用

Flask應用是基于WSGI規范的,所以它可以運行在任何一個支持WSGI協議的Web應用服務器中,最常用的就是Apache+mod_wsgi的方式。上面的Fabric腳本已經完成了將Flask應用部署到遠程服務器上,接下來要做的就是編寫WSGI的入口文件”myapp.wsgi”,我們假設將其放在Apache的文檔根目錄在”/var/www”下。

1 2 3 4 5 6 7 8 9 10 11 12 activate_this = '/home/bjhee/virtualenv/bin/activate_this.py' execfile(activate_this, dict(__file__=activate_this)) import os os.environ['PYTHON_EGG_CACHE'] = '/home/bjhee/.python-eggs' import sys; sys.path.append("/var/www") from myapp import create_app import config application = create_app('config')

注意上,你需要預先創建配置文件”config.py”,并將其放在遠程服務器的Python模塊導入路徑中。上例中,我們將”/var/www”加入到了Python的模塊導入路徑,因此可以將”config.py”放在其中。另外,記得用setuptools打包時不能包括”config.py”,以免在部署過程中將開發環境中的配置覆蓋了生產環境。

在Apache的”httpd.conf”中加上腳本更新自動重載和URL路徑映射:

WSGIScriptReloading On WSGIScriptAlias /myapp /var/www/myapp.wsgi

重啟Apache服務器后,就可以通過”http://example1.com/myapp”來訪問應用了。

使用Nginx+uWSGI運行Flask應用

你要先準備好Nginx+uWSGI的運行環境,然后編寫uWSGI的啟動文件”myapp.ini”:

[uwsgi] socket=127.0.0.1:3031 callable=app mount=/myapp=run.py manage-script-name=true master=true processes=4 threads=2 stats=127.0.0.1:9191 virtualenv=/home/bjhee/virtualenv

再修改Nginx的配置文件,Linux上默認是”/etc/nginx/sites-enabled/default”,加上目錄配置:

location /myapp {include uwsgi_params;uwsgi_param SCRIPT_NAME /myapp;uwsgi_pass 127.0.0.1:3031; }

重啟Nginx和uWSGI后,就可以通過”http://example1.com/myapp”來訪問應用了。

你也可以將我們的應用配置為虛擬服務器,只需要將上述uWSGI的配置移到虛擬服務器的配置文件中即可。關于Nginx虛擬服務器的配置,可以參考我之前的文章。

使用Tornado運行Flask應用

Tornado的強大之處在于它是非阻塞式異步IO及Epoll模型,采用Tornado的可以支持數以萬計的并發連接,對于高并發的應用有著很好的性能。本文不會展開Tornado的介紹,感興趣的朋友們可以參閱其官方文檔。使用Tornado來運行Flask應用很簡單,只要編寫下面的運行程序,并執行它即可:

1 2 3 4 5 6 7 8 9 10 11 from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from myapp import create_app import config app = create_app('config') http_server = HTTPServer(WSGIContainer(app)) http_server.listen(5000) IOLoop.instance().start()

之后你就可以通過”http://example1.com:5000″來訪問應用了。

使用Gunicorn運行Flask應用

Gunicorn是一個Python的WSGI Web應用服務器,是從Ruby的Unicorn移植過來的。它基于”pre-fork worker”模型,即預先開啟大量的進程,等待并處理收到的請求,每個單獨的進程可以同時處理各自的請求,又避免進程啟動及銷毀的開銷。不過Gunicorn是基于阻塞式IO,并發性能無法同Tornado比。更多內容可以參閱其官方網站。另外,Gunicorn同uWSGI一樣,一般都是配合著Nginx等Web服務器一同使用。

讓我們先將應用安裝到遠程服務器上,然后采用Gunicorn啟動應用,使用下面的命令即可:

$ gunicorn run:app

解釋下,因為我們的應用使用了工廠方法,所以只在run.py文件中創建了應用對象app,gunicorn命令的參數必須是應用對象,所以這里是”run:app”。現在你就可以通過”http://example1.com:8000″來訪問應用了。默認監聽端口是8000。

假設我們想預先開啟4個工作進程,并監聽本地的5000端口,我們可以將啟動命令改為:

$ gunicorn -w 4 -b 127.0.0.1:5000 run:app

本篇中的示例代碼可以在這里下載。

轉載于:https://www.cnblogs.com/davidwang456/articles/9548866.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Flask部署和分发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 金鱼妻日剧免费观看完整版全集 | 一久久久 | 熟女人妻aⅴ一区二区三区60路 | 99久久久无码国产精品性色戒 | 爱情岛论坛亚洲品质自拍视频 | 日韩尤物| 双乳被四个男人吃奶h文 | 催眠调教艳妇成肉便小说 | 亚洲精品国产精品乱码视色 | 欧美不卡影院 | 巨茎大战刘亦菲 | 国产懂色av| 日本黄页网站 | 在线观看免费视频一区二区 | 日韩综合一区二区三区 | 超碰在线国产 | 中文字幕视频在线 | 狂野欧美性猛交xxxx777 | 性感美女在线观看 | 欧美性视频一区二区三区 | 日日操夜夜骑 | 日本xxxx18高清hd | 午夜h视频 | 欧美人与性动交g欧美精器 国产在线视频91 | 精品人妻一区二区三区香蕉 | 成人av网址在线 | 日本午夜一级 | 欧美一级片播放 | 91欧美亚洲| 四色成人av永久网址 | 欧美成人视屏 | 人人九九 | 在线免费观看国产精品 | 极品美女无套呻吟啪啪 | 在线免费观看污网站 | 国产亚州av| 色网在线免费观看 | 欧美精品乱码99久久蜜桃 | 亚洲视频 一区 | 国产sm在线| 欧美经典一区二区三区 | 一个人在线免费观看www | 日本波多野结衣在线 | 日本少妇网站 | 在线激情视频 | 青青草在线视频免费观看 | 国产超碰在线观看 | 爆操少妇 | 日韩欧美精品在线观看 | 日日爱视频 | 欧美成人免费在线观看视频 | 一区二区三区久久久 | 成年人在线免费观看网站 | 久色影视 | 天美视频在线观看 | 成人毛片在线精品国产 | 成人免费xxxxx在线观看 | 91精品久久人妻一区二区夜夜夜 | 亚洲色图偷| 短裙公车被强好爽h吃奶视频 | 亚洲永久精品ww.7491进入 | 国产精品一区在线观看 | 日本激情视频在线观看 | 日本欧美一区二区三区不卡视频 | av手机网站 | 日韩在线二区 | 国产又大又粗又爽 | 在线xxxxx| 国产aⅴ | 日产精品久久久久久久蜜臀 | 欧美另类自拍 | 五月天堂网 | 在哪里可以看毛片 | 亚洲视屏 | 中文字幕婷婷 | 欧美片一区二区三区 | 在线观看成人黄色 | 五月天激情国产综合婷婷婷 | 四虎网址在线 | 都市激情国产精品 | 四虎久久 | 国产免费成人在线视频 | 打美女屁股网站 | 欧美视频在线免费看 | 免费看91的网站 | 青青草综合视频 | 99国产精品白浆在线观看免费 | 国产精品国产三级国产aⅴ9色 | 欧美 日韩 人妻 高清 中文 | 伊人久久99| 农民人伦一区二区三区 | 日日操夜夜 | 中文字幕一区二区三区乱码 | 欧美性猛交ⅹxx乱大交 | 女性向av免费网站 | 久久日精品 | 人人上人人干 | 91亚洲影院 | 少女与动物高清版在线观看 |