2018年7月26日 星期四

躲在 apache2 後面的 flask 範例, 含上傳檔案

flask 躲在 apache 後面, 銜接 ML/DL/AI 引擎 github 上面很多 ML/DL/AI 程式都以 python 撰寫, 可以從命令列執行。 但如果想要佈署, 例如想讓樹莓派可以把野外蒐集到的畫面或聲音傳回伺服器用 AI 程式判讀/分類, 那該怎麼辦呢? 常見的方法是用 flask 架一個簡單的 web server。 Flask 是 python 的一個模組, 所以從那裡要接上 python 所寫的 ML/DL/AI 引擎很方便。 Flask 單獨作為 web server 的方法很簡單, 請見 中文教學 官網。 但若你的伺服器已有 apache2, 要怎樣才能把 flask 接上去呢?

我們即將在 apache 的 /var/www 目錄底下建立兩個子目錄, 一個叫做 hello, 另一個叫做 upload。 希望等一下用 browser 連到 http://localhost/hello/ 跟 http://localhost/upload/ 會分別看到兩個簡單的 flask 範例頁面。 最終我們的伺服器內的擺設將長得像上圖一樣: apache2 透過 mod-wsgi 模組連到 flask; 以後如果需要, 再修改 flask 程式, 呼叫 ML/DL/AI 引擎。

  1. 安裝 web-server gateway interface 模組: apt-get install libapache2-mod-wsgi ; a2enmod wsgi ; systemctl restart apache2
  2. 雖然 ubuntu 已把 flask 包進去; 但若用 pip 安裝, 有較多版本可選, 包含最新的版本。 先查看 flask 有哪些版本可安裝: pip install flask==
  3. 那就直接安裝最新版吧: pip install flask
  4. 把我寫的 flask.tgz 抓回去、 解壓縮: tar xzf /tmp/flask.tgz -C /

設定檔 /etc/apache2/conf-enabled/flask.conf 把這一切串起來。 hello/ 跟 upload/ 分別是兩個獨立的 flask 應用程式。 hello/ 很簡單, 只顯示兩個中文字。

upload/ 則展示如何上傳檔案。 使用之前, 先 chown www-data:www-data /var/www/upload/files/ 這樣 apache2 才有權限可以把訪客上傳的檔案寫進 /var/www/upload/files/ 。 然後把瀏覽器指向 http://localhost/upload/ , 點 「瀏覽」 選一個 .txt 或 .csv 檔, 再按 「upload」 上傳。 會顯示目前已上傳的檔案清單。 如果要寫 script 上傳檔案, 可以用 curl: curl -L -F 'file=@test.csv' http://localhost/upload/ 檔名前面的 @ 是固定的, 不可省略; 前面的 file= 的 file 則是 form 表格裡上傳檔案欄位的名稱。

upload 的程式碼是從 這個 gist 抓來改的。 關於 upload 的更多說明請參考 官網 upload 說明的非官方簡中翻譯

沒有留言:

張貼留言