Django + Apache/mod-wsgi 環(huán)境部署所遇到的各種問題總結(jié)

在一臺CentOS7機器上配置Django+apache運行環(huán)境

Django安裝##

python2 or python3 ?###

一般情況下Linux系統(tǒng)都有自帶python2唐责,本機CentOS7上的是python2.7降淮。曾經(jīng)嘗試升級python3,然后需要修改幾個系統(tǒng)軟件比如yum藕届,也就是將 python 改成 python2 這種慧耍」拢考慮到這只是個小項目,在將來不會有維護复亏,另外為了方便移植类腮,還是選用python2來配置環(huán)境。Django的代碼是否在python2與python3通用冒晰,目前尚未確定同衣。但是簡單的移植之后有報錯,只是沒有確認(rèn)是否是版本原因?qū)е潞恕H绻且粋€生命周期長而且迭代頻繁的項目耐齐,建議從python3開始。

pip install django###

若未安裝pip蒋情,先easy_install pip埠况。然后簡單地pip install django
/var/www/下新建 webpy 項目:

django-admin.py startproject webpy
cd webpy

可以看到已經(jīng)新建了一個項目/var/www/webpy

Apache 的 mod_wsgi 安裝##

Apache與Python支持###

直接

yum install httpd

,一般這樣安裝的Apache缺少 apxs 支持棵癣,因此需要再

yum install httpd-dev*

另外對于python辕翰,需要安裝開發(fā)包 python-devel

yum install python-devel

安裝mod-wsgi###

從官網(wǎng)下載wsgi,https://pypi.python.org/pypi?%3Aaction=search&term=mod+wsgi&submit=search

# 建議替換最新包
wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/mod_wsgi-4.5.7.tar.gz
# 解壓并進入目錄
tar -zxvf mod_wsgi-4.5.7.tar.gz && cd mod_wsgi-4.5.7
# 配置路徑
./configure --with-apxs=/[Your path]/apxs --with-python=/[Your path]/python
make && make install

apxs和python具體路徑可以通過 whereis xxx 獲取

Apache 配置 和 wsgi 配置##

同一個域名下已有另一個php項目浙巫,因此沒有另外配置虛擬域名金蜀,而是增加一個網(wǎng)站子目錄/web

django項目 配置

webpy/wsgi.py開頭添加環(huán)境變量

import sys
# django項目根目錄
sys.path.append('/var/www/webpy')

然后配置 webpy/settings.py

# 配置ip或域名
ALLOWED_HOSTS = ['192.168.0.100', 'test.vhost.com']
...
TIME_ZONE = 'Asia/Chongqing'

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

# django的靜態(tài)文件需要轉(zhuǎn)交給apache處理,
# 這個目錄里是給`python manage.py collectstatic`命令配置的靜態(tài)文件目標(biāo)目錄
STATIC_ROOT = '/var/www/webpy/static/'
# django 網(wǎng)站的靜態(tài)文件路徑的畴,因為django在/web子目錄
STATIC_URL = '/web/static/'

然后遷移django的默認(rèn)靜態(tài)文件

python manage.py collectstatic

這個命令會把django的默認(rèn)管理后臺admin的相關(guān)靜態(tài)文件轉(zhuǎn)移到STATIC_ROOT文件夾里渊抄,這樣就可以方便我們在apache中配置。

Apache 配置

Apache的配置需要注意幾個關(guān)鍵:

  • 加載mod-wsgi擴展
  • 告訴apache丧裁,基于什么路徑的請求轉(zhuǎn)交給wsgi處理
  • 告訴apache护桦,那些文件夾下的文件可以被訪問(默認(rèn)的是all denied,因此會403)
  • 被坑慘了的一點煎娇,那些靜態(tài)文件需要可執(zhí)行x權(quán)限(不然一直403)【2017.10.30補充二庵,文件夾目錄需要 x 權(quán)限,因為需要打開缓呛。催享。(覺得自己好蠢)】

修改httpd.conf(或者在Include的文件夾新建xxx.conf)
參考官方文檔 https://docs.djangoproject.com/ja/1.9/howto/deployment/wsgi/modwsgi/

LoadModule wsgi_module modules/mod_wsgi.so
...
# 只是舉個例子,實際上并不重要
Alias /robots.txt /var/www/webpy/static/robots.txt
Alias /favicon.ico /var/www/webpy/static/favicon.ico

# 告訴apache從哪里找靜態(tài)文件哟绊,這里的Alias對應(yīng)上面settings.py的STATIC_URL
Alias /web/media/ /var/www/webpy/media/
Alias /web/static/ /var/www/webpy/static/
# 避免403因妙,很重要
<Directory "/var/www/static">
    AllowOverride None
    Require all granted
</Directory>
<Directory "/var/www/webpy/media">
    AllowOverride None
    Require all granted
</Directory>

# 最重要的配置只有這一句,告訴apache什么樣的請求轉(zhuǎn)交wsgi.py處理
# 注意下面注釋的一行,多寫了個“/”攀涵,會有`Target WSGI script not found or unable to stat: /var/www/webpy/webpy/wsgi.pyxxx`報錯
#WSGIScriptAlias /web/ "/var/www/webpy/webpy/wsgi.py"
WSGIScriptAlias /web "/var/www/webpy/webpy/wsgi.py"

<Directory "/var/www/webpy/webpy">
    <Files "wsgi.py">
        AllowOverride None
        Require all granted
    </Files>
