搭建Nginx+FastDFS服務器以及實現Nginx+Lua+GraphicsMagick動態壓縮圖片

在Linux系統安裝FastDFS服務器(ip:192.168.127.128)

1、編譯環境

[root@localhost ~]# yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

2、安裝libfatscommon

FastDFS分離出的一些公用函數包

#切換到安裝目錄準備下載安裝包
[root@localhost ~]# cd /usr/local/src
[root@localhost src]# git clone https://github.com/happyfish100/libfastcommon.git --depth 1
[root@localhost src]# cd libfastcommon/
[root@localhost src]# ./make.sh && ./make.sh install #編譯安裝
​
#若出現以下錯誤執行下面命令即可,Peer reports incompatible or #unsupported protocol version.
[root@localhost src]# yum update -y nss curl libcurl

3、安裝FastDFS

[root@localhost libfastcommon]# cd ../ #返回安裝目錄
[root@localhost src]# git clone https://github.com/happyfish100/fastdfs.git --depth 1
[root@localhost src]# cd fastdfs/
[root@localhost fastdfs]# ./make.sh && ./make.sh install #編譯安裝

4、FastDFS配置

[root@localhost fastdfs]# cd ../ #返回安裝目錄
#拷貝相關配置文件到/etc/fdfs目錄下
[root@localhost src]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
[root@localhost src]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
[root@localhost src]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
[root@localhost src]# cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx訪問使用
[root@localhost src]# cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx訪問使用
[root@localhost src]# mkdir /home/fastdfs #創建數據存儲目錄,配置文件中要指定的目錄
#tracker配置
[root@localhost src]# vim /etc/fdfs/tracker.conf
#單機部署,需要修改的內容如下
port=22122  # tracker服務器端口(默認22122,一般不修改)
base_path=/home/fastdfs  # 存儲日誌和數據的根目錄
​
#分佈式部署,需要修改的內容如下
port=22122  # tracker服務器端口(默認22122,一般不修改)
base_path=/home/fastdfs  # 存儲日誌和數據的根目錄
#storage配置
[root@localhost src]# vim /etc/fdfs/storage.conf
#單機部署,需要修改的內容如下
port=23000  # storage服務端口(默認23000,一般不修改)
base_path=/home/fastdfs  # 數據和日誌文件存儲根目錄
store_path0=/home/fastdfs  # 第一個存儲目錄
tracker_server=192.168.127.128:22122  # tracker服務器IP和端口,虛擬機系統的ip
http.server_port=8888  # http訪問文件的端口(默認8888,看情況修改,和nginx中保持一致)
​
#分佈式部署,需要修改的內容如下
port=23000  # storage服務端口(默認23000,一般不修改)
base_path=/home/fastdfs  # 數據和日誌文件存儲根目錄
store_path0=/home/fastdfs  # 第一個存儲目錄
tracker_server=192.168.127.128:22122  # 服務器1
tracker_server=192.168.127.129:22122  # 服務器2
tracker_server=192.168.127.130:22122  # 服務器3
http.server_port=8888  # http訪問文件的端口(默認8888,看情況修改,和nginx中保持一致)
#client配置
[root@localhost src]# vim /etc/fdfs/client.conf
#單機部署,需要修改的內容如下
base_path=/home/fastdfs
tracker_server=192.168.127.128:22122    #tracker服務器IP和端口
​
#分佈式部署,需要修改的內容如下
base_path=/home/fastdfs
tracker_server=192.168.127.128:22122  # 服務器1
tracker_server=192.168.127.129:22122  # 服務器2
tracker_server=192.168.127.130:22122  # 服務器3

5、安裝fastdfs-nginx-module

FastDFS和nginx的關聯模塊

[root@localhost src]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
#將配置文件拷貝到/etc/fdfs目錄下
[root@localhost src]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

6、fastdfs-nginx-module配置

[root@localhost src]# vim /etc/fdfs/mod_fastdfs.conf
#單機部署,需要修改的內容如下
tracker_server=192.168.127.128:22122  #tracker服務器IP和端口
url_have_group_name=true
store_path0=/home/fastdfs
​
#分佈式部署,需要修改的內容如下
tracker_server=192.168.127.128:22122  # 服務器1
tracker_server=192.168.127.129:22122  # 服務器2
tracker_server=192.168.127.130:22122  # 服務器3
url_have_group_name=true
store_path0=/home/fastdfs

7、安裝nginx

[root@localhost src]# wget http://nginx.org/download/nginx-1.15.4.tar.gz
[root@localhost src]# tar -zxvf nginx-1.15.4.tar.gz

8、nginx配置

