一、前言
開(kāi)發(fā)完Flask的項(xiàng)目之后,需要進(jìn)行部署使用。在部署的過(guò)程中,遇到了很多的麻煩,很是心塞,最終部署成功。記錄下來(lái),或許可以給需要在Windows上部署Flask項(xiàng)目的朋友們作為參考。
二、部署過(guò)程
本次部署采取的方案為:virtualenv+apache+mod_wsgi
需要注意的是:Python,Apache和mod_wsgi應(yīng)該都為32位或者64位,不能混用;而且Apache和mod_wsgi要是相同版本的C/C++編譯器生成的。
1. virtualenv
使用virtualenv的理由:
- 隔離項(xiàng)目之間的第三方包依賴(lài),不同項(xiàng)目依賴(lài)于不同的第三方包
- 部署應(yīng)用方便,把開(kāi)發(fā)環(huán)境的虛擬環(huán)境直接打包到生產(chǎn)環(huán)境即可
我用的是python2.7 64,cmd下:
- 安裝virtualenv:
pip install virtualenv - 新建虛擬環(huán)境:
virtualenv E:\virtualenv\ikmap - cd進(jìn)入E:\virtualenv\ikmap\Scripts目錄,輸入:
activate激活虛擬環(huán)境 - 安裝項(xiàng)目依賴(lài)包:
pip install -r requirements.txt
(requirements.txt是自己項(xiàng)目導(dǎo)出的)
2. Apache
我用的是Apache2.4.27 VC9 64:
- 解壓到E:\Apache24
- 修改配置文件conf\httpd.conf:
Define SRVROOT "E:\Apache24"
Listen 80 - cmd管理員身份運(yùn)行,進(jìn)入E:\Apache24\bin目錄:
httpd -k install -n Apache24# 安裝Apache服務(wù)
httpd -k uninstall -n Apache24# 卸載Apache服務(wù) - 啟動(dòng)Apache服務(wù),瀏覽器輸入:http://127.0.0.1:80 測(cè)試Apache是否成功安裝。
3. mod-wsgi py27 VC9 64
- 將mod-wsgi.so文件拷貝至E:\Apache24\modules下
- 修改配置文件conf\httpd.conf,引入:
LoadModule wsgi_module modules/mod_wsgi.so - 重新啟動(dòng)Apache服務(wù),啟動(dòng)成功,Apache服務(wù)描述處有mod_wsgi等字樣
4. 創(chuàng)建.wsgi文件
- 在自己項(xiàng)目的啟動(dòng)文件的相同路徑下新建一個(gè).wsgi結(jié)尾的文件,我的是app.wsgi:
activate_this = "E:/virtualenv/ikmap/Scripts/activate_this.py" # 虛擬環(huán)境激活文件
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') # 虛擬環(huán)境安裝第三方包文件目錄
# 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') # 項(xiàng)目文件目錄
from app import app as application # 只能用application,因?yàn)閙od_wsgi在解析時(shí),只認(rèn)application
注意:路徑使用'/',注意方向!
5. 修改配置文件conf\extra\httpd-vhosts.conf
- 先刪除默認(rèn)的virtuaHost -default內(nèi)容:
<VirtualHost _default_:80>
DocumentRoot "${SRVROOT}/htdocs"
#ServerName www.example.com:80
</VirtualHost>
- 添加以下內(nèi)容:
<VirtualHost *:80 >
DocumentRoot "E:/PyCharmProjects/ikmap" # 項(xiàng)目路徑
WSGIScriptAlias /ikmap "E:/PyCharmProjects/ikmap/app.wsgi" # .wsgi文件路徑,前面添加了/ikmap,瀏覽器輸入就應(yīng)該是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
三、測(cè)試
在瀏覽器輸入:http://127.0.0.1:80/ikmap就可以看到自己的項(xiàng)目了。