Django - CentOS 7 + Apache


每次要安裝東西的時候都覺得      很棒。



這次是把Django 架在 CentOS 7 搭配 Apache 之上, 這種文章隨便搜都是一大把,無奈每個人的狀況都不一樣,何況有些都僅只有步驟,每次都讓我有"好像別人安裝都很順"的錯覺(當然這可能不是錯覺 ... )。
最後只好自己去看官方文件檔,但你知道的,都是密密麻麻的英文字!
我又有讀很快結果漏看某些重要訊息的毛病 ˊ_____>ˋ

好,我先弄了個VMware來做這件事。

首先裝python有兩種途徑,一個是從資源庫,一個是透過源碼。
前面的簡單,後面的就是自己對安裝的東西比較有掌控度,但yum不會記錄到這一筆安裝。
最最一開始,我就是按表抄課的走第二個方式,但途中坑很多,我是爬了又跌,跌了再爬阿...
這邊用資源庫安裝,沒什麼問題,很棒。

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum update
$ yum install python36u python36u-libs python36u-devel python36u-pip

完成後可立即使用python3.6。👍
安裝virtualenv,先升級

$ python3.6 -m pip install --upgrade pip
$ python3.6 -m pip install virtualenv


然後安裝Apache, 必須是2.0, 2.2 或 2.4版本。


再來是討m的mod_wsgi,有很多文章都用yum install mod_wsgi,如果你用的是python3開發,那就會變成天大的錯誤,跟我一樣卡在絕望深谷,因為它預設就是使用python2.7。
別管它了,有兩種安裝方式:源碼跟python包,我選源碼。

源碼  ** gcc for C compile

$ yum install gcc
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz
$ tar xzf 4.6.5.tar.gz
$ cd mod_wsgi-4.6.5
$ ./configure --with-python=`which python3.6`
$ make
$ make install

產出 wsgi_module '/usr/lib64/httpd/modules/mod_wsgi.so'


用Apache伺服python網頁有兩種模式,嵌入式與Daemon。
主要差別在於
嵌入式 ➙ 會影響到其他Apache內相關設定,而且更動到專案內的code就要restart service。
Daemon ➙ 跑自己的,也能偵測到code的改變,但前提是你必須手動 touch wsgi.py。


OK 來看一下 httpd.conf


# 新增 wsgi_module
LoadModule wsgi_module '/usr/lib64/httpd/modules/mod_wsgi.so'


# WSGIRestrictEmbedded 預設為 Off,因為要進入Daemon Mode所以設定為 On (也是官方推薦 讚讚) 
WSGIRestrictEmbedded On

<Virtualhost ip>
ServerName domain.com
CustomLog /var/log/httpd/access.log
ErrorLog /var/log/httpd/error.log

</Virtualhost>

# 這裡主要是設定daemon的名稱還有執行的python,如果使用虛擬環境,那就是到虛擬環境裡的python.exe
WSGIDaemonProcess process-name python-home=path/to/python
WSGIProcessGroup  process-name
WSGIScriptAlias / 'path/to/wsgi.py'

<Directory 'path/to/wsgi'>
<Files wsgi.py>   
Require all granted
</Files>

# settings.py裡面設定的那個 STATICFILES_ROOT
Alias '/static' 'path/to/static-files'

<Directory 'path/to/static-files'>
    AllowOverride None
    Require all granted
</Directory>



大致上簡易的設定就是這個樣子
每當有程式碼的更動,都要touch wsgi.py才會全部重新載入喔!


References:
modwsgi google group
modwsgi 官方文件

留言

這個網誌中的熱門文章

[Python] 以folium製作臺灣百岳資訊地圖

交個筆友吧!老派的浪漫與科技之結合 - SLOWLY

Django教學初體驗