Windews 7 + Apache + wsgi
基本思路是鼠渺,wsgi和django依賴python挎塌,安裝wsgi就是將wsgi安裝為python的本地包插件丧没,安裝完成時會顯示python和wsgi的位置信息混槐,將這些信息以及django項目位置信息寫入解壓好的apache的配置文件中,運行apache的httpd文件即可按照配置文件去啟動wsgi也搓、開啟django網(wǎng)站入口。
apache本身不需要“安裝”到注冊表暮现,
安裝并測試Apache
安裝
實際上是下載Apache公司的一個httpd程序还绘。Apache官網(wǎng)不提供安裝程序,只提供源代碼栖袋,安裝包可去合作伙伴的網(wǎng)站下載:
二者都可以拍顷,但需要根據(jù)對應(yīng)的VS或VC版本來選擇Apache版本,提前檢查一下電腦上有沒有VC或VS組件塘幅,有哪個版本昔案。
配置
壓縮包下載完成后,解壓到你期望的程序目錄(D盤目錄是此程序默認認為的)电媳。不需要安裝過程踏揣,解壓完成這就是程序運行目錄了。不過在 apache httpd 運行的時候程序還是需要知道自己的絕對路徑的匾乓,所以需要我們在配置文件中自定義一下程序目錄絕對路徑捞稿。找到并打開D:\Apache24\conf\httpd.conf
文件,找到Define SRVROOT
這一行:
Define SRVROOT "D:/Apache24"
這里寫的目錄就是默認用戶會解壓到D盤目錄, 但移動到別處也可以,如果你的apache不在此位置娱局,就更改此處彰亥。
兩種運行方式
httpd.exe
查看apache版本信息:Apache24\bin路徑下運行httpd.exe -V (注意,是大寫V),
cmd運行, 或者雙擊運行apache24\bin
中的httpd.exe衰齐,服務(wù)器程序就會運行在黑框中任斋,如果有could not reliably ...
的提示,不用解決耻涛,打開瀏覽器輸入本機地址直接訪問废酷,如果正常出現(xiàn)網(wǎng)頁就是成功了。==注意==:關(guān)閉網(wǎng)站時盡量不要直接關(guān)閉命令行窗口, 而要在命令行窗口使用快捷鍵Ctrl+C停止程序運行, Ctrl+C后延遲10秒才有反應(yīng), 不要著急.
安裝到系統(tǒng)服務(wù)項
加入服務(wù)前須做兩個準備:
- 先修改
Apache24\conf\httpd.conf
文件內(nèi)的本機域名, 在文件中搜索ServerName抹缕,后面改為域名:端口號
, 如果沒有域名, 就寫IP:端口號
. - 檢查確保系統(tǒng)環(huán)境變量中有"PYTHONHOME"澈蟆,路徑指向Python安裝目錄,就是有python.exe的那個位置("PYTHONPATH"是不需要的)歉嗓。如果不加這條環(huán)境變量丰介,會報錯
Fatal Python error: initfsencoding: unable to load the file system codec
準備好之后,在apache24\bin
的命令行中輸入:
httpd.exe -k install -n "apache24"
其中"apache24"是自定義的名稱, 如果不加-n
, 名稱就默認設(shè)為Apache2.4
鉴分。完成后哮幢,在系統(tǒng)服務(wù)項頁面就能看到并控制這條服務(wù)項了,也可以用apache24\bin
中的 ApacheMonitor.exe 圖形界面去控制志珍。
下載mod_wsgi
是apache的插件橙垢,用于協(xié)助Python后端程序在Apache上運行
Python Extension Packages for Windows - Christoph Gohlke (uci.edu)
選擇一個匹配apache版本、VC版本伦糯、python版本柜某、Windows版本的mod_wsgi,沒寫ap24的默認就是ap24版本敛纲。
可以下載到默認下載位置喂击,到python腳本目錄不是必須的。在下載的whl文件的文件夾中淤翔,打開命令行翰绊,使用pip安裝mod_wsgi:
pip install "mod_wsgi-x.x.xx-cpxxx-win_amd64.whl"
引號內(nèi)改為實際的文件名.
如果pip命令無效, 嘗試在前面加python -m
.
如果一切正常, 將會在python的Lib目錄安裝wsgi模塊, 并在Scripts目錄生成一個mod_wsgi-express.exe
程序, 所以我們可以在命令行執(zhí)行:
mod_wsgi-express module-config
這行命令是給mod_wsgi做一下配置, 完成后會出現(xiàn)三行配置信息, 分別是LoadFile LoadModule WSGIPythonHome
, 我們要將其填寫到Apache24\conf\httpd.conf
中.
編輯配置文件
打開Apache24\conf\httpd.conf
. 勿忘記最開始配置的httpd程序目錄: Define SRVROOT "D:/Apache24"
wsgi和Django項目的相關(guān)配置
將下面的代碼修改為適合自己項目的, 然后復(fù)制到開頭, (后面可能常打開看看, 放開頭比較方便)
# 1.安裝wsgi模塊后,出來的三行字符旁壮,直接復(fù)制過來
LoadFile "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python37"
# 2.設(shè)置工程中的wsgi路徑
WSGIScriptAlias / D:\website\website\wsgi.py
# 3.設(shè)置工程路徑
WSGIPythonPath D:\website
# 4.再設(shè)置工程中的wsgi路徑
<Directory D:\website\website>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# 5.設(shè)置靜態(tài)和媒體文件路徑
Alias /media D:\website\website\media
<Directory D:\website\website\media>
AllowOverride None
Options None
Require all granted
</Directory>
Alias /static D:\website\website\website\static
<Directory D:\website\website\website\static>
AllowOverride None
Options None
Require all granted
</Directory>
django-admin頁面的靜態(tài)文件是不能直接訪問, 需要收集到一起.
第一步: 修改應(yīng)用的settings.py:
STATIC_URL = '/static/' #下方新增如下內(nèi)容:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
第二步: 運行命令监嗜,收集靜態(tài)文件到指定的static目錄
python manage.py collectstatic
配置完以上內(nèi)容應(yīng)當就可以運行服務(wù)端, 訪問網(wǎng)站了. 如果訪問網(wǎng)站出現(xiàn)問題, 再看下面的設(shè)置內(nèi)容
IP和端口設(shè)置
檢查并設(shè)置一下主機IP和端口號:
- 找到
Listen
, 可寫IP:端口, 也可只寫端口:
#Listen 12.34.56.78:80
Listen 80
- 不設(shè)
ServerName
也能運行, 但總報警告. 找到ServerName
, 應(yīng)當寫DNS的那個域名帶端口號, 如果沒有域名, 就寫IP和端口號:
ServerName 192.168.31.161:80
- 去掉#注釋,打開訪問日志
CustomLog "logs/access.log" common
- 若出現(xiàn)
You don't have permission to access / on this server.
, 就修改訪問權(quán)限:
找到如下配置
<Directory />
AllowOverride none
Require all denied
</Directory>
中間部分修改為
AllowOverride ALL
Require all granted
Windows Server + IIS + wfastcgi
啊抡谐,圖形界面真香裁奇!
參考:cnblog-飄逸的小樂
安裝Python和Django
Python沒有的話去官網(wǎng)下載,可以安裝在C盤根目錄麦撵,記住一定要安裝在非用戶目錄刽肠,不然后期會有難以解決的權(quán)限問題溃肪。新版本Python一般自帶pip,在cmd或PowerShell輸入python -m pip -version
查看是否有pip音五,如果顯示了pip版本號的話乍惊,python安裝目錄下的Scripts文件夾中的cmd中輸入
python -m pip install django
即可安裝django。如果報錯權(quán)限問題放仗,則用管理員權(quán)限打開cmd。
運行測試
對已存在的項目撬碟,要確保項目路徑不在用戶目錄內(nèi)诞挨,會有權(quán)限問題,可以在C目錄下也可以在C:\inetpub\wwwroot
呢蛤。在項目根目錄執(zhí)行命令python manage.py runserver
(0:80不要用了惶傻,Windows下不太支持) ,嘗試啟動服務(wù)其障,可能會出現(xiàn)類似下面的報錯:
import requests ModuleNotFoundError: No module named ‘requests’
原因:沒有導(dǎo)入requests庫银室。原文鏈接:CSDN博主「stone_tomcat」
解決辦法:
進入到python安裝目錄下的Scripts文件夾中,然后在cmd輸入python -m pip install requests
励翼,就好了蜈敢。如果缺少其他module,同理汽抚。
安裝wfastcgi
類似上面抓狭,在Scripts文件夾中在cmd輸入
python -m pip install wfastcgi
wfastcgi是cgi的一種,類似于wsgi造烁,作為服務(wù)器和Django的中間件,很重要。
開始IIS部署
復(fù)制wfastcgi.py
去python下site-package目錄
把“wfastcgi.py”這個文件復(fù)制到網(wǎng)站根目錄
如果只是調(diào)用“site-package”目錄下的同一個“wfastcgi.py”文件鱼辙,如果你要部署多個網(wǎng)站的話逼泣,將無法對不同網(wǎng)站創(chuàng)建不同的FastCGI執(zhí)行環(huán)境。
在IIS里添加網(wǎng)站
物理路徑就是有wfastcgi.py的目錄告组。
添加程序映射
在新建的網(wǎng)站的控制臺內(nèi)點開“處理程序映射”煤伟。
右面點擊“添加模塊映射”,具體內(nèi)容如下
可執(zhí)行文件一欄輸入“python解釋器”的目錄位置和我們的“wfastcgi.py”的位置惹谐,注意中間使用“|”符號隔開持偏,名稱隨意填寫。
填完后點開請求限制氨肌,把“僅當請求映射至以下內(nèi)容時才調(diào)用處理程序”去掉
確認添加后會彈出創(chuàng)建FastCGI應(yīng)用程序?qū)υ捒蚝韪眩c擊確認創(chuàng)建。注意怎囚,這里每多創(chuàng)建一個FastCGI應(yīng)用程序卿叽,同時運行的Django網(wǎng)站就可以多一個桥胞。如果你添加了多個網(wǎng)站但不需要同時運行多個網(wǎng)站,只創(chuàng)建一個應(yīng)用程序就夠了考婴。應(yīng)用程序池可以管理創(chuàng)建的應(yīng)用程序贩虾,網(wǎng)站的基本設(shè)置可以變更應(yīng)用程序。
配置Django執(zhí)行的環(huán)境變量
在服務(wù)器控制臺沥阱,進入“FastCGI設(shè)置”
可以看到剛剛添加的映射
雙擊打開缎罢,添加Django執(zhí)行時候的環(huán)境變量
這里環(huán)境變量一共要添加三個:
WSGI_HANDLER 為固定的 django.core.handlers.wsgi.WSGIHandler()
PYTHONPATH 為 網(wǎng)站根目錄
DJANGO_SETTINGS_MODULE 為 django settings文件位置
添加完成后去應(yīng)用程序池回收一下FastCGI應(yīng)用程序就好了
靜態(tài)文件的處理
在IIS內(nèi)找到“static”文件夾的頁面,打開處理程序映射
可以看到這里的列表跟網(wǎng)站是一致的
將為網(wǎng)站創(chuàng)建的FastCGI映射刪除掉考杉,static文件夾就可以直接訪問了策精,右側(cè)的“恢復(fù)為父項”可以恢復(fù)對此目錄的修改
這樣可以測試一下網(wǎng)站是否正常。Django后臺管理頁面可能出現(xiàn)靜態(tài)文件丟失崇棠,那么需要使用
python manage.py collectstatic
咽袜,詳見Django學(xué)習(xí)(7)上傳文件和文件儲存的最后部分。
搞定枕稀。雖然步驟比較多询刹,但是比較之下,圖形界面已經(jīng)方便太多了萎坷。