読者です 読者をやめる 読者になる 読者になる

りむっちスケッチ

ハニカムログ

EC2に全く新しいSSD-Backed EBSがきたぞ!

この瞬間を待ってたぞ!

  • New SSD-Backed Elastic Block Storage

http://aws.amazon.com/jp/blogs/aws/new-ssd-backed-elastic-block-storage/

とりあえず公式ブログをざっくりよんでまとめた。

  • これまでのEBS

    • A Single EBSボリュームで4000IOPSが最大 (1GB - 1TB ディスクサイズにも依存)
    • Multiple PIOPS EBSボリュームで48,000IOPS (with raid)
  • これからのEBS

    • General Purpose (SSD)
    • コストは一律$0.10/GB-month
      • IOオペレーションやPIOPSなどの要因による課金はない
    • Boot Boost
      • EBSがSSDになるのでOSをより早く起動させることができる
      • Linuxをブートさせるには7000I/Oくらいがだいたい必要で、Windowsの場合は70,000I/Oが必要。
      • これまでの磁器ドライブからSSDに変更した場合
        • Windows2008 R2で50%も高速化した。
      • すでにあるAMIを起動するときにGeneral Purpose(SSD)を選択できるし、これまでのStandardEBS(MagneticEBS)も引き続き選択することができるようになった。

General Purpose (SSD)のバースト耐性

  • 今回のハードウェア設計ストラテジにはトークンパケットアルゴリズムを採用している
    • 1read/1writeをI/O クレジットという単位で管理していて、バースティングを挙用できるロジックが採用される。
    • それぞれのSSDでは540万トークンまで保持する。
    • トークンは3IOPS/GB/secのペースで蓄積できる。
    • 1つのボリュームあたり3,000IOPSを処理する事ができる。

料金について

Tokyo

drive cost/GB cost/PIOPS
General Purpose (SSD) $0.12/GB
PIOPS(SSD) $0.142/GB $0.114/GB
Magnetic volumes(StandardEBS) $0.08/GB $0.08/100万IOリクエスト
S3へのEBSスナップショット $0.095

N.virginia

drive cost/GB cost/PIOPS
General Purpose (SSD) $0.10/GB
PIOPS(SSD) $0.125/GB $0.10/GB
Magnetic volumes(StandardEBS) $0.05/GB $0.05/100万IOリクエスト
S3へのEBSスナップショット $0.095

Ireland

drive cost/GB cost/PIOPS
General Purpose (SSD) $0.11/GB
PIOPS(SSD) $0.138/GB $0.11/GB
Magnetic volumes(StandardEBS) $0.055/GB $0.055/100万IOリクエスト
S3へのEBSスナップショット $0.095

やはりアジアパシフィックリージョンは高いね。

新EBSのタイプ別に特性などを確認してみた

General Purpose (SSD)

  • 通常利用でお勧め。特にシステムブートなんかで使った方がいい。AMI起動時にはこれを選択していくことになりそう
  • ボリュームサイズは 1GiB - 1TiBが選択可能
    • ベースパフォーマンスは 3IOPS/GiB なので100GBのEBSブロックをつくったら300IOPSくらいは能力として備えているということになる。
    • PIOPSを使わないという形なので300IOPSはあくまで目安なのでネットワーク帯域の状況や、トークンパケットのロジックもふまえて考えるとパフォーマンスが十分でてこない可能性もあると予想
    • 1000GiBまでのボリュームがつくれるので実質のバースト最大は3000IOPSということになる。
    • APIで利用時のボリューム名称は gp2。
  • 設計的には、一桁台ミリセカンドのレイテンシで応答するIOパフォーマンスを提供。
  • それぞれのボリュームは初期I/Oクレジットとして、540万IOクレジットを蓄積できる。
  • 最大バーストでは30分間の間、3,000IOPSを持続することを可能としている。(クレジットが回復する期間のことについてもよく考えないとあぶないかもしれない)

Provisioned IOPS (SSD)

  • クリティカルな高負荷データベースなどに利用することをお勧め。
    • RandomIOでのパフォーマンスをしっかりと出してくれるとのこと。
  • ボリュームサイズは 10GiB - 1TiB で利用可能
    • 一貫した性能を発揮するらしい。 4,000IOPS を最大として提供する。
    • とはいえ基本は3IOPS/GiBということなんだと思われる。
  • APIで利用時のボリューム名称はio1
  • PIOPSにするには、一定の割合ルールに従う必要がる。
    • 3,000IOPSを設定したければ、100GIBのディスクが必要といった具合に、ボリュームの30倍が最低でも最大IOPS指定となる。
    • よりパフォーマンスの高いIOPSを獲得したければ例によってRaidを組めというおぼし召しがあった。

Magnetic EBS (Standard EBS)

  • しょぼい用途に利用
  • ボリュームサイズは 1GiB - 1TiB
  • 平均して最大で100IOPS程度のパフォーマンスを発揮する
  • APIで利用時のボリューム名称は standard

SSD-Backed EBSのバースティングについて

  • 何度も30分間に3000IOPSのバースティングができると謡っている箇所があるけれど、どういうことなのかドキュメントをさらっと確認してみた

ベースパフォーマンスとバースティング持続時間について

  • まず、1GBあたり3IOPSが保障される
  • そして1ボリュームあたり540万IOクレジットが確保される。
  • ボリュームごとにディスクのIOPSバースティング最大を3000IOPSと設定されているので仮に3000IOPSが出たとしたら以下の計算式でバースト持続時間が決定されるらしい。
バースト持続時間=(IOクレジットの残り)/(バーストIOPS) - 3*(ボリュームサイズ) 
  • つまり1GBのボリュームの場合に300IOPSのバースティングが発生したと仮定すると下記のようになる。
540万IOクレジット/3000IOPS - 3*1(GiB) = 1797 (sec) = 29.95 (miniutes)
  • 一つ懸念点があって、ドキュメントに"Seconds to fill empty credit balance"という項目がある。これはfill empty creditとなってるけど540万IOクレジットが何秒で回復できるかを示したものでたとえば、1GIBでは3IOPSずつしか回復できない。
(540万IOクレジット)/(3 io credits/sec) = 1,800,000秒 回復にかかる
  • Raidを組んで、マルチプルボリュームにすることで、この3,000IOPSよりもパフォーマンスを獲得できるとしている。

ボリュームごとのバースト目安表

  • 漢はだまって1TBのEBSボリュームを作れというおぼし召しである。
size(GB) base performance(IOPS) バースト持続可能時間@3,000IOPS /seconds クレジットが全回復するまでの時間(sec)
1 3 1,802 1,800,000
100 300 2,000 18,000
250 750 2,400 7,200
500 1,500 3,600 3,600
750 2,250 7,200 2,400
1,000 3,000 無限 N/A

新型EBSのベンチマークについては、いつもの id:rx7 さんが颯爽ベンチってくれると思うので待ちます。

(追記)
早速、並河さんがベンチマークをバシっと公開しています!この行動力!尊敬します!!!
2014-06-18 - 元RX-7乗りの適当な日々 http://d.hatena.ne.jp/rx7/20140618/

Tiarraで拾った文字列をnmaにプッシュ通知する

プッシュ通知をもっと便利に使う

今や、様々なアプリケーションがAPNSやGCMでプッシュ通知を実装しているけれど、自分の好きに文字列フィルタしながらプッシュをさせるにはどうしたらイイモノかという点に注力した手法があることを今更ながらに知った。実に今更感が漂っていて恥ずかしいレベルだけれども、たしかにこれは便利だなぁという事。

tiarraに何でも統合してからPushさせるまで

f:id:rimtty:20140617114229p:plain

すべてtiarraが基点になるのだけれど、tiarraが観ているサービスは以下

ここに、bitlbeeなんかを追加すればIM関係もアラートが出せるので便利さは増すのかもしれない。

tiarraへはもうほぼチョクセツアクセスすることはあまりなくて、tiarraのLog::DBI導入でログはMySQLへ、それから書き込みはsocketを使ってtiarraMetroの導入でIRCクライアントレスを実現してる。全開TIGの導入について掲載したけれども、常時Twitterを流し観してくれてるTiarra、Tigデーモンはありがたい面が存在する。

Auto::Notify拡張

tiarraにはAutoNotifyという機能実装してあってとくていの条件をつかってHTTPポストを実行することができる。これをうまく使うと他のへんなことにも使えそうだがまたそれはおいおい。

TiarraのConfのケツにこういうのを書けば良い。 regex-keywordに書き込んでいる文字列に反応して、自分の端末にプッシュ通知がくるというワケ。

