これをやってみました。
※ Macでの作業を想定しています。
ローカルにアプリを作成
まずはリポジトリをクローンします。
$ git clone https://github.com/soramugi/gyazo-s3.git
$ cd gyazo-s3
必要な環境変数を生成するのにbundle
を使っているのでrbenv
をインストールします。
$ brew install postgresql
$ rbenv install 2.1.1
$ rbenv local 2.1.1
$ rbenv exec gem install bundler
$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install --path vendor/bundle
次のコマンドでbundle
が使用可能であることを確認します。
$ echo $(bundle exec rake secret)
herokuへのデプロイ
herokuにデプロイします。いくつか環境変数の設定が必要なのでいれておきます。
また、S3のバケットは初回アップロード時に生成されるので事前に準備しなくてOKです。
(逆に、バケットを作成する権限が必要です)
$ heroku create gyazo-s3
$ heroku config:set SECRET_KEY_BASE=$(bundle exec rake secret)
$ heroku config:set S3_BUCKET=S3_BUCKET
$ heroku config:set AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID
$ heroku config:set AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
$ heroku config:set GYAZO_ID=$(cat ~/Library/Gyazo/id)
$ heroku config:set TITLE=GyazoS3
$ git push heroku master
$ heroku run bundle exec rake db:migrate
変数名 | 説明 |
---|---|
SECRET_KEY_BASE | たしかDBとの接続時に使うシークレットトークン(?) |
S3_BUCKET | S3のバケット名 |
AWS_ACCESS_KEY_ID | AWS_ACCESS_KEY_ID |
AWS_SECRET_ACCESS_KEY | AWS_SECRET_ACCESS_KEY |
GYAZO_ID | 公式クライアントアプリの識別用ID(cat ~/Library/Gyazo/id で確認出来る) |
TITLE | ブラウザのタブとかに表示されるアレ |
クライアントアプリの設定
/Applications/Gyazo.app/Contents/Resources/script
を下記のように編集し、参照先をheroku上にたてたGyazoに変更します。
#HOST = 'upload.gyazo.com'
#CGI = '/upload.cgi'
HOST = 'gyazo-s3.herokuapp.com'
CGI = '/items'
注意点
~/Library/Gyazo/id
でクライアントアプリとサーバが1:1対応になっています。
複数人での使用の際は、別途~/Library/Gyazo-S3/id
みたいなものを作成し、そちらをクライアントアプリに参照させるか、別途専用のアプリを作成したほうがいいかもしれません。
ちなみに~/Library/Gyazo/id
を書き換えてもOKです。
番外編
S3のリージョン
ソースコード内でS3のリージョン指定がap-northeast-1
(東京)になっていたため、レイテンシを考慮しus-east
に変更しました。
※ 既にプルリク済みのため対応は不要ですが、herokuでEUリージョンを使用の際はご注意下さい。
- Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-northeast-1.amazonaws.com'
+ Paperclip::Attachment.default_options[:s3_host_name] = 's3.amazonaws.com'
Basic認証
こちらに書きました。
IP制限等もこれで行けるはず。