AppacheでDjangoのサイトを構築 | 世界的日曜WEBプログラマー日記

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)

ApacheでDjangoを動かす方法について記載する。目的としてはApacheの動いている環境で、Djangoのアプリケーションを動かすこと。その際にApacheを通してDjangoを呼ぶことにする。

ApacheとDjangoが連携するにはlibapache2-mod-wsgiライブラリが必要となる。
その他必要なライブラリがあるのでapt-getでインストールをする。

環境はUbuntuを想定しているがRedhat系でも動くことは確認している。
一応全体の流れが解るように1から構築の手順を示すが、細かいところは省略、あるいはリンクを張るので、各自そちら参照のこと。

簡単に全体的な流れを書いておく

I. 必要なライブラリのインストール
II. startproject と startappでDjangoサイトの作成
III. urls.pyを編集する。(全部で2つ)
IV. wsgiの記述
V. apacheの登録

となる。


1.次のモジュールをインストールしておく。
・libapache2-mod-wsgi
・python-django
・mysql-server-5.1

2.続いてDjangoのプロジェクトを作成する。
プロジェクト名は何でもいいがココではwebappsとした。
$ django-admin.py startproject webapps

3.webapps下にあるurls.pyを変更する。urls.pyがない場合は自分で作成する。次のような中身のファイルを作成する。
from django.conf.urls.defaults import patterns, include

urlpatterns = patterns('',
(r'^mytestapp/', include('webapps.matching.urls')),
(r'^$', include('webapps.matching.urls')),
)


目的としては、次のようにアクセスが可能となる。
・http://dynaptico.com/mytestapp
・http://dynaptico.com/
(ドメインがdynaptico.comであると仮定)
このあたりの設定はDjangoの公式ドキュメントを参照すること

4.続いてDjangoのアプリを作成する。名前をmatchingとしてみる。
$ django-admin.py startapp matching

アプリの名前は先ほど書いたwebapps/urls.pyに合せている。
settings.pyに作成したアプリを書くのを忘れないようにすること。

5.matching ディレクトリのurls.pyの作成
$ emacs webapps/matching/urls.py
Djangoのバージョンに依ってはアプリにもurl.pyがない場合がある。ない場合、次のようにかく
 from django.conf.urls.defaults import patterns
urlpatterns = patterns( 'matching.views',
(r'^$', 'greeting' )
)


6.続いてviews.pyにgreetingという関数を追加する。関数名はなんでもいいが、matching/urls.pyに書いた関数名に合せる。


from django.shortcuts import render_to_response
from django.http import HttpResponse

def greeting( request ):
html = <font color=#00FF33>"<html><body> Hello word </body></html>"</font>
return HttpResponse( html )



7.続いてwebapps下にwsgiモジュールを置く。
$ mkdir webapps/apache
$ touch webapps/apache/django.wsgi


なお、django.wsgiは自分で書く必要がある。どっかでダウンロードやapt-getで手に入るものでもない。
Webサイトの場所は/var/www/dynapticoにあると仮定する。

$ emacs webapps/apache/django.wsgi

 import os
import types
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'webapps.settings'
os.environ['PATH'] = '%s:%s' % ('/usr/local/bin', os.environ['PATH'])

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

dynaptico_base = '/var/www/dynaptico'
sys.path.append(dynaptico_base)
sys.path.append(dynaptico_base + '/webapps')



8。最後にApacheの設定を行う。`
$ sudo emacs /etc/apache2/site-available/dynaptico

<VirtualHost *:80>
ServerName dynaptico.com
ServerAdmin webmaster@dynaptico.com
# DocumentRoot /var/www/dynaptico
DocumentRoot /var/www/dynaptico/webapps/matching
WSGIScriptAlias / /var/www/dynaptico/webapps/apache/django.wsgi

<Directory />
Order deny,allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /var/www/dynaptico/webapps>
Options FollowSymLinks
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
</VirtualHost>


次のコマンドで有効化
$ sudo a2ensite dynaptico
$ etc/init.d/apache2 reload


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house