【商城】Minio+ImgProxy商城图片一站式处理

你是否正在为商城应用图片文件处理而烦恼?众所周知,商城图片作为商城应用核心资源之一,为实现商城相关功能,需要解决图片文件存储、图片压缩、图片缩放、图片水印等核心技术问题。本章以大规模商城实践为例,技术选型采用“Minio作为图片文件存储系统,兼具图片文件资源访问;ImgProxy作为图片压缩、缩放与水印等功能”,为您揭开其中的奥秘。

Minio部署

单机Minio服务存在单点故障,相反,如果是⼀个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数
据就是安全的。不过你需要⾄少有N/2+1个硬盘来创建新的对象。以下以一般生产环境中配置“一台服务器2块盘“作为独立部署(可以选择基于K8S部署)实例:
以部署三台服务器为例:

192.168.1.11
192.168.1.12
192.168.1.13

(1)文件下载
登录:https://docs.min.io/cn/ 地址,下载minio文件大小几十MB,国内网可能存在延迟。
(2)文件部署并启动
将文件minio.zip解压到/appuser目录,在集群每个节点分别按照顺序执行如下命令,则可以启动成功;其中ACCESS_KEY为设置登录用户名,SECRET_KEY为设置登录密码,端口默认为9000

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio
nohup /appuser/minio --address ":9000" server http://192.168.1.11/minio/data1 http://192.168.1.11/minio/data2 \
http://192.168.1.12/minio/data1 http://192.168.1.12/minio/data2 \
http://192.168.1.13/minio/data1 http://192.168.1.13/minio/data2 >> /applog/minio.log 2>&1 &

(3)成功验证

  • ps -ecf|grep minio #可查看启动进程pid
  • 浏览器分别访问每个节点:http://ip:9000 出现如下界面则代表部署成功。
    Minio访问
mc客户端验证

mc 提供了⼀些UNIX常⽤命令的替代品,像ls, cat, cp, mirror, diff这些。 它⽀持⽂件系统和亚⻢逊S3
云存储服务。 更多信息请参考 mc快速⼊⻔

./mc alias set minio http:192.168.1.11:9000 minio minio --api s3v4
(1)查看buckets
./mc ls minio
(2)创建buckets
./mc mb minio/watermark
(3)检查权限并设置download权限
./mc policy get minio/watermark
./mc policy set download minio/watermark
(4)检查bucket ./mc tree minio
(5)查看bucket下所有文件
./mc tree minio -f
(6)上传图片测试
./mc cp watermask.png minio/watermark

ImpProxy部署

imgproxy安装手册,mgproxy(v2.5.10)使用golang语言编写,强依赖于libvips(8.10.2)库,提供图片缩放、水印等功能。
在线文档地址:https://docs.imgproxy.net/,https://github.com/imgproxy/imgproxy
Centos7一键安装执行脚本:
https://gist.github.com/AndiSusanto15/a2c49b271d945ff2dbf6a7a5b8789bc4

注意:Red Hat Enterprise Linux Server release 7.x 版本无法直接编译,整个过程采用Centos安装依赖与编译,拷贝动态链接库与二进制文件至redhat运行的策略执行。

一、centos7下编译

  1. 安装并启用remi源:
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y;
    yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y;
    yum install yum-utils -y;
    yum-config-manager --enable remi;
  2. 安装libvips
    yum install vips vips-devel vips-tools -y;
  3. 下载并安装golang,文件地址:https://golang.org/dl/go1.15.5.linux-amd64.tar.gz
  4. 下载并编译imgproxy项目
    下载代码并解压,地址:https://github.com/imgproxy/imgproxy/releases/tag/v2.15.0
    执行:go mod install
    执行: go mod vendor
    执行: go build
    正常情况下,imgproxy目录下生成imgproxy的二进制可执行文件
  5. 执行./imgproxy运行服务

二、redhat7下执行

  1. 拷贝centos7目录下/usr/lib64所有文件至redhat7同目录(仅拷贝不存在的so文件)
  2. 拷贝imgproxy二进制文件至用户目录
  3. 执行命令./imgproxy运行服务
    附录
  4. Imgproxy与其它主流图片处理工具的benchmark对比:https://gist.github.com/DarthSim/9d971d2859f3714a29cf8ce094b3fc55
Red Hat 安装使用imgproxy

安装时获取编译好的文件imgproxy.tar,默认安装端口为8080

  1. 下载并解压imgproxy.tar
    执行tar -xvf imgproxy.tar
    解压得到文件清单:
    copy_lib64.sh [安装应用所需库脚本]
    imgproxy [imgproxy应用二进制文件]
    imgproxy_startup.sh [imgproxy应用启动脚本]
    lib64.tar [应用依赖库文件]
    watermask.png [应用资源文件,水印图片]
  2. 进入解压后目录执行以下命令安装应用依赖(以root权限运行)
    mkdir tmp
    mv lib64.tar tmp
    cd tmp
    tar -xvf lib64.tar
    mv lib64.tar …
    cd …
    chmod +x copy_lib64.sh
    ./copy_lib64.sh tmp/ /usr/lib64
  3. 运行imgproxy应用(非root权限)
    chmod +x imgproxy_startup.sh
    ./imgproxy_startup.sh http://192.168.1.11:9000 watermask.png
图片功能验证

(1)查看图片:例如提前上传到bucket的图片为imgTest.png

http://192.168.1.11:9000/bucket/imgTest.png

(2)查看图片缩放

http://192.168.1.11:8080/pr:cm/rs:fit:100:100/plain/bucket/imgTest.png

(3)查看图片水印

http://192.168.1.11:8080/pr:cm/wm:1:re/plain/bucket/imgTest.png

Nginx配置

server {
 listen 9001;

 set $minio_host http://192.168.1.11:9000;                #目前为单机,此处可以设置F5地址
 set $imgproxy_host http://192.168.1.11:8080;          #目前为单机,此处可以设置F5地址
 set $resize '0';

 if ($args ~ rs=(\d+)_(\d+)) {
  set $w $1;
  set $h $2;
  set $resize '1';
  
  rewrite ^/wm/(\w+).(\w+) /pr:cm/rs:fit:$w:$h/wm:0.7:re/plain/images/$1.$2 break;
  rewrite ^/(\w+)/(\w+).(\w+) /pr:cm/rs:fit:$w:$h/plain/$1/$2.$3 break;
 }

 if ($resize != '1') {
  rewrite ^/wm/(\w+).(\w+) /pr:cm/wm:0.7:re/plain/images/$1.$2 break;
 }

 # proxy to imgporxy endpoint with url start with '/pr:cm'
 location /pr:cm {
  proxy_pass $imgproxy_host;
 }
 
 # proxy to minio to left request
 location / {
  proxy_pass $minio_host;
 }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moutai码哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值