読者です 読者をやめる 読者になる 読者になる

CentOS 5.7 + Passenger

rack ruby apache centos passenger

CentOS 5.7 に Passenger を入れて Rack アプリを動かしたメモ。

開発元が用意するリポジトリから mod_passenger と rubygem-passenger を入れる。

参考:Phusion Passenger native packages for RedHat/Fedora/CentOS – Phusion Corporate Blog

# rpm -Uvh http://passenger.stealthymonkeys.com/rhel/5/passenger-release.noarch.rpm
# yum install mod_passenger rubygem-passenger
# rpm -qa \*passenger                  
mod_passenger-3.0.11-9.el5.centos
rubygem-passenger-3.0.11-9.el5.centos

Apache モジュールをインストール。

# passenger-install-apache2-module

手元の環境ではここで curl-devel と ruby-devel が足りないよと言われたので、手動で入れてやりなおし。

# yum install curl-devel.x86_64 ruby-devel.x86_64
# passenger-install-apache2-module

途中で表示されたバーチャルホストの設定例をメモ( /etc/httpd/conf.d/passenger.conf 内でも確認できる)。

<VirtualHost *:80>
  ServerName www.yourhost.com
  DocumentRoot /somewhere/public   # <-- be sure to point to 'public'!
  <Directory /somewhere/public>
    AllowOverride all              # <-- relax Apache security settings
    Options -MultiViews            # <-- MultiViews must be turned off
  </Directory>
</VirtualHost>

どうやら以下のようなディレクトリ構成にすると勝手に動いてくれるらしい。

参考:PassengerでRackアプリを動かす - As Sloth As Possible

/path/to/example.jp/rackhello/
    +- hello.rb
    +- config.ru
    +- public/     <- ここを DocumentRoot にする。空でもOK。

vhost を設定する前に Hello World を用意。

参考:Route 477 - Rack日本語リファレンス

$ mkdir -pv /path/to/example.jp/rackhello/public
$ vi /path/to/example.jp/rackhello/hello.rb
require 'rubygems'
require 'rack'
class HelloApp
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
  end
end
$ vi /path/to/example.jp/rackhello/config.ru
require './hello.rb'

run HelloApp.new

Apache を設定。

$ su -
# vi /etc/httpd/conf.d/vhost.jp.example.conf
<VirtualHost *:80>

ServerName example.jp
DocumentRoot /path/to/example.jp/rackhello/public

ErrorLog logs/example.jp-error_log
CustomLog logs/example.jp-access_log common

ServerAdmin webmaster@example.jp

</VirtualHost>
# /etc/init.d/httpd configtest
Syntax OK
# /etc/init.d/httpd reload
Reloading httpd:                   [  OK  ]

楽だー。

Ubuntu Oneiric + nginx + uwsgi + sinatra (rack)

ubuntu uwsgi ruby rack sinatra nginx haml

Ubuntu Oneiric (11.10) + nginx + uwsgi な環境で Sinatra アプリを uwsgi に載せるまで。

まず sinatra のインストールから。 apt で sinatra をインストールしたい場合、現在は ruby-rack がみつからず依存関係エラーが出る。

$ sudo -s
# apt-get install ruby-sinatra
[...]
以下のパッケージには満たせない依存関係があります:
 ruby-sinatra : 依存: ruby-rack しかし、インストールすることができません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
# apt-get install ruby-rack
[...]
パッケージ ruby-rack はデータベースには存在しますが、利用できません。
おそらく、そのパッケージが見つからないか、もう古くなっているか、
あるいは別のソースからのみしか利用できないという状況が考えられます

E: パッケージ 'ruby-rack' にはインストール候補がありません

ubuntu-proposed リポジトリに対策済みパッケージがあるので、有効にしてから ruby-sinatra をインストール。

参考:Bug #843734 in ruby-sinatra (Ubuntu): “ruby-sinatra : Depends: ruby-rack but it is not installable”

# vi /etc/apt/sources.list
...
deb http://jp.archive.ubuntu.com/ubuntu/ oneiric-proposed main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ oneiric-proposed main restricted universe multivers
...
# apt-get update
# apt-get install ruby-sinatra

Sinatra DSL の Hello World なファイルを作る。

続きを読む

Ubuntu Oneiric の /etc/uwsgi/{apps-available,apps-enabled}

uwsgi ubuntu

前回upstart を使って uwsgi を起動したけど、パッケージの仕組みに沿った方法を使ってみる。

Debian 系の基本通り、 /etc/uwsgi/apps-available/ に設定をファイルを置いて /etc/uwsgi/apps-enabled/ からシンボリックリンクする。

/etc/uwsgi/apps-available の設定は --inherit /usr/lib/uwsgi/conf/default.ini オプション付きで実行されるので、デフォルトの内容も確認しておく(継承するデフォルト設定ファイルのパスは /etc/default/uwsgi 内で設定されている) *1

