【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~