[root@localhost src]# cd nginx-1.15.4/
#添加fastdfs-nginx-module模塊
[root@localhost nginx-1.15.4]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
[root@localhost nginx-1.15.4]# make && make install
​
[root@localhost nginx-1.15.4]# vim /usr/local/nginx/conf/nginx.conf
#單機部署,添加如下配置
server {
    listen       8888; #該端口爲storage.conf中的http.server_port相同
    server_name  localhost;
    
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}
​
#分佈式部署,同上

12、關閉防火牆

[root@localhost nginx-1.15.4]# systemctl stop iptables;
[root@localhost nginx-1.15.4]# systemctl stop firewalld;
[root@localhost nginx-1.15.4]# systemctl disable firewalld.service; #關閉防火牆開機自啓

13、啓停命令介紹

/etc/init.d/fdfs_trackerd start #啓動tracker服務
/etc/init.d/fdfs_trackerd restart #重啓動tracker服務
/etc/init.d/fdfs_trackerd stop #停止tracker服務
chkconfig fdfs_trackerd on #自啓動tracker服務
​
/etc/init.d/fdfs_storaged start #啓動storage服務
/etc/init.d/fdfs_storaged restart #重動storage服務
/etc/init.d/fdfs_storaged stop #停止動storage服務
chkconfig fdfs_storaged on #自啓動storage服務
​
/usr/local/nginx/sbin/nginx #啓動nginx
/usr/local/nginx/sbin/nginx -s reload #重啓nginx
/usr/local/nginx/sbin/nginx -s stop #停止nginx
#可編寫啓動腳本
[root@localhost nginx-1.15.4]# cd /usr/local/src/
[root@localhost src]# vi startup.sh
#添加如下內容
/etc/init.d/fdfs_trackerd start #啓動tracker服務
/etc/init.d/fdfs_storaged start #啓動storage服務
/usr/local/nginx/sbin/nginx #啓動nginx
[root@localhost src]# chmod +x startup.sh
​
[root@localhost src]# vi shutdown.sh
/etc/init.d/fdfs_trackerd stop #停止tracker服務
/etc/init.d/fdfs_storaged stop #停止動storage服務
/usr/local/nginx/sbin/nginx -s stop #停止nginx
[root@localhost src]# chmod +x shutdown.sh

14、啓動服務後可進行集羣檢測

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 會顯示會有幾臺服務器 有3臺就會 顯示 Storage 1 - Storage 3的詳細信息

使用FastDFS自帶的工具將文件上傳到FastDFS,並可以通過http 訪問到對應的圖片

1、測試上傳

#先將測試圖片放到linux系統隨便一個目錄下,例如:/home/fanxuebo/Pictures
#使用命令上傳到FastDFS
[root@localhost src]# fdfs_upload_file /etc/fdfs/client.conf /home/fanxuebo/Pictures/kyrie.jpg
group1/M00/00/00/wKh_gF7-sJaAGJe_AAF8KZax7Dw403.jpg

2、通過http訪問

#在瀏覽器地址欄輸入下面地址
http://192.168.127.128:8888/group1/M00/00/00/wKh_gF7-sJaAGJe_AAF8KZax7Dw403.jpg

 

使用GraphicsMagick工具生成縮略圖,通過http訪問某個圖片時,顯示其對應的動態壓縮圖(Nginx+Lua+GraphicsMagick)

1、下載LuaJIT和Lua和GraphicsMagick等相關軟件

一定要注意軟件的版本,最好保持一致,不然很多坑的

[root@localhost src]# cd /usr/local/src
#先下載,分別進行編譯安裝使用
[root@localhost src]# wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
[root@localhost src]# wget http://www.lua.org/ftp/lua-5.3.3.tar.gz
[root@localhost src]# wget https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.35/GraphicsMagick-1.3.35.tar.gz
#下載編譯安裝nginx使用的一些模塊
[root@localhost src]# wget http://www.zlib.net/fossils/zlib-1.2.11.tar.gz
[root@localhost src]# tar -xvf zlib-1.2.11.tar.gz
[root@localhost src]# git clone https://github.com/simpl/ngx_devel_kit.git
[root@localhost src]# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
[root@localhost src]# tar -xvf v0.10.9rc7.tar.gz

2、編譯安裝-LuaJIT

LuaJIT是Lua語言寫的腳本的即時編譯器(Just-In-Time Compilerfor)

[root@localhost src]# tar -zxf LuaJIT-2.0.4.tar.gz
[root@localhost src]# cd LuaJIT-2.0.4/
[root@localhost LuaJIT-2.0.4]# make && make install
[root@localhost LuaJIT-2.0.4]# export LUAJIT_LIB=/usr/local/lib
[root@localhost LuaJIT-2.0.4]# export LUAJIT_INC=/usr/local/include/luajit-2.0
[root@localhost LuaJIT-2.0.4]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

3、編譯安裝-Lua

