Webサービスやアプリを開発して運営するのが趣味です。



Monosnap + S3 + proxy cache のスクリーンショット環境

2016年05月28日 20:55

(個人用途において)ほぼ最強に近いスクリーンキャプチャ / スクリーンキャスト環境 - 鳩舎

このエントリで Monosnap のバックエンドに S3 が使えるということを知って早速設定した。Monosnap というのは Gyazo + スクリーンキャストにさらに画像編集機能が付いたようなやつ。画像直URLで共有することがほとんどだから使う機会ないんだけど、短縮URLがかっこいい( http://take.ms/EcjUL

自分のスクリーンショットサービスの利用用途としてはだいたいこんな感じ。


  • ブログの画像貼り付け

  • とりあえず画像で保存

  • 共有

特にブログ貼り付けが微妙な問題で、外部サービスを利用しているとある日突然404になる、もしくは読み込みが非常に遅くなってもどうしようもないというリスクがある。Monosnap に img タグで貼り付ける機能があるし、Gyazo も URL に .png ってつければ画像直リンになったりはするんだけど、やっぱりドメインがコントロール下にないのは不安に思っていたりする。

Monosnap + S3 + Nginx + SSL

MonosnapのS3設定

Monosnap が S3 にアップロードできる、S3に置いておけば突然の消失リスクはまず考えなくて良くなる。これで満足といきたいところだけど、世の中には不安がたくさんあります。S3 には転送量課金があり、理論上は無制限にお金がかかる可能性がある。僕はこれで9万円くらい損したことがあります。(クラウドにはBilling Alertを設定しましょう…)

そういうわけですので、Nginx で proxy_cache を挟むことにした。独自ドメインにしておけば万が一バックエンドをS3から変更したくなった時にも対応できるし。HTTPSのブログに貼り付けるので、Let's Encrypt で SSL化した。ついでに HTTP/2 に対応しておくと更に良い。

Nginx の conf はこんな感じ。S3にプロキシ&キャッシュするだけ。画像も動画もゴミもいける。1週間アクセスがないやつはキャッシュを破棄する。


proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=storage:10m inactive=7d max_size=10G;

server {
listen 443 ssl http2;
server_name storage.kksg.net;

ssl on;

ssl_certificate /etc/letsencrypt/live/storage.kksg.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/storage.kksg.net/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_cache storage;
proxy_cache_valid 200 1h;
proxy_cache_key "$scheme://$host$request_uri$is_args$args";
proxy_pass https://your-bucket.s3.amazonaws.com;
}
}

今までのスクリーンショット環境遍歴

どうもスクリーンショットサービスを素直にそのまま使うということが出来ず、今までもGyazoサーバーを自分で立てたりTwitterをストレージに使うということをやっていました。オレオレGyazoサーバーはサーバーリソースがもったいなくなってシャットダウン済み。Twitterはけっこう良いソリューションだと思ってたんだけど、あまりにも画像の圧縮が酷いため使わなくなった。今度こそ、使い続けられるようになりたい。