學了一段時間flask,可是一直沒有做過部署, 於是想著怎麼部署呢, 想想,先吧服務給搞通吧,於是呢 就先想著去吧服務給搞起來,這裡選擇的是Flask+uwsgi+Nginx+Ubuntu, Python選擇的是2.7.2這個是Ubuntu系統自帶的學起來感覺還是簡單的 不用去軟連,目前自己的fla ...
學了一段時間flask,可是一直沒有做過部署, 於是想著怎麼部署呢, 想想,先吧服務給搞通吧,於是呢 就先想著去吧服務給搞起來,這裡選擇的是Flask+uwsgi+Nginx+Ubuntu, Python選擇的是2.7.2這個是Ubuntu系統自帶的學起來感覺還是簡單的 不用去軟連,目前自己的flask是python3寫的 ,慢慢去過渡,先吧這個給搞通了,那麼在優化也是很順手的。其實對於很多的原理自己也是一知半解,先吧這個給搭起來,慢慢去瞭解裡面的邏輯什麼的。
Nginx
Nginx 是高效的 Web 伺服器和反向代理伺服器,可以用作負載均衡(當有 n 個用戶訪問伺服器時,可以實現分流,分擔伺服器的壓力),與 Apache 相比,Nginx 支持高併發,可以支持百萬級的 TCP 連接,十萬級別的併發連接,部署簡單,記憶體消耗少,成本低,但 Nginx 的模塊沒有 Apache 豐富。Nginx 支持 uWSGI 的 uwsgi 協議,因此我們可以將 Nginx 與 uWSGI 結合起來,Nginx 通過 uwsgi_pass
將動態內容交給 uWSGI 處理。
官方文檔在這
最好的 Nginx 教程在這
uwsgi
uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI伺服器進行交換。 要註意 WSGI / uwsgi / uWSGI 這三個概念的區分。- WSGI看過前面小節的同學很清楚了,是一種通信協議。
- uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI伺服器與其他網路伺服器的數據通信。
- 而uWSGI是實現了uwsgi和WSGI兩種協議的Web伺服器。
sudo apt-get install python-pip
使用 下麵命令去安裝flask
pip install flask
安裝後呢,我們可以去測試下,
import flask
沒有報錯證明我們的flask 是安裝成功的。那麼接下來我們要做的就是安裝ngnix和uwsgi。
sudo apt-get install nginx
安裝好以後,我們可以先啟動下, nginx start 直接命令行啟動,簡單粗暴
這樣我們的nginx就啟動成功了,接下來,我們就是利用pip 去安裝uwsgi
我們安裝好後,那麼接下來就開始開乾吧,
首先我在hellowflak下創建一個app的python的包,
#app/__init__.py from flask import Flask app = Flask(__name__) from app import view
接下來我們去創建view.py
from app import app @app.route('/') def index(): return 'hellow'
那麼我們去在app同級目錄創建hello.py
from app import app if __name__ == "__main__": app.run()
,那麼我們可以在本地利用Python去調試我們的程式,
那麼我們可以在瀏覽器去看看,輸入地址,可以得到這個,這麼來看我們flask程式是沒有問題的。
那麼我們接下來要做的就是讓nginx去承擔web服務。
我這裡做的是簡單粗暴直接刪除nginx的配置文件
$ sudo rm /etc/nginx/sites-enabled/default
接下來,我在hellowflask下創建的一個配置文件
server { listen 8081; server_name 127.0.0.1; charset utf-8; client_max_body_size 75M; location / { try_files $uri @app; } location @app { include uwsgi_params; uwsgi_pass 127.0.0.1:9000; } }
稍作解釋:server_name 可以是功能變數名稱,也可以寫 ip 地址,uwsgi_pass 是表明 Nginx 與 uwsgi 的交流方式。我這裡選擇的是制定的埠號。
那麼我們接下來去軟連我們的這個配置到nginx中去。
sudo ln -s /home/liwanlei/Desktop/hellowflask/helloflask_nginx.conf /etc/nginx/conf.d/
這樣我們再去啟動我們的nginx,
sudo /etc/init.d/nginx restart
這裡的不是welcome了,而是502錯誤呢,因為我們現在的uwsgi文件還沒有配置,也沒有去啟動uwsgi,那麼我們接下來就是要去出來這個uwsgi,下麵的例子是我的配置。
[uwsgi] base = /home/liwanlei/Desktop/hellowflask app = hello #module = %(app) pidfile = /var/run/uwsgi.pid master = true wsgi-file = /home/liwanlei/Desktop/hellowflask/hello.py pythonpath = /usr/bin/python chdir = /home/liwanlei/Desktop/hellowflask socket = 127.0.0.1:9000 callable = app logto = %n.log plugins = python processes = 8 master = true
這時候我們的uwsgi已經配置號,那麼我們去啟動,
sudo /usr/bin/uwsgi --ini/home/liwanlei/Desktop/hellowflask/helloflask_uwsgi.ini
我們去重新啟動我們的nginx,
sudo nginx reload
平滑重啟可以用用,重新載入配置文件,用新的工作進程代替舊的工作進程。
sudo nginx -s reload
啟動後,我這裡修改了地址,這裡就可以直接訪問了,那麼我們的部署這樣就算可以了,簡單的。
完工之後,感覺還是很簡單的 有問題那麼就去看log,只要log配置得當,那麼排除錯誤是很快的。
有疑問可以加我qq:952943386或者我的qq群194704520
希望大家一起沖菜鳥飛到更高