兩個(gè)月前申請(qǐng)了亞馬遜免費(fèi)的AWS賬戶(hù),當(dāng)時(shí)很多東西都沒(méi)學(xué)習(xí),不知道什么跟什么,瞎鼓搗一番后就丟一邊了。
兩個(gè)月后,因?yàn)槊嬖囆枰胝覀€(gè)服務(wù)器放上一點(diǎn)作品,于是想起之前申請(qǐng)的AWS。
這回對(duì)云服務(wù)器有了點(diǎn)概念,在網(wǎng)上搜索了一點(diǎn)教程,終于知道實(shí)例指的是一個(gè)虛擬服務(wù)器,可以在這臺(tái)服務(wù)器上像對(duì)待自己的主機(jī)一樣進(jìn)行各種安裝和設(shè)置。
我申請(qǐng)的EC2實(shí)例是運(yùn)行在windows系統(tǒng)上的,首先要先用終端連接上實(shí)例,從windows的附件里選擇遠(yuǎn)程桌面連接,用申請(qǐng)時(shí)獲得的密鑰在EC2實(shí)例的控制面板上得到登錄密碼,順利登錄。
登錄上后看著空空如也的桌面,一時(shí)無(wú)從下手,各種選項(xiàng)點(diǎn)擊了遍,大概摸清了這系統(tǒng)的情況,有個(gè)C盤(pán)目錄,有瀏覽器,有命令行工具。
搞清楚后打算開(kāi)始安裝apache,這才發(fā)現(xiàn)一個(gè)問(wèn)題,這系統(tǒng)里面沒(méi)有apache,需要下載,于是搜索了一下,發(fā)現(xiàn)可以將本地磁盤(pán)掛載到終端上,直接在磁盤(pán)間復(fù)制粘貼文件。

接下來(lái)就是用網(wǎng)頁(yè)下載和磁盤(pán)復(fù)制的方法,將需要的軟件下載到系統(tǒng)中,需要注意的一點(diǎn)是下載軟件時(shí)要版本對(duì)應(yīng):
- apache:v2.4.25-x64-vc14-r1 下載地址
(注:vc14指的是用Visual Studio 2015編譯,所以還需要下載VS2015運(yùn)行庫(kù),注意選擇64位的下載Visual C++ Redistributable for Visual Studio 2015) - python:v3.6.1 64位 下載地址
- mod_wsgi:mod_wsgi?4.5.15+ap24vc14?cp36?cp36m?win_amd64.whl 下載地址
都下載好后,先安裝vc2015,接著安裝python,裝好python后用pip安裝django,mod_wsgi,然后找一個(gè)目錄新建一個(gè)django項(xiàng)目。
接下來(lái)是apache的配置和安裝,這里碰到第一個(gè)難題:
1、apache安裝好后從外網(wǎng)怎么都訪(fǎng)問(wèn)不了,后來(lái)搜索了一下說(shuō)是國(guó)內(nèi)用80端口不能備案,所以aws不能用80端口,于是在實(shí)例的控制面板里向安全組新增一條規(guī)則開(kāi)放8888端口,然后再在apache設(shè)置里修改監(jiān)聽(tīng)此端口,這樣apache就能成功訪(fǎng)問(wèn)了。
接著要配置apache的django模塊,這里碰到第二個(gè)難題,折騰了我一個(gè)早上的時(shí)間:
2、根據(jù)網(wǎng)上搜索的教程在apache配置文件里添加如下行:
LoadModule wsgi_module "C:/Program Files/Python/Python36/Lib/sitepackages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "C:/Program Files/Python/Python36"
WSGIScriptAlias / C:/pythonspace/mysite/mysite/wsgi.py
WSGIPythonPath C:/pythonspace/mysite
<Directory C:/pythonspace/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
這里就開(kāi)始出問(wèn)題了,apache服務(wù)怎么都啟動(dòng)不了,也不顯示錯(cuò)誤信息,根據(jù)排查法知道是第一句運(yùn)行有問(wèn)題,但是就是不知道有什么問(wèn)題,在網(wǎng)上一直搜索都沒(méi)有頭緒,偶然看到有個(gè)回復(fù)提到可以查看windows event log,受此啟發(fā)在系統(tǒng)里查看了windows application error log(在命令行輸入Eventvwr.msc命令),終于看到錯(cuò)誤信息:
大意就是說(shuō)the specified module could not be found,識(shí)別不了wsgi模塊
想了想,因?yàn)榫W(wǎng)上很多教程用的是舊的版本,模塊文件都是以so為后綴名的,這次這個(gè)新版用了pyd,是不是因此就不能認(rèn)啊,繼續(xù)搜索答案,終于在文章里發(fā)現(xiàn)一條說(shuō)明需要先在命令行運(yùn)行:
mod_wsgi-express module-config
然后出現(xiàn)以下內(nèi)容:

對(duì)比了一下發(fā)現(xiàn)少了一條:
LoadFile "c:/program files/python/python36/python36.dll"
于是在apache的LoadModule語(yǔ)句上面加上該條,啟動(dòng),成功了!
然后配置一下django,從外網(wǎng)訪(fǎng)問(wèn),也成功了!
這真的很奇怪啊,在實(shí)例服務(wù)器上需要加上LoadFile才能成功啟動(dòng),但是在我自己的機(jī)子上的配置文件里沒(méi)有加上這條也能順利啟動(dòng),不知道是哪里的問(wèn)題。
總之不管怎樣,django終于能順利在apache上跑了。