阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Docker搭建一个开源图像裁剪服务thumbor

32次阅读
没有评论

共计 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 反向代理配置域名访问和防盗链限制

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2979字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中