Apache+mod_wsgi本地部署Django(windows系統)
阿新 • • 發佈:2019-01-31
本地Apache+mod_wsgi部署Django
搭建部落格網站,開始用Django內建的manage.py runserver 0.0.0.0:8080來本地搭建,本地資料庫,邏輯和模板都寫好並跑通後上網查詢接下來需要將自己的程式託管
到Apache,Apache的元件中mod_wsgi對python的支援最好,所以本著跟隨主流,決定用Apache+mod_wsgi部署自己的網站。其中遇到了很多坑,折磨的很痛苦。
一、安裝Apache
有2.2x和2.4x兩種版本,自己下的2.4x,但是官網上沒有windows的release版,因此只能從目前網路中獲取release版,或者自己編譯一個release版,但是就像
官網說的一樣,將Apache編譯到windows真的是一件棘手的事情。編譯教程:http://man.chinaunix.net/newsoft/ApacheManual/platform/win_compiling.html。
release版本下載:,VC10(vs2012編譯),VC14(vs2015編譯),VC9(vs2008編譯):http://www.apachehaus.com/cgi-bin/download.plx,
VC14:https://www.apachelounge.com/download/。上網查詢都說這個需要跟作業系統有關,win64位下載x64的,win32的下載x86的。並且與python版本有關,
一般python2.7下載VC9,python3.x下載VC10, 因此我下載了httpd-2.4.25-x64-r1.zip(VC9)(因此埋下了巨坑!)
下載好後解壓到了與專案目錄的同級目錄,我的專案目錄是D:/WebSite/blog, 所以解壓後Apache在D:\WebSite\Apache24,之後修改conf/httpd.conf檔案,
如下:
cmd下進入到D:/WebSite/Apache24/bin
輸入:httpd.exe -k install#安裝Apache服務,如果報錯根據錯誤提示找原因(我沒報錯。。)
安裝後輸入:httpd.exe -k start#這個地方比較容易失敗,主要的原因就是上面的配置有問題。
啟動成功後在自己的瀏覽器中輸入http://127.0.0.1:8089(我監聽的是8089),如果提示it works或者Apache haus的頁面表示成功了。
至此Apache的安裝就OK了。
二、安裝mod_wsgi
安裝這個東西折磨了自己兩天,茶不思飯不想。。
網上各種教程各種部落格文章都說該模組下載地址是http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi,這裡面有適合的mod_wsgi.so,下載後扔到Apache的
modules下就好了,然後我進去找到適合我的版本,我本地配置是Apache2.4(vc9,x64), Python2.7,windows64位系統,所以我下載了
mod_wsgi-4.5.15+ap24vc9-cp27-cp27m-win_amd64.whl,如果你的Python安裝了wheel可以用wheel解壓 wheel umpack xxx.whl,其實直接把whl換成zip用winrar也可以。。
解壓後我幾乎翻遍了整個資料夾,mod_wsgi.so呢?好吧,可能以前的老版本該網址是收存mod_wsgi.so的,總之在這裡沒找到。。
之後就一路苦逼的找mod_wsgi.so,找到了幾個下載地址。https://github.com/GrahamDumpleton/mod_wsgi/releases/download/4.4.12/mod_wsgi-windows-4.4.12.tar.gz
貌似只有4.4.12有現成的二進位制拓展庫,其他的需要自己編。CSDN.NET:http://www.csdn.net/tag/mod_wsgi/download 有下載地址,其中http://download.csdn.net/detail/smartcore/9153731
是可以用的,其他的沒有測試。
有了mod_wsgi.so就按照教程繼續配置httpd.conf檔案,
如下:
cmd進入到D:/WebSite/Apache24/bin下輸入httpd.exe -k start
提示cannot load modules/mod_wsgi.so into server,\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\a8\xb5\xc4\xa3\xbf\xe9\xa1\xa3。
然後就蒙了,以為我找的mod_wsgi.so是不對的?然後自己換了各種地址下的mod_wsgi.so,最後都報這個錯誤。後續就是苦逼的各種看文件各種嘗試各種找資料,自己
編譯mod_wsgi.so,嘗試換成Apache2.2,最後都沒用。報的錯誤原因還是16進位制數字,用python直接print這一串16進位制數字,輸出:無法找到指定模組,有了錯誤原因就
繼續上網搜,在一個網站上有這麼一個回答:
1.那你沒有隱藏的擴充套件,並已兩次增加了擴充套件。
2.那mod_wsgi.so檔案可讀到任何Apache服務使用者??。
3.那你的Apache是??32位。
4.那你的Python是32位。
5.已安裝你的Py??thon為所有使用者,而不僅僅是使用者安裝它作為。
自己逐一對照了之後想到這裡說的是你的Python是32位,而不是作業系統是32位,可是網上的教程要麼只說64位下x64要麼說windows64位下x64,沒有說python是32位還是
64位,我自己也沒注意自己的python是64位還是32位,進入cmd下Python回車看到:python 2.7.10(default, may 23 2015,09:40:32)[MSC v.1500 32 bit(intel)] on win32,
一看自己的Python裝的是32位的,我的作業系統是64位的,好吧,重新下載了一個Apache2.4(VC9,x86),按照上面重新配置,最後httpd.exe -k start,啟動成功!
所以坑就在了這裡,沒人強調你的python是32還是64,一般都強調了你的Python,你的Apache,你的mod_wsgi.so最好編譯環境要統一,否則很可能起不來。
三、最後
啟動了之後再瀏覽器上鍵入http:127.0.0.1:8089可以看到了自己的網頁,但是沒有css元素,因為之前靜態檔案是Django來處理的,現在託管了Apache,靜態檔案需要
Apache來處理,在httpd.conf下配置:
之後就可以看到帶有css,圖片,js的網站了。
搭建部落格網站,開始用Django內建的manage.py runserver 0.0.0.0:8080來本地搭建,本地資料庫,邏輯和模板都寫好並跑通後上網查詢接下來需要將自己的程式託管
到Apache,Apache的元件中mod_wsgi對python的支援最好,所以本著跟隨主流,決定用Apache+mod_wsgi部署自己的網站。其中遇到了很多坑,折磨的很痛苦。
一、安裝Apache
有2.2x和2.4x兩種版本,自己下的2.4x,但是官網上沒有windows的release版,因此只能從目前網路中獲取release版,或者自己編譯一個release版,但是就像
官網說的一樣,將Apache編譯到windows真的是一件棘手的事情。編譯教程:http://man.chinaunix.net/newsoft/ApacheManual/platform/win_compiling.html。
release版本下載:,VC10(vs2012編譯),VC14(vs2015編譯),VC9(vs2008編譯):http://www.apachehaus.com/cgi-bin/download.plx,
VC14:https://www.apachelounge.com/download/。上網查詢都說這個需要跟作業系統有關,win64位下載x64的,win32的下載x86的。並且與python版本有關,
一般python2.7下載VC9,python3.x下載VC10, 因此我下載了httpd-2.4.25-x64-r1.zip(VC9)(因此埋下了巨坑!)
下載好後解壓到了與專案目錄的同級目錄,我的專案目錄是D:/WebSite/blog, 所以解壓後Apache在D:\WebSite\Apache24,之後修改conf/httpd.conf檔案,
如下:
以上這些就是啟動Apache的基本修改,主要是埠號和路徑,下面準備啟動Apache... Define SRVROOT "D:/WebSite/Apache24" #其實這裡改好後凡是引用該變數的地方不需要再更換了,但是自己還是按照網上說的都給換了。 ServerRoot "D:/WebSite/Apache24" ... Listen 127.0.0.1:8089 #修改埠號,但是你監聽的埠號很有可能被其他程序佔用了,所以在監聽時你應該確保該埠號沒有被佔用! ... ServerName localhost:8089 #這裡2.4是開啟的,2.2註釋掉了,需要你開啟否則Apache start時會失敗。 ... DocumentRoot "D:/WebSite/Apache24/htdocs" <Directory "D:/WebSite/Apache24/htdocs"> ... ScriptAlias /cgi-bin/ "D:/WebSite/Apache24/cgi-bin/" ... <Directory "D:/WebSite/Apache24/cgi-bin"> AllowOverride None Options None Require all granted </Directory> ...
cmd下進入到D:/WebSite/Apache24/bin
輸入:httpd.exe -k install#安裝Apache服務,如果報錯根據錯誤提示找原因(我沒報錯。。)
安裝後輸入:httpd.exe -k start#這個地方比較容易失敗,主要的原因就是上面的配置有問題。
啟動成功後在自己的瀏覽器中輸入http://127.0.0.1:8089(我監聽的是8089),如果提示it works或者Apache haus的頁面表示成功了。
至此Apache的安裝就OK了。
二、安裝mod_wsgi
安裝這個東西折磨了自己兩天,茶不思飯不想。。
網上各種教程各種部落格文章都說該模組下載地址是http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi,這裡面有適合的mod_wsgi.so,下載後扔到Apache的
modules下就好了,然後我進去找到適合我的版本,我本地配置是Apache2.4(vc9,x64), Python2.7,windows64位系統,所以我下載了
mod_wsgi-4.5.15+ap24vc9-cp27-cp27m-win_amd64.whl,如果你的Python安裝了wheel可以用wheel解壓 wheel umpack xxx.whl,其實直接把whl換成zip用winrar也可以。。
解壓後我幾乎翻遍了整個資料夾,mod_wsgi.so呢?好吧,可能以前的老版本該網址是收存mod_wsgi.so的,總之在這裡沒找到。。
之後就一路苦逼的找mod_wsgi.so,找到了幾個下載地址。https://github.com/GrahamDumpleton/mod_wsgi/releases/download/4.4.12/mod_wsgi-windows-4.4.12.tar.gz
貌似只有4.4.12有現成的二進位制拓展庫,其他的需要自己編。CSDN.NET:http://www.csdn.net/tag/mod_wsgi/download 有下載地址,其中http://download.csdn.net/detail/smartcore/9153731
是可以用的,其他的沒有測試。
有了mod_wsgi.so就按照教程繼續配置httpd.conf檔案,
如下:
以上是加入好mod_wsgi.so後的修改,之後噩夢就開始了。。... LoadModule wsgi_module modules/mod_wsgi.so #專案的wsgi.py配置檔案路徑 WSGIScriptAlias / D:/WebSite/blog/blog/wsgi.py #專案路徑 WSGIPythonPath D:/WebSite/blog <Directory D:/WebSite/blog/blog> <Files wsgi.py> Require all granted </Files> </Directory> ...
cmd進入到D:/WebSite/Apache24/bin下輸入httpd.exe -k start
提示cannot load modules/mod_wsgi.so into server,\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\a8\xb5\xc4\xa3\xbf\xe9\xa1\xa3。
然後就蒙了,以為我找的mod_wsgi.so是不對的?然後自己換了各種地址下的mod_wsgi.so,最後都報這個錯誤。後續就是苦逼的各種看文件各種嘗試各種找資料,自己
編譯mod_wsgi.so,嘗試換成Apache2.2,最後都沒用。報的錯誤原因還是16進位制數字,用python直接print這一串16進位制數字,輸出:無法找到指定模組,有了錯誤原因就
繼續上網搜,在一個網站上有這麼一個回答:
1.那你沒有隱藏的擴充套件,並已兩次增加了擴充套件。
2.那mod_wsgi.so檔案可讀到任何Apache服務使用者??。
3.那你的Apache是??32位。
4.那你的Python是32位。
5.已安裝你的Py??thon為所有使用者,而不僅僅是使用者安裝它作為。
自己逐一對照了之後想到這裡說的是你的Python是32位,而不是作業系統是32位,可是網上的教程要麼只說64位下x64要麼說windows64位下x64,沒有說python是32位還是
64位,我自己也沒注意自己的python是64位還是32位,進入cmd下Python回車看到:python 2.7.10(default, may 23 2015,09:40:32)[MSC v.1500 32 bit(intel)] on win32,
一看自己的Python裝的是32位的,我的作業系統是64位的,好吧,重新下載了一個Apache2.4(VC9,x86),按照上面重新配置,最後httpd.exe -k start,啟動成功!
所以坑就在了這裡,沒人強調你的python是32還是64,一般都強調了你的Python,你的Apache,你的mod_wsgi.so最好編譯環境要統一,否則很可能起不來。
三、最後
啟動了之後再瀏覽器上鍵入http:127.0.0.1:8089可以看到了自己的網頁,但是沒有css元素,因為之前靜態檔案是Django來處理的,現在託管了Apache,靜態檔案需要
Apache來處理,在httpd.conf下配置:
...
Alias /static/ D:/WebSite/blog/static/
<Directory D:/WebSite/blog/static/>
Require all granted
</Directory>
...
Django有收集靜態檔案的方式,我將所有setting.py安裝的app所需的靜態檔案都收集到了D:/WebSite/blog/static/下,如何收集看官方文件。之後就可以看到帶有css,圖片,js的網站了。