一個小巧的腳本語言

[root@localhost LuaJIT-2.0.4]# cd ..
[root@localhost src]# tar -xvf lua-5.3.3.tar.gz
[root@localhost src]# cd lua-5.3.3/
[root@localhost lua-5.3.3]# make linux && make install
​
#編譯時遇到錯誤lua.c:80:31: fatal error: readline/readline.h: No such file or directory
#說明缺少libreadline-dev依賴包,執行下面命令即可
[root@localhost lua-5.3.3]# yum install readline-devel

4、編譯安裝-GraphicsMagick

圖像處理領域的瑞士軍刀

[root@localhost lua-5.3.3]# cd ..
#安裝graphicsmagick支持的圖片格式
[root@localhost src]# yum install libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel
[root@localhost src]# tar -xvf GraphicsMagick-1.3.35.tar.gz
[root@localhost src]# cd GraphicsMagick-1.3.35/
[root@localhost GraphicsMagick-1.3.35]# ./configure --prefix=/usr/local/GraphicsMagick --enable-shared
[root@localhost GraphicsMagick-1.3.35]# make && make install

5、編譯安裝-nginx

[root@localhost GraphicsMagick-1.3.35]# cd ..
#先查看nginx編譯安裝時安裝了哪些模塊
[root@localhost src]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.15.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --add-module=/usr/local/src/fastdfs-nginx-module/src/
​
#在nginx的源碼目錄下,通過–add-module=xxx的方式,追加以下模塊
#--add-module=/usr/local/src/lua-nginx-module
#--add-module=/usr/local/src/ngx_devel_kit
[root@localhost sbin]# cd /usr/local/src/nginx-1.15.4/
[root@localhost nginx-1.15.4]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ \
--prefix=/usr/local/nginx \
--with-zlib=/usr/local/src/zlib-1.2.11 \
--add-module=/usr/local/src/lua-nginx-module-0.10.9rc7 \
--add-module=/usr/local/src/ngx_devel_kit
[root@localhost nginx-1.15.4]# make && make install

6、nginx配置

[root@localhost nginx-1.15.4]# vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
    listen       8888;
    server_name  localhost;
​
    #安裝並啓動nginx後,使用lua1來驗證nginx是否啓動成功並支持lua腳本
    #瀏覽器輸入http://192.168.127.128:8888/lua1,可以輸出“Hello, Lua!”即啓動成功
    location /lua1 {
                default_type 'text/plain';
                content_by_lua 'ngx.say("Hello, Lua!")';
    }
    
    #訪問原圖片的匹配,本身有這個location注意別重複了
    location / {
            root   /resource/image;
            index  index.html index.htm;
    }
    
    #正則表達式用於攔截圖片請求(圖片請求都是以固定格式請求的,所以用正則匹配)
    location ~* ^((.+\.(jpg|jpeg|gif|png))_(\d+)x(\d+)\.(jpg|jpeg|gif|png))$ {
        root /usr/local/nginx/html;
        if (!-f $request_filename) { # 如果文件不存在時才需要裁剪
            add_header X-Powered-By 'Lua GraphicsMagick'; # 此 HTTP Header 無實際意義,用於測試
            add_header file-path $request_filename; # 此 HTTP Header 無實際意義,用於測試
            set $request_filepath /resource/image$2; # 設置原始圖片路徑
            set $width $4;  # 設置裁剪/縮放的寬度
            set $height $5; # 設置裁剪/縮放的高度
            set $ext $6;    # 圖片文件格式後綴
            content_by_lua_file /usr/local/nginx/lua/ImageResizer.lua; # 加載外部 Lua 文件
        }
    }
}

7、創建圖片目錄和Lua配置

[root@localhost nginx-1.15.4]# mkdir /resource/image -p
#給目錄授權,這步驟很重要!!!
[root@localhost nginx-1.15.4]# chmod 777 -R /resource/image/
[root@localhost nginx-1.15.4]# mkdir /usr/local/nginx/lua -p
[root@localhost nginx-1.15.4]# vi /usr/local/nginx/lua/ImageResizer.lua
#添加如下配置
local command = "/usr/local/GraphicsMagick/bin/gm convert   -auto-orient -strip " .. 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);

8、測試效果

#啓動nginx
[root@localhost nginx-1.15.4]# /usr/local/nginx/sbin/nginx
在上述圖片目錄/resource/image中上傳一張圖片 kyrie.jpg
​
瀏覽器訪問http://192.168.127.128:8888/kyrie.jpg是原圖
瀏覽器訪問http://192.168.127.128:8888/kyrie.jpg_100x100.jpg是輸入尺寸的圖
$2對應得是/kyrie.jpg
$3對應得是jpg
$4對應得是100
$5對應得是100
$6對應得是jpg

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章