通過了一個星期的摸索,查找資料以及實驗,我搭建的環境基本能用(還有就是Django後臺的靜態文件加載的問題)css
這裏面只是介紹一下個人過程,由於對應Apache還不是很熟練,特別是配置文件。只能供你們參考一下。html
網上的資料比較多,可是可能不適合本身,只能取其精華,可是沒經驗的話,不知道哪裏是精華,因此就多試試吧。寫這個博客,也是對本身這一段時間堅持學習的鼓勵。python
轉發,請標記出處:http://www.cnblogs.com/if-then/p/6959730.htmlsql
環境 Ubuntu16.04LTSshell
Apache 2.4.25數據庫
mod_wsgi :mod_wsgi-4.5.15.tar.gzapache
Django :1.8django
Apache 搭建:瀏覽器
Apache搭建有兩種方式app
一,下載源碼http://archive.apache.org/dist/httpd/,編譯安裝的方式
這種方式呢,我下載的是httpd-2.4.25.tar.gz
源碼安裝仍是要看官方文檔,它對應系統有依賴包主要有 apr-util-1.5.4 、pcre-8.38,下載編譯前看看文檔的注意事項,少走彎路!
二,sudo apt-get install apache2
這種安裝方便,可是我安裝完,配置文件與源碼安裝的方式不同,要在site-enable下,並且是虛擬機方式的配置文件,我網上找資料的時候,多半是看到的httpd.conf配置的,因此這個沒深刻看。可是看到一個博客下的評論,有人是這樣配置的,跟個人配置意思同樣,能夠借鑑,以下:
<VirtualHost *:80>
DocumentRoot /var/other/django/ibooklist/
ServerName *.chedushi.com
ServerAlias *.chedushi.com
WSGIScriptAlias / /var/other/django/ibooklist/ibooklist/wsgi.py
Alias /media/ /var/other/django/ibooklist/media/
Alias /static/ /var/other/django/ibooklist/static/
<Directory /var/other/django/ibooklist/static/>
Order deny,allow
Allow from all
</Directory>
<Directory /var/other/django/ibooklist/media/>
Order deny,allow
Allow from all
</Directory>
<Directory /var/other/django/ibooklist/>
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
網上資料有的寫配置這個,和我配置httpd.conf文件意思同樣(此段補加的20170613)。我只能不嚴謹的說應該差很少,^_^
安裝方式仍是比較簡單,很少說了!只有安裝完,訪問127.0.0.1 能看到 it works! 就好了。
安裝mod_wsgi
注意: 安裝這個寶貝也須要一些依賴,也要先看官方文檔!
下載了mod_wsgi-4.5.15.tar.gz
解壓
tar -zxvf mod_wsgi-4.5.15.tar.gz
進入目錄,./configure
遇到一個問題 /bin/sh: 1: apxs: not found
百度有的說要安裝httpd-devel
但在Apache網站上,只有for fedora and Centos 的rpm包
本U沒有對應的包
再查查看~~~轉發,請標記出處:http://www.cnblogs.com/if-then/p/6959730.html
上官方文檔,也時有寫的
If you are running Debian or Ubuntu Linux with Apache 2.4 system packages, regardless of which Apache MPM is being used, you would need both:
apache2 (此包應該不用,若是安裝了至關於安裝了一個應用服務,因此你在試的時候先裝下面的dev,若是不行,再裝吧)
apache2-dev
看來一切都得看官方文檔的靠譜!!將這個兩個用 apt-get install 安裝上
再編譯~~~結果仍是不行~~我淚~~~
報錯以下
這是要從新安裝python2.7 並且從新編譯 用-fPIC參數(這裏注意,安裝的時候若是你用的是sqlite3的數據庫,這裏就一塊弄了,不然django應用都起不來,先安裝一個sudo apt-get install libsqlite3-dev,這樣再./configure --prefix=/usr/local/ CFLAGS=-fPIC , make的時候就不會提示
Python build finished, but the necessary bits to build these modules were not found:
_bsddb _sqlite3 _tkinter ........
須要單獨安裝的這個提示了)
我由於這個和sqlite3安裝的事情,多安裝了好幾遍python2.7 由於時個老電腦1cpu2核的,結果編譯耗費了老久時間了~~~~
命令以下 進入python源碼目錄下
./configure --prefix=/usr/local/ CFLAGS=-fPIC ###ps:--enable-optimizations 這個參數可加可不加,加上的話make的時間長,我通過屢次的話,後來在 test_logging 的過程就報錯了,網上沒查到,可能跟個人主機名有關,但不肯定)
make
sudo make install
安裝完的路徑爲 /usr/local/lib/下的python2.7
而後再安裝mod_wsgi
安裝完後,會在Apache 安裝目錄/usr/local/apache24/下的文件夾modules中存在 mod_wsgi.so,(主要就是爲了它!!,網上有說下載so文件,拷貝到這個文件夾下,但我沒找到哪裏下載)
到此安裝算成功了,可是咱們仍是測試一下,看能夠用不
在 /usr/local/apache24/cgi-bin/下 創建一個測試腳本 test.wsgi(名字隨便,叫wsgi.py更好吧,由於Django就是用這個呢!)
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
以上腳本在官網上也有,我是在誰的博客裏複製了一份。複製粘貼的時候,檢查一下格式是否符合python
而後配置 sudo vi /usr/local/apache24/conf/httpd.conf
找到一堆LoadModule XXXXXXX的地方,增長一條
LoadModule wsgi_module modules/mod_wsgi.so
在 ScriptAlias /cgi-bin/ "/usr/local/apache24/cgi-bin/" #固然了 注意路徑可能不同
加上
ScriptAlias /test "/usr/local/apache24/cgi-bin/test.wsgi" #起了一個test的別名指向這個文本,能夠在瀏覽器裏訪問http://127.0.0.1/test
若是出現Hello World!,就成功了,若是沒有,再加一竄下面的訪問控制權限的!
<Directory "/cgi-bin/">
<Files test.wsgi>
Require all granted
</Files>
</Directory>
到這,環境應該就沒問題了,但願你可以順利到這!
安裝Django項目
這裏要先說的是,我對與配置文件還不是很熟悉,怎麼配置是最小及最優還不是很瞭解,只能說是能用
到這呢,就只是配置文件的事情了,若是你的python加載模塊都正常的話,若是不正常,你看缺乏什麼模塊就加什麼,用pip安裝很簡單,可是pip建議仍是源碼安裝吧
還有就是不要裝多個python,就留一個就好了。
這裏面主要先改一下
DocumentRoot "/usr/local/apache24/htdocs" 路徑換成你的Django的路徑,
指向項目目錄,不要指向應用下,如 /usr/app/mystie/
mysit
├── dbshell.bat
├── db.sqlite3
├── manage.py
├── migrate.bat #bat文件是我在window上編寫程序時寫的,能夠忽略!
├── mysit
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.pyc
├── urls.py
├── urls.pyc
├── wsgi.py
└── wsgi.pyc
├── news #個人model view等文件目錄
├── static #靜態文件的文件目錄
└── syncdb.bat
上面的路徑很重要,就是寫路徑的問題了,我DocumentRoot改爲下面 DocumentRoot "/usr/app/mysit"
<Directory "/mysit"> #緊鄰的文件夾就改爲這個,指向應用的目錄,下面的目錄都是相對於DocumentRoot的
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
</Directory>
裏面配置這些就能夠了 ,注意,網上說2.2版本和2.4版本的受權命令是不同的,因此你若是查詢了好多,會看到allow from all,這個是2.2的等同於 Require all granted在這條ScriptAlias /test "/usr/local/apache24/cgi-bin/test.wsgi"語句下,插入下面的語句,指定django項目的wsgi.py
WSGIScriptAlias / "/usr/app/mysit/mysit/wsgi.py" ###wsgi.py 不用作任何改動,網上好多要加路徑的,我以爲既然django就支持這個方式,應該不用動的!
再加一段容許訪問的權限,以下,(我沒明白爲何還要再給一遍,或者<Directory "/mysit">爲何不行,由於是相對於DocumentRoot了啊???)
<Directory "/usr/app/mysit/mysit">
Require all granted
</Directory>由於個人static放在/usr/app/mysit下的static目錄了,因此再加個權限,(我真不知道爲何還加,我就是由於這個問題,弄了2晚上)
<Directory "/usr/app/mysit/static/">
AllowOverride None
Options all
Require all granted
</Directory>
並且我前面的已經加了一個 /mysti的權限了!!!
到此,我訪問127.0.0.1/index就能夠訪問個人程序了,(小問題是登後臺,沒有樣式,而且sqlite3仍是訪問不了,目前還沒解決,先把步驟寫了)好了,就寫到這吧,互相學習
轉發,請標記出處:http://www.cnblogs.com/if-then/p/6959730.html
解決:
後臺樣式的問題,今天解決了一下,可能不是最好的方法:(從日誌裏看到,訪問css文件,獲取失敗)
將django下的
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/下的admin目錄 拷貝到項目下的static目錄下 sudo cp -rf admin/ /usr/local/mysit/static/ (思考:這個方法我以爲比較笨,應該經過經過django配置文件,包含過來???,並且項目下的static應該放在配置文件目錄下,當時個人項目就是這裏配置的)數據庫前臺仍是不能寫!,這個問題還沒解決,還得研究