Djangoの公式サイトに記載されているDjango1.5アプリケーション(投票システム)を本番サーバーにデプロイする方法について、暫定投稿します。
環境としては、サーバーOSはUbuntu13.04、Djangoのバージョンは1.53、Pythonは2.7.4です。
記載されているとおりにプロジェクト、アプリを作成します。ディレクトリ構造は次のようにしてあります。
/home/user/Django/mysite2/mysite2
/polls/static/polls, admin
/templates
この下で、/etc/apache2/site-available/defaultと/home/usr/Django/mysite2/mysite2/wsgi.pyを次のようにしました。これは、Django1.4のマニュアルの和訳によるものです。
サイトは、http://docs.djangoproject.jp/en/latest/howto/deployment/wsgi/modwsgi.htmlです。
なお、http://docs.djangoproject.jp/en/latest/には、1.4の公式マニュアルの和訳があり、少からず参考になります。
まず、defaultは
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localhost
DocumentRoot /home/michiaki/Django/mysite2
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory “/usr/lib/cgi-bin”>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error-django.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access-django.log combined
WSGIScriptAlias / /home/michiaki/Django/mysite2/mysite2/wsgi.py
Alias /static/ /home/michiaki/Django/mysite2/polls/static/
<Directory /home/michiak/Django/mysite2>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.django.com
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory “/usr/lib/cgi-bin”>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
wsgi.pyは
# file. This includes Django’s development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
この後、/usr/local/lib/python2.7/dist-packages/django/contrib/admin/staticの中身を/home/user/Django/mysite2/polls/staticにコピーします。そのうえで、$ sudo service apache2 restartとして、Apacheを再起動させます。ApacheのVirtualHost機能で、/var/www/html以下に通常のサイトも作成できます。
そうすると、http://localhost/adminで次のような画面になります。また、開発段階で作成したstyle.cssも反映されています。
開発サーバーで効いていたstyle.cssがApacheても効いています。ほかにもいろいろな方法があるようですが、手っ取り早い感じです。これで、Pythonを使えばサーバー管理ツールからデスクトップアプリケーション、Webアプリケーション、クラウド・コンピューティングまで広範囲なシステムを開発できます。PHPとはまた異なる楽しさがあります。
※WSGI(Web Server Gateway Interface=ウィズギと呼ぶそうです=)とは
WSGIは、Pythonにおける、WebアプリケーションとWebサーバを接続する標準仕様を定めるものであり、これによって、WSGIに対応したWebアプリケーション(やフレームワーク)は、WSGIに対応した任意のWebサーバ上で運用できるようになる、とのことです。