Flask部署:virtualenv+apache+mod_wsgi

一、前言

開(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)目了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容