続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

AmazonLinux で python2.7 + apache + djangoを構築する

AmazonLinuxは特にLL用のrpmをどっさり用意してくれています。pythonの場合は、ベースが2.6ですが、2.7のrpmが用意されています。2.7でmod_wsgiをやる方法について、書いておきます。

方針ですが
1. なるべくrpmだけで解決したい。ソースコンパイルはやらない
2. python2.7をシステムデフォルトにしない
3. python2.6も一応残す
4. virtualenvで運用

1.はともかく、2.ですが、システムデフォルトを変えてしまうと、yumで使うpythonを変えるなどの方法もありますが、yum update でアップグレード(2014.04 -> 2014.09)で戻りが発生したり、そもそもちゃんとVirtualenvを使えば済むので、そうします。

コマンドだけ羅列します。
$ sudo yum install python27 python27-devel
$ sudo yum install python27-pip
$ sudo pip install virtualenv
$ virtualenv -p /usr/bin/python2.7 /venvs/py27env
$ source /venvs/py27env/bin/activate
(py27env)$ python -V
Python 2.7.5

後は、djangoなどフレームワークを入れるだけです。この後はrunserverなどで、動作確認や 0.0.0.0:80 とかやれば公開できますが、mod_wsgiを使う場合は一手間必要です。
yum install mod_wsgi とやった場合、入るのは python2.6へのリンクがあるmod_wsgiになります(詳細は lddなどで確認してください)。これでpython2.7のenvを動かすことは出来ないので、何とかしなければなりません。そこで探してみると。mod24_wsgi-py27というのが有ります。これはapache2.4系のモジュールですので、芋づる式にapacheも2.4系をインストールする必用があります。2.2じゃ無いと嫌なら、DSOコンパイルです。
コマンドだけ羅列。
# yum install httpd24 httpd24-tools
# yum install mod24_wsgi-py27

httpd(apache2.2系)とはバッティングするので、既に2.2系が動いているならば yum eraseが必用です。
後は設定ですが、これが曲者で、apache2.2系と大きく異なっています。とくに.htaccessでやっていた deny,allowはシンプルになりましたが、そのままだとまず動かないので、wsgiのサンプルをおきます。
WSGIScriptAlias / /proj/app/wsgi.py
WSGIPythonPath /proj:/py27env/lib/python2.7/site-packages/
Alias /static /proj/static


  
    Require all granted
  



    Require all granted

apache2.4は3とでもすればよかったのでは?と思うほど変わっています。みんなの興味はnginxに向かってしまったためか、そこそこ便利になっているようですが2年たった今でも(世界一のwebサーバーとしては)情報が少ないように感じます。