1. 程式人生 > >nginx+uwsgi阿裏雲ubuntu服務器上簡單部署flask RESTful風格項目

nginx+uwsgi阿裏雲ubuntu服務器上簡單部署flask RESTful風格項目

epo gin 16px ppa posit 所在 機制 led 6.0

ubuntu16.04上利用Nginx代理uwsgi處理Flask web應用

1、環境要求

  ubuntu16.04 ---- 阿裏雲的服務器

  Nginx

  python2

  uwsgi

2、簡單介紹Nginx

  nginx是一個高性能的http和反向代理的服務器,Nginx采采用的epoll的機制,而沒有使用select和poll,雖然,在用戶活躍數量比較高的時候,epoll性能不如select,但是,我們用Nginx來作為web服務器還是很不錯的。nginx是一個輕量級的web服務器,他占用內存少,並發能力強,非常適合作為靜態資源的服務器使用。

  apt-get安裝nginx:

    

    sudo apt-get update
    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:nginx/stable
    sudo apt-get update
    sudo apt-get install nginx

   安裝完成後,打開瀏覽器訪問你的服務器,如果看到了nginx的歡迎頁,說明你安裝成功了,如果沒有看到歡迎頁,也不用著急,先檢查自己的阿裏雲服務器的安全組規則中是否允許了80端口,如果沒有,直接添加安全組規則。

  添加安全組規則方法鏈接:https://jingyan.baidu.com/article/fea4511a2e387cf7bb912532.html

3、簡單介紹uWsgi

  uwsgi是一個web服務器,它實現了wsgi、uwsgi、http等協議。

  uwsgi可以理解為Nginx和flask項目之間的橋梁,當nginx發現用戶請求的不是static文件時,他就請求uwsgi,uwsgi又將請求拋給了flask,flask找到相應的api然後返回。

  安裝uwsgi:pip install uwsgi

  讓我們從一個簡單的”Hello World”開始:

  def application(env, start_response):
      start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
      return [b"Hello World"]

  (將其保存為 foobar.py)。

  正如你所見,它由一個簡單的Python函數組成。之所以稱之為 “application”,是因為它是uWSGI Python加載器將會搜索的默認函數 (但你顯然可以自定義)。

  將其部署在http端口9090,如果是阿裏雲服務器需要註意,添加9090端口到安全組

  現在,啟動uWSGI來運行一個HTTP服務器/路由器,它會傳遞請求到你的WSGI應用:

  uwsgi --http :9090 --wsgi-file foobar.py

4、線上調式flask項目

  確保項目所需文件都安裝完成,使用flask自帶的web應用服務器Werkzeug運行項目

  如果項目運行失敗,請自行檢查問題所在

  註意:添加端口到安全組

5、配置uwsgi

  確定nginx,uwsgi都安裝正常,同時flask也能正常運行。

[uwsgi]
socket = 127.0.0.1:8080    #配置nginx
chdir = /home/python/app    #配置項目目錄
module = manage   #加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH裏)
wsgi-file = manage.py   #配置入口模塊
master = True   #開啟master
callable = app   #設置在收到請求時,uWSGI加載的模塊中哪個變量將被調用,默認是名字為“application”的變量
processes = 1   #配置進程數
threads = 1   #配置線程數
vacuum = true   #推出是清空變量環境
daemonize = wsgi.log   #配置守護進程
pidfile=uwsgi.pid   #進程pid

6、配置nginx

  如果按照我的方法,用apt安裝的話,配置文件應該在/etc/nginx/sites-enabled/目錄下有個defalut文件,我們就直接修改這個文件,當然 ,在修改前最好先備份一下。

  a、首先將下面的代碼註釋掉

     #location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
        #}

  b、添加一下代碼(註意:一定要確保自己的項目目錄下存在logs/access.log和logs/error.log兩個文件夾,不然nginx將會報錯

    location /api  將符合/api的請求轉給uwsgi處理

    location /   指定靜態文件處理時的目錄 (註意:用alias的話,路徑的末尾一定要加/,不然會找不到報forbidden錯誤

     access_log  /home/python/app/logs/access.log;
        error_log  /home/python/app/logs/error.log;
        location /api {
            include        uwsgi_params;
            uwsgi_pass     127.0.0.1:8080;
        }
        location /{
            alias /home/python/app/www/static/html/;
        }

  

nginx+uwsgi阿裏雲ubuntu服務器上簡單部署flask RESTful風格項目