$ dpkg -l uwsgi
...
ii  uwsgi              0.9.8.1-1          fast, self-healing application container server
$ uwsgi --version
uWSGI 0.9.8.1-debian
$ sudo -s
# cat /usr/lib/uwsgi/conf/default.ini  # 出力結果からコメント削除済み
[uwsgi]
autoload = true
master = true
workers = 2
no-orphans = true
pidfile = /run/uwsgi/%n/pid
socket = /run/uwsgi/%n/socket
chmod-socket = 660
log-date = true
uid = www-data
gid = www-data

pidfile と socket の %n プレースホルダには、設定ファイル名から拡張子を除いた文字列が入る。以下のように hello.ini を作ると /run/uwsgi/hello/socket というソケットが作られることになる。

# vi /etc/uwsgi/apps-available/hello.ini

デフォルトを意識して最低限の設定だけ。

[uwsgi]
plugins = python
logto = /var/log/uwsgi/hello.log
mount = /hello=/home/cu39/code/python/hello.py

リンク作成、起動、確認。

# ln -sv /etc/uwsgi/apps-available/hello.ini /etc/uwsgi/apps-enabled/
`/etc/uwsgi/apps-enabled/hello.ini' -> `/etc/uwsgi/apps-available/hello.ini'
# /etc/init.d/uwsgi start hello
 * Starting app server(s) uwsgi        [ OK ]
# ls -F /run/uwsgi/hello
pid  socket=
# ps -Af | grep uwsgi
www-data  6779     1  0 Jan18 ?        00:00:03 /usr/bin/uwsgi --ini /etc/uwsgi/apps-enabled/hello.ini --daemonize /var/log/uwsgi/hello.log --inherit /usr/lib/uwsgi/conf/default.ini
www-data  6787  6779  0 Jan18 ?        00:00:00 /usr/bin/uwsgi --ini /etc/uwsgi/apps-enabled/hello.ini --daemonize /var/log/uwsgi/hello.log --inherit /usr/lib/uwsgi/conf/default.ini
www-data  6788  6779  0 Jan18 ?        00:00:00 /usr/bin/uwsgi --ini /etc/uwsgi/apps-enabled/hello.ini --daemonize /var/log/uwsgi/hello.log --inherit /usr/lib/uwsgi/conf/default.ini

*1:このあたりの詳しい挙動は /etc/init.d/uwsgi や /usr/lib/uwsgi/init/do_command あたりを参照。

Ubuntu Oneiric + nginx + uwsgi + moin

ubuntu nginx uwsgi wsgi python moin

インストール

nginx は PPA から入れる。

$ sudo -s
# nginx=stable
# add-apt-repository ppa:nginx/$nginx
# apt-get update 
# apt-get install nginx

uwsgi 関連もインストール。

# apt-get install uwsgi uwsgi-plugin-python

バージョン確認。

# nginx -v
nginx version: nginx/1.0.11
# uwsgi --version
uWSGI 0.9.8.1-debian
# python -V
Python 2.7.2+

hello world!

helloworld してみる。 /etc/nginx/sites-available/default を以下のように設定、テスト。

# vi /etc/nginx/sites-available/default
server {
        server_name localhost;

        location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:9090;
        }
}
# /etc/init.d/nginx configtest
Testing nginx configuration: nginx.
続きを読む

CentOS 5.7 に Python 2.6 を入れて pip で MoinMoin をインストール

ダイアリー版をコピーしてみるテスト。

CentOS5 の Python 2.4 + mod_wsgi で moin を運用してたものを 2.6 で動かすようにする手順をメモ。

まず yum の追加リポジトリ RPMForge と EPEL5.x を有効にする。事前に yum-priorities を入れておくといいかも。

# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm

Installing RPMforge for CentOS 5 に倣う。

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# rpm -K rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

これで python26-* パッケージが見えるのでいろいろインストール。「moinのparserにpygmentsを用い」たいので Pygments も。

# yum install python26 python26-devel python26-mod_wsgi python26-pygments

このくらいすると依存関係で python26-distribute が入ると思うので easy_install-2.6 が使えるようになってるはず(てきとう)。 easy_install-2.6 で pip を入れてから、その pip で moin を入れる。

# which easy_install-2.6
/usr/bin/easy_install-2.6
# rpm -q --whatprovides /usr/bin/easy_install-2.6
python26-distribute-0.6.10-4.el5
# easy_install-2.6 pip
# pip-2.6 install moin

これで基本的にはそのまま動くはず。

あと 2.4 用の mod_wsgi を yum で入れてる方は、OFFるなりアンインストールするなりしたほうがいいかも。参考までに python26-mod_wsgi のファイルリストは以下。

# rpm -ql python26-mod_wsgi
/etc/httpd/conf.d/python26-mod_wsgi.conf
/usr/lib64/httpd/modules/python26-mod_wsgi.so
/usr/share/doc/python26-mod_wsgi-3.3
/usr/share/doc/python26-mod_wsgi-3.3/LICENCE
/usr/share/doc/python26-mod_wsgi-3.3/README

もしかすると yum がよろしくやってくれるのかもしれない(もともと自前ビルドを使ってたので未テスト)。