本文 首发于 Anyeの小站
灵感来源
Halo官网的一篇博文:优雅的让 Halo 支持 webp 图片输出
为什么要引入 Webp ?
这里引用原博文的内容:
Webp 是什么
WebP的有损压缩算法是基于VP8视频格式的帧内编码[17],并以RIFF作为容器格式。[2]
因此,它是一个具有八位色彩深度和以1:2的比例进行色度子采样的亮度-色度模型(YCbCr 4:2:0)的基于块的转换方案。[18]
不含内容的情况下,RIFF容器要求只需20字节的开销,依然能保存额外的 元数据(metadata)。[2]
WebP图像的边长限制为16383像素。
在 WebP 的官网中,我们可以发现 Google 是这样宣传 WebP 的:
WebP lossless images are 26% smaller in size compared to PNGs. WebP
lossy images are 25-34% smaller than comparable JPEG images at
equivalent SSIM quality index.
简单来说,WebP 图片格式的存在,让我们在 WebP 上展示的图片体积可以有较大幅度的缩小,也就带来了加载性能的提升。(摘自 https://nova.moe/re-introduce-webp-server)
为什么要改进原方法?
首先我曾很长一段时间使用的是原博文的使用的方法,其稳定性及易用性十分不错,但随着 1panel 的大面积使用,我们可以发现:若将其适配 1penal的使用逻辑,基于容器来管理和部署应用,最小漏洞暴露面,提供防火墙和日志审计等功能,是否会更加易用?
怎么做?
自1Panel v1.5发布后,其支持了进程守护管理,我也尝试过直接将进程守护直接移入1panel中,工作也相当稳定,但在翻看 文档 后,我发现使用docker部署也是很不错的选择。
创建编排模板
在1panel中找到容器
-编排模板
,点击创建编排模板
,名称随意填写~~(自己得知道是啥)~~,编辑框填写如下:
version: '3'
services:
webp:
image: webpsh/webp-server-go
# image: ghcr.io/webp-sh/webp_server_go
restart: always
environment:
- MALLOC_ARENA_MAX=1
# - LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
# - LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.5.6
volumes:
- /opt/1panel/apps/halo/halo/data/attachments:/opt/pics # 上传图片目录,此处为1panel部署的halo的上传目录
- /opt/1panel/apps/halo/halo/data/attachments/upload:/opt/exhaust # 缓存目录,此处为1panel部署的halo的上传目录
- ./config.json:/etc/config.json
ports:
- 127.0.0.1:3333:3333
deploy:
resources:
limits:
memory: 400M
memswap_limit: 400M
确认保存。
创建编排
在容器
-编排
中,点击创建编排
,来源选择编排模板
,按需填写文件夹,模板选择刚才创建好的webp模板。
点击确认,创建容器,至此webp部署完毕。
添加反向代理
在你所创建的Halo网站中,点击网站设置,找到反向代理,创建反向代理
名称按需填写,我这里填写webp-img
匹配规则默认^~
前端请求路径填写/upload/
后端代理地址填写http://127.0.0.1:3333
后端域名默认$host
确认保存。
测试
打开浏览器开发者工具调试页面,观察类型列,可以发现开启前后图片格式发生了变化,图片的大小也远远降低。
未使用webp
使用webp