使用 uWSGI 在 Nginx 上部署 Flask 網站

創建 Flask 應用程序後,您會發現包含的 Web 服務器最適合開發。 在本指南中,您將了解如何在雲服務器實例上託管 Flask 應用程序Debian10 帶有 Nginx Web 服務器、用於 SSL 的 Certbot 和 uWSGI 應用服務器。

以前的要求

  • 完全更新的 Debian 10 服務器
  • 服務器上的root權限
  • 註冊域名是可選的,但建議使用。

您可以在沒有域名的情況下使用本教程本地服務器在 Nginx 配置步驟中。 您將無法安裝有效的 SSL 證書,因此請跳過 Certbot 說明。

1.安裝Nginx

  1. 安裝 Nginx 包。

                              
                                # apt install nginx
    
                              
                            
  2. 通過在瀏覽器中瀏覽到服務器的 IP 地址來測試 Nginx。 驗證 Nginx 網頁是否出現。

  3. 如果您有註冊域,請為您的服務器設置 DNS 條目。 本教程使用以下值:

    • IPv4 地址:192.0.2.123
    • 服務器名稱:例子.com&www.googlesyndication.com

2.配置Flask和uWSGI

  1. 安裝 uWSGI 和 Flask。

                              
                                # apt install python3-pip python-dev
    # pip3 install uwsgi flask
    
                              
                            
  2. 創建網站主目錄。

                              
                                # mkdir /var/www/example
    
                              
                            
  3. 如果您有要部署的 Flask 應用程序,請將其移至/var/www/示例目錄。

    或者,您可以創建一個簡單的 Flask 應用程序來嘗試本指南。

                              
                                # nano /var/www/example/main.py
    
                              
                            

    粘貼:

                              
                                from flask import Flask
    app = Flask(__name__)
    
    @app.route("https://www.vultr.com/")
    def index():
    return "Hello World!"
    
    if __name__ == "__main__":
    app.run(host="0.0.0.0")
    
                              
                            
  4. 去創造配置-uwsgi.ini對於 uWSGI。

                              
                                # nano /var/www/example/config-uwsgi.ini
    
                              
                            

    粘貼:

                              
                                [uwsgi]
    
    app = main
    module = %(app)
    callable = app
    
    socket = /var/www/example/example.sock
    chdir = /var/www/example
    chmod-socket = 666
    
    processes = 4
    die-on-term = true
    
                              
                            

    流程對於較大的服務器,該行可以設置得更高。

3.配置Nginx

  1. 刪除默認的 Nginx 配置。

                              
                                # rm /etc/nginx/sites-enabled/default
    
                              
                            
  2. 創建一個新的 Nginx 配置文件。

                              
                                # nano /var/www/example/config-nginx.conf
    
                              
                            

    粘貼以下內容。 如果您沒有註冊域名,請使用本地服務器經過服務器名稱而不是 googlesyndication.com 和 www.googlesyndication.com。

                              
                                server {
    
        listen 80;
        listen [::]:80;
    
        server_name googlesyndication.com www.googlesyndication.com;
    
        location / {
            include uwsgi_params;
            uwsgi_pass unix:/var/www/example/example.sock;
        }
    }
    
                              
                            
  3. 創建一個從 Nginx 配置到 conf.d 目錄。

                              
                                # ln -s /var/www/example/config-nginx.conf /etc/nginx/conf.d/
    
                              
                            
  4. 重啟 Nginx。

                              
                                # systemctl restart nginx
    
                              
                            

4.運行uWSGI

  1. Nginx 配置為將流量代理到 uWSGI,但該服務尚未運行。 使用 nohup 啟動 uWSGI。

                              
                                # nohup uwsgi /var/www/example/config-uwsgi.ini &
    
                              
                            
  2. 按 CTRL + C 發送 SIGINT 信號並查看進程仍在後台運行。 對於生產使用,我們建議在 systemd 下啟動時運行 uWSGI.

  3. 在 Web 瀏覽器中導航到您的站點並確認您看到消息“Hello world!” 信息。

5.安裝SSL證書

如果您有公共域名,請使用 Certbot 使用免費的 Let's Encrypt 證書為 HTTPS 配置 Web 服務器。

  1. 安裝 Cerbot。

                              
                                # apt install certbot python-certbot-nginx
    
                              
                            
  2. 申請 SSL 證書。

                              
                                # certbot --nginx
    
                              
                            
  3. 在 Certbot 提示時回答問題並同意服務條款。

  4. Certbot 會詢問您哪些域名應該支持 SSL,按 ENTER 選擇所有名稱。
  5. 出現提示時,選擇將 HTTP 流量重定向到 HTTPS。

結論

遵循這個初學者教程後,您的 Nginx Web 服務器正在 uWSGI 中運行 Flask 應用程序,並受 Certbot 保護。 對於完全生產使用,您還應該在啟動時以具有有限權限的普通用戶身份運行 uWSGI。 看著uWSGI 最佳實踐文件燒瓶了解更多信息。

文章標題 名稱(可選) 電子郵件(可選) 描述

發送建議

相關文章