ubuntu下配置Apache+mod_wsgi+Django項目(個人測試)


經過了一個星期的摸索,查找資料以及實驗,我搭建的環境基本能用(還有就是Django后台的靜態文件加載的問題)

這里面只是介紹一下我的過程,因為對應Apache還不是很熟練,特別是配置文件。只能供大家參考一下。

網上的資料比較多,但是可能不適合自己,只能取其精華,但是沒經驗的話,不知道哪里是精華,所以就多試試吧。寫這個博客,也是對自己這一段時間堅持學習的鼓勵。

轉發,請標記出處:http://www.cnblogs.com/if-then/p/6959730.html

環境 Ubuntu16.04LTS

Apache 2.4.25

mod_wsgi :mod_wsgi-4.5.15.tar.gz

Django :1.8

Apache 搭建:

Apache搭建有兩種方式

一,下載源碼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應該放在配置文件目錄下,當時我的項目就是這里配置的)
數據庫前台還是不能寫!,這個問題還沒解決,還得研究

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM