debianでapache2+fastcgiな環境でdjangoを動かすメモその2

目的はdreamhostに近い環境をローカルのcoLinux+debian etchな環境に構築すること。
前回のapache設定に、mod-fcgi及び、mod-rewriteの設定を加えて、djangoプロジェクトをつくり、トップページが表示されることを確認する。

mod-fastcgiインストール

正しくは

% sudo apt-get install libapache2-mod-fastcgi

最初間違えて

% sudo apt-get install libapache2-mod-fcgid

してて、若干はまったので注意…ってこんなの俺だけか…orz

fastcgi及び、rewriteの有効化

% sudo a2enmod fastcgi 
% sudo a2enmod rewrite

もし無効化したければa2dismod ... を使う。

apache設定ファイル編集

% cd /etc/apache2/sites-available
% sudo vi django

して以下のように編集(socketを使う場合)

FastCgiExternalServer /var/www/django/public/django.fcgi -socket /tmp/django.sock
<VirtualHost *>
  ServerName django
  ErrorLog /var/log/apache2/django-error.log
  CustomLog /var/log/apache2/django-access.log combined
  DocumentRoot /var/www/django/public
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ /django.fcgi/$1 [QSA,L]
</VirtualHost>

django.fcgiを作成。

中身は空でかまわないが、実行権限が必要な点に注意。

% touch /var/www/django/public/django.fcgi
% chmod 755 /var/www/django/public/django.fcgi
% ls -la /var/www/django/public/django.fcgi   
-rwxr-xr-x 1 maedana maedana 0 2007-09-02 07:57 /var/www/django/public/django.fcgi

apache再起動

% sudo /etc/init.d/apache2 restart 

djangoプロジェクト作成

% django-admin.py startproject django
Error: 'django' conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name.

怒られた…orz というわけで

% django-admin.py startproject djangosite
% cd djangosite

/tmp/django.sockを起動。

以下のコマンドで作成される.sockなファイルにapacheを実行しているユーザのrwx権限が必要っぽい。これがわからず昨日小一時間はまりまくった…。権限がない状態で起動すると、具体的には以下のようにしてログインユーザ権限で起動すると

% ./manage.py runfcgi daemonize=false socket=/tmp/django.sock

apacheのエラーログに以下のようにでた。

[Sun Sep 02 08:31:56 2007] [error] [client 10.0.2.2] (13)Permission denied: FastCGI: failed to connect to server "/var/www/django/public/django.fcgi": connect() failed
[Sun Sep 02 08:31:56 2007] [error] [client 10.0.2.2] FastCGI: incomplete headers (0 bytes) received from server "/var/www/django/public/django.fcgi"

昨日はずーっと/var/www/django/public/django.fcgiの権限の問題だと思ってたんだけど、/tmp/django.sockの権限が問題だったことに気がついたのは何故か夢の中。夢の中の俺GJ!!というわけで、debianの場合デフォルトでwww-dataユーザなので以下のようにする。あ、あといったん/tmp/django.sockを消さないとエラーが出た。理由はわからない。

% sudo rm /tmp/django.sock
% sudo -u www-data ./manage.py runfcgi daemonize=false socket=/tmp/django.sock 

動作確認

http://django:10080/ 

にアクセスしてトップページが無事出るようになった。