文章内容输出来源:拉钩教育Java工程师高薪训练营
[root@localhost ~]# yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
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
[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 #编译安装
[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
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
[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
[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
[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;
}
}
#分布式部署,同上
[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; #关闭防火墙开机自启
/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
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 会显示会有几台服务器 有3台就会 显示 Storage 1 - Storage 3的详细信息
#先将测试图片放到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
#在浏览器地址栏输入下面地址
http://192.168.127.128:8888/group1/M00/00/00/wKh_gF7-sJaAGJe_AAF8KZax7Dw403.jpg
一定要注意软件的版本,最好保持一致,不然很多坑的
[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
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
一个小巧的脚本语言
[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
图像处理领域的瑞士军刀
[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
[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
[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 /resource/image;
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 文件
}
}
}
[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);
#启动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