WordPress を nginx + hhvm + mariadb 環境で構築した

TL;DR

妻のバンドのサイトWordPressが重すぎてつらいということだったので、サーバを移行するついでにもろもろ詰め込んでみた

既存環境
  • heteml サーバ
  • MySQL5.0.8
  • PHP5.4
新環境
構築
  • さくらのVPSのカスタムOS インストールでUbuntu 14.04 をインストール
  • もろもろ必要なミドルウェアを apt-getでいれる
  • 旧環境のMySQLのengineがMyISAMだったのでdumpしたsqlファイルを書き換えてInnoDBに変更
  • テンプレートファイルや画像ファイルなどは旧サーバからまるっと移行


ubuntu nginx mariadb hhvm

高速化
nginx conf
  • proxy-cacheの設定を追加


gist1a3453c11f667eca32a1

  • proxy-cacheの設定を追加


gist7bdc8e2e240e05ac6da0

  • hhvm.conf はデフォルトのまま


gist9c5af01c27dbb59e4e37


f:id:tknzk:20150208162511j:plain

所感
  • WordPressつらいので、他の静的なhtmlを書き出すツールへの移行も考えたが、更新のしやすさと慣れの面と既存データの問題でWordPressのままいくことにした
  • Ubuntuほぼはじめてで、コマンドが慣れなかったけど、さくっと構築出来たのでよかった
  • hhvmがCPUを食いつくす現象が構築時にあったけどrestartしたらおさまった*1
  • 旧環境はMyISAMだったのでそこで刺さってたようす

*1:原因は不明のまま

Yosemiteにupdateしてhttpdとvagrantが上がらくなって肝を冷やしたはなし

Yosemiteがリリースされたのでカジュアルにアップデートしたらhttpdvagrantが上がらなくなった。

  • vagrantはvirtual boxの最新版をインストールして解決
  • httpdbrewhttpdをインストールして解決 *1



gist4a262686e3bd3b2f996e


gist386bc90923b3bea56827



*1:httpdbrew tap homebrew/apache してから入れなおし

ISUCON4の予選に出た #isucon

ISUCON4 の予選に出た。

今回は、去年のチームメンバーのid:urapico とフロントエンドエンジニアのnkns の3名体制で臨んだ。

セットアップ
  • テーブルを移動して、テレビをセカンドディスプレイとして使うセッティング


  • AWSクーポンを投入 *1
集合
  • 9:30 idobataに集合
開始
  • 10:00 スタート
  • 公開されたAMI でEC2インスタンスを起動
  • 各自ssh でログインしてもらう
  • id:urapico がソースをbitbucketにpush
  • PHPに切り替える
  • 502 BadGateway
  • 時間がもったいないということでRubyでいく宣言
  • ざっくりソースを読む
  • DBへのアクセスをどう減らすかだねっていう話をする
作戦会議
  • 役割分担を決める
  • インフラを自分がみる
  • アプリ側をurapicoとnknsに担当してもらう
PHPに変更
  • 運営のヘルプスレッドをみていたら、PHPの話がでていたので、それを参考に再度PHPで動かしてみることに
  • supervisor.conf を書き換えて、instance reboot
  • 動いた!
  • foremanが起動していて、初期実装のRubyが8080に居座っていたのが原因だった orz
改修内容
  • my.cnf を改修
  • mysql slowlog を確認
  • index を追加
  • users table にlast_logined_at, last_logined_ipを追加
  • mypageで参照される 最終ログイン時間、最終ログインIPをlogin_log を見ないように改修
  • redis, phpredis 導入
  • banned_ip, blocked_user をredisにキャッシュ
  • last_logined_ip の部分のチェックでエラーとなったため、チェックロジックを妄想
  • 一つ前のlogined_ip を持ってる必要があるとふんで改修
  • エラー除去
  • passwordのhash 計算の部分にcacheを導入
結果
  • デフォルトスコア 1300ぐらいから8000ぐらいにはアップできた
  • 惨敗
感想
  • 上位スコアには5~10倍の差を付けられていて大変厳しい現実・・
  • benchmarkツールのバグ等もありながら、運営の皆様お疲れ様です。ありがとうございます!!
  • 着実に負荷部分の実装をがりっと書き換えるもしくは飛び道具を持つということができないと厳しいなあ
  • ともあれ、チームで参加できたし、勉強になったのでよかった!

運営の皆様、ありがとうござました!

http://isucon.net/

*1:AWS様ありがとうございます!

iTunesのランキングをつぶやく

妻のバンドがiTunesで曲をリリースして、そのランキングを追いたいという要望を受けて、簡単な実装をしてみた。

iTunesのランキングは、RSSappleが配信しているので、それをパースして、tweetする仕組みになっている。当て込みで作ってるので、だいぶアレな実装になってるけど、これをherokuにdeployして、heroku scheduler で叩くと、つぶやいてくれる。

$ bundle exec ruby iTunes-ranking-tweet.rb


gist413e1c104c7f6a98c792

rakurai

rakurai

  • YAPANI!
  • Jazz
  • ¥200

heroku legacy-routingの対応をした

tknzk.com をheroku でホスティングしているわけですが、
そのDNSの設定を、herokuが持っているIPでAレコードをしていました。
そのIPで設定する方法は、今後停止する予定だから対応してというメールが来たので対応をした。

This is a reminder that Heroku is turning off the legacy routing path on September 22nd 2014. This is part of an effort to standardize on a single, fast, highly available and scalable routing stack for all customers.

herokuで利用しているサービスでこのlegacy-routingを使っているかどうかは、
https://legacy-routing.herokuapp.com/を参照すれば確認できる。

具体的には、もともとのherokuappのドメイン xxxx.herokuapp.comをCNAMEに割り当てればOKなのだけれど、利用していたムームードメインムームーDNSがroot domainに対してCNAMEを設定できない仕様だった。いい機会だったので、AWS Route53にネームサーバを移行した。

Route53 もroot domainの CNAMEは未対応なのだけれど、AWS S3のWebHostingのRedirectをつかって処理した。

  • tknzk.com -> S3 web-hosting 301 redirect
  • tknzk.com Alias S3 web-hosting on Route53
  • www.tknzk.com -> CNAME (xxxx.herokuapp.com)

AWSのWebConsole からポチポチ設定して、完了。

参考URL
Configuring Amazon Route 53 DNS for your Heroku App | Heroku Dev Center

Google Cloud Platform Developer Roadshowに行ってきた #gcpjp

Google Cloud Platform Developer Roadshow に行ってきた。

以下、メモ程度

  • Cloud DNS
  • Managed VMs 便利そう
  • BigQuery サインアップすればすぐサンプル動かせるそうなので、試したい
  • Google Analytics Premire は BigQueryにdailyで生データを投入するのが付随している

使うタイミングなくて、調査もしてないけど、この機会に色々触ってみよう!

主催のGoogleのみなさま、ありがとうございました!

GitHubKaigiに行ってきた #githubkaigi

GitHubKaigiに行ってきた!
一声かけると、500人規模で集まるのすごい!

登壇された方の中で、印象に残ったことなど

とくに、Dont shourtcut your comminication, PDD, Write Code のはなしがよかった。

登壇された皆様、運営チームの皆様、ありがとうございました!

GitHub Kaigi