基於Minio和Thumbor搭建獨立圖片服務

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

多數應用系統都會用到圖片儲存,從系統架構角度來說,像圖片儲存這樣的服務應該盡量從核心業務中剝離出來。很多人會選擇線上雲端儲存體服務,比如七牛雲端儲存之類的。但是很多企業專案因為各種需求,還是會要求圖片服務部署在內部。所以我們還是可能會需要一個可獨立部署的圖片服務。

自己開發實現一套圖片儲存服務系統,會花不少功夫,但如果有現成的方案何樂而不為呢?我在Github上發現Minio和Thumbor這兩個項目可以幫我們達成需求。

Minio

Minio Cloud Storage是一個分布式Object Storage Service系統。它是一個基於Go的開源項目,並且實現了Amazon S3的API。也就是說Minio相當於一個開源的Amazon S3。

使用docker安裝可能是最省事的方式,兩行命令即可安裝下載並且運行起來。注意,這種啟動模式僅限於測試環境下,一旦命令終止,資料將會消失。生產環境下的安裝部署請參考文檔。

docker pull minio/miniodocker run -p 9000:9000 minio/minio server /export

啟動之後,命令列中就會顯示一堆系統資訊。

Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000AccessKey: PT7TIDXEV7KH7S5R91JHSecretKey: 17hdYH0mF2Ljd3ahZ7JGyi5l/ZPjunLlldUMY/A0Region:    us-east-1SQS ARNs:  <none>

之後就可以在瀏覽器中訪問 http://127.0.0.1:9000 並且使用AccessKey和SecretKey登入。

其核心功能很簡單,建立bucket,上傳檔案。其所有的檔案連結都是含有到期時間的私人連結。然後我們就可以使用其提供的SDK使用了,就是這麼簡單。

minio專註於檔案儲存體,並沒有什麼圖片處理功能,但是我們可以使用thumbor這個服務來做圖片處理。

Thumbor

Thumbor是一個非常強大的圖片處理服務,可以實現圖片裁剪、縮放、濾鏡,甚至是Face Service。

它是一個基於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.jpg

就可以使用 http://localhost:8888/unsafe/300x200/https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpg 這個url使其縮放到300x200大小。

Thumbor AWS

Thumbor處理圖片很強大,但是只提供了很弱的圖片儲存功能。其圖片上傳修改介面沒有做驗證,所以預設情況下沒有開啟。但是Thumbor有一些社區支援,第三方開發人員做了一些擴充。其中Thumbor AWS 這個擴充可以把Thumbor後端跟Amazon S3整合起來。在url上提交圖片檔案的key,Thumbor的後端會從Amazon S3中取出檔案做處理。而之前Minio相容Amazon S3的Api。所以意味著只需要做一點改動,就可以整合這兩個服務。最終就可以達成,利用Minio上傳儲存圖片,利用Thumbor取出圖片做處理。

我們利用pip來安裝這個擴充。

pip install tc_aws

Thumbor AWS這個擴充利用Boto3串連Amazon S3的SDK,根據Boto3文檔中的配置,我們需要建立 ~/.aws/credentials 這個檔案,並且填寫剛才Minio提供的AccessKey和SecretKey,授權這個服務訪問Minio。

[default]aws_access_key_id = YOUR_ACCESS_KEYaws_secret_access_key = YOUR_SECRET_KEY

之後在剛才利用thumbor_conf產生的thumbor.conf中修改一些配置。

TC_AWS_REGION='us-east-1' #填寫minio提供的RegionTC_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.jpg,然後我們就可以通過 http://localhost:8888/unsafe/docker/aaa.jpg 這個地址訪問到這張圖片的原圖。當然,我們可以通過 http://localhost:8888/unsafe/300x200/docker/aaa.jpg 這種方式對這張圖片進行300x200的縮放。

這樣我們就大功告成了。

總結

各種服務都有其專精的一面,幸好Amazon S3在雲端服務API層面上形成了某種事實上的標準,所以這點能夠協助我們將一些服務整合在一起。

實現效果上來看,最終達成了圖片儲存和提取縮放需求,對於一些項目也足夠使用。不過圖片通過Thumbor處理後,其私人連結的屬性也沒了。這在一些要求高的企業服務項目中也是蠻尷尬的。

簡單看了下Thumbor的源碼,其圖片輸出是tornado實現的,相信有時間hack一下源碼,實現私人連結也不會太困難的。

Enjoy it!

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.