【Linux初学】nginx-lua-fastdfs-GraphicsMagick安装(八)

近期恰好有时间,整理一下nginx-lua-fastdfs-GraphicsMagick。简单说就是,在nginx配置图片请求lua脚本,脚本中经过GraphicsMagick命令将fastdfs文件系统上的图片变动成指定的尺寸。ios

先看看前辈们的案例:(等比例缩略图生成)nginx

原图(800*800):http://gi1.md.alicdn.com/imgextra/i1/401612253/T2ASPfXE4XXXXXXXXX_!!401612253.jpggit

60*60: http://gi1.md.alicdn.com/imgextra/i1/401612253/T2ASPfXE4XXXXXXXXX_!!401612253.jpg_60x60.jpggithub

80*80:http://gi1.md.alicdn.com/imgextra/i1/401612253/T2ASPfXE4XXXXXXXXX_!!401612253.jpg_80x80.jpgmongodb

1、nginx-lua 配置:vim

1.检查已经装的nginx路径和版本:windows

#find /|grep nginx.conf浏览器

/usr/local/nginx/conftomcat

#/usr/local/nginx/sbin/nginx -vcurl

nginx version: nginx/1.9.8

注:若是是nginx1.6如下是版本先看下面升级nginx的方法先升级,不然安装不了

二、 下载luajit 2.0.5并安装

# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz

# tar -zxvf LuaJIT-2.0.5.tar.gz

# cd LuaJIT-2.0.5/

# make && make install

执行后会显示日志:==== Successfully built LuaJIT 2.0.5 ====

三、 下载ngx_devel_kit http://github.com/simpl/ngx_devel_kit/tags 解压

# wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz

# tar -zxvf v0.2.19.tar.gz

解压后将会看到:ngx_devel_kit-0.2.19文件

四、 下载nginx_lua_module http://github.com/chaoslawful/lua-nginx-module/tags 解压

# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.0.tar.gz

# tar -zxvf v0.10.0.tar.gz

解压后将会看到:lua-nginx-module-0.10.0文件

五、导入环境变量,编译用,LuaJIT默认安装在(/usr/local/lib)

# ls /usr/local/lib

# ls /usr/local/include/

# export LUAJIT_LIB=/usr/local/lib

# export LUAJIT_INC=/usr/local/include/luajit-2.0

上面方法的PATH 在终端关闭 后就会消失。
vim /etc/profile
在文档最后,添加:
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
保存,退出,而后运行:
#source /etc/profile
不报错则成功。

六、 进入nginx源码文件夹,增长编译参数

# /usr/local/nginx/sbin/nginx -v

显示版本信息: nginx/1.9.8

# find /|grep nginx-1.9.8
# cd /usr/local/temp/nginx-1.9.8/

./configure --user=www --group=www --prefix=/usr/local/nginx --with-pcre=/usr/local/temp/pcre-8.37 --add-module=/usr/local/temp/ngx_cache_purge-2.3 --add-module=/usr/local/temp/ngx_devel_kit-0.2.19 --add-module=/usr/local/temp/lua-nginx-module-0.10.0

参数说明:
./configure --prefix=/etc/nginx \ #nginx的安装路径
--add-module=/home/user/ngx_devel_kit-0.2.19 \ #ngx_devel_kit 的源码路径
--add-module=/home/user/lua-nginx-module-0.10.0 #nginx_lua_module 的源码路径

七、执行安装

# cd /usr/local/temp/nginx-1.9.8/

# make

# make install

发现nginx版本过低安装不了,须要先升级
/home/user/lua-nginx-module-0.10.0/src/ngx_http_lua_common.h:26:2: error: #error at least nginx 1.6.0 is required but found an older version

版本过低,先进行下面步骤升级nginx

八、测试是否成功

# find /|grep nginx.conf
/usr/local/nginx/conf
加入
location /lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}

# /usr/local/nginx/sbin/nginx -t   --验证配置文件是否配置正常
# /usr/local/nginx/sbin/nginx -s stop   --上面失败后没法中止nginx

报错:error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

解决:

# find / -name  libluajit-5.1.so.2 --查找该包确实存在

# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2  --生成软连接

接下来再次中止

# /usr/local/nginx/sbin/nginx -s stop

# /usr/local/nginx/sbin/nginx

浏览器访问http://ip:port/lua,会出现“hello,lua”;或者使用#curl http://service.quivertree.com/lua,也会显示“hello,lua”。安装成功!

2、安装GraphicsMagick:

一、下载压缩包:GraphicsMagick:http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/

二、上传解压:tar -zxvf GraphicsMagick-1.3.30.tar.gz (windows下载)

或 tar -Jxvf GraphicsMagick-1.3.30.tar.xz (ios下载)

[/usr/local/temp/GraphicsMagick-1.3.30]# ./configure --prefix=/usr/local/GraphicsMagick --enable-shared

[/usr/local/temp/GraphicsMagick-1.3.30]# make

[/usr/local/temp/GraphicsMagick-1.3.30]# make install

