h2o

A collection of 13 posts
mruby libraries provided by H2O
mruby

mruby libraries provided by H2O

最近H2Oでmrubyを使うことに興味を持ち入門してみました。 * Hello world with mruby on H2O 実際に使われているmrubyのコードもみてみたいと思い調べたところ、標準でH2Oがmrubyのライブラリを提供していました。ありがたい。 * h2o/share/h2o/mruby at master · h2o/h2o · GitHub 読むぞ!!! また、実際にこのライブラリを使いたい場合ですが、CentOS7かつtatsushid/h2o-rpmを使ってH2Oをインストールした環境では、以下のpathにライブラリが収まっていました。 $ rpm -ql h2o | grep rb /usr/share/doc/h2o/examples/h2o_mruby/hello.rb /usr/share/h2o/mruby/acl.rb /usr/share/h2o/mruby/bootstrap.
1 min read
Hello world with mruby on H2O
ruby

Hello world with mruby on H2O

このブログのウェブサーバーにH2Oを使っています。 * h2o - ゆるふわキャンパー H2Oはデフォルトでmrubyに対応しており、これが最近気になっています。 * Using Mruby - Configure - H2O - the optimized HTTP/2 server 楽しそう。 H2O x mrubyで人はどれだけ幸せになれるのか from Ichito Nagata そこで、まずはHello Worldするところまでをやってみます。 その前に色々わからないので調べてみます。 mrubyとは mrubyとは以下の特徴を持つ言語。 * 組み込み機器やアプリケーションへの組み込みに最適化された軽量なruby * ほぼrubyと互換性がある(軽量化のため最低限の機能のみに絞っているのでrubyと全く同じ機能が使えるわけではない) H2Oのドキュメントを読んで見る 次にH2Oのmrubyについてのドキュメントを読んでみます。 ドキュメントによると、mrubyによってユーザーが独自のロジックを実装できるようになる
2 min read
Include configuration file of H2O
h2o

Include configuration file of H2O

このブログのWebサーバはH2Oを使っています。 * h2o - ゆるふわキャンパー 今年1月にH2Oのv2.1.0がリリースされました。新機能の1つとして、設定のincludeに対応しました。 * Release H2O version 2.1.0 · h2o/h2o · GitHub * add include config feature by i110 · Pull Request #1022 · h2o/h2o · GitHub ドキュメントは以下。 * Syntax and Structure - Configure - H2O - the optimized HTTP/2 server yamlのタグとやらを使っているみたいですね。yamlのタグ機能がどんなものなのか確認しようと思ったのですが正直良くわからず...。おいおい調べよう...。 * YAML Ain’t
1 min read
Auto renew SSL Certificate with Certbot(Let’s Encrypt)
letsencrypt

Auto renew SSL Certificate with Certbot(Let’s Encrypt)

このブログのSSL証明書はLet’s Encryptという認証局のものを使っています。Let’s Encryptの証明書を使い始めてしばらく経ちましたがいいかんじです。 * letsencrypt - ゆるふわキャンパー Let’s Encryptについて Let’s Encryptの証明書は無料で提供されており、certbotという証明書の取得や更新をコマンドで行うことの出来るツールが提供されているのが特徴です。神ってことです。 証明書の有効期限は90日(3ヶ月)と短いですが、コマンド一発で証明書を更新できるのでデメリットではありません。 また、証明書を細かくアップデートしていけるということは常に最新の暗号技術を取り入れた証明書を(Let’s Encryptが追随してくれているので)使えるということであり、度々世間を騒がせている弱い暗号方式を使った証明書によって起きる脆弱性に対しても運用上強いはずです。 certbotをインストールする Let’s Encryptの証明書はcertbotを通じて取得、更新を行うので、まずはcertbotを導入します。
6 min read
Change H2O log format to LTSV
bigquery

Change H2O log format to LTSV

h2oのログをtd-agentを使ってGoogle BigQueryに送っています。 * Send h2o log to BigQuery 今まで私はtd-agentのtailプラグインの設定で、フォーマットを愚直に正規表現で設定していました。 format /(?[^ ]*) (?[^ ]*) (?[^ ]*) (?[^\]]*) (?[^ ]* +\S* +\S*) (?[^ ]*) (?[^ ]*) "(?[^\"]*)" "(?[^\"]*)"/ 課題として、以下の不満がありました。 * 見辛い * h2oのログフォーマットを変えたとき追従して正規表現を書き直さないといけない そこでh2oのアクセスログのフォーマットをLTSVに変更してtd-agentでltsvフォーマットを使えるよ
2 min read
Visualization referral domains using google BigQuery
redash

Visualization referral domains using google BigQuery

re:dashとGoogle BigQueryでアクセスログを可視化して遊んでいます。 * bigquery - ゆるふわキャンパー * redash - ゆるふわキャンパー 最近Google BigQueryのドキュメントを眺めていてDOMAIN関数の存在を知ったので、これを使ってリファラのドメインを集計してre:dashで可視化してみます。 h2oでリファラをログに出力する方法 ログフォーマットでリクエストヘッダを指定(%{Referer}i)することでリファラをアクセスログに出力することができます。 * Access Log Directives - Configure - H2O - the optimized HTTP/2 server こんな感じでGoogle BigQueryに送られていっています。 $ bq query "SELECT referer FROM prod.h2o_access_log_20170118 where referer != \"-\" group by referer LIMIT
2 min read
Specify the status code by H2O
h2o

