我是靠谱客的博主 狂野毛巾,这篇文章主要介绍安全独立图片服务(Minio和Thumbor)安全独立图片服务(Minio和Thumbor),现在分享给大家,希望可以做个参考。

安全独立图片服务(Minio和Thumbor)

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

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

Minio

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

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

Docker 容器

稳定版

复制代码
1
2
3
docker pull minio/minio docker run -p 9000:9000 minio/minio server /data12

尝鲜版

复制代码
1
2
3
docker pull minio/minio:edge docker run -p 9000:9000 minio/minio:edge server /data12

更多Docker部署信息请访问 这里

macOS

Homebrew

使用 Homebrew安装minio

复制代码
1
2
3
brew install minio/stable/minio minio server /data12

Note

如果你之前使用 brew install minio安装过minio, 可以用 minio/stable/minio 官方镜像进行重装. 由于golang 1.8的bug,homebrew版本不太稳定。

复制代码
1
2
3
brew uninstall minio brew install minio/stable/minio12

下载二进制文件

操作系统CPU架构地址
Apple macOS64-bit Intelhttps://dl.minio.io/server/minio/release/darwin-amd64/minio
复制代码
1
2
3
chmod 755 minio ./minio server /data12

GNU/Linux

下载二进制文件

操作系统CPU架构地址
GNU/Linux64-bit Intelhttps://dl.minio.io/server/minio/release/linux-amd64/minio
复制代码
1
2
3
chmod +x minio ./minio server /data12

启动之后,命令行中就会显示一堆系统信息。

复制代码
1
2
3
4
5
6
7
8
9
10
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: <none>

之后就可以在浏览器中访问 http://127.0.0.1:9000 并且使用AccessKey和SecretKey登录。

其核心功能很简单,创建bucket,上传文件。其所有的文件链接都是含有过期时间的私有链接。然后我们就可以使用其提供的SDK使用了,就是这么简单。

minio专注于文件存储,并没有什么图片处理功能,但是我们可以使用thumbor这个服务来做图片处理。

Thumbor

Thumbor是一个非常强大的图片处理服务,可以实现图片裁剪、缩放、滤镜,甚至是人脸识别。

它是一个基于Python的开源项目,在python环境下可以通过pip安装。

复制代码
1
2
pip install thumbor

然后使用下面命令即可运行。

复制代码
1
2
3
4
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来安装这个扩展。

复制代码
1
2
pip install tc_aws

Thumbor AWS这个扩展利用Boto3连接Amazon S3的SDK,根据Boto3文档中的配置,我们需要创建 ~/.aws/credentials 这个文件,并且填写刚才Minio提供的AccessKey和SecretKey,授权这个服务访问Minio。

复制代码
1
2
3
4
5
6
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY

之后在刚才利用thumbor_conf生成的thumbor.conf中修改一些配置。

复制代码
1
2
3
4
5
6
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的缩放。

注意:

thumbor.conf 文件中配置访问方式

复制代码
1
2
3
4
5
6
7
8
## The security key thumbor uses to sign image URLs ## Defaults to: 'MY_SECURE_KEY' ##SECURITY_KEY = 'MY_SECURE_KEY' ## Indicates if the /unsafe URL should be available ## Defaults to: True ##ALLOW_UNSAFE_URL = True

安全模式访问

比如,在Minio的docker这个bucket中上传了一张aaa.jpg,然后我们就可以通过安全模式 http://localhost:8888/6JS4S0Gzo4JschcQ7o-EOGJ2uzk=/docker/aaa.png 这个地址访问到这张图片的原图。当然,我们可以通过 http://localhost:8888/kL1goioOIwzaBZZTbxoO2Py20LM=/300x200/docker/aaa.png 这种方式对这张图片进行300x200的缩放。

注意:

安全模式需要配置如下

thumbor.conf 文件中配置, 切换至安全模式(ALLOW_UNSAFE_URL = False),安全模式密钥配置 (SECURITY_KEY = ‘MY_SECURE_KEY’),这里使用 MY_SECURE_KEY 作为密钥,可以按照自己需求配置,或者

复制代码
1
2
3
4
5
6
7
8
## The security key thumbor uses to sign image URLs ## Defaults to: 'MY_SECURE_KEY' SECURITY_KEY = 'MY_SECURE_KEY' ## Indicates if the /unsafe URL should be available ## Defaults to: True ALLOW_UNSAFE_URL = False

安全地址

使用 thumbor-url 命令生成安全地址
复制代码
1
2
3
4
5
6
7
8
9
# thumbor-url -k MY_SECURE_KEY docker/aaa.png URL: /6JS4S0Gzo4JschcQ7o-EOGJ2uzk=/docker/aaa.png # thumbor-url -k MY_SECURE_KEY 300x200/docker/aaa.png URL: /kL1goioOIwzaBZZTbxoO2Py20LM=/300x200/docker/aaa.png
java代码生成安全地址
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class HmacSHA1 { /** * hmac+签名算法 加密 * @param content 内容 * @param charset 字符编码 * @param key 加密秘钥 * @param hamaAlgorithm hamc签名算法名称:例如HmacMD5,HmacSHA1,HmacSHA256 * @return */ public static String getHmacSign(String content, String charset,String key,String hamaAlgorithm){ try { //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称 SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), hamaAlgorithm); //生成一个指定 Mac 算法 的 Mac 对象 Mac mac = Mac.getInstance(hamaAlgorithm); //用给定密钥初始化 Mac 对象 mac.init(signinKey); //完成 Mac 操作 byte[] rawHmac; rawHmac = mac.doFinal(content.getBytes(charset)); return BinaryUtil.toBase64String(rawHmac); } catch (Exception e) { System.err.println(e.getMessage()); } return null; } public static void main(String[] args) { String hmacSign = getHmacSign("300x200/docker/aaa.png", "UTF-8", "MY_SECURE_KEY", "HmacSHA1"); System.out.println(hmacSign); } }

这样我们就大功告成了。

巨人肩膀:

https://blog.csdn.net/dingjs520/article/details/78793160

https://blog.csdn.net/Aria_Miazzy/article/details/100038300

http://itindex.net/detail/57354-%E7%8B%AC%E7%AB%8B-%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86-%E6%9C%8D%E5%8A%A1

最后

以上就是狂野毛巾最近收集整理的关于安全独立图片服务(Minio和Thumbor)安全独立图片服务(Minio和Thumbor)的全部内容,更多相关安全独立图片服务(Minio和Thumbor)安全独立图片服务(Minio和Thumbor)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(121)

评论列表共有 0 条评论

立即
投稿
返回
顶部