[/usr/local/temp/GraphicsMagick-1.3.30]# /usr/local/GraphicsMagick/bin/gm version

会显示出GraphicsMagick支持的图片格式,即安装成功!

Feature Support:
Native Thread Safe     yes
Large Files (> 32 bit)     yes
Large Memory (> 32 bit)     yes
BZIP            no
DPS             no
FlashPix       no
FreeType     no
Ghostscript (Library)     no
JBIG             no
JPEG-2000   no
JPEG             no
Little CMS    no
Loadable Modules     no
OpenMP     yes (200805)
PNG             no
TIFF              no
TRIO             no
UMEM          no
WebP            no
WMF             no
X11                no
XML               no
ZLIB               yes

三、下载lib,支持JPEG、PNG

wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz

wget http://www.imagemagick.org/download/delegates/libpng-1.6.31.tar.gz

tar -zxvf jpegsrc.v9b.tar.gz

tar -zxvf libpng-1.6.31.tar.gz

解压后生成文件:jpeg-9b、libpng-1.6.31

[jpeg-9b]# ./configure

[jpeg-9b]# ./make

[jpeg-9b]# ./make install

[libpng-1.6.31]# ./configure

[libpng-1.6.31]# ./make

[libpng-1.6.31]# ./make install

安装完成后,从新安装GraphicsMagick,即:

[/usr/local/temp/GraphicsMagick-1.3.30]# make

[/usr/local/temp/GraphicsMagick-1.3.30]# make install

[/usr/local/temp/GraphicsMagick-1.3.30]# /usr/local/GraphicsMagick/bin/gm version

提示错误:

/usr/local/GraphicsMagick/bin/gm: error while loading shared libraries: libjpeg.so.9: cannot open shared object file: No such file or directory

系统不知道libjpeg.so放在哪一个目录下,这时候就要在/etc/ld.so.conf中加入libjpeg.so所在的目录。通常而言,有不少的so会存放在/usr/local/lib这个目录底下,去这个目录底下找,果真发现本身所须要的libjpeg.so文件。因此,在/etc/ld.so.conf中加入/usr/local/lib这一行,保存以后,再运行:

[/]# /sbin/ldconfig -v   --更新一下配置便可。

[/usr/local/temp/GraphicsMagick-1.3.30]# /usr/local/GraphicsMagick/bin/gm version

Feature Support:
  Native Thread Safe       yes
  Large Files (> 32 bit)   yes
  Large Memory (> 32 bit)  yes
  BZIP                     no
  DPS                      no
  FlashPix                no
  FreeType              no
  Ghostscript (Library)    no
  JBIG                     no
  JPEG-2000           no
  JPEG                     yes
  Little CMS            no
  Loadable Modules   no
  OpenMP                   yes (200805)
  PNG                    yes
  TIFF                     no
  TRIO                    no
  UMEM                 no
  WebP                  no
  WMF                   no
  X11                      no
  XML                     no
  ZLIB                     yes

四、测试生成图片:

原图地址:/usr/local/test/1.jpg

[/usr/local/GraphicsMagick/bin]# gm convert -resize 100x80^ -gravity Center -crop 100x80+0+0 /usr/local/test/1.jpg /usr/local/test/2.jpg

执行成功,能够在/usr/local/下查看到新生成的图片2.jpg。

将gm命令设置成全局变量,即:

vi /etc/profile

设置 PATH=$JAVA_HOME/bin:$PATH:/usr/local/mongodb/bin:/usr/local/GraphicsMagick/bin

保存后,执行 source /etc/profile ,完成更新。

gm identify /usr/local/test/1.jpg

显示:/usr/local/test/1.jpg JPEG 1280x720+0+0 DirectClass 8-bit 137.5Ki 0.000u 0m:0.000004s

五、编写脚本vi 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); // 输出裁剪后的图片

六、修改nginx的配置文件nginx.conf

location ~ /pic/ {
            root /usr/local/tomcat/static;
                if ($uri ~* ^/pic/(.+\.(jpg|jpeg|gif|png))_(\d+)x(\d+)\.(jpg|jpeg|gif|png)) {
                        add_header X-Powered-By 'Lua GraphicsMagick';
                        add_header file-path $request_filename;
                        lua_code_cache on;
                        set $request_filepath /usr/local/tomcat/static/pic/$1;
                        set $width $3;
                        set $height $4;
                        set $ext $5;
                 }
 
                if (!-f $request_filename) {
                        content_by_lua_file /usr/local/nginx/ImageResizer.lua;
                }
        }

七、访问报错404/500

[/usr/local/nginx/logs]# tail -f error.log

若是报错信息为 /usr/local/GraphicsMagick/bin/gm convert: Unable to open file (/usr/local/tomcat/static/article/pic/110/1.jpg_80x80.jpg) [Permission denied].

发现没有对应权限,进行图片文件夹pic受权:

[/usr/local/tomcat/static/article/]chmod 777 -R pic

再次访问就能够了 ~over~

相关文章
相关标签/搜索