ubuntu下配置Apache+mod_wsgi+Django項目(我的測試)

通過了一個星期的摸索,查找資料以及實驗,我搭建的環境基本能用(還有就是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 安裝上

再編譯~~~結果仍是不行~~我淚~~~

報錯以下

  1. /usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_  
  2. 32 against `a local symbol' can not be used when making a shared object; rec  
  3. ompile with -fPIC

這是要從新安裝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應該放在配置文件目錄下,當時個人項目就是這裏配置的)數據庫前臺仍是不能寫!,這個問題還沒解決,還得研究

相關文章
相關標籤/搜索