</Directory>

重啟Apache铣耘,不出意外的話應(yīng)該可以正常訪問后臺如圖


image

遇到的大坑##

安裝mod-wsgi###

一般通過apxs安裝需要apxs支持,而yum install安裝版本可能不帶以故,因此需要打補丁yum install httpd-dev*蜗细,然后還需要安裝python-devel開發(fā)包

wsgi 配置網(wǎng)站子路徑###

多了一個“/”,參考Error: Target WSGI script not found or unable to stat when run django on apache

django admin 樣式丟失(1)-404###

通過python manage.py runserver調(diào)試的時候怒详,python會從django的默認(rèn)目錄讀取靜態(tài)文件炉媒,但是通過mod-wsgi的時候,靜態(tài)文件需要交給apache處理棘利。因此我們需要告訴apache從哪里去讀取這些靜態(tài)文件橱野。一種方式是直接指定django目錄,但是為了便于管理善玫,推薦先遷移這部分文件水援,再在apache中配置這個新目錄。從django的命令python manage.py collectstatic不難發(fā)現(xiàn)茅郎,這顯然就是django推薦的處理方式蜗元。

django admin 樣式丟失(2)-403###

上面一個問題解決之后仍然丟失樣式,但是這次在開發(fā)者工具里看到系冗,樣式文件由404變成了403錯誤奕扣。所以第一時間想到的是apache配置問題。但是仔細檢查 httpd.conf 已經(jīng)對所在的文件夾配置了訪問權(quán)限掌敬,經(jīng)過各種鬼畜的修改重啟任然束手無策惯豆,403雷打不動。
所以各種想當(dāng)然是沒用的奔害,唯一正確的途徑就是查看錯誤日志楷兽,apache error_log 顯示:
AH00035: access to /web/static/admin/css/login.css denied (filesystem path '/var/www/webpy/static/admin') because search permissions are missing on a component of the path, referer: http://183.2.213.53/web/admin/login/?next=/web/admin/
search permissions ? 重新看了一下static的權(quán)限(因為static文件夾是手動創(chuàng)建的)

image

少了個x华临,這不是可執(zhí)行權(quán)限嗎芯杀?不管試試看吧
chmod a+x -R static【2017.10.30補充,文件夾目錄需要 x 權(quán)限雅潭,因為需要打開揭厚。。(覺得自己好蠢)】
然后4扶供!0筛圆!3!就椿浓!消顽染!失漾岳!了!7勰!

image

嘗試使用mysql###

在window使用python3成功配置過mysql存儲左腔,沒碰到什么問題唧垦。但是在Linux嘗試的時候,就跪了液样。振亮。。
首先django的配置很簡單鞭莽,就是把默認(rèn)的sqlite3改為mysql坊秸,并且配置其他參數(shù)

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        'ENGINE': 'django.db.backends.mysql',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'HOST': '127.0.0.1',
        'NAME': 'dbname',
        'USER': 'user',
        'PASSWORD': 'password',
        'CONN_MAX_AGE': None,
    }    
}

然后安裝mysql支持,django會告訴你檢查本機是否有mysqlclientPython-MySQL澎怒,統(tǒng)統(tǒng)裝上褒搔。
配置好了之后,運行python manage.py check

image

dbshell 可以正常連接到mysql喷面,然而其他命令比如check星瘾, migraterunserver全都蜜汁掛起惧辈,不知道哪里出了問題琳状。。
鑒于本項目沒什么存儲需求盒齿,而且因為403的原因浪費了許多時間念逞,先把這個項目碼完再嘗試mysql吧。边翁。(雖然每次都說以后填坑翎承,卻從來沒填過坑)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倒彰,隨后出現(xiàn)的幾起案子审洞,更是在濱河造成了極大的恐慌,老刑警劉巖待讳,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芒澜,死亡現(xiàn)場離奇詭異,居然都是意外死亡创淡,警方通過查閱死者的電腦和手機痴晦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琳彩,“玉大人誊酌,你說我怎么就攤上這事部凑。” “怎么了碧浊?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵涂邀,是天一觀的道長。 經(jīng)常有香客問我箱锐,道長比勉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任驹止,我火速辦了婚禮浩聋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臊恋。我一直安慰自己衣洁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布抖仅。 她就那樣靜靜地躺著坊夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岸售。 梳的紋絲不亂的頭發(fā)上践樱,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音凸丸,去河邊找鬼拷邢。 笑死,一個胖子當(dāng)著我的面吹牛屎慢,可吹牛的內(nèi)容都是我干的瞭稼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼腻惠,長吁一口氣:“原來是場噩夢啊……” “哼环肘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集灌,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤悔雹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后欣喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腌零,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年唆阿,在試婚紗的時候發(fā)現(xiàn)自己被綠了益涧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡驯鳖,死狀恐怖闲询,靈堂內(nèi)的尸體忽然破棺而出久免,到底是詐尸還是另有隱情,我是刑警寧澤扭弧,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布阎姥,位于F島的核電站,受9級特大地震影響鸽捻,放射性物質(zhì)發(fā)生泄漏丁寄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一泊愧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛正,春花似錦删咱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至续崖,卻和暖如春敲街,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背严望。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工多艇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人像吻。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓峻黍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拨匆。 傳聞我的和親對象是個殘疾皇子姆涩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容