Specify the status code by H2O

re:dash見てたら302ステータスコードがめっちゃ多い! 本来301(恒久的な転送)であるべきなので301リダイレクトするようにh2oの設定を修正しました(301でリダイレクトしているだろうと勝手に思っていた...)。 こんな感じで指定できる。 "ghost.ponpokopon.me:443": listen: port: 443 ... paths: "/": redirect: status: 301 url: "https://blog.lorentzca.me/" 適用後curlを叩いて動作確認。 Before $ curl --head http://ghost.ponpokopon.me/ HTTP/1.1 302 Redirected ... After $ curl --head http://ghost.ponpokopon.me/ HTTP/1.1 301 Redirected ... Yay! 参考
1 min read
Add new column to BigQuery
bigquery

Add new column to BigQuery

h2oのログにUesr-Agent情報も追加した。ログのフォーマットで%{HEADERNAME}iとすると、任意のレスポンスヘッダを出力させることが出来る。 * Access Log Directives - Configure - H2O - the optimized HTTP/2 server access-log: path: /var/log/h2o/access.log format: "%h %l %u %{%Y/%m/%d:%H:%M:%S}t \"%r\" %s %b \"%{User-agent}i\"" bigqueryにh2oのログを送っているので、td-agentとbigquery側でも対応する。 既存のテーブルにUser-Agent用のカラムを追加する まず既存のテーブルのフォーマットを取得する。jqでフィールド情報のみを抽出すると便利。以下私のbigqueryの例。 bq --format=prettyjson
3 min read
Send h2o log to BigQuery
h2o

Send h2o log to BigQuery

h2oのアクセスログをtd-agentを使ってGoogle BigQueryに送ってみる。幾つか手順が必要。 * bigqueryの設定 * スキーマ定義ファイルの作成 * td-agentの設定 bigqueryの設定 bigqueryへアクセスするためにapiを有効化し、アクセスキーを発行するのだが、この工程が長い…。(´・_・`) 慣れてないと混乱する。 gcpアカウントの作成 作る。 * Google Cloud Computing, Hosting Services & APIs  |  Google Cloud Platform プロジェクトの作成 請求先アカウントの設定 bigqueryのapiを有効化 認証情報(とサービスアカウント)の作成 これでやっと以下のようなjson形式の鍵ファイルがダウンロードされる。td-agnetの設定で使う。 { "type": "......", "project_id": "......", "pr
4 min read
Update h2o, h2o yum repository
h2o

Update h2o, h2o yum repository

なんかh2oがアップデートされてないなと思ったらメンテされてるリポジトリ変わってたっぽい(非公式リポジトリなのには変わりないけど)。 * GitHub - tatsushid/h2o-rpm: Unofficial H2O RPM for Fedora, RHEL/CentOS and OpenSUSE builder まあ公式からリンクしてるし半公式みたいなものであろう!というわけで使う。 まず既存のパッケージ、yumrepo削除。 sudo systemctl stop h2o sudo yum remove h2o sudo systemctl daemon-reload sudo rm /etc/yum.repos.d/home\:funzoneq.repo ansibleのコード書き換え。今まではurlモジュール越しにrepoファイル設置してたけど、今はREADMEに従いリポジトリのファイル作成してそれをこぴーする。 - get_url: url=http://download.opensuse.
1 min read
Setting up virtual host by h2o
h2o

Setting up virtual host by h2o

h2oでバーチャルホスト切る設定。最初は以下のように書いてみたけれど、うまく動かなかった(最初に適合した設定しか読んでくれなかった)。 hosts: "ponpokopon.me":80": listen: port: 80 paths: "/": redirect: https://ponpokopon.me/ "ghost.ponpokopon.me":80": listen: port: 80 paths: "/": redirect: https://ghost.ponpokopon.me/ ドキュメント見たりブログ漁ったりしたが、80番を443番にリダイレクトする設定ばかりだったのであまり参考にならず…。listenディレクティブのportを抜いたりいろいろ設定の組み合わせを試した結果、以下の設定で動いた。最終的に参考になったのはここにある設定例。 hosts: "ponpokopon.me":<- ここ変えた
1 min read
To create `/var/run/h2o/` directory using systemd-tmpfiles
ansible

To create `/var/run/h2o/` directory using systemd-tmpfiles

h2oをインストールするansibleのタスクを書いた。ついでにh2oの実行ユーザーをh2oユーザーにしてみた(デフォルトはnobody)。しかし、h2oの起動に失敗する。 ログ見ると/var/run/h2oディレクトリへ書き込みできなくて起動失敗している。 * h2oインストール時(?)に/var/run/h2oが作成される(nobody:nobodyで) * h2o起動直後h2oユーザーで/var/run/h2o以下にpidファイルを作成しようとするが、オーナーがnobodyなので作成失敗→起動失敗 という流れ。 予めディレクトリを作成するタスク書けば良いと思ったけど微妙感が…。h2oの起動スクリプトをいじるのも、h2oアップデート時元に戻されそうだしダメそう。 そこで何かいい方法がないか探した所、systemdにsystemd-tmpfilesというものがあった! これはその名の通り、systemdのテンポラリなファイルを管理できる。/etc/tmpfiles.d/h2o.confのように、/etc/tmpfiles.d以下に定義ファイルを置く。
2 min read