zimg简介
zimg是一套国人针对图片处理服务器而设计开发的开源程序,目的是解决图片服务中如下三个问题:
- 大流量:对于一些中小型网站来说,流量问题就是成本问题,图片相对于文本来说流量增加了一个数量级,省下的每一个字节都是白花花的银子。所以凡是涉及到图片的互联网应用,都应该统筹规划,降低流量节约开支。
- 高并发:高并发的问题在用户量较低时几乎不会出现,但是一旦用户攀升,或者遇到热点事件,比如网站被人上传了一张爆炸性的新闻图片,短时间内将会涌入大量的浏览请求,如果架构设计得不好,又没有紧急应对方案,很可能导致大量的等待、更多的页面刷新和更多请求的死循环。总的来说,就是要把图片服务的性能做得足够好。
- 海量存储:Facebook用户上传图片上亿张,总容量超过了nPB,这样的数量级是一般企业无法承受的。虽然很难做出一个可以跟Facebook比肩的应用,但是从架构设计的角度来说,良好的拓展方案还是要有的。需要提前设计出最合适的海量图片数据存储方案和操作方便的拓容方案,以应对将来不断增长的业务需求。
基于docker安装
1.先下载镜像
docker pull iknow0612/zimg
2.基于自定义配置安装
配置文件:
--zimg server config
--server config
--是否后台运行
is_daemon = 1
--绑定IP
ip = '0.0.0.0'
--端口
port = 4869
--运行线程数,默认值为服务器CPU数
--thread_num = 4
backlog_num = 1024
max_keepalives = 1
retry = 3
system = io.popen('uname -sn'):read('*l')
pwd = io.popen('pwd'):read('*l')
--header config
--返回时所带的HTTP header
headers = 'Cache-Control:max-age=7776000'
--是否启用etag缓存
etag = 1
--access config
--support mask rules like 'allow 10.1.121.138/24'
--NOTE: remove rule can improve performance
--上传接口的IP控制权限,将权限规则注释掉可以提升服务器处理能力,下同
--upload_rule = 'allow all'
--下载接口的IP控制权限
--download_rule = 'allow all'
--管理接口的IP控制权限
admin_rule = 'allow 127.0.0.1'
--cache config
--是否启用memcached缓存
cache = 1
--缓存服务器IP
mc_ip = '127.0.0.1'
--缓存服务器端口
mc_port = 11211
--log config
--log_level output specified level of log to logfile
--[[
LOG_FATAL 0 System is unusable
LOG_ALERT 1 Action must be taken immediately
LOG_CRIT 2 Critical conditions
LOG_ERROR 3 Error conditions
LOG_WARNING 4 Warning conditions
LOG_NOTICE 5 Normal, but significant
LOG_INFO 6 Information
LOG_DEBUG 7 DEBUG message
]]
--输出log级别
log_level = 6
--输出log路径
log_name = pwd .. '/log/zimg.log'
--htdoc config
--默认主页html文件路径
root_path = pwd .. '/www/index.html'
--admin页面html文件路径
admin_path = pwd .. '/www/admin.html'
--image process config
--禁用URL图片处理
disable_args = 0
--禁用lua脚本图片处理
disable_type = 0
--lua process script
--lua脚本文件路径
script_name = pwd .. '/script/process.lua'
--format value: 'none' for original or other format names
--默认保存新图的格式,字符串'none'表示以原有格式保存,或者是期望使用的格式名
format = 'jpeg'
--quality value: 1~100(default: 75)
--默认保存新图的质量
quality = 75
--storage config
--zimg support 3 ways for storage images
--value 1 is for local disk storage;
--value 2 is for memcached protocol storage like beansdb;
--value 3 is for redis protocol storage like SSDB.
--存储后端类型,1为本地存储,2为memcached协议后端如beansdb,3为redis协议后端如SSDB
mode = 1
--save_new value: 0.don't save any 1.save all 2.only save types in lua script
--新文件是否存储,0为不存储,1为全都存储,2为只存储lua脚本产生的新图
save_new = 1
--上传图片大小限制,默认100MB
max_size = 100*1024*1024
--允许上传图片类型列表
allowed_type = {'jpeg', 'jpg', 'png', 'gif', 'webp'}
--mode[1]: local disk mode
--本地存储时的存储路径
img_path = pwd .. '/img'
--mode[2]: beansdb mode
--beansdb服务器IP
beansdb_ip = '127.0.0.1'
--beansdb服务器端口
beansdb_port = 7900
--mode[3]: ssdb mode
--SSDB服务器IP
ssdb_ip = '127.0.0.1'
--SSDB服务器端口
ssdb_port = 8888
--lua conf functions
--部分与配置有关的函数在lua中实现,对性能影响不大
function is_img(type_name)
local found = -1
for _, allowed in pairs(allowed_type) do
if string.lower(type_name) == allowed then
found = 1
break
end
end
return found
end
docker run -it -d -p 4869:4869 -v /usr/local/zimg/data:/zimg/bin/img -v/usr/local/zimg/conf:/zimg/bin/conf --restart=always --name my_zimg iknow0612/zimg sh app.sh
2.默认配置安装
docker run -it -d -p 4869:4869 -v /usr/local/zimg/data:/zimg/bin/img --restart=always --name my_zimg iknow0612/zimg sh app.sh
官方使用指南:http://zimg.buaa.us/documents/guidebook/
然后浏览器访问 ip:4869