+ Auto::Notify {
    mask: *@* *!*@*
    regex-keyword:(rimtty|りむってぃ)
    format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text)
    blocks: nma prowl

    prowl {
        type: prowl
        apikey: <ここにAPIキーを入れてね>
        priority: 0
        application: tiarra
        event: keyword
    }

    nma {
        type: nma
        format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text)
        apikey: <ここにAPIキーを入れてね>
        priority: 0
        application: tiarra
        event: keyword
    }

}

このPushサービスを利用することで、tiarraが拾っている文字列のなかから必要に応じて自分のケータイデバイスなどにPushアラートが投げられるという形。ProwlもNMAもサイトにログインしてAPIキーを取得し、iOS/Andoroidアプリをそれぞれストアから拾ってきて、端末でログインすればPushデバイスとして紐付けが完了する。

APNSもGCMも自分でアプリとデバイスプッシュへのサービスを書けば同じことができるので、AmazonSNS、SQSとうまく連携させれば低価格ですべてのデバイスに投げ込むようなサービスも比較的簡単に作れると思う。WPにもいまは対応してるし。

f:id:rimtty:20140617132103p:plain

LinuxへのTwitterIrcGatewayの導入をお復習いする

TIGのデキのよさととっちらかり具合

とんでもないくらい手がこんだデキのTwitterIrcGatewayをひさしぶりに手動で導入しなおした。…しかし、情報が散らかりまくっていてとてもとてもどれいれたらまともに動くのかさっぱりピーマンであったので、少し状況を整理しながらどれを突っ込めば良いんだと思案…

TwitterIrcGatewayの過去のコードを追っていくと2008年とかだったりのがそのままそっくり残っていたりする。monoベースでLinuxでも動作するように設計されたシステムはとても導入しやすく、Scriptsも自分で組めてIronRubyIronPythonで駆動する仕組みだ。

あまりにデキがよく最高にクールなんだけど、あらゆる場所に情報がとっちらかっており、どうやって動作させたもんやらとあきらめてOpentigを使っちゃう人も多いのではなかろうか。

TIG最速インストール道

ゴールとして、TIGをいれて、自分のIRCクライアント上でfavやrtやらがまぁできる状態を目指す。 それ以上のことをしたければましてくとかを漁ってください。

CentOS6へTIGをぶち込む

ぐぐると情報が掲載されてるブログやページがバンバンでてきてバンバン古いわけなので、そういうのは全部無視していただいて以下の手順で。

Mono 2.6.4 ベースランライムバンドルをゲットする

f:id:rimtty:20140617103650p:plain

id:mayuki が公開している公式サイトから

http://www.misuzilla.org/Distribution/TweetIrcGateway/

32bitをつかってるんだったらその上のやつをゲットしよう

※ 2.6.4 の mono を自分でいれれるんだったらこれを使わなくてもOK

ビルド済みのTIGバイナリをゲットする

https://github.com/opentig/TwitterIrcGateway/

ここにいってもビルド済みのバイナリが無いので、id:shunirr が自動CIビルドしているのでここのgitリポジトリを活用する。

同一ディレクトリに2つのデータを展開する。

$ mv TwitterIrcGateway-RuntimeBundle-Linux_i386_x64-Mono-2.6.4-20100508.zip /opt/
$ cd /opt/
$ unzip TwitterIrcGateway-RuntimeBundle-Linux_i386_x64-Mono-2.6.4-20100508.zip
$ cd TwitterIrcGateway
$ git clone git@github.com:opentig/TwitterIrcGatewayBinary.git .
$ chmod 755 TwitterIrcGateway*

TIGを起動する

インターネットからTIGに繋がるようにTIGを起動する。

cd /opt/TwitterIrcGateway
./TwitterIrcGateway --port=16669 --bind-address=<GlobalIP> --encoding=utf-8

# ポートを指定しないと、127.0.0.1で立ってしまう。内部からしかアクセスできなくなる。

Start TwitterIrcGateway Server v2.6.5206.23333
[Configuration] BindAddress: <Global IP>, Port: 16669
[Configuration] EnableTrace: False
[Configuration] IgnoreWatchError: False
[Configuration] Interval: 90
[Configuration] ResolveTinyUrl: True
[Configuration] Encoding: Unicode (UTF-8)
[Configuration] SetTopicOnStatusChanged: False
[Configuration] EnableDropProtection: True
[Configuration] IntervalDirectMessage: 180
[Configuration] ChannelName: #Twitter
[Configuration] EnableRepliesCheck: False
[Configuration] IntervalReplies: 300
[Configuration] DisableUserList: False
[Configuration] BroadcastUpdate: False
[Configuration] ClientMessageWait: 0
[Configuration] BroadcastUpdateMessageIsNotice: False
[Configuration] Proxy:
[Configuration] PostFetchMode: False
[Configuration] EnableCompression: False
[Configuration] DisableNoticeAtFirstTime: False
[Configuration] OAuthClientKey:
[Configuration] OAuthSecretKey:

