先週くらいからぼちぼち進めていた h2o で遊んでみるのやつがひと段落して、これまで nginx + apache2 + mod_fcgid という構成で動かしていた tDiary を h2o のみで動かすことができるようになった。
動かすにあたっては mruby_handler でいくつか補う必要があって、以下の 2 つのコードを利用しました。
今のところ h2o で何かやろうとした時に uzulla さんと cho45 さんのブログが最大の情報源なので、何かやろうとした人は見ておくといいと思います。一つだけハマったのが、"/diary" の部分で fastcgi.spawn に対して nginx でいう rewrite をやる時には cho45 さんの rewrite_rule.rb に加えて reproxy: ON
する必要があるってあたりだった。
以下、完成した設定ファイルです。
user: www-data
hosts:
"www.hsbt.org:80":
listen:
port: 80
paths:
"/":
redirect: https://www.hsbt.org/
"www.hsbt.org:443":
listen:
port: 443
ssl:
certificate-file: "/etc/letsencrypt/live/www.hsbt.org/fullchain.pem"
key-file: "/etc/letsencrypt/live/www.hsbt.org/privkey.pem"
paths:
/:
file.dir: /var/www/hsbt.org
/diary:
file.dir: /var/www/hsbt.org/diary
reproxy: ON
mruby.handler: |
require '/home/hsbt/www/rewrite_rules.rb'
lambda do |env|
RewriteRules.rewrite(env) do
rewrite %r{^/diary/([0-9]+|[0-9]+\-[0-9]+)\.html$}, '/diary/index.fcgi?date=\1', :break
end
end
fastcgi.spawn: "exec /path/to/ruby /home/hsbt/app/tdiary/current/index.fcgi"
/diary/update.fcgi:
mruby.handler: |
require "/home/hsbt/www/htpasswd.rb"
Htpasswd.new("/home/hsbt/www/.htpasswd", "Basic Authentication")
fastcgi.spawn: "exec /path/to/ruby /home/hsbt/app/tdiary/current/update.fcgi"
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
pid-file: /var/run/h2o/h2o.pid
h2o の設定ファイル、設定しない項目については相当にいい感じになって、yaml もかなりスッキリという状態なので開発者体験はかなりよかった。そろそろ仕事でも使ってみるかなー。