FreeBSDにnginx+Pylonsの環境を構築する



FreeBSDにnginx+Pylonsの環境を構築したときのメモ書きです。

手順は、以前DebianやCentOSで構築したときとほぼ同じです。

Nginx + WSGI + Pylons環境の構築方法
CentOS5.2 + nginx0.6.x + WSGI + Python2.5.x環境の構築方法


せっかくなので、最新版のnginxで試しました。

ソースをhttp://sysoev.ru/nginx/nginx-0.7.32.tar.gzから
ダウンロード。

また、wsgiモジュールもダウンロードしておきます。
http://hg.mperillo.ath.cx/nginx/mod_wsgi/archive/tip.tar.gz


まず、Pythonの環境を整えました。
不要なものもあるかもしれませんが、pkg_addで以下のものをインストール


#pkg_add -r x11-toolkits/py25-tkinter-2.5.2_2
#pkg_add -r databases/py25-bsddb-2.5.2_2
#pkg_add -r databases/py25-gdbm-2.5.2
#pkg_add -r databases/py25-sqlite3-2.5.2_1


Pythonのバージョンは2.5.2です。

次に、nginxのビルドに必要なモジュールをインストール


#pkg_add -r All/pcre-7.8
#pkg_add -r All/openssl-0.9.8j



nginxとmod_wsgiのソースを展開


#mkdir /usr/local/src
#cd /usr/local/src

###ソースを/usr/local/srcにコピーして展開
#tar zxvf nginx-0.7.32.tar.gz
#tar mod_wsgi-8994b058d2db.tar.gz
#mv mod_wsgi-8994b058d2db mod_wsgi

###mod_wsgiのソースを修正
#vi mod_wsgi/src/ngx_http_wsgi_handler.c

-rc = ngx_http_discard_body(r);
+rc = ngx_http_discard_request_body(r);

#cd nginx-0.7.32
#./configure --add-module=/usr/local/src/mod_wsgi/ --sbin-path=/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1


またzlib系のエラーが出るかな?と思っていたのですが、
すんなりビルドが通りました。

そのまま、make,make installを実行

もっとはまるかと思ったのですが、意外とあっさり完了です。


次にPylonsの環境設定です。
http://peak.telecommunity.com/dist/ez_setup.pyを取ってきて、


#/usr/bin/env python ez_setup.py
#rehash
#easy_install Pylons


これでPylonsがインストールできました。
「rehash」を実行しないとFreeBSDってコマンドを認識してくれないんですね。
かなりあせりました。

pylonsの起動テストは


#mkdir /usr/local/pylons
#cd /usr/local/pylons
#paster create -t pylons helloworld
#cd helloworld
#paster serve --reload develop.ini


http://www.example.com:5000/にアクセスすると・・・見れない。

FreeBSDのファイアーウオールが邪魔をしているのか?
※CentOSのlokkitではまったことがあるので。
と疑い調べてみましたが、そうではない模様。

オチは

#vi develop.ini

[server:main]
use = egg:Paste#http
###127.0.0.1を0.0.0.0に変更
#host = 0.0.0.0
host = 0.0.0.0
port = 5000


これで見れるようになりました。


今後はnginxのmod_wsgi経由で動くか試してみます。


###稼働用の設定ファイルを作成

#cp /usr/local/pylons/helloworld/develop.ini /usr/local/pylons/helloworld/run.ini
#vi /usr/local/pylons/helloworld/run.ini

[DEFAULT]
#debug = true
debug = false

[app:main]
set debug = false


###nginx<->Pylonsの設定ファイル差k洲栄

#mkdir /usr/local/pylons/helloworld/nginx

#vi /usr/local/pylons/helloworld/nginx/helloworld.wsgi
import os, sys
sys.path.append('/usr/local/pylons/helloworld')
os.environ['PYTHON_EGG_CACHE'] = '/usr/local/pylons/python-eggs'

from paste.deploy import loadapp
application = loadapp('config:/usr/local/pylons/helloworld/run.ini')


###niginxの設定

#wsgi用の設定ファイルをコピー
#mkdir /usr/local/nginx/conf
#cp /usr/local/src/mod_wsgi/conf/wsgi_vars /usr/local/nginx/conf/

#nginxの設定を変更
#vi /usr/local/nginx/nginx.conf

server {
  #このincludeをたす
  include conf/wsgi_vars;

  #このセクションをたす
  location /helloworld {
    wsgi_pass /usr/local/pylons/helloworld/nginx/helloworld.wsgi;
  }
}



これで動くだろうと思ったのですが、500エラーが表示されます。
/usr/local/nginx/logs/error.log
を見てみると


The following error occurred while trying to extract file(s) to the Python egg
cache:

[Errno 13] Permission denied: '/usr/local/pylons/python-eggs'

The Python egg cache directory is currently set to:

/usr/local/pylons/python-eggs

Perhaps your account does not have write access to this directory? You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.



うーん。CentOSでは問題なかったのですが、
Pylonsの仕様が変わったのか、FreeBSDだからなのか・・・

とりあえず


mkdir /usr/local/pylons/python-eggs
chmod -R 777 /usr/local/pylons/python-eggs


として、キャッシュ用のディレクトリを作り
書き込み可能にしてやると動いてくれました。




もどる