Deploy Flask app to Apache on Windows


內容已過期,分割線以下為原文存檔。


 

故事背景

這次我需要將一個Flask應用部署到本地的Windows服務器上。操作系統是64位的,程序是基於Python 3開發的,大體就是這樣。

部署選項

根據Flask的部署指南,可供選擇的方式還是蠻多的,IIS、Apache、nginx……
本着享受生活不折騰的原則,我們應該選擇標准的方便的用戶多的技術。
再按照頁面上的提示,“Just remember that your Flask application object is the actual WSGI application“,於是,mod_wsgi(Apache)就成了我的不二選擇。

Running mod_wsgi on Windows

在Windows上運行Apache with mod_wsgi需要一些技巧。
有4點是必須嚴格遵守的:

  1. 不能混用32位和64位的文件
  2. 安裝Python時要選擇“Install for all users”
  3. 構建Apache使用的編譯器版本要與構建Python的一致
  4. 構建mod_wsgi使用的編譯器版本要與構建Python的一致

下載
mod_wsgi的下載地址是https://github.com/GrahamDumpleton/mod_wsgi/releases,但不是每一次更新都有預編譯好的二進制文件。
我使用的是mod_wsgi 4.4.12,對應的Python是3.3.5或者3.4.2。
Apache的下載地址是https://www.apachelounge.com/download/VC10/,我使用64位的版本。

安裝
安裝Python時要選擇“Install for all users”。另外,自定義項目里的“Add python.exe to Path”也最好選上。
把Apache24文件夾解壓縮到c:\Apache24。(因為配置文件里是默認的這個路徑,如果要放在別的地方,就自己修改下相應的配置)
ps.為了方便排錯,可以在這里先測試一下Apache是否正常。運行httpd.exe,然后訪問http://localhost/,如果沒有問題應該可以看到測試頁。
把mod_wsgi-py34-VC10.so復制到c:\Apache24\modules目錄下,文件名改成mod_wsgi.so,然后把

LoadModule wsgi_module modules/mod_wsgi.so

添加到配置文件(httpd.conf)里。

測試
將測試文件保存為c:\mydir\myapp.wsgi

1 def application(environ, start_response):
2     status = '200 OK'
3     output = b'Hello World!'
4 
5     response_headers = [('Content-type', 'text/plain'),
6                         ('Content-Length', str(len(output)))]
7     start_response(status, response_headers)
8 
9     return [output]

在配置文件里添加:

1 <VirtualHost *:80>
2     WSGIScriptAlias /myapp c:\mydir\myapp.wsgi
3     <Directory c:\mydir>
4         Require all granted
5     </Directory>
6 </VirtualHost>

重新運行httpd.exe,然后訪問http://localhost/myapp,看到Hello World!就說明安裝成功了。

部署Flask應用

使用pip安裝Flask:

pip install flask

把Flask例程保存為c:\mydir\hello.py

1 from flask import Flask
2 app = Flask(__name__)
3 
4 @app.route("/")
5 def hello():
6     return "Hello World!"
7 
8 if __name__ == '__main__':
9     app.run()

mod_wsgi要求WSGI應用的入口叫“application”,所以我們還需要創建一個.wsgi文件來做轉換。把下面的代碼保存為c:\mydir\myapp.wsgi

1 import sys
2 sys.path.insert(0, 'c:\\mydir')
3 from hello import app as application

將c:\mydir加入系統環境的Path變量是為了確保我們的hello模塊可以被解釋程序找到。
重啟Apache,查看一下配置好的成果吧。

擴展閱讀

Running Apache as a Service

Working with Virtual Environments

Running mod_wsgi on Windows

 


免責聲明!

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



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