zoukankan      html  css  js  c++  java
  • Flask采用Virtualenv+Supervisor+Nginx部署应用

    Flask采用Virtualenv+Supervisor+Nginx部署应用

    --

    首先是概念解释

    1. WSGI服务器,负责我们的app与服务器的交互,常用的有Gunicorn
    2. Web服务器,是个HTTP服务器,就相当于tomacat于Java,常用的有Nginx

    Web服务器中,Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。

    部署工具:

    1. Virtualenv,用户创建独立的虚拟的Python运行环境,可以解决版本,依赖等问题
    2. Supervisor,负责管理应用:应用的开启,关闭,以及多应用的管理等

    Virtualenv

    安装
    sudo pip install virtualenv
    
    使用
    #创建虚拟环境
    virtualenv venv
    
    #启动虚拟环境
    source venv/bin/activate
    
    #停止虚拟环境
    deactivate
    

    Supervisor

    安装
    sudo apt-get install supervisor
    
    使用

    配置Supervisor的配置文件的路径:/etc/supervisor/conf.d/*conf

    cd /etc/supervisor/conf.d/*conf
    

    在这里目录下,我们创建我们应用的配置文件,这样Supervisor才能读取到

    sudo vim app.conf
    

    里面的内容输入(内容其实就是执行我们的Python文件):

    [program:app]
    command = python /home/tengfei/api01/test/TestTo/TODO-orm/app.py
    
    
    //注,这个配置是和后文中Nginx配置好后对象的9000的转发端口执行的操作
    [program:todo]
    command = /home/tengfei/api01/test/TestTo/TODO-orm/venv/bin/gunicorn -b 127.0.0.1:9000 app:app
    directory = /home/tengfei/api01/test/TestTo/TODO-orm
    

    更改配置文件后,要让supervisor的配置文件生效,执行

    supervisorctl reload
    

    启动supervisor:

    sudo service supervisor start
    

    重启:

    sudo service supervisor restart	
    

    查看supervisor程序当前的状态

    sudo supervisorctl
    

    这里面可以使用status指令来查看程序的运行状态

    app名字:就是刚才配置配置文件中[program:app]的,比如我这里输入 start app就可以了,以后同上:
    start app名字 # 启动app
    stop app # 停止app
    

    需要注意的是supervisor发生错误的话,需要它的日志中才能看到

    supervisor错误日志地址:
    /var/log/supervisor/supervisord.log
    

    参考 ubuntu安装和使用supervisor

    Ubuntu安装Curl的方法

    Nginx

    安装
    	sudo apt-get update
    	sudo apt-get install nginx
    
    配置

    nginx的也是把程序运行需要的配置文件放到指定的目录下即可

    cd /etc/nginx
    

    /etc/nginx子目录下,有两个文件要格外关注关注一下:

    sites-available  :可用的配置文件
    sites-enabled		:生效的配置文件
    

    1:先在sites-available 目录下创建配置文件vim api_app

    里面写上:

    # api_app内容
    server {
            listen 81;
    
            location /static {
                    alias /home/tengfei/api01/test/TestTo/TODO-orm/;
            }
    
            location / {
                    proxy_pass http://127.0.0.1:9000;
            }
    }
    

    注,listen 81;:意思是nginx监听的是81端口,我开始监听80端口,结果和默认的冲突了;location /static:是把静态文件转发到后文中的目录下;location / :是把动态请求转发到本机(服务器)的9000端口,上面文件的内容的格式可自行百度。我开始

    然后创建软连接到sites-enabled

    sudo ln -s ../sites-available/api01_app .
    

    然后重新启动nginx

    sudo service nginx reload
    
    //这代表nginx重启成功
     * Reloading nginx configuration nginx                                                       [ OK ] 
    
    使用

    启动

    sudo service nginx restart
    

    重启

    sudo service nginx reload
    

    查看nginx的状态

    sudo service nginx status		
    

    参考:How To Install Nginx on Ubuntu 14.04 LTS

    gunicorn

    安装

    apt-get install gunicorn
    

    使用

    gunicorn -b 0.0.0.0:8080 run:app
    

    尝试在虚拟环境中运行一下程序,看看是否可以成功
    //注意下面语句前面的run是指运行的python文件的的名字为run.py的话,执行run:app,如果为app.py那就是app:app

    参考文档

    Ubuntu 安装mysql和简单操作

    “error: command 'x86_64-linux-gnu-gcc' failed with exit status 1” in virtualenv

    ubuntu下mysql-python模块的安装

    how to install the SQLALchemy on the ubuntu?


    声明本文内容来源于:Flask应用部署与运维

    特地感谢极客学院的shin0922老师,真的受益匪浅,如果涉嫌侵权,请告知我,我将删除文章

  • 相关阅读:
    15.Mysql之undo 日志浅谈02
    14.Mysql之redo log -checkpoint浅谈01
    13. Mysql之二进制日志(binlog)
    [C]使用argv的5种方法
    [Python]sys.stdin.readline(), sys.stdout.write(), sys.stdin.write()
    temporadas[i][2]三种等价形式
    time.h中time(NULL),stdlib.h中srand(), rand()
    strstr函数的使用
    [C]toupper, tolower
    [Python]List Comprehension
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/5642252.html
Copyright © 2011-2022 走看看