介绍
thumbor 是一个智能图像服务,已经在Github开源,支持按需裁剪、调整大小、应用过滤器和优化图像。用过对象存储服务的朋友可能知道,一般对象存储服务商会同时提供额外的图像处理服务(比如图像裁剪、图像水印等功能),有了thumbor之后我们完全可以自建搭建一个与之类似的图像处理服务。
thumbor是用Python 3开发的,官方也提供了多种安装方式,这篇文章分享下使用Docker搭建一个开源的图像裁剪服务thumbor
准备工作 & 安装Docker
还没有安装Docker服务的朋友可以参考我之前的文章安装Docker服务:Linux安装Docker与Docker常用命令
同时建议安装Docker compose方便后续的维护:
1 2 3 4 5 6
| #下载docker-compose curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #添加执行权限 chmod +x /usr/local/bin/docker-compose #创建软连接 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
Docker安装thumbor
官方文档中给出的命令非常简单,只需要一行命令即可运行Docker thumbor:
1
| docker run -p 8888:80 minimalcompact/thumbor
|
运行成功后便可访问http://IP:8888/unsafe/275x0/https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
进行裁剪图像,其中:
- 275指的是裁剪后的宽度(像素)
- 0指的是裁剪后的高度,0则代表自适应
- 最后末尾给了一个需要裁剪的图像地址,这里用的百度的logo
不过正常的用途xiaoz是不建议直接使用上面的命令的,虽然简单,但缺少了很多自定义参数设置,接下来我会将我用到的一些参数整理出来供大家参考。
docker-compose安装thumbor
为了方面后续维护,建议使用docker-compose来进行安装。首先新建一个目录mkdir thumbor
然后在这个目录新建一个thumbor配置文件,命名为thumbor.conf,我用到的参数如下:
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
| #裁剪最大宽度,意味着裁剪的图片不会超过此像素,默认是0(不限制) MAX_WIDTH = 1200 #裁剪最大高度,意味着裁剪的图片不会超过此像素,默认是0(不限制) MAX_HEIGHT = 800 #裁剪最小宽度,意味着裁剪的图片不会低于此像素,默认是1 MIN_WIDTH = 50 #裁剪最小高度,意味着裁剪的图片不会低于此像素,默认是1 MIN_HEIGHT = 50 #允许裁剪的图片的域名,支持正则表达式,支持多个图片 ALLOWED_SOURCES = ['.+\.baidu\.com', '.+\.bmp\.ovh'] #裁剪图像的质量,默认为80 QUALITY = 80 #图像应保留在浏览器缓存中的秒数。它与 Expires 和 Cache-Control 标头直接相关 MAX_AGE = 7 * 24 * 60 * 60 #当图像在检测中出现错误或延迟排队时,为图像缓存设置一个低得多的过期时间会很方便。这样浏览器将更快地请求正确的图像。 MAX_AGE_TEMP_IMAGE = 60 #裁剪后的图像保存到哪个引擎,下方指的是保存到本地存储,从而进行缓存 RESULT_STORAGE = 'thumbor.result_storages.file_storage' #原始图像保存时间 STORAGE_EXPIRATION_SECONDS = 864000 #裁剪后的图像保存时间 RESULT_STORAGE_EXPIRATION_SECONDS = 864000 #裁剪后的图片保存到哪个位置 RESULT_STORAGE_FILE_STORAGE_ROOT_PATH = '/tmp/thumbor/result_storage' #开启结果缓存(裁剪图像的缓存) RESULT_STORAGE_STORES_UNSAFE = True
|
thumbor还有其它很多配置,有兴趣的朋友可以参考官方文档:https://thumbor.readthedocs.io/en/latest/configuration.html
继续在thumbor目录下新建一个docker-compose.yml,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12
| version: '3.3' services: thumbor: ports: - '8888:80' restart: always container_name: thumbor volumes: - './thumbor.conf:/app/thumbor.conf' - './result_storage:/tmp/thumbor/result_storage' - './storage:/tmp/thumbor/storage' image: minimalcompact/thumbor
|
输入命令启动容器
这样我们可以继续使用上面提到的方法裁剪图片了,可访问http://IP:8888/unsafe/275x0/https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
Nginx反向代理
上述方法部署完毕后,是通过IP + 端口访问的,显然不符合生产要求,我们可以使用nginx反向代理,并通过域名镜像访问,示例配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| server { listen 80; server_name youdomain.com;
access_log /data/wwwlogs/youdomain.com_nginx.log combined;
location / { proxy_http_version 1.1; proxy_set_header Connection ""; #chunked_transfer_encoding off; proxy_pass http://127.0.0.1:8888; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
总结
thumbor提供了多种安装方式,通过Docker部署简单且易于维护
正式用途请根据自己的场景自定义thumbor参数
可通过nginx反向代理配置域名访问和防盗链限制