はじめに
Djangoは、Pythonで実装されたWebアプリケーションフレームワークで、複雑なデータベース主体のWebアプリケーションを設計・開発するのに役に立つ。導入時点では、
$ ./manager.py runserver
でテストしているが本格的に運用する段階になると、apacheと連携させたくなる。他にも紹介されているページは多くあるが、自分の作業の備忘録として、その運用の仕方をリマインダとして残しておく。
作業環境
作業環境は以下の通り
- ubuntu12.04
- django 1.3.1
- python 2.7.3
その他、apacheの設定は以下の通り
- DocumentRoot: /data/www
/etc/apache2/sites-available/default: DocumentRoot /data/www
- djangoプロジェクトのルートディレクトリ
- ~/webservices
- apache2上のディレクトリ
- /data/www/webservices -> ~/webservices
$ sudo ln -s ${HOME}/webservices /data/www/webservices
必要なパッケージのインストールとセットアップ
$ sudo apt-get install -y apache2 libapache2-mod-wsgi
$ sudo apt-get install -y python-django
$ django-admin startproject webservices
django.wsgiをつくる
djangoのルートディレクトリにdjango.wsgiをつくる
django.wsgi
#!/usr/bin/env python
# coding: utf-8
import os
import sys
sys.path.append('/data/www')
sys.path.append('/data/www/webservices')
os.environ['DJANGO_SETTINGS_MODULE'] = 'webservices.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
apache2の設定
/etc/apache2/sites-available/djangoをつくる。
WSGIScriptAlias /services /data/www/webservices/django.wsgi
<Directory /data/www/webservices/>
Order deny,allow
Allow from all
</Directory>
上記の設定を有効にする
$ sudo a2ensite django
$ sudo apache2ctl restart
その他、データベースにsqlite3を用いる場合は、データベースへのアクセス権を設定する必要がある。仮にsqlite3のデータベースファイル名がdata.dbだった場合、djangoのルートディレクトリで以下の作業を行う
$ ./manager.py syncdb
…
$ chown ${USER}.www-data data.db
$ chmod g+w data.db
デバッグのあれこれ
pythonの標準出力や、エラーメッセージは以下の場所に出力されている。
$ less /var/log/apache2/error.log