IRCクライアントから、該当のポートとIPへ接続してみる。LimeChatだとこんな感じ。

f:id:rimtty:20140617110140p:plain

接続後、アプリケーション認証用のURLがでるので、指示に従う

f:id:rimtty:20140617110223p:plain

f:id:rimtty:20140617110241p:plain

ここで認証許可を出すと、PINコードが発行されるので、LimeChatに戻ってPINコードを入力する。

f:id:rimtty:20140617110309p:plain

これで、TIGの設定は完了。Configフォルダとhogeユーザーのフォルダができあがる。

/opt/TwitterIrcGateway/Config/hoge

DLRスクリプトをつっこんで拡張する

retweets機能とかバクツイとかを id:mashiro が提供しているのでそれを丸ごとぶち込む。

$ cd /opt/TwitterIrcGateway/Config/hoge
$ mkdir Scripts
$ git clone https://github.com/opentig/tig-dlr-scripts.git

IRCでTIGに接続し、

$ /join #Console
してConsoleチャンネルに入室。
$ dlr
DLRコンテキストに移動し
$ reload
とタイプしScripts以下をリロードさせる。

Typablemapをセットする

$ /join #Console
してConsoleチャンネルに入室
$ config
として、コンフィグコンテキストに移動し、
$ set EnableTypableMap true
とする。
ついでにTypebaleMapのカラーを赤にする
$ set TypableMapKeyColorNumber 4

Typable文字列をしていてコマンドを投げればrtとかfavできる

$ rt {tm}
$ fav {tm}

まとめ

TIGは最高にクールなプロダクトだと思う。設置も実に簡単だし、ユーザーごとにすべて個別に空間が管理されてるのは素敵だ。monoつかってるけど全然メモリ食わないしとても良い。次回はTiarraとTIGとnmaについて書いておこうと思う。

Dockerが1.0になったしOSXに入れてみた

OSXでDockerを試してみる

とりあえずまず、boot2dockerのpkgを拾ってきてセットアップしよう。今、手元の環境はYosemiteなのでちょっと心配だけど多分大丈夫。

f:id:rimtty:20140615101040p:plain

f:id:rimtty:20140615101045p:plain

boot2dockerを起動する

起動したらぺろぺろーっとログが流れる。

f:id:rimtty:20140615101435p:plain

if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
/usr/local/bin/boot2docker init 
/usr/local/bin/boot2docker up && export DOCKER_HOST=tcp://$(/usr/local/bin/boot2docker ip 2>/dev/null):2375
docker version

ここを観るとわかるように、terminalで

$ boot2docker init
$ boot2docker up

とすれば起動する。ログを見るとわかるけど.ssh/にid_boot2docker.pubができてる。

