Linux(Debian)+Apache+Django 配置

配置Apache和Django鏈接的過程可謂是一波三折,在此記錄。php

 

零、基本的安裝html

軟件環境python

l  Linux-3.2.0-4-amd64-x86_64-with-debian-7.7web

l  python 2.7.3apache

l  django 1.3.7django

l  apache 2.2服務器

l  mod_wsgi 3.3app

 

基本指令、模塊的安裝(需root權限)dom

l  curl命令,用於命令行下訪問網站,返回html內容curl

apt-get curl

l  sudo命令

apt-get sudo

l  mod_wsgi

apt-get install libapache2-mod-wsgi

 

1、使用apache2提供靜態頁面

Apache 預備知識

可執行程序 /usr/sbin/apache2

配置文件目錄 /etc/apache2/

網站(web)文件目錄 /var/www

  網站文件目錄是指站點所對應的文件目錄,能夠配置。站點的配置文件是在 /etc/apache2/sites-available/目錄中的文件裏配置的,如/etc/apache2/sites-available/default文件。在這個文件中,字段DocumentRoot後填寫網站文件目錄,好比網站文件目錄改到/var/temp 那麼就把這行改爲:DocumentRoot /var/temp

 

配置文件(/etc/apache2/下)

  配置文件並非在網上盛傳的httpd.conf(這可能在之前的apache版本中有)裏面,而是:

apache2.conf        基本的配置信息

ports.conf             端口 

  固然,也能夠配置httpd.conf或者任一的.conf,apache會把配置文件目錄下全部.conf結尾的配置文件載入進來。

      

Apache基本操做

$ su (切換成root用戶,而後輸入密碼)

# service apache2 status        # 查看狀態

# service apache2 start          # 啓動

# service apache2 stop          # 中止

# service apache2 reload              # 從新應用配置文件

# service apache2 restart              # 從新啓動進程

# a2ensite xx                           # 激活xx站點

# a2dissite xx                          # 取消xx站點

# apachectl configtest            # 檢查一下 apache2 配置文件語法

 

 

主機名

  主機名是用來指代域名(IP),能夠直接輸入主機名或域名來訪問網站。主機名配置在/etc/hostname/etc/hosts文件中。在Debian裏是後者。

  打開/etc/hosts(經過vi /etc/hosts 來打開,須要root權限),可將本地域名的主機名叫作localhost,將本機ip的主機名叫作lei,以下所示:

  127.0.0.1 localhost

  192.168.131.233  lei

 

此時開啓Apache後,能夠訪問http://localhost,及http://lei ,將展現 It works!默認界面。

若是Linux的發行版是命令行式的,沒有圖形界面,就用curl http://localhost和curl http://lei來訪問。

 

配置虛擬主機

  上一步中訪問的localhost和lei是默認頁面,若是想訪問本身的頁面,須要進行以下配置:

$ cd /etc/apache2            # 進入 apache2 的配置目錄

$ ls ./sites-enabled          # 查看當前生效的站點

            # 返回 000-default , 這是默認啓動的站點

$ su

# a2dissite default           # 取消默認站點 default

            # 這時候sites-enabled目錄下沒有000-default

# service apache2 reload       # 使配置生效

 

  如今刷新一下 http://localhost/,應該已經不能訪問了。

  如今/etc/apache2/sites-available/目錄下,創建一個名爲 test的文件,爲了清晰,寫得儘量簡單,具體內容以下:

<VirtualHost *:80>

  ServerName localhost

  DocumentRoot /var/www

</VirtualHost>

 

解釋:

-------------------------------------------------------------

<VirtualHost *:80>   #80是自定義的端口號

          #要與/etc/apache2/ports.conf中Listen後的端口號一致

          #如Listen 8001,則這裏要寫成<VirtualHost *:8001>

  ServerName localhost     #填寫以前配置過的主機名

  DocumentRoot /var/www      #填寫站點目錄

</VirtualHost>

-------------------------------------------------------------

 

  配置文件創建完畢後,要讓它生效:

$ sudo su

# a2ensite test   # 激活 test 站點

