トップ «前の日記(2016/12/18 (日) ) 最新 次の日記(2016/12/20 (火) )» 編集 RSS feed

HsbtDiary


2016/12/19 (月) [長年日記]

h2o で tDiary を fcgi spawn する

先週くらいからぼちぼち進めていた 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 もかなりスッキリという状態なので開発者体験はかなりよかった。そろそろ仕事でも使ってみるかなー。