2014/06/15 10:12:56 Creating VM boot2docker-vm...
2014/06/15 10:12:56 Apply interim patch to VM boot2docker-vm (https://www.virtualbox.org/ticket/12748)
2014/06/15 10:12:56 Setting NIC #1 to use NAT network...
2014/06/15 10:12:56 Port forwarding [ssh] tcp://127.0.0.1:2022 --> :22
2014/06/15 10:12:56 Port forwarding [docker] tcp://127.0.0.1:2375 --> :2375
2014/06/15 10:12:56 Setting NIC #2 to use host-only network "vboxnet0"...
2014/06/15 10:12:56 Setting VM storage...
2014/06/15 10:13:03 Done. Type `/usr/local/bin/boot2docker up` to start the VM.
  • localhost:2022 -> :22 (NIC1)
  • lcoalhost:2375 -> :2375 (NIC1)
  • vboxnet0(NIC2)

が設定されてることが分かる。

$ /usr/local/bin/boot2docker up && export DOCKER_HOST=tcp://$(/usr/local/bin/boot2docker ip 2>/dev/null):2375
2014/06/15 10:13:04 Waiting for VM to be started...
...........
2014/06/15 10:13:26 Started.
2014/06/15 10:13:26 To connect the Docker client to the Docker daemon, please set:
2014/06/15 10:13:26     export DOCKER_HOST=tcp://192.168.59.103:2375
imac:~ rimd2r$ docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 63fe64c
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 63fe64c

最後は良い感じに boot2docker up をして、環境変数を設定して起動しなおしてる。

boot2docker -v status
2014/06/15 10:44:06 executing: VBoxManage showvminfo boot2docker-vm --machinereadable
running

docker runを試す

$ docker -v
Docker version 1.0.0, build 63fe64c

$ docker run ubuntu echo hello world
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
ad892dd21d60: Download complete 
511136ea3c5a: Download complete 
e465fff03bce: Download complete 
23f361102fae: Download complete 
9db365ecbcbb: Download complete 
hello world

ubuntuイメージを落としてきてEchoでヘローするまでの流れ。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              ad892dd21d60        10 days ago         275.5 MB

dockerイメージとしてubuntuという名前でrepositoryが登録された。

VirutalBoxでは

f:id:rimtty:20140615104148p:plain

Mac OS X上で動いているVirtualBox上に、Boot2docker(vm)が起動していることが分かる。 この中でDockerサーバーが動いていて、その中でDockerコンテナが使える形。

boot2docker-vmのイメージの設定ファイルからネットワークを見ると、ポートフォワードの状況が確認できる。

f:id:rimtty:20140615105637p:plain

boot2dockerで動いているdockerホストにsshするには?

$ boot2docker ssh
Warning: Permanently added '[localhost]:2022' (RSA) to the list of known hosts.
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 1.0.0
             master : 16013ee - Mon Jun  9 16:33:25 UTC 2014

普通にboot2dockerコマンドをつかってもいいし

$ ssh -i .ssh/id_boot2docker -p 2022 docker@localhost

                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 1.0.0
             master : 16013ee - Mon Jun  9 16:33:25 UTC 2014

こんな感じでちょろい。dockerっていう名称のユーザーであるので注意が必要。

dockerホストのLinuxはどうなってんの?

root@boot2docker:/home/docker# uname -a
Linux boot2docker 3.14.1-tinycore64 #1 SMP Mon Jun 9 16:21:23 UTC 2014 x86_64 GNU/Linux
root@boot2docker:/home/docker# cat /etc/version
1.0.0

root@boot2docker:/opt# cat /proc/sys/kernel/osrelease
3.14.1-tinycore64
root@boot2docker:/opt# cat /proc/version
Linux version 3.14.1-tinycore64 (root@1b022b772237) (gcc version 4.8.3 (Debian 4.8.3-2) ) #1 SMP Mon Jun 9 16:21:23 UTC 2014

linux 3.14.1でうごいてる事が確認できる。etcの中を眺めてる分には、これはredhat系統にみえるけど/optとかもあるのでdebian系っぽいきもするけど、tinycoreベースのオリジナルのLinuxかな。つーことはdockerユーザーのパスワードはtcuserですね。

いいかげんRailsを体系的に学ぼうと思う

Rails関連の仕事が増えてきたんだけどいかんせん全然勉強してないからよくわからないことが多いのでそろそろちゃんと学ぼう。

適当にRubyは書けるので、なんだろとりあえずみんながオススメしてる

これでいいかな。 3回は舐めろというので舐めてみよう。

さくらVPSにgyazo+sinatra+nginxでオレgyazoを構築

f:id:rimtty:20140323114235p:plain

有意義なオレgyazoの設置

gyazoは広告がでて鬱陶しいので、オレgyazoを作ってクライアントから利用するのが吉。どこでどう使うかってのはいろんなポイントがあって設置したら便利になるよってことをまず書いておく。

  • Macgyazo.appからオレgyazoへ投稿してClipboardにURLをペースト
  • Winのgyazo.exeからオレgyazoへ投稿してClipboardにURLをペースト
  • 公式Gyazoのインターネット上に載らなくて社内とかでも使えて便利
  • AndroidGyazoアプリからオレgyazoのURLを指定することで出先でもすぐgyazoれて便利
  • オレgyazoはウェブ上に載っかっていくので良い感じのViewerを一枚噛ませばとても便利

準備

設置する前に、rbenvとbundlerくらいは入れておいて。 それから、今回は簡単にするためにnginxとrackupを使って楽ちん構築とします。

環境

リポジトリ

rimtty/gyazoserver · GitHub

gyazoserverの設定

# gyazoserverのソースをGithubから取得

$ mkdir /opt/gyazoserver
$ mkdir /opt/gyazo
$ cd /opt/
$ git clone https://github.com/rimtty/gyazoserver

gyazoserver/gyazo.rbの最終行を自分のサーバーのドメインに設定しておく。
L34     "http://hoge.com/#{hash}.png"

$ cd /opt/gyazoserver 
$ rackup -p 8000 &

これでGyazoサーバーが起動。

nginxの設定

# nginxのリポジトリを追加

$ vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

# nginxのインストール
$ yum install nginx
# nginxの設定ファイル編集

$ vi /etc/nginx/nginx.conf

worker_processes  2;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    # nginxのサーバーバージョンを返さない設定
    server_tokens    off;

    # logformatにLTSVをセット
    log_format  ltsv  'time:$time_local\t'
                      'msec:$msec\t'
                      'host:$remote_addr\t'
                      'forwardedfor:$http_x_forwarded_for\t'
                      'req:$request\t'
                      'method:$request_method\t'
                      'uri:$request_uri\t'
                      'status:$status\t'
                      'size:$body_bytes_sent\t'
                      'referer:$http_referer\t'
                      'ua:$http_user_agent\t'
                      'reqtime:$request_time\t'
                      'upsttime:$upstream_response_time\t'
                      'cache:$upstream_http_x_cache\t'
                      'runtime:$upstream_http_x_runtime\t'
                      'vhost:$host';

    sendfile        on;

    # keepaliveを60秒に
    keepalive_timeout  60;

    # gzipを有効
    gzip  on;

    # proxy cacheを有効に
    # key 32MB/max 300MB/最大有効期限7日
    proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my-key:32m max_size=300m inactive=7d;
    proxy_temp_path /var/cache/nginx/tmp;

    # conf.d配下を読み込むようにセット
    include /etc/nginx/conf.d/*.conf;
}
# nginxへgyazoサーバーの設定

$ vi /etc/nginx/conf.d/gyazo.conf

upstream gyazo {
    server 127.0.0.1:8000;
}

server {
    listen       80;
    server_name  hoge.com;

    charset UTF-8;
    charset_types text/css text/plain;

    #gyazoれる画像サイズの最大MBを指定
    client_max_body_size 30M;

    #gyazo中のタイムアウトを5分で設定
    send_timeout            300;
    proxy_connect_timeout   300;
    proxy_send_timeout      300;
    proxy_read_timeout      300;

    #アクセスログの吐き出しを設定
    access_log /var/log/nginx/gya_access.log ltsv;
    error_log /var/log/nginx/gya_error.log;

    #ドキュメントルートを設定
    root /opt/gyazo;

    #ドキュメントルートにキャッシュを設定
    # ヘッダのキャッシュコントロール無視、200レスポンスは最大3日キャッシュ404キャッシュは10分
    location / {
        proxy_ignore_headers Cache-Control;
        proxy_cache_valid 200 3d;
        proxy_cache_valid 404 10m;
    }

    location /upload {
        proxy_pass http://gyazo;
        break;
    }
}
# nginxのスタート
$ /etc/init.d/nginx start

Gyazoクライアントの入手

Macの場合

Gyazo.appを本家から入手して、terminal.appからいじる。

vim /Applications/Gyazo.app/Contents/Resources/script

 50 HOST = 'hoge.com'
 51 CGI = '/upload'
 52 UA   = 'Gyazo/2.0'

Windowsの場合

イケてるgyazwinを使って、iniファイルにhost/cgi先を同様にセットすればOK
gyazowin+を最新のgyazowinのソースとマージした - tyoro.exe

Androidの場合

この子ならURLを指定できるので便利です。
GyazoAndroid - Google Play の Android アプリ

さくらVPSのCentOS6.5でStoneのビルドがうまくいかない

Stone2.3eをcent6.5でビルドしようとしたらうまくいかなかった。

uname

uname -a
Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

修正ポイント

kernel2.6.32で64bitマシンではどうにも -D_GNU_SOURCE が必要でした。

--- Makefile_org  2014-03-22 23:29:48.753751353 +0900
+++ Makefile    2014-03-21 13:44:30.716707429 +0900
@@ -97,7 +97,7 @@
    $(MAKE) FLAGS="-DNT_SERVICE $(FLAGS)" LIBS="$(LIBS) $(SVC_LIBS) -ladvapi32 -luser32 -lshell32 -lkernel32" $(TARGET)

 linux:
-   $(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
+   $(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -D_GNU_SOURCE -DUSE_EPOLL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone

 linux-pop:
    $(MAKE) TARGET=linux pop_stone

これであとは

make linux-ssl

とかしてあげればOKです