python部署-Flask+uwsgi+Nginx


一、Flask部分(app.py)

flask即Python代碼:部分參考代碼如下,相信很多人如果看到這篇文章一定有flask的代碼能力。

from app import create_app
from singtec_Config import *

app = create_app(DEV_MODEL)

@app.route('/')
def hello_world():
    return 'Hello World!!!'


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8000)

 

二、uwsgi部分(uwsgi.ini)

簡單介紹一下uwsgi:在python web開發中,我們經常使用uwsgi配合nginx部署一個web框架,如Djangoflask。同時我們又會說,框架和web服務器之間要符合WSGI協議。那就來厘清一下這幾個概念。

1、web服務器和web框架

  web服務器即用來接受客戶端請求,建立連接,轉發響應的程序。至於轉發的內容是什么,交由web框架來處理,即處理這些業務邏輯。如查詢數據庫、生成實時信息等。Nginx就是一個web服務器,Djangoflask就是web框架。

2、WSGI和uwsgi

  WSGI是一種通信協議。WSGI 不是框架,也不是一個模塊,而是介於 Web應用程序(Web框架)與 Web Server 之間交互的一種規范。

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

  uwsgi是一種通信協議,不過跟WSGI分屬兩種東西,該協議下速度比較快。

[uwsgi]
# 如果使用nginx就用socket
socket
=0.0.0.0:8000

# 如果不使用socket,直接用uwsgi啟動程序,就是用http
#http=0.0.0.0:8000

# 如果程序中有文件下載,圖片、視頻等就需要就上這個配置
sgi-disable-file-wrapper=true

# flask程序在你服務器上的目錄
chdir=/opt/www/singtec/www/singtecProject

# flask項目的啟動文件
wsgi-file=manage.py
# 啟動文件中的flask app(即第一部分中的app)
callable
=app

# 啟動的進程數 processes
=4

#啟動的線程數 threads=2

# 是否啟動多線程 enable-threads=True

# 是否將uwsgi的運行線程設置為主線程,如果設置為主進程,在開啟的其他的子進程會隨着主進程關閉而關閉 master
=True

# 設置用來記錄uwsgi進程號的文件 pidfile
=uwsgi.pid

# 設置uwsgi運行的日志文件(可以記錄程序運行的) daemonize
=uwsgi.log

#在每個worker而不是master中加載應用 lazy
-apps=true

# 設置編碼(不是必須) env LANG
="en_US.UTF-8" env LANGUAGE="en_US.UTF-8"

 

三、nginx部分

  簡單介紹一下nginx:Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作為一個HTTP服務器進行網站的發布處理,另外Nginx可以作為反向代理進行負載均衡的實現。

常用功能:反向代理、正向代理、負載均衡、服務器的動靜分離、高可用等,這里就不一一介紹了,主要介紹一下關於uwsgi的配置。

# 設置用戶
user root;
# 設置worker及可以理解為進程或者線程數 worker_processes
4;
# 日志設置 error_log logs
/error.log; error_log logs/error.log notice; error_log logs/error.log info;
# 每個worker的最大連接數 events { worker_connections
1024; } # http全局設置 http {

# 設置mine.type類型 include mime.types; default_type application
/octet-stream;   
  # 日志格式 log_format main
'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
  # 運行日志 access_log logs
/access.log main;

  # 如果有上傳文件,例如視頻或者圖片,限制文件傳輸大小的
client_max_body_size 100M;  
    # 服務器級別的設置
    server {

     # 設置監聽端口 listen
80;
     # 設置訪問的域名 server_name localhost;

     # 請求級別的設置 

     # /便是監聽什么參數都沒有的根目錄請求

     location / {

       # 設置請求的根目錄

       root   /opt/www/singtec;

          # 設置根目錄的請求靜態index.html

            index  index.html index.htm;

         # 一下兩行是設置請求的時候解析真實地址的

            proxy_set_header X-Real-IP $remote_addr;

 
         

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

     # 設置監聽請求以api開頭的接口

        location /api{

 
         

            # 設置導入uwsgi_params文件(通常在nginx安裝的時候,默認和nginx.cong文件在同一個目錄下)

            include /usr/local/nginx/conf/uwsgi_params;

          # 設置nginx的反向代理路由,只要請求api開頭的都去訪問0.0.0.0:8000程序,及我們的flask程序的接口,實現uwsgi的反向代理

            uwsgi_pass 0.0.0.0:8000;

        }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM