资讯专栏INFORMATION COLUMN

基于Minio和Thumbor搭建独立图片服务

jsyzchen / 2068人阅读

摘要:但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。

多数应用系统都会用到图片存储,从系统架构角度来说,像图片存储这样的服务应该尽量从核心业务中剥离出来。很多人会选择在线云存储服务,比如七牛云存储之类的。但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。

自己开发实现一套图片存储服务系统,会花不少功夫,但如果有现成的方案何乐而不为呢?我在Github上发现Minio和Thumbor这两个项目可以帮我们达成需求。

Minio

Minio Cloud Storage是一个分布式对象存储系统。它是一个基于Go的开源项目,并且实现了Amazon S3的API。也就是说Minio相当于一个开源的Amazon S3。

使用docker安装可能是最省事的方式,两行命令即可安装下载并且运行起来。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。生产环境下的安装部署请参考文档。

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 并且使用AccessKey和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.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_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.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!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26812.html

相关文章

  • 基于MinioThumbor搭建独立图片服务

    摘要:但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以我们还是可能会需要一个可独立部署的图片服务。注意,这种启动模式仅限于测试环境下,一旦命令终止,数据将会消失。 多数应用系统都会用到图片存储,从系统架构角度来说,像图片存储这样的服务应该尽量从核心业务中剥离出来。很多人会选择在线云存储服务,比如七牛云存储之类的。但是很多企业项目因为各种需求,还是会要求图片服务部署在内部。所以...

    novo 评论0 收藏0
  • 本地搭建minio文件服务器的方法

    第一步我们需要先下载一个本地windows的minio.exe第二步下载完成后我们新建一个文件夹,把下载好的minio.exe存放进去,同时再创一个data文件夹用来存放文件第三步把新建的文本取个名字,我这里是叫minio.bat(这个起什么名字不重要,知道它是干什么的就行) ,然后编辑@echo off REM 声明采用UTF-8编码 chcp 65001 echo. echo [信息] 运行M...

    3119555200 评论0 收藏0
  • minio分布式储存部署?

    摘要:是一款高性能分布式的对象存储系统它是一款软件产品它的设计非常方便我们使用。在传统对象存储用例例如辅助存储,灾难恢复和归档方面表现出色。对象存储不是什么新技术了,但是从来都没有被替代掉。对于图片,视频等数据的分析可以说是大数据与人工智能的未来发展方向之一。minio 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 它的设计非常方便我们使用。它可以100%的运行在标准硬件。即X86...

    3119555200 评论0 收藏0
  • Vue中通过minio上传文件的详细步骤

      您知道如何在Vue中minio上传文件(stream流和链接)吗?现在就讲解:  1、minio的安装  不用做过多,直接使用npm或者cnpm下载即可  npmiminio--save   //或者   cnpmiminio--save  2、minio.js文件  封装了连接minio、文件上传,文件删除等方法  注:此文件中的url都是在minio设置了永久链接的基础上  2.1连接mi...

    3403771864 评论0 收藏0
  • ZPan自建网盘存储-基于各大云存储商的网盘系统zpan安装使用教程

    想自建网盘但是又苦于数据太大,购买大存储容量的VPS主机价格太贵?不妨试试ZPan自建网盘存储。ZPan致力于打造一款不限速的网盘系统,因此采用客户端直连云存储的方式进行设计,即它不支持本地存储,你的所有数据都是存在第三方存储商那里。目前ZPan支持所有兼容S3协议的云存储平台,包括阿里云OSS 、腾讯云COS 、七牛云Kodo 、Ucloud US3(暂不支持自动设置CORS) 、华为云OBS ...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<