MinioとThumborに基づいて独立した画像サービスを構築


多くのアプリケーションシステムではピクチャストレージが用いられており、システムアーキテクチャの観点から、ピクチャストレージのようなサービスはできるだけコアビジネスから剥離されるべきである.多くの人がオンラインクラウドストレージサービスを選択します.例えば、七牛クラウドストレージなどです.しかし、多くの企業プロジェクトは、さまざまなニーズのため、画像サービスを内部に配置することを要求しています.独立して導入可能な画像サービスが必要になる可能性があります.
自分で画像ストレージサービスシステムを開発して実現するには、多くの工夫がかかりますが、既成の案があれば喜んでいませんか.私はGithubでMinioとThumborの2つのプロジェクトが私たちのニーズを達成することができることを発見しました.
Minio
Minio Cloud Storageは分散型オブジェクトストレージシステムです.Goベースのオープンソースプロジェクトであり、Amazon S 3のAPIを実現している.つまりMinioはオープンソースのAmazon S 3に相当する.
dockerを使用してインストールするのが最も手間が省ける方法で、2行のコマンドでダウンロードをインストールして実行できます.なお、この起動モードはテスト環境に限られ、コマンドが終了するとデータは消失する.本番環境でのインストールの導入については、ドキュメントを参照してください.
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /export

起動すると、コマンドラインにシステム情報が表示されます.
Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000
AccessKey: PT7TIDXEV7KH7S5R91JH
SecretKey: 17hdYH0mF2Ljd3ahZ7JGyi5l/ZPjunLlldUMY/A0
Region:    us-east-1
SQS ARNs:  

その後、ブラウザでhttp://127.0.0.1:9000にアクセスし、アクセスキーおよびSecretKeyを使用してログインすることができる.
そのコア機能は簡単で、bucketを作成し、ファイルをアップロードします.すべてのファイルリンクは、期限切れのプライベートリンクです.そして、提供されているSDKを使用することができます.簡単です.
minioはファイルストレージに専念し、画像処理機能はありませんが、thumborというサービスを利用して画像処理を行うことができます.
Thumbor
Thumborは非常に強力な画像処理サービスであり、画像の切り抜き、スケール、フィルタ、さらには顔認識を実現することができます.
Pythonベースのオープンソースプロジェクトで、python環境でpipでインストールできます.
pip install thumbor

次に、次のコマンドを使用して実行します.
thumbor-config > ./thumbor.conf #       
thumbor --port=8888 --conf=thumbor.conf 

このサービスはローカルの8888ポートで実行され、urlで直接サービスを呼び出すことができます.
例えばこの写真https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpghttp://localhost:8888/unsafe/300x200/https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpgというurlを使用して300 x 200サイズに縮小することができます.
Thumbor AWS
Thumborは画像を処理するのに強いが、弱い画像記憶機能しか提供していない.その画像アップロード修正インタフェースは検証されていないため、デフォルトではオンになっていません.しかしThumborにはいくつかのコミュニティサポートがあり、サードパーティの開発者はいくつかの拡張を行いました.このうちThumbor AWSという拡張はThumborバックエンドをAmazonS 3に統合することができる.urlにピクチャファイルを提出するkeyは、Thumborの後端がAmazon S 3からファイルを取り出して処理する.これまでMinioはAmazon S 3のApiと互換性があった.したがって、わずかな変更だけで、この2つのサービスを統合することができます.最終的には、Minioを利用して記憶画像をアップロードし、Thumborを利用して画像を取り出して処理することができる.pipを使用して、この拡張子をインストールします.
pip install tc_aws

Thumbor AWSという拡張はBoto 3を利用してAmazon S 3のSDKに接続し、Boto 3ドキュメントの構成に基づいて~/.aws/credentialsというファイルを作成し、先ほどMinioが提供したAccessKeyとSecretKeyに記入し、このサービスにMinioへのアクセスを許可する必要があります.
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

その後、thumbor_confで生成するthumbor.confでいくつかの構成を変更します.
TC_AWS_REGION='us-east-1' #  minio   Region
TC_AWS_ENDPOINT='http://127.0.0.1:9000' #    Amazon S3    minio    
LOADER = 'tc_aws.loaders.s3_loader' # Thumbor loader  tc_aws.loaders.s3_loader

Thumborを再起動すると、ブラウザでThumborを通じてMinioの画像にアクセスできます.
例えば、Minioのdockerというbucketにaaaを1枚アップロードしました.jpgは、http://localhost:8888/unsafe/docker/aaa.jpgというアドレスでこの画像の原図にアクセスできます.もちろん、この画像をhttp://localhost:8888/unsafe/300x200/docker/aaa.jpgで300 x 200のスケーリングすることができます.
これで私たちは大功を成し遂げた.
まとめ
様々なサービスには独自の側面がありますが、AmazonS 3はクラウドサービスAPIの面で何らかの事実上の基準を形成しているので、いくつかのサービスを統合するのに役立ちます.
効果を実現する上で、最終的に画像の記憶とスケールの抽出の需要を達成し、いくつかのプロジェクトに対しても十分に使用することができます.しかし、画像がThumbor処理されると、プライベートリンクの属性もなくなります.これは、要求の高い企業サービスプロジェクトでも気まずいことです.
Thumborのソースコードを簡単に見ると、その画像出力はtornadoで実現されており、ソースコードをhackする時間があると信じており、プライベートリンクを実現するのも難しくありません.
Enjoy it!