标题
- 使用TengineLuaGM实现图片自动裁剪缩放
- 需求背景
- 3个东西的下载地址
- lua下载
- 二、安装与配置亲测可用
- 1、软件列表准备软件 按上面下载软件即可
- 2、依赖包和类库
- 3、安装Lua
- 1安装依赖
- 2安装Luan源码编译安装
- 3安装LuaJIT源码编译安装
- 4查看Lua版本
- 4、安装Tengine
- 5、安装GraphicsMagick
- 6、配置Lua脚本文件
- 7、Tengine配置
- 三、功能测试
- 自己安装过程应该可以不建议试 用后面的
- 最终成功版
使用TengineLuaGM实现图片自动裁剪缩放
需求背景
Tengine下载
Tengine tengine-master.zip 下载 因为上面下载安装时报错换这个
luajit下载
GraphicsMagick下载
点进去后不用动大概1分左右就会跳出链接
二、安装与配置亲测可用
首先上传下面内容到/opt下
1、软件列表准备软件 按上面下载软件即可
软件名称安装包下载地址Tenginetengine-master.ziphttps://github.com/alibaba/tengineLualua-5.3.1.tar.gz LuaJIT-2.0.4.tar.gzLua依赖包http://www.lua.org/ftp/ http://luajit.org/download.htmlGraphicsMagickGraphicsMagick-1.3.18.tar.gzhttps://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/2、依赖包和类库
# 使用阿里下载源 这个下载就很快[rootdesktop-dm818pf ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo[rootdesktop-dm818pf ~]# yum makecache (可能需要执行两次)rm -rf /var/run/yum.pid# 安装依赖包和类库这个是支持各种图片的类库的依赖[rootdesktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel
3、安装Lua
1安装依赖
[rootdesktop-dm818pf ~]# yum install -y readline readline-devel gcc gcc-c pcre-devel openssl-devel zlib-devel
2安装Luan源码编译安装
[rootdesktop-dm818pf ~]# tar zxvf lua-5.3.1.tar.gz[rootdesktop-dm818pf ~]# cd lua-5.3.1[rootdesktop-dm818pf lua-5.3.1]# make linux[rootdesktop-dm818pf lua-5.3.1]# make install
3安装LuaJIT源码编译安装
[rootdesktop-dm818pf ~]# tar zxvf LuaJIT-2.0.4.tar.gz[rootdesktop-dm818pf ~]# cd ~/LuaJIT-2.0.4/[rootdesktop-dm818pf LuaJIT-2.0.4]# make[rootdesktop-dm818pf LuaJIT-2.0.4]# make install
4查看Lua版本
[rootbogon LuaJIT-2.0.4]# lua -vLua 5.3.1 Copyright (C) 1994-2015 Lua.org, PUC-Rio
4、安装Tengine
进入Tengine源码目录使用configure配置安装路径以及需要安装的模块
[rootdesktop-dm818pf ~]# unzip tengine-master.zip[rootdesktop-dm818pf ~]# cd tengine-master/[rootdesktop-dm818pf tengine-master]# ./configure --prefix/usr/local/Tengine --dso-path/usr/local/Tengine/modules --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module --http-proxy-temp-path/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path/var/tmp/Tengine/cgi_temp --http-client-body-temp-path/var/tmp/Tengine/client_body_temp --http-log-path/var/log/Tengine/access.log --error-log-path/var/log/Tengine/error.log
安装Tengine 源码编译安装
[rootdesktop-dm818pf tengine-master]# make desktop-dm818pf tengine-master]# vim /etc/profile# 增加tengine的环境变量export tengine_home/usr/local/Tengineexport PATH$PATH:$tengine_home/sbin[rootdesktop-dm818pf tengine-master]# source /etc/profileecho $tengine_home
启动tengine
[rootdesktop-dm818pf ~]# nginx# /lib64/是快捷方式 [rootdesktop-dm818pf ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/[rootdesktop-dm818pf ~]# nginx[rootdesktop-dm818pf ~]# mkdir -p /var/tmp/Tengine/client_body_temp[rootdesktop-dm818pf ~]# nginx[rootdesktop-dm818pf ~]# ps -ef | grep nginx[rootdesktop-dm818pf ~]# curl http://localhost在数组机查看 关闭防火墙rootdesktop-dm818pf ~]# systemctl stop firewalld然后打开浏览器输入虚拟机ip地址 出现welcome to tengine成功
5、安装GraphicsMagick
安装依赖包和类库
下面这步前面安装过了 这里不再执行下面内容[rootdesktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel[rootdesktop-dm818pf ~]# cd /opt[rootdesktop-dm818pf ~]# tar zxvf GraphicsMagick-1.3.18.tar.gz[rootdesktop-dm818pf ~]# cd GraphicsMagick-1.3.18/[rootdesktop-dm818pf GraphicsMagick-1.3.18]# ./configure --prefix/usr/local/GraphicsMagick --enable-shared[rootdesktop-dm818pf GraphicsMagick-1.3.18]# make desktop-dm818pf GraphicsMagick-1.3.18]# /usr/local/GraphicsMagick/bin/gm version
6、配置Lua脚本文件
文件名ImageResizer.lua
位置/usr/local/Tengine/lua/ImageResizer.lua
权限可执行
cd /usr/local/Tengine/mkdir /usr/local/Tengine/luavim /usr/local/Tengine/lua/ImageResizer.lua 输入下面的文件内容ll /usr/local/Tengine/lua/ImageResizer.lua 列举查看是没有执行权限的 设置执行权限chmod 777/usr/local/Tengine/lua/ImageResizer.lua
文件内容
local command "/usr/local/GraphicsMagick/bin/gm convert " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " profile \"*\" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext;os.execute(command);ngx.exec(ngx.var.request_uri);
7、Tengine配置
文件名nginx.conf
位置/usr/local/Tengine/conf/nginx.conf 查看里面内容 可不执行这一块只是普及怎么把注释给去掉查看 再来编辑也比较方便 但是没必要 cat /usr/local/Tengine/conf/nginx.conf cat /usr/local/Tengine/conf/nginx.conf | grep -v “#” 现在要修改文件 保险起见你应该弄个副本用cp命里 这里我就不采用了 我现在的位置是 /usr/local/Tengine/ mv ./conf/nginx.conf ./conf/nginx.conf.bak cat ./conf/nginx.conf.bak | grep -v “#” >/usr/local/Tengine/conf/nginx.conf cat ./conf/nginx.conf 这次里面没有任何注释内容 vim ./conf/nginx.conf 文件内容 就是在首行添加 user root; server块直接copy下面的跟文件里的server块并行即可 因为可以有多个server块 注释应该没影响不排除你的好使 必要时去掉注释
user root;# 新增一个server块server {listen 80;server_name img.itrip.project.bdqn.cn;root /data/itrip/uploadimg;location / {root /data/itrip/uploadimg; # 站点根目录expires 1h; # 缓存时间add_header Cache-Control max-age3600; # 缓存时间access_log /var/log/Tengine/host_access.log;}#如果 url 格式如xxxx.gif_数字x数字.giflocation ~* ^(.\.(jpg|jpeg|gif|png))_(\d)x(\d)\.(jpg|jpeg|gif|png)$ {# 这里必须设置否则根目录# 即 $document_root 会是 Nginx 默认的 Nginx Root/html在 Lua 中会得不到期望的值root /data/itrip/uploadimg;# 如果文件不存在时才需要裁剪if (!-f $request_filename) { # 此HTTP Header无实际意义用于测试add_header X-Powered-By Lua GraphicsMagick; # 此 HTTP Header无实际意义用于测试add_header file-path $request_filename; # 在编写外部 Lua脚本时设置为off Nginx不会缓存 Lua方便调试lua_code_cache on; # 设置原始图片路径如/document_root/1.gifset $request_filepath /data/itrip/uploadimg$1; set $width $3; # 设置裁剪/缩放的宽度set $height $4; # 设置裁剪/缩放的高度set $ext $5; # 图片文件格式后缀# 加载外部 Lua 文件content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua; }}}
创建站点目录配置文件自己写的路径 也是测试图片的上传位置
mkdir -p /data/itrip/uploadimg
重启nginx:
nginx -s reload
三、功能测试
不上传403 上传图片到站点目录/data/itrip/uploadimg
[rootdesktop-dm818pf ~]# yum install tree[rootdesktop-dm818pf ~]# tree /data/itrip/uploadimg/data/itrip/uploadimg├── 111.jpg
在浏览器地址栏输入一下内容
http://localhost/111.jpg_800x480.jpg
自动在站点目录下生成以111.jpg为原图的800x400的缩略图。
[rootdesktop-dm818pf ~]# tree /data/itrip/uploadimg/data/itrip/uploadimg├── 111.jpg└── 111.jpg_800x480.jpg
可参考教程1 可参考教程2 1.准备好最开始需要下载的4个工具 在opt下创建个包叫tengine 在该目录下点击上传一次选中4个要上传的成功如下
2.打开虚拟机连网状态执行下面命令
# 安装依赖包和类库 执行第一条即可一次完工省事yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-develyum install -y libjpeg libjpeg-develyum install -y libpng libpng-develyum install -y giflib giflib-develyum install -y freetype freetype-devel#安装Lua 源码编译安装yum install -y readline readline-devel gcc gcc-c pcre-devel openssl-devel zlib-develyum install -y readline readline-develyum install -y openssl-devel gcc-c# 如果你安装的时候半天安不好 ctrlc后 记得 yum -y updata (当然这里不会出现)cd /opt/tengine/tar zxvf lua-5.4.0.tar.gztar zxvf LuaJIT-2.0.5.tar.gztar zxvf GraphicsMagick-1.3.35.tar.gzcd lua-5.4.0/make linux make install#安装LuaJIT 源码编译安装cd ../LuaJIT-2.0.5/makemake installlua -v# 安装Tengine 源码编译安装#进入Tengine源码目录,使用configure配置安装路径需要安装的模块#下面这一块内容不做尝试 说下情况 然后从下面 tengine-master.zip开始cd ..tar zxvf tengine-2.3.2.tar.gzcd tengine-2.3.2/# 下面运行这一大块应该会出错./configure --prefix/usr/local/Tengine --dso-path/usr/local/Tengine/modules --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module --http-proxy-temp-path/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path/var/tmp/Tengine/cgi_temp --http-client-body-temp-path/var/tmp/Tengine/client_body_temp --http-log-path/var/log/Tengine/access.log --error-log-path/var/log/Tengine/error.log#因此上传tengine-master.zip上面写了下载地址来到/opt/tengine/解压此zipunzip tengine-master.zipcd tengine-master/./configure --prefix/usr/local/Tengine --dso-path/usr/local/Tengine/modules --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module --http-proxy-temp-path/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path/var/tmp/Tengine/cgi_temp --http-client-body-temp-path/var/tmp/Tengine/client_body_temp --http-log-path/var/log/Tengine/access.log --error-log-path/var/log/Tengine/error.log# 我都弄到了前面命令里 这里应该不会出现下面的错误 如果只是日志的错误问题不大 执行下面命令就好了#上面执行如果权限不够的话 chmod 777 ./configure 如果没有PCRE就 yum install pcre-devel再次执行上面#如果没有OpenSSL就 yum install openssl yum install openssl-devel [rootdesktop-dm818pf tengine-master]# make desktop-dm818pf tengine-master]# vim /etc/profile# 增加tengine的环境变量export tengine_home/usr/local/Tengineexport PATH$PATH:$tengine_home/sbin[rootdesktop-dm818pf tengine-master]# source /etc/profile#启动tengine[rootdesktop-dm818pf ~]# nginx# [rootdesktop-dm818pf ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/[rootdesktop-dm818pf ~]# nginx[rootdesktop-dm818pf ~]# mkdir -p /var/tmp/Tengine/client_body_temp[rootdesktop-dm818pf ~]# nginx[rootdesktop-dm818pf ~]# curl http://localhost
中间的意外建议参考 地址一 地址二
24 yum install readline25 yum install readline-devel下面凡是虚拟机从网上下载的 当然了我网不行下载不下来 不建议这种方式 如果你可以下载下来记得执行下面这个命令yum makecache 是 将服务器上的软件包信bai息 现在本地缓存,以提高 搜索 安装软件的速度26 wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz不要再虚拟机执行 下不下来的复制链接到迅雷下载上传到虚拟机/opt下27 cd /opt28 tar -xzf LuaJIT-2.0.5.tar.gz29 ll30 make /usr/local/tengine --dso-path/usr/local/tengine/modules --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module --http-proxy-temp-path/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path/var/tmp/Tengine/cgi_temp --http-client-body-temp-path/var/tmp/Tengine/client_body_temp --http-log-path/var/log/Tengine/access.log --error-log-path/var/log/Tengine/error.log//这里错问题不大37 make /usr/local/GraphicsMagick --enable-shared60 make 大概第二行 1.把user改为root用户把这一块弄成下面即可location / {root /home/hadoop/images;index index.html index.htm;}location /lua/ {default_type text/html;content_by_lua ngx.say("
hello, ttlsa lua
");}location ~* ^(.\.(jpg|jpeg|gif|png))_(\d)x(\d)\.(jpg|jpeg|gif|png)$ {root /home/hadoop/images; if (!-f $request_filename) { lua_code_cache off; set $request_filepath /home/hadoop/images/$1; set $width $3; set $height $4; set $ext $5; content_by_lua_file /usr/local/tengine/lua/ImageResizer.lua;}} 70 cd /usr/local/tengine/71 mkdir lua72 cd lua/73 vi ImageResizer.lualocal command "/usr/local/GraphicsMagick/bin/gm convert " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " profile \"*\" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext;os.execute(command);ngx.exec(ngx.var.request_uri);# cd /usr/local/tengine/sbin/# ./nginx 因为前面测试的时候我们启动过了 再次启动必然报错# ./nginx -t #查看编译是否成功# ./nginx -s reload #重启nginx上传几张图片到opt下cd /opt82 mkdir /home/hadoop/images 这个我们配置的地址83 mkdir -p /home/hadoop/images84 mv 1.jpg 2.jpg 3.jpg /home/hadoop/images/去测试吧 成功