~/.ssh/config のメモ

~/.ssh/config の知見が溜まってきたのでメモしておく。

Host *.codefirst.org
  Port 10022
  User mallowlabs

Host heroku.com
    IdentityFile ~/.ssh/id_dsa_heroku

ServerAliveInterval 300
TCPKeepAlive yes

1つ目のブロックは特定のドメインSSH のポート番号とログインユーザ ID を指定している。
2つ目のブロックは特定のブロックで使う秘密鍵を指定している。
3つ目のブロックは、keep alive の設定をしている。
ただこれだけだと接続が切れるっぽいので、iTerm2 でも以下の設定をしている。

Heroku 上の Rails アプリケーションで https を強制する gem 作った

rack-rewriterack-ssl-enforcer を使えばできるのだけど、Gemfile に一行書くだけで実現できるやつが欲しかったので作った。

使い方

Gemfile に一行

gem 'heroku-rack-ssl-enforcer-rails'

と書くだけで、http://*.herokuapp.com/ にアクセスされた場合に、 https://*.herokuapp.com/ にリダイレクトする。

アクセスされたホスト名で見ているので、*.herokuapp.com の時だけ有効になる。
カスタムドメインを使っている場合は無視される。

まとめ

Heroku アプリは https で使おう。

Apache httpd で http でアクセスされた https にリダイレクトする

Apache 入門ブログみたいになってるけど。

実現したいこと

Apache httpd の設定だけで http でアクセスされたら同じアドレスで https にリダイレクトしたい。

設定内容

# /etc/httpd/conf.d/rewrite.conf
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond "%{SERVER_PORT}"    "^80$"
    RewriteRule "^(.*)$"            "https://%{SERVER_NAME}$1" [R,L]
</IfModule>

Apache の configtest をしてからリロードするのを忘れずに

# apachectl configtest
# service httpd restart

まとめ

https 最高!

Apache httpd でメンテナンスモード

設定した内容を忘れないようにメモ。

実現したいこと

ドキュメントルートに maintenance.html というファイルが存在すれば、メンテナンスモードとし、すべてのアクセスに対して maintenance.html を返す。
ただし、特定の IP アドレスからのアクセスに関しては、通常通りのレスポンスを返す。

準備

1. DOCUMENT_ROOT/maintenance.htmlを配置。画像等は使わず、1つの HTML ファイルで完結するようにする(と設定が楽)

2. /etc/httpd/conf.d/rewrite_maintenance.conf を配置。

# rewrite_maintenance.conf
ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REMOTE_ADDR} !=127.0.0.1
  RewriteCond %{REMOTE_ADDR} !=xxx.xxx.xxx.xxx
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

xxx.xxx.xxx.xxx にはメンテナンスモードから除外したい IP アドレスを指定する。

3. SSL でアクセスする場合は、/etc/httpd/conf.d/ssl.conf も編集しておく。

# ssl.conf
<VirtualHost _default_:443>
    ## snip ##
    Include conf.d/rewrite_maintenance.conf
    ## snip ##
</VirtualHost>

4. maintenance.html を maintenance.html.rename_me 等にリネームしておく。

$ mv /var/www/html/maintenance.html /var/www/html/maintenance.html.rename_me

5. Apache httpd の reload

$ service httpd reload

メンテナンス時

maintenance.html のファイル名を切り替えるだけ。Apache httpd のリロードは不要。

メンテナンスモード ON
$ mv /var/www/html/maintenance.html.rename_me /var/www/html/maintenance.html
メンテナンスモード OFF
$ mv /var/www/html/maintenance.html /var/www/html/maintenance.html.rename_me

まとめ

ファイルのリネームだけでメンテナンスモードに入れるので、自動化も簡単ですね。

New Relic on Tomcat で Browser Monitoring が有効にならなかった話

環境


こんな感じで Browser を開いても何も表示されない。

対処

JSP のプリコンパイル結果を削除する

CATALINA_HOME/work/Catalina/localhost/ の対象のアプリのディレクトリを全部削除すると出るようになった。

New Relic のヘルプ見てても「ちょっと待ったら出るから。出なかったらサポートに問い合わせな」とか書いてあってやや焦った。

Kibana を Heroku で動かす

Kibana というログビジュアライゼーションツールが話題です。
便利なアプリがあればそれを Heroku で動作させたいと思うのが人間の性です。
ということで Kibana を Heroku で動かしてみました。

ポイントは以下の4つです。

それでは実際の手順です。

$ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.zip
$ unzip kibana-3.0.1.zip
$ cd kibana-3.0.1
$ git init
$ git add .
$ git commit -am "first commit"
$ heroku create --stack cedar --buildpack https://github.com/pearkes/heroku-buildpack-static
$ heroku addons:add searchbox
$ git push heroku master

ここまでやったら Heroku にログインし、Searchbox アドオンのページを開きます。

Alternative Url が今回利用する URL です。

config.js に上で確認した URL を記載します(https に変更しておきます)。

diff --git a/config.js b/config.js
index 31274ef..450bdfc 100644
--- a/config.js
+++ b/config.js
@@ -29,7 +29,7 @@ function (Settings) {
      *  +elasticsearch: {server: "http://localhost:9200", withCredentials: true
      *
      */
-    elasticsearch: "http://"+window.location.hostname+":9200",
+    elasticsearch: "https://dwalin-us-east-1.searchly.com/api-key/5f15ba8ba337a90xxxxxxxxxxxxxxxxx",
     /** @scratch /configuration/config.js/5
      *
$ git commit -am "changed url"
$ git push origin master

ここまでで heroku open すれば Kibana が見られるようになっています。
ただし、Kibana のダッシュボードの保存ができません。
それでは困るので以下の手順で kibana-int というインデックスを作ります。

Heroku の Searchbox アドオンのページから New Index をクリックします。

kibana-int と入力し、Create をクリックします。

以降はダッシュボードの保存も問題なく動作します。

Elasticsearch アドオンについて

2014/05/02 現在、無料で使える Elasticsearch アドオンは2つあります。

  • Bonsai Elasticsearch
    • analyzer に kuromoji が使える(!)
    • /_nodes/ にアクセスできないため、Kibana が使えない
    • 無料プランでは 5,000 ドキュメントまで

まとめ

  • Kibana は Heroku の無料プランで動く
  • ただし kuromoji は使えないのが残念
2014/05/18 追記

Searchbox も 1.x から kuromoji がデフォルトで使えます。素晴らしい!
中の人(?)からからコメントでご指摘いただきました。ありがとうございます。

IRKit と Heroku Scheduler でフロアライトを光目覚ましにしてみた

ハイテク学習リモコンIRKit を購入して遊んでいる。
既存の家電にエクステンションポイントを生やすことができるのが画期的だと思っている。

最近「光目覚ましが最高に起きれる!」という記事をよく見るので、IRKit とフロアライトを組み合わせて、光目覚ましにしてみた。Mac がスリープになっていて、寝坊するのは嫌なので、Heroku Scheduler を使って、インターネット側からフロアライトをつけるようにしてみた。

Gemfile

source ‘https://rubygems.org'
gem ‘faraday’

light_on.rb

require 'faraday'
require 'json'

conn = Faraday.new(url: 'http://api.getirkit.com') do |builder|
  builder.request  :url_encoded
  builder.response :logger
  builder.adapter  :net_http
end

conn.post '/1/messages', {
  clientkey: ‘YOUR_CLIENT_KEY',
  deviceid:  ‘YOUR_DEVICE_ID',
  message:   {format: "raw",
              freq:   38,
              data:   [17421,8755,1190,1073,1190,3341,1190,1073,1190,1073,1190,1073,1190,1073,1190,1073,1190,3458,1190,3458,1190,1073,1190,3341,1190,3341,1190,1073,1190,3341,1190,3341,1190,1037,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1073,1190,1073,1190,1073,1190,1073,1190,1073,1190,1073,1190,1073,1190,1073,1190,3341,1190,3341,1190,3341,1190,65535,0,13693,17421,4400,1190,65535,0,65535,0,60108,17421,4400,1190]
              }.to_json
}

message の部分は我が家のフロアライトの ON のデータなので自分が使っているフロアライトの赤外線データを使ってください。赤外製データや API キーの取得には 橋本商会 » 赤外線学習リモコンIRKitのrubygemを作った が便利。

あとはこれを Heroku に push して、Heroku Scheduler アドオンを追加して、

bundle exec ruby light_on.rb

を Daily で追加する。時間は起きたい時間の(JSTとして見て)9時間前に設定する。

4週間ほど運用してみて

最初の数日は、フロアライトがついたタイミングで目が覚めた。
普通の目覚ましの耳障りな音を聞かなくて済むのでライフチェンジング感を感じていたが、
そのまま二度寝するので、結局普通の目覚ましの設定時間で起きていた。
そうこうしているうちに体が慣れて、フロアライトの点灯では起きられなくなってしまった。
起きる時にフロアライトのリモコンを探す必要がなくなったのは楽になったが、目覚ましとしての役割では機能していない。

まとめ