在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