一、前言
開發完Flask的項目之后,需要進行部署使用。在部署的過程中,遇到了很多的麻煩,很是心塞,最終部署成功。記錄下來,或許可以給需要在Windows上部署Flask項目的朋友們作為參考。
二、部署過程
本次部署采取的方案為:virtualenv+apache+mod_wsgi
需要注意的是:Python,Apache和mod_wsgi應該都為32位或者64位,不能混用;而且Apache和mod_wsgi要是相同版本的C/C++編譯器生成的。
1. virtualenv
使用virtualenv的理由:
- 隔離項目之間的第三方包依賴,不同項目依賴于不同的第三方包
- 部署應用方便,把開發環境的虛擬環境直接打包到生產環境即可
我用的是python2.7 64,cmd下:
- 安裝virtualenv:
pip install virtualenv
- 新建虛擬環境:
virtualenv E:\virtualenv\ikmap
- cd進入E:\virtualenv\ikmap\Scripts目錄,輸入:
activate
激活虛擬環境 - 安裝項目依賴包:
pip install -r requirements.txt
(requirements.txt是自己項目導出的)
2. Apache
我用的是Apache2.4.27 VC9 64:
- 解壓到E:\Apache24
- 修改配置文件conf\httpd.conf:
Define SRVROOT "E:\Apache24"
Listen 80
- cmd管理員身份運行,進入E:\Apache24\bin目錄:
httpd -k install -n Apache24
# 安裝Apache服務
httpd -k uninstall -n Apache24
# 卸載Apache服務 - 啟動Apache服務,瀏覽器輸入:http://127.0.0.1:80 測試Apache是否成功安裝。
3. mod-wsgi py27 VC9 64
- 將mod-wsgi.so文件拷貝至E:\Apache24\modules下
- 修改配置文件conf\httpd.conf,引入:
LoadModule wsgi_module modules/mod_wsgi.so
- 重新啟動Apache服務,啟動成功,Apache服務描述處有mod_wsgi等字樣
4. 創建.wsgi文件
- 在自己項目的啟動文件的相同路徑下新建一個.wsgi結尾的文件,我的是app.wsgi:
activate_this = "E:/virtualenv/ikmap/Scripts/activate_this.py" # 虛擬環境激活文件
execfile(activate_this, dict(__file__=activate_this))
import site
import sys
# Remember original sys.path.
prev_sys_path = list(sys.path)
# Add site-packages directory.
site.addsitedir('E:/virtualenv/ikmap/Lib/site-packages') # 虛擬環境安裝第三方包文件目錄
# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
sys.path.insert(0, 'E:/PyCharmProjects/ikmap') # 項目文件目錄
from app import app as application # 只能用application,因為mod_wsgi在解析時,只認application
注意:路徑使用'/',注意方向!
5. 修改配置文件conf\extra\httpd-vhosts.conf
- 先刪除默認的virtuaHost -default內容:
<VirtualHost _default_:80>
DocumentRoot "${SRVROOT}/htdocs"
#ServerName www.example.com:80
</VirtualHost>
- 添加以下內容:
<VirtualHost *:80 >
DocumentRoot "E:/PyCharmProjects/ikmap" # 項目路徑
WSGIScriptAlias /ikmap "E:/PyCharmProjects/ikmap/app.wsgi" # .wsgi文件路徑,前面添加了/ikmap,瀏覽器輸入就應該是http://127.0.0.1:80/ikmap,避免直接輸入http://127.0.0.1:80
<Directory "E:/PyCharmProjects/ikmap">
Options Indexes FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
注意:路徑使用'/',注意方向!
- 修改配置文件conf\httpd.conf,引入:
Include conf/extra/httpd-vhosts.conf
三、測試
在瀏覽器輸入:http://127.0.0.1:80/ikmap就可以看到自己的項目了。