Ubuntuにmod-wsgiいれたメモ

サーバーいじっていて忘れそうなのをメモ。
ウェブアプリをデプロイする場所として大学のサーバーをいじっていた。許可はとってる。

wsgiとは

python用の高速なCGIだと思えばいい。pythonを動かすならmod-pythonより速いらしい。

Web Server Gateway Interface (WSGI) は、プログラミング言語Pythonのための、Webアプリケーション(もしくは、フレームワーク)とWebサーバ間の簡潔かつ統一されたインタフェースを定義する。

Web Server Gateway Interface - Wikipedia

前提

  • Ubuntu10.4
  • Apacheがインストールされていること

インストール+有効化

$ sudo sudo apt-get install libapache2-mod-wsgi #インストール
$ sudo a2enmod mod-wsgi  #有効化
$ sudo apache2ctl restart #サーバー再起動

a2enmodコマンドはApache2のmoduleをenableにするコマンドで、伝統的にmod-(hoge)のhogeの部分だけ入力するらしいが、今回はmod-が必要だった。ひどい話。
Apacheなれないです。


/etc/apache2/site-available/default

NameVirtualHost *
<VirtualHost *>
        ServerAdmin webmaster@localhost
        
        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        ...中略...

        #以下を追記 
        Alias /mizchi/ "/home/mizchi/www/"  #ドキュメントルート以下の自分のディレクトリと作業フォルダを結ぶ
        <Directory "/home/mizchi/www">
            Options Indexes FollowSymLinks MultiViews ExecCGI
            AddHandler cgi-script .cgi
            AddHandler wsgi-script .wsgi
            AddHandler wsgi-script .py

            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
</VirtualHost>

サンプル

/home/mizchi/www/hello.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]

サーバーの http://###.com/mizchi/hello.wsgiにアクセス。Hello World!と表示されれば成功。hello.wsgiの中身全てが見えてしまうならmod-wsgiが有効化されていないので、Apache設定ファイルを見直す必要がある。


参考 : Ubuntu + Apache2 + WSGI (mod_wsgi) with LAMP - Ubuntu Forums