gyazoをec2サーバーで簡単に動かす方法

gyazoをec2サーバーで簡単に動かす方法メモ。コードの書き換え、構成の変更は極力避けています。


gyazoを自前のec2サーバーで動かすことで、画像の共有がむちゃくちゃ簡単、しかも許可したユーザー以外が見れなくて安心、になります。



gyazoって何なの?


選択範囲のスクリーンショットを簡単に公開するツールです。twitpicのさらにお手軽版みたいなものです。


gyazoはソースが公開されているので、twitpicと違って自社サーバーのみで運用することができます。なので、社内のみの画像共有にも安心して使うことができます。


ちなみにメインの開発者は日本人のようです。



全体の流れ


全体として以下のような手順が必要になります。


  1. ec2インスタンスを用意する
  2. apacheをインストールする
  3. upload.cgiを設置する
  4. 各OS用のクライアントを用意する
  5. セキュリティ設定を行う


ec2インスタンスを用意する


amazon linuxのec2インスタンスを起動してください。


この記事はamazon linuxを前提にしています。インスタンスサイズは数十人程度が使うだけならmicroで十分です。


Security Groupの設定で22番(ssh)、80番(http)のポートを開けるのを忘れないでください。



ruby1.8をインストールする


amazon linuxならデフォルトでruby1.8が入っています。ruby1.9だと、画像のアップロード時にエンコーディング関係のエラーがでます。


このエラーの直し方を知っている人がいたら教えてください…(^^)


rubyのバージョンは「ruby -v」で確認できます。



apacheをインストールする


yumでインストールできます。


sudo yum install -y httpd

下記のようにパーミッションを変えておくと後々便利です。


sudo chown -R ec2-user /var/www
sudo chgrp -R ec2-user /var/www


apacheで*.cgiを実行する設定をする


/etc/httpd/conf/httpd.confを一行書き換えるだけです。


#AddHandler cgi-script .cgi
↓↓↓
AddHandler cgi-script .cgi

httpd.confを書き換え後、下記のコマンドでapacheを起動できます。apacheが起動できたら、「http://[ec2のpublic DNS]/」にアクセスできるか確認してください。エラーになるならapacheの起動(もしくは設定)に失敗しています。


sudo /etc/init.d/httpd start


upload.cgiを設置する


upload.cgiはrubyで書かれたファイルアップロードスクリプトです。

gyazoの公式リポジトリに入っています。

Gyazo/Server/upload.cgi


ネットで調べると、「upload.cgiは最新リポジトリに入っていない」という古い情報が多数見付かりますが、2013年9月時点ではリポジトリ内に入っています。


cd /var/www/cgi-bin
wget https://raw.github.com/gyazo/Gyazo/master/Server/upload.cgi
chmod +x upload.cgi

# ついでに必要なディレクトリを作っておく
cd /var/www
mkdir cgi-bin/db
mkdir html/data
chmod 777 cgi-bin/db
chmod 777 html/data


upload.cgiを少しだけ書き換える


下記の3箇所を書き換えます。



rubyのパスを正しいものに書き換える。正しいパスは「which ruby」で確認できます。


#!/usr/bin/env ruby
↓↓↓
#!/usr/bin/ruby

画像をアップロードするディレクトリを書き換える。こうしないと、cgi-bin/dataへのアップロードになるのですが、そのままだと画像がcgiみたいな扱いになってしまい色々と失敗します。


File.open("data/#{hash}.png","w").print(imagedata)
↓↓↓
File.open("../html/data/#{hash}.png","w").print(imagedata)

画像をアップロードするサーバーを書き換える。ブラウザから自動アクセスするURLに使われます。


cgi.out(headers){"http://gyazo.com/#{hash}.png"}
↓↓↓
cgi.out(headers){"http://[ec2のpublic DNS]/data/#{hash}.png"}


画像アップロード先をec2に変えたクライアントを用意する


gyazo公式から、windows、mac、linuxそれぞれ用のクライアントが提供されています。どれを使う場合であっても、「画像をアップロードするホストの書き換え」が必要です。



windowsの場合

ホスト名等を変えることのできるwindows用クライアントが公開されているのでそれを使います。

このページからダウンロードできます。

Gyazowinをforkして野良Gyazoサーバにポストできるようにホスト名,ポート,パスを指定できるようにした


ダウンロードしたgyazowin.exeへのショートカットを作ります。そして、ショートカットのプロパティを下記のように変更してください。


C:\\[path]\\gyazowin.exe [ec2のpublic DNS] 80 /cgi-bin/upload.cgi

念のため、上記のショートカットを実行して、指定したec2サーバーに画像がアップロードされることを確認してください。


設定が間違っていてgyazo.comにアップロードされてしまった時のために、当たり障りない画像をアップロードした方がよいと思います…!


mac、linuxの場合

mac、linux用のクライアントはシェルスクリプトで書かれているので、アップロード先を簡単に書き換えることができます。


とりあえずmacの場合は、「/Applications/Gyazo.app/Contents/Resources/script」の中の該当行を下記のように書き換えればよいようです。


HOST = '[ec2のpublic DNS]'
CGI = '/cgi-bin/upload.cgi'


セキュリティ設定


各自のセキュリティポリシーに従ってもらえればいいのですが、簡単に済ますなら以下のような方法もあります。


アクセスできるIPアドレスを制限する

ec2のSecurity Groupとか、linuxのiptablesとかでアクセス元のIPアドレスを制限すればそこそこ安心です。


basic認証等をかける

簡単なんですが、パスワードが暗号化されずに流れる、総当たり攻撃への対策が別途必要、などなど危険な点がいくつかあります。



参考リンク


apacheに専用Gyazoサーバを立ち上げる

Gyazo: the simplest and fastest screenshot uploading tool

Gyazowinをforkして野良Gyazoサーバにポストできるようにホスト名,ポート,パスを指定できるようにした


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール