環境準備
python套件安裝工具pip : sudo apt-get install pip
virtualenv:為了避免系統環境與應用環境之間的衝突,使用虛擬環境來安裝應用的依賴,virtualenv可以為每個python應用程式建立獨立的開發環境,安裝方式:sudo pip install virtualenv
虛擬環境使用
flask專案地址:/usr/local/flasky,只需要在專案地址下執行指令:
virtualenv venv
約定俗成一般使用「venv」作為虛擬環境的名稱,這樣我們就建立了一個虛擬環境的資料夾venv如下圖紅框所示:
接下來啟動虛擬環境,只用指令
source venv/bin/activate
啟動虛擬環境後,命令列抬頭會有(venv)標識,僅需虛擬環境後,一切安裝python的操作都會講包和引用裝在虛擬環境中,不會影響全局的python環境
退出虛擬環境的指令,直接敲:
deactivate
即可退出虛擬環境
# #配置flask應用程式環境
flask應用程式開發的時候,會應用到非常多的模板,「狗書」中有介紹一種比較方便的方式,直接把開發環境的flask依賴等匯出為txt文件,然後在centos的虛擬環境中使用對應指令根據這個txt文件安裝會非常方便。pip freeze >requerements.txt該指令匯出一個檔案名為requirements.txt的文本,裡面的內容如下圖所示
然後centos中使用以下指令
pip install -r requerments.txt
注意一定要在虛擬環境中使用批次安裝指令,不然就安裝到全域去了,後果還是比較蛋痛的。
安裝uwsgi
flask的實際生產運作環境選擇不多,比較成熟的是【gunicorn】和【uwsgi】,這裡推荐一本書董偉明的《 python web開發實戰》裡面有講這兩種部署。 以下內容來自百度百科:uwsgi是一個web伺服器,它實作了wsgi協定、uwsgi、http等協定。 nginx中httpuwsgimodule的作用是與uwsgi伺服器進行交換。 wsgi是一種web伺服器網關介面。它是一個web伺服器(如nginx,uwsgi等伺服器)與web應用(如用flask框架寫的程式)通訊的一種規範。安裝指令如下,注意一定要保證已經進入了虛擬環境並啟動:
pip install uwsgi
上傳專案檔案
部落客使用的linux連線工具是xshell,在之前的文章中講如何上傳檔案到linux主機,這裡不再詳細說明,展示一下大概的專案結構以及啟動檔案manage.pytree指令可以以樹狀圖的形式展示檔案結構,可以賦予參數設定樹的深度,這裡部落客展示了2層
安裝指令:
sudo apt-get install tree
#coding=utf-8 #!/usr/local/flasky/venv python ''' created on 2017/11/9 @author: savitar丶 project: ''' import os from app import create_app from flask_script import manager, shell app = create_app(os.getenv('flask_config') or 'default') manager = manager(app) def make_shell_context(): return dict(app=app) manager.add_command("shell", shell(make_context=make_shell_context)) @manager.command def deploy(): """run deployment tasks.""" pass if __name__ == '__main__': manager.run() #app.run()
命令列運行flask項目
python manage.py runserver
配置uwsgi
我們直接在flask的根目錄下面新建一個檔案「config.ini」,使用的方式是設定啟動。檔案內容如下[uwsgi] # uwsgi 启动时所使用的地址与端口 socket = 127.0.0.1:5000 #虚拟环境目录 home = /usr/local/flasky/venv #指向网站根目录 chdir = /usr/local/flasky #python启动程序文件 wsgi-file = manage.py #python程序内用于启动的application变量名 callable = app #处理器数 processes = 4 #线程数 threads = 2 #状态监测地址 stats = 127.0.0.1:9191 #设置uwsgi包解析的内部缓存区大小。默认4k buffer-size = 32768設定檔的執行方式,命令列輸入指令:
#uwsgi config.ini##或不寫入設定檔(不建議這樣做),直接命令列輸入
uwsgi –socket 127.0.0.1:5000 –wsgi-file manage.py –callable app –process 4 –threads 2
這裡的callable=app這個app是manage.py程式檔案內的一個變量,這個變數的型別是flask的application類別
#
这里是因为博主已经配置好了项目自启动,已经有一个配置文件在运行了,大家按照正常流程配置就好。ctrl+c关闭程序,在实际项目中我们的服务器上可能会有多个项目在运行,我们需要应用随同服务器启动并作为后台服务运行才是实际项目需要,所以我们需要安装另一个工具来引导执行uwsgi
安装supervisor
supervisor可以同时启动多个应用,最重要的是当某个应用down掉的时候,他可以自动重启该应用,保证可用性。
sudo apt-get install supervisor
supervisor的全局配置文件在
打开该默认配置文件,最下面一行我们看到,该默认配置文件会从 /etc/supervisord/目录下面加载所有的配置文件
我们不需要修改默认的配置文件,只需要在/etc/supervisord/目录下新建一个配置文件(命名为flask_supervisor.conf)
该文件内容如下:
[program:flasky] # 启动命令入口 command=/usr/local/flasky/venv/bin/uwsgi /usr/local/flasky/config.ini # 命令程序所在目录 directory=/usr/local/flasky #运行命令的用户名 user=root autostart=true autorestart=true #日志地址 stdout_logfile=/usr/local/flasky/logs/uwsgi_super.log
这里command这一行代码看起来很长,其实就是之前我们的 “uwsgi config.ini”指令,这里使用的是绝对路径,保证命令和文件的准确性,大家也可以copy这一行代码出去执行,结果是ok的。autostart和autorestart参数保证了我们的应用可以一直保持启动的状态,即使是down掉了也能重启服务。
启动服务
sudo service supervisor start
终止服务
sudo service supervisor stop
安装nginx
nginx是轻量级,性能强,占用资源少,能很好的处理高并发的反向代理软件。
正向代理和反向代理
正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再讲这些资源返回给客户端。代理和服务器再一个局域网,对客户端是透明的。nginx是反向代理的最佳选择。
反向代理的作用
提高动态语言的io处理能力
加密和ssl加速
安全。
负载均衡
缓存静态内容
支持压缩。
nginx安装指令:
sudo apt-get install nginx
配置nginx
我们找到nginx的配置文件,不要修改默认的nginx.conf(路径 /etc/nginx/nginx.conf)文件,只需要在同样的文件夹下面新建一个文件夹(conf.d)然后在conf.d下面新建配置文件(flask_ng.conf)即可,如下图
flask_ng.conf文件内容如下
server { listen 80; server_name www.cloud-test.com; #公网地址 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理 uwsgi_param uwsgi_pyhome /usr/local/flasky/venv; # 指向虚拟环境目录 uwsgi_param uwsgi_chdir /usr/local/flasky; # 指向网站根目录 uwsgi_param uwsgi_script manage:app; # 指定启动程序 } }
启动nginx
sudo service nginx restart
然后浏览器直接访问服务器http://www.cloud-test.com地址,结果如下
小case,解决办法,直接修改本机hosts,绑定就好了,如下图所示
然后再去访问
然后也可以找自己的同事一起访问,看看并发请求,网站的运行情况,想来能解决在开发环境使用了host 0.0.0.0 也只能处理一个用户的请求的问题
查看应用的运行情况
supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:
输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面(还是纯命令行),可以看到应用的运行情况
就可以在下面输入命令了。:
help # 查看帮助
status # 查看程序状态
stop program_name # 关闭 指定的程序
start program_name # 启动 指定的程序
restart program_name # 重启 指定的程序
tail -f program_name # 查看 该程序的日志
update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)
也可以直接透過 shell 指令操作:
supervisorctl status
supervisorctl update
以上是centos怎麼使用Nginx部署flask應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!