Flask+uwsgi+Nginx+Ubuntu部署

    學了一段時間flask,但是一直沒有作過部署, 因而想着怎麼部署呢, 想一想,先吧服務給搞通吧,因而呢 就先想着去吧服務給搞起來,這裏選擇的是Flask+uwsgi+Nginx+Ubuntu, Python選擇的是2.7.2這個是Ubuntu系統自帶的學起來感受仍是簡單的 不用去軟連,目前本身的flask是python3寫的 ,慢慢去過渡,先吧這個給搞通了,那麼在優化也是很順手的。其實對於不少的原理本身也是隻知其一;不知其二,先吧這個給搭起來,慢慢去了解裏面的邏輯什麼的。html

Nginx

Nginx 是高效的 Web 服務器和反向代理服務器,能夠用做負載均衡(當有 n 個用戶訪問服務器時,能夠實現分流,分擔服務器的壓力),與 Apache 相比,Nginx 支持高併發,能夠支持百萬級的 TCP 鏈接,十萬級別的併發鏈接,部署簡單,內存消耗少,成本低,但 Nginx 的模塊沒有 Apache 豐富。Nginx 支持 uWSGI 的 uwsgi 協議,所以咱們能夠將 Nginx 與 uWSGI 結合起來,Nginx 經過 uwsgi_pass 將動態內容交給 uWSGI 處理。python

官方文檔在nginx

最好的 Nginx 教程在web

uwsgiflask

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。瀏覽器

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。bash

  • WSGI看過前面小節的同窗很清楚了,是一種通訊協議。服務器

  • uwsgi是一種線路協議而不是通訊協議,在此經常使用於在uWSGI服務器與其餘網絡服務器的數據通訊。網絡

  • 而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。併發

uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每個uwsgi packet前4byte爲傳輸信息類型描述,它與WSGI相比是兩樣東西。

 

  準備工做,首先呢,咱們先去安裝咱們須要的包,首先呢  我這裏是我新裝的系統,因此沒有pip,因此我先來去安裝pip

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__.pyfrom 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 appif __name__ == "__main__":
    app.run()

,那麼咱們能夠在本地利用Python去調試咱們的程序,

那麼咱們能夠在瀏覽器去看看,輸入地址,能夠獲得這個,這麼來看咱們flask程序是沒有問題的。

那麼咱們接下來要作的就是讓nginx去承擔web服務。

我這裏作的是簡單粗暴直接刪除nginx的配置文件

$ sudo rm /etc/nginx/sites-enabled/default

接下來,我在hellowflask下建立的一個配置文件

複製代碼

server {
listen 3389;
server_name 60.205.187.178 www.lileilei.online;
charset utf-8;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9160;
uwsgi_param UWSGI_PYTHON /usr/bin/python;
uwsgi_param UWSGI_CHDIR /home/flask_blog-python3;
uwsgi_param UWSGI_SCRIPT hello:application;

}

複製代碼

稍做解釋: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/flask_blog-python3
pidfile = /var/run/uwsgi.pid
master = true
wsgi-file = hello.py
chdir = /home/flask_blog-python3
socket = 127.0.0.1:9160
callable = application
logto = %n.log
processes = 10
master = true 
workers=10
enable-threads = true

py-autoreload = 1

複製代碼

這時候咱們的uwsgi已經配置號,那麼咱們去啓動,

sudo /usr/bin/uwsgi --ini/home/liwanlei/Desktop/hellowflask/helloflask_uwsgi.ini

咱們去從新啓動咱們的nginx,

sudo nginx reload
平滑重啓能夠用用,從新加載配置文件,用新的工做進程代替舊的工做進程。
sudo nginx -s reload

啓動後,我這裏修改了地址,這裏就能夠直接訪問了,那麼咱們的部署這樣就算能夠了,簡單的。
 

完工以後,感受仍是很簡單的 有問題那麼就去看log,只要log配置得當,那麼排除錯誤是很快的。

我已經成功的把我寫的部署到了阿里雲上面。 

增長supervisor管理,當chrash了,能夠自動重啓

安裝後/etc/supervisor/conf.d/ 配置一個文件,以下 簡單配置

command=uwsgi /home/flask/flask_blog-python3/helloflask_uwsgi.ini
autostart=ture
autorestart=true
stdout_logfile=/home/flask/flask_blog-python3/uwsgi_supervisor.log
user=root
配置後啓動

service supervisor start

終止服務

service supervisor stop

wKiom1l3RJmhhKWuAACePwunRzA478.jpg-wh_50

相關文章
相關標籤/搜索