共计 2979 个字符,预计需要花费 8 分钟才能阅读完成。
本站提供 Linux 服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme
thumbor 是一个智能图像服务,已经在 Github 开源,支持按需裁剪、调整大小、应用过滤器和优化图像。用过对象存储服务的朋友可能知道,一般对象存储服务商会同时提供额外的图像处理服务(比如图像裁剪、图像水印等功能),有了 thumbor 之后我们完全可以自建搭建一个与之类似的图像处理服务。
thumbor 是用 Python 3 开发的,官方也提供了多种安装方式,这篇文章分享下使用 Docker 搭建一个开源的图像裁剪服务 thumbor
准备工作 & 安装 Docker
还没有安装 Docker 服务的朋友可以参考我之前的文章安装 Docker 服务:Linux 安装 Docker 与 Docker 常用命令
同时建议安装 Docker compose 方便后续的维护:
# 下载 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:
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
,我用到的参数如下:
# 裁剪最大宽度,意味着裁剪的图片不会超过此像素,默认是 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
, 内容如下:
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
然后输入命令 docker-compose up -d
启动容器,这样我们可以继续使用上面提到的方法裁剪图片了,可访问http://IP:8888/unsafe/275×0/https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
Nginx 反向代理
上述方法部署完毕后,是通过 IP + 端口访问的,显然不符合生产要求,我们可以使用 nginx 反向代理,并通过域名镜像访问,示例配置如下:
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;
}
}
另外还可以根据实际情况,在 nginx 中配置防盗链规则,参考:Nginx 设置图片防盗链(白名单与黑名单)
总结
- thumbor 提供了多种安装方式,通过 Docker 部署简单且易于维护
- 正式用途请根据自己的场景自定义 thumbor 参数
- 可通过 nginx 反向代理配置域名访问和防盗链限制
- thumbor 官网:http://www.thumbor.org/
- thumbor 帮助文档:https://thumbor.readthedocs.io/en/latest/
- thumbor 项目地址:https://github.com/thumbor/thumbor