Flask+uwsgi+Nginx+Ubuntu部署

来源:http://www.cnblogs.com/leiziv5/archive/2017/07/08/7137277.html
-Advertisement-
Play Games

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

希望大家一起沖菜鳥飛到更高


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 概述 1.EL Expression Language,表達式語言,一種不同於編程語言的語言,用於訪問對象或者為對象賦值,取代JSP頁面中嵌套的java代碼,使頁面風格統一。 2.語法格式 expression既可以是屬性,也可以是字面值,還可以是算術表達式、關係表達式、邏輯表達式、條件表達式等 ...
  • 今天第一次接觸java的網頁編程,因為我之前是學習php的。所以學習jsp的話感覺是很相似的。第一次入門的程式是混編的形式,和php的用法相識,java規定的嵌入語言是用<% %>來表示是java的代碼,而php的話是使用<?php ?>來表示php的代碼塊。 這次的學習的效果如下: 代碼如下: 在 ...
  • 題目背景 很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。 題目描述 不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫一個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績 輸入輸出格式 輸入格式: 第一行,有兩個正整數 N 和 ...
  • 動態代理案例1:/*要求:運用Proxy動態代理來增強方法題目: 1.定義介面Fruit,其中有addFruit方法 2.定義實現類FruitImpl,實現Fruit介面 3.定義測試類,利用動態代理類的方式,增強addFruit方法*/ 1 import java.lang.reflect.Pro... ...
  • 文件內容如下: 現在看如何處理並轉成列表! 輸出結果如下: ...
  • K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 57427 Accepted: 19856 Case Time Limit: 2000MS Description You are working for ...
  • JSP的本質是Servlet源程式 每個JSP頁面在第一次被訪問時,JSP引擎將它翻譯成一個Servlet源程式,接著再把這個Serlvet源程式編譯成Servlet的class類文件。 然後再由Web容器(Servlet引擎)像調用普通Servlet程式一樣的方式來裝載和解釋執行這個Servlet ...
  • 一、簡介 subprocess最早在2.4版本引入。用來生成子進程,並可以通過管道連接他們的輸入/輸出/錯誤,以及獲得他們的返回值。 subprocess用來替換多個舊模塊和函數: os.system os.spawn* os.popen* popen2.* commands.* 運行python的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...