国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Flask+Gunicorn+Nginx部署

2019-11-14 16:59:21
字體:
來源:轉載
供稿:網友

最近很多朋友都在問我關于 Flask 部署的問題,說實在的我很樂意看到和回答這樣的問題,至少證明了越來越多人開始用 Flask 了。

之前我曾發表過一篇在 Ubuntu 上用 uwsgi + nginx 的 Flask 部署方法,說實在的 uwsgi 是個大坑可能用在 Django 上還好吧,不過用在 Flask 上未必就如此。至少 , uwsgi 是個極為折騰人的東西。總之,我是一直認為復雜的東西未必不好,但一定是不好用的。

我自己也經過多番的糾結與嘗試,也終于找到了一個 Flask 上靠譜的部署方案。我現在公司的微信后端平臺也采用這種部署方案。如果有興趣的朋友也不妨一看,或者給我提些更好的方案,畢竟知識只有共享了才知道是否有價值。

我在 Flask 官方文檔中找到其中一個有意思的內容,這里是原諒鏈接:Standalone WSGI Containers ,其中并沒有 uwsgi 的身影。悻然,但是找到了一個不用折騰的 Flask 部署方案了 —— Gunicorn。

Ubuntu 上的準備

假定你是在騰迅云或者阿里云購買了VPS,那么直接執行以下指令吧,其它的不多解釋了,無非就是準備一下 python 環境。

$ sudo apt-get update$ sudo apt-get install python-dev python-pip python-virtualenv

然后安裝 nginx

$ sudo apt-get install nginx

/var/www 目錄下建立一個 myflask 的文件夾(你的項目目錄),然后用 chmod 改一下權限

$ sudo mkdir /var/www/myflask$ sudo chmod 777 /var/www/myflask

注:當然你可以使用 nginx 的默認網站目錄 /usr/share/nginx/html

然后用 scp 指令直接將本機上的 flask 項目傳到服務器:

$ scp -r myflask root@www.mydomain.com:/var/www/myflask

域名就改成地址或者你的服務器正在使用的域名,我這里是用 root 用戶進入的,你得按你的服務器的用戶來修改。兩大云的默認根用戶是:

  • 騰迅 :ubuntu
  • 阿里 :root

Gunicorn

Gunicorn 綠色獨角獸 是一個Python WSGI UNIX的HTTP服務器。這是一個PRe-fork worker的模型,從Ruby的獨角獸(Unicorn )項目移植。該Gunicorn服務器大致與各種Web框架兼容,只需非常簡單的執行,輕量級的資源消耗,以及相當迅速。

我曾經Google 過 Gunicorn 與 uwsgi ,都說uwsgi 的性能要比 gunicorn 高,所以最終結果就杯具了。不過,現在回過頭來看這只 “獨角獸”還為時不晚吧。

安裝 Gunicorn

Gunicorn 應該裝在你的 virtualenv 環境下,關于 virtualenv 就不多說了,如果沒用過那就趕快腦補吧。安裝前記得激活 venv

(venv) $ pip install gunicorn

運行 Gunicorn

(venv) $ gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

That's all! 它的安裝就這么簡單。不過這里得作一個解釋。就是最后的那個參數 wsgi:application 這個是程序入口,我得寫個小小的范例來說明一下:

新建一個 wsgi.py 的文件, 注意,這里和 Flask 項目中常用的 manage.py 引導腳本是沒有半點毛關系的。(這是我笨,以前一直沒分清被uwsgi搞糊涂了)

# wsgi.pyfrom flask import Flaskdef create_app():  # 這個工廠方法可以從你的原有的 `__init__.py` 或者其它地方引入。  app = Flask(__name__)  return appapplication = create_app()if __name__ == '__main__':	application.run()

好了,這個 wsgi:application 參數就很好理解了, 分兩部:wsgi 就是引導用的 python 文件名稱(不包括后綴/模塊名)application 就是 Flask 實例的名稱。這樣 gunicorn 就會找到具體要 host 哪一個 flask 實例了。

從這里開始就可以體現 gunicorn 的好了,我們根本不用配什么配置文件的,一個指令就可以將它起動。

Nginx 的配置

關于 Nginx 我也就不詳細講了,我們就直奔主題,殺入 Nginx 的默認配置文件

sudo nano /etc/nginx/site-avalidable/default

暴力修改成為以下的內容

建議先備份一下 default 文件
sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak

server {    listen 80;    server_name example.org; # 這是HOST機器的外部域名,用地址也行    location / {        proxy_pass http://127.0.0.1:8080; # 這里是指向 gunicorn host 的服務地址        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }  }

記得完成 nginx 需要重新起動 nginx 服務喔!

sudo service nginx restart

將 Gunicorn 作為服務運行

這就是最后一步了,我們在此將采用 UpStart 配置Flask程序作為服務程序在linux起動時運行。首先建立起動配置文件:

sudo nano /etc/init/myflask.conf

然后加入如下配置

description "The myflask service"start on runlevel [2345]stop on runlevel [!2345]respawnsetuid rootsetgid www-dataenv PATH= /var/www/myflask/venv/binchdir /var/www/myflask/exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

OK 大功告成,啟動 myflask 服務

sudo service myflask start

這里有一點必須補充的,請留意在 myflask.conf 中的

env PATH= /var/www/myflask/venv/binchdir /var/www/myflask/

這里所指向的地址就是你的項目路徑和 virtualenv 的路徑

小結

這個部署過程感覺比我之前所介紹的 uwsgi 那種簡單很多吧。這里給一點小 Tips 如果你用 Fabric 來完成這個部署過程的話那么就是純自動化部署了喔,值得嘗試的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿勒泰市| 海安县| 托克托县| 临夏县| 栖霞市| 六安市| 盐城市| 吕梁市| 玛曲县| 贵港市| 大冶市| 博白县| 凌海市| 汉中市| 黄石市| 浪卡子县| 新晃| 泰顺县| 阜新市| 怀集县| 满洲里市| 健康| 太康县| 神木县| 霍城县| 华安县| 新泰市| 云霄县| 巴彦淖尔市| 兴化市| 四川省| 兴安县| 宜兰市| 石渠县| 江油市| 托克逊县| 女性| 禄丰县| 徐水县| 海安县| 晋州市|