如何將 Flask 系統安裝在 Apache 下如何將 Flask 系統安裝在 Apache 下

Flask application 是一套成長快速的 web framework。它的核心小,擴充性佳。對中小型的系統來說,是很方便的工具。 如果你對使用 Flask 開發有興趣,可以參考官方的教學文件。在未來,我也會逐一向大家介紹說明。

本篇文章主要是用來說明,如何將已開發完成的 Flask application 安裝在 Apache 下。觀看實際的 demo. (http 自動轉向到 https, 並啟動 Flask application ) . 這樣做的目的,或是好處:

  1. 你可以將你所有開發的系統,都掛在同一個網域(domain) 下。就如同本站,只有一個 comhawk.com 的網域. 使用 WordPress 架設官網的 Blogs, Shopping mall ,但同時也使用 Flask 來開發大數據分析、股票分析網站。此時,用 apache 管理就很方便。
  2. Apache 在支援 https 上很容易。所以,同一個環境下的系統,都可以同時支援。
  3. 透過 Apache,當伺服器重啟時,所有的應用系統都會被一起重新啟動。你不用再將 Flask Application 設定成 service。

但完成這樣的設定,你需要做非常多的設定(只要用到的功能,都需要設定,但比個別系統設定方便很多)。以下是設定的項目及說明:

  1. 安裝 mod_wsgi 模組。 WSGI 不是伺服器,也不是用於與程式互動的API,更不是真實的程式碼,WSGI 只是一種介面,它只適用於 Python 語言,其全稱為 Web Server Gateway Interface。
  2. 接著要啟動 mod_wsgi 模組。它是 Apache 的一個模組,所以只要使用 a2enmod wsgi 就可以啟動。啟動後,你在 /etc/apache2/mods_enabled 目錄下,就會看到 wsgi.conf / wsgi.load 兩個檔案。
  3. 建立 Flask Applciation。在 /var/www 目錄下,你可以建立一個涵蓋未來所有 Flask applications 的主目錄。因為實務上,不同的系統,會載入各自所需的 modules or packages。所以,你會看到大部份的文章,都會建議你安裝 virtualenv。
  4. 這是一個重要的步驟。你為不同的 Flask application 建立不同的虛擬環境。指令: virtualenv -p /usr/bin/python3 <folder_name>. 會將虛擬機建立在指定目錄下。
  5. 進入指定目錄,建立 Flask application。
  6. 在指定目錄下,建立 WSGI 檔。這也是一個很重要的步驟。在這個檔案裏,你要指定虛擬主機執行的程式位置(有的人會在 Apache site-config 檔裏使用 python-path 指定);以及 Flask application 的進入點。
  7. 建立 site-config。這個檔案,是為了讓 Apache server 管理你的 web applications. 路徑是在 /etc/apache2/sites-available 下。預設是 000-default.conf。在這個檔中,你要定義 daemon process group;以及指定 WSGI 應用程式應該在定義的 daemon process group 中執行;指定 Flask Application 的別名( /prefix) 及目錄。
  8. 如果你有啟動 SSL 的功能。WSGI daemon process 的設定,就要移到 default-ssl.conf 中。

執行結果:

@app.route(‘/’)
@app.route(‘/river’)

注意:

在 Flask 中,主程式的執行呼叫,只要使用 app.run() 即可。Apache 會幫你處理其他的細節設定。如果你有多個系統,要指定不同的 port number。

在設定的過程中,應該會出現一些錯誤。你要知道如何去除錯。你會用到除錯的訊息紀錄,在以下三個地方:

  1. Apache log: in /var/log/apache2/error.log
  2. Apache 啟動狀態: sudo systemctl status apache2.service
  3. Flask running error: 直接使用 web browser 顯示

Leave a Reply

Your email address will not be published.

Apache2

如何在 Ubuntu 上使用一個IP,多個網域的設定如何在 Ubuntu 上使用一個IP,多個網域的設定

Know-How 在 Apache2 上, 如何使用多個網域, Domains, 指向同一台機器或 IP 你想了解的是… 對網站開發或管理人員來說, 資料的管理與運用, 是你重要的績效.  不管是來自客戶, 或是來自於你的主管的要求. 希望你可以在同一台主機上, 安裝多個網站. 讓資源做最大的利用. 以下我會針對不同的場景, 來解釋如何配置不同的 Web Server.  測試的環境 OS : Ubuntu . 指令 lsb_release -a No LSB