# ls /etc/apache2/sites-enabled/        # 查看當前生效的站點

                  # 返回 test ,表示test站點生效

# apachectl configtest                         # 檢查一下 apache2 配置文件語法

 

  返回結果:

apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Syntax OK

           

  在 apache2.conf 中增長主機名後,解決報錯問題。添加以下:

ServerName localhost

             

  從新檢查配置文件語法,並從新載入:

# apachectl configtest                  # 此次結果應該只有 Syntax OK

# service apache2 reload

 

  如今又可以正常訪問 http://localhsot/ 。

 

2、配置 wsgi 模塊 

查看版本

$ sudo dpkg -l libapache2-mod-wsgi              #查看wsgi的版本

                      # 結果: libapache2-mod-wsgi 3.3-4+deb7u1

$ a2enmod wsgi                                           #驗證模塊安裝正常

                      # 結果:Module wsgi already enabled

 

驗證 wsgi

  爲了驗證wsgi的正常使用,準備手工建一個最簡單的wsgi應用,實際就是一個py腳本。

  在 /var/www/目錄下,創建一個名爲 main.wsgi 文件,內容以下:

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]

 

  在 /etc/apache2/sites-available/test中增長一行,同時能夠取消DocumentRoot配置,修改後內容以下:

<VirtualHost *:80>

  ServerName test

  WSGIScriptAlias / /var/www/main.wsgi

</VirtualHost>

 

  應用配置:

$ sudo service apache2 reload

 

  如今刷新 http://localhost 可以返回Hello World! 說明 wsgi 解析正常。

 

3、配置 wsgi解析django

  1. 在django工程目錄下新建django.wsgi,並編輯以下:

import os

import sys

HERE = os.path.dirname(__file__)

sys.path.append(HERE)

sys.path.append(os.path.dirname(HERE))

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

#settings指工程目錄下的settings.py

#若是該文件放在當前目錄的xx文件夾下,就寫成'xx.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

 

  2. 修改 apache2 的配置文件 /etc/apache2/sites-available/test,修改後的內容(其中/home/apache2/lei_web/爲django工程目錄):

<VirtualHost  *:8001>

  ServerName localhost

  DocumentRoot  /home/apache2/lei_web/

  <Directory />

    Options Indexes FollowSymLinks

     AllowOverride None

  </Directory>

  <Directory /home/apache2/lei_web/>

    Order allow,deny

    Allow from all

  </Directory>

  WSGIScriptAlias / /home/apache2/lei_web/django.wsgi

  ErrorLog ${APACHE_LOG_DIR}/error.log

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost> 

        

  3. 從新應用 apache2 配置文件

$ sudo service apache2 reload

  訪問 http://localhost/ ,可以看到 django 的 It Worked! 頁面,說明django安裝正常。

 

4、SVN配置

Apache進程進行svn前的配置

  因爲在Django工程中有進行svn操做的代碼,Apache服務器啓動Django後,是以www-data身份作系統中運行,無對應權限。這時須要用sudo以及相關的/etc/sudoers來幫忙。

  修改sudo配置文件,直接鍵入visudo命令編輯配置文件:

  1. 註釋Defaults requiretty

    Defaults requiretty修改成 #Defaults requiretty, 表示不須要控制終端。 不然會出現sudo: sorry, you must have a tty to run sudo。

 

  2. 增長行 Defaults visiblepw

    不然會出現 sudo: no tty present and no askpass program specified。sudo-1.6.9p17-5.el5不支持這個參數,sudo-1.7.2p1-10.el5支持。

 

  3.在配置文件靠近尾部的地方有一行root ALL=(ALL) ALL,緊接着這行加入www-data ALL=(ALL) NOPASSWD:/usr/bin/svn *

    注:NOPASSWD能夠使在命令執行時不須要交互輸入www-data用戶的密碼

 

 

參考連接:

  django 1.5.1 apache2 wsgi 配置教程 http://blog.chinaunix.net/uid-23500957-id-3838223.html

  php如何控制svn更新代碼 http://blog.csdn.net/ownfire/article/details/9187177

相關文章
相關標籤/搜索