首頁  >  文章  >  後端開發  >  Python中關於部署的詳細介紹

Python中關於部署的詳細介紹

零下一度
零下一度原創
2017-07-23 10:09:581538瀏覽

   學了一段時間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伺服器。
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      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中去。

<code class="hljs groovy">sudo ln -s <span class="hljs-regexp"><span class="hljs-regexp">/home/liwanlei/Desktop/hellowflask/<span class="hljs-regexp">helloflask_nginx.conf /etc<span class="hljs-regexp">/nginx/conf.d/<br>这样我们再去启动我们的nginx,</span></span></span></span></code>
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:9000callable = app
    logto = %n.log
    plugins = python
    processes = 8master = true
這時候我們的uwsgi已經設定號,那麼我們就去啟動,

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

我们去重新启动我们的nginx,

<code class="hljs bash">sudo nginx <span class="hljs-_">reload<br>平滑重启可以用用,重新加载配置文件,用新的工作进程代替旧的工作进程。<br></span></code>
sudo nginx -s reload
<code class="hljs bash"><span class="hljs-_"><br>启动后,我这里修改了地址,这里就可以直接访问了,那么我们的部署这样就算可以了,简单的。<br><img src="https://img.php.cn/upload/article/000/000/001/25f4d9be3a729ae5fc17c2fefb915c9c-3.jpg" alt=""></span></code>
 <br>

完工之后,感觉还是很简单的 有问题那么就去看log,只要log配置得当,那么排除错误是很快的。

以上是Python中關於部署的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn