目标
linux 搭建FastDFS图片服务器、Nginx服务器,通过http请求访问服务器中图片时,显示动态缩略图
思路分析
- 在Linux系统中安装FastDFS服务器
- 可以使用FastDFS自带的工具将文件上传到FastDFS
- 通过http访问某个图片时,FastDFS通过GraphicsMagick工具生成缩略图,将动态缩略图响应输出
本文所需要的安装软件
链接:https://pan.baidu.com/s/1sbKCt74LV-OQcCPL1NcbHQ 提取码:v0gm
搭建步骤
搭建FastDFS
我们采用源码方式安装,为了能够顺利安装我们首先需要安装编译环境
1 安装编译环境
yum install git gcc gcc-c++ make automake vim wget libevent -y
2 安装libfastcommon 基础库
mkdir /root/fastdfs
cd /root/fastdfs
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install
3 安装FastDFS
cd /root/fastdfs
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar -zxvf V5.11.tar.gz
cd fastdfs-5.11
./make.sh && ./make.sh install
#配置文件准备
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs
cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs
vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122
base_path=/home/fastdfs
vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000
base_path=/home/fastdfs # 数据和日志文件存储根目录
store_path0=/home/fastdfs # 第一个存储目录
tracker_server=192.168.126.128:22122
# http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
http.server_port=8888
4.启动
mkdir /home/fastdfs -p
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
查看所有运行的端口
netstat -ntlp
5.测试上传
vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/fastdfs
#tracker服务器IP和端口
tracker_server=192.168.211.136:22122
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/236336-106.jpg
group1/M00/00/00/wKh-gF9SVwyATIqlAAgBcVdRhz8147.jpg
6.安装fastdfs-nginx-module
cd /root/fastdfs
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
解压
tar -xvf V1.20.tar.gz
cd fastdfs-nginx-module-1.20/src
vim config
修改第5 行 和 15 行 修改成
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.126.128:22122
url_have_group_name=true
store_path0=/home/fastdfs
mkdir -p /var/temp/nginx/client
7.安装nginx
cd /root/fastdfs
wget http://nginx.org/download/nginx-1.15.6.tar.gz
tar -zxvf nginx-1.15.6.tar.gz
cd nginx-1.15.6/
yum -y install pcre-devel openssl openssl-devel
# 添加fastdfs-nginx-module模块
./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
编译安装
make && make install
查看模块是否安装上
/usr/local/nginx/sbin/nginx -V
vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
}
/usr/local/nginx/sbin/nginx
8.测试下载
http://192.168.126.128:8888/group1/M00/00/00/wKh-gF9SW62AACgmAAgBcVdRhz8114.jpg
搭建Lua +GraphicsMagick实现缩略图
GraphicsMagick简介
GraphicsMagick是一个短小精悍的的图片处理工具和库集合。对于Java开发者来说,常用的图片处理工具有3个,JDK自带的图片处理库,ImageMagick,GraphicsMagick。JDK自带的图片处理库,虽稳定简单,性能却比较差;ImageMagick是目前最流行的图片处理工具,它的功能非常丰富;GraphicsMagick的功能略逊于ImageMagick,但是它的效率更强悍,但大多数情况下,GM的功能已经足够使用了。
功能特色:
(1)使用OpenMP进行多线程图片处理,增强了通过扩展CPU提高处理能力。
(2)支持大图片的处理,并且已经做过GB级别的图像处理实验。
(3)能够动态的生成图片,特别适用于互联网的应用。
支持格式:超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。
支持平台:Linux、Mac、Windows。
使用方式:GaphicsMagick支持命令行的模式,同时也支持C、C++、Perl、PHP、Tcl、 Ruby等的调用。
1 安装 GraphicsMagick
- 上传下载的GraphicsMagick包
安装相关依赖
yum install -y gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel
yum install -y libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel readline-devel ncurses-devel
安装LuaJIT
LuaJIT&Lua
lua(www.lua.org)其实就是为了嵌入其它应用程序而开发的一个脚本语言,luajit(www.luajit.org)是lua的一个Just-In-Time也就是运行时编译器,也可以说是lua的一个高效版。
下载地址 http://luajit.org/download.html
本次使用的是2.0.4版本
# 上传解压
cd /opt/mgk/LuaJIT-2.0.4
make && make install
// 安装成功!
share/luajit-2.0.4/jit
ln -sf luajit-2.0.4 /usr/local/bin/luajit
==== Successfully installed LuaJIT 2.0.4 to /usr/local ====
#配置lua环境
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
安装lua
cd /usr/local/src/lua-5.3.1
make linux && make install
安装GraphicsMagick
cd /usr/local/src/GraphicsMagick-1.3.18
./configure --prefix=/usr/local/GraphicsMagick-1.3.18 --enable-shared
make && make install
ln -s /usr/local/GraphicsMagick-1.3.18 /usr/local/GraphicsMagick
安装nginx插件
共需要安装lua-nginx-module和
ngx_devel_kie这2个插件
我们采用wget方式的进行下载
cd /root/fastdfs
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -xzvf v0.3.0.tar.gz
https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -zxvf v0.10.9rc7.tar.gz
nginx插件安装
#首先切换到nginx源码目录下
cd /root/fastdfs/nginx-1.15.6
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs/lua-nginx-module-0.10.9rc7 --add-module=/root/fastdfs/ngx_devel_kit-0.3.0
#编译
make && make install
#查看模块是否安装上
/usr/local/nginx/sbin/nginx -V
[root@localhost nginx-1.15.6]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.15.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --prefix=/usr/local/nginx --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src --add-module=/root/fastdfs/lua-nginx-module-0.10.9rc7 --add-module=/root/fastdfs/ngx_devel_kit-0.3.0
安装lua脚本
此脚本专门用月nginx代理fastdfs缩略图时,使用的,网上已开源,开源万岁!
下载lua脚本
git clone https://github.com/hpxl/nginx-lua-fastdfs-GraphicsMagick.git
cd nginx-lua-fastdfs-GraphicsMagick/lua
# 将脚本复制到nginx的conf目录下
cp ./* /root/fastdfs/nginx-1.15.6/conf/lua
修改lua脚本配置
修改脚本中的tracker ip信息和gm的命令变量
vim /usr/local/nginx/conf/fastdfs.lua
#在46行
fdfs:set_tracker("192.168.126.128", 22122)
#在72行
local command = "/usr/local/GraphicsMagick-1.3.18/bin/gm convert " .. originalFile .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. ngx.var.file;
修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8888;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~/group1/ {
alias /home/fastdfs/data;
# 指定图片的根路径
set $image_root "/home/fastdfs/data";
if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") {
set $image_dir "$image_root/$3/$4/";
set $image_name "$5";
set $file "$image_dir$image_name";
}
if (!-f $file) {
# 关闭lua代码缓存,方便调试lua脚本
#lua_code_cache off;
#指定lua脚本的位置
content_by_lua_file "/usr/local/nginx/conf/fastdfs.lua";
}
ngx_fastdfs_module;
}
}
赋予GraphicMagick对fastdfs存储目录写的权限
chmod +777 /home/fastdfs/data/
缺失此步骤,会导致lua脚本转换缩略图失败
缩略图测试
重启nginx
/usr/local/nginx/sbin/nginx -s reload
正常图片访问
http://192.168.126.128:8888/group1/M00/00/00/wKh-gF9SVwyATIqlAAgBcVdRhz8147.jpg
访问缩率图80×80
http://192.168.126.128:8888/group1/M00/00/00/wKh-gF9SVwyATIqlAAgBcVdRhz8147.jpg_80x80.jpg
我们来到fastdfs系统进行查看,发现多了一张80×80的图片
遇到的问题汇总
1 fatal: unable to access 'https://github.com/happyfish100/libfastcommon.git/': Peer reports incompatible or unsupported protocol version.
yum update -y nss curl libcurl
2 -bash: http://192.168.126.128:8888/group1/M00/00/00/wKh-gF9SVwyATIqlAAgBcVdRhz8147.jpg: No such file or directory
经过查看nginx日志,
得出以下错误信息
ERROR - file: ../common/fdfs_global.c, line: 52, the format of filename "group1/M00/00/00/wKh-gF9SZAeADJGgAAgBcVdRhz8460.jpg" is invalid
解决办法
vim /etc/fdfs/mod_fastdfs.conf
url_have_group_name = true
更改配置过后,重启fastdfs和nginx即可
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/local/nginx/sbin/nginx -s reload
3 Lua安装报错:编译 Lua 报错:error: readline/readline.h: No such file or directory
缺少readline依赖导致,重新安装即可
yum install -y readline-devel
4 /usr/local/GraphicsMagick-1.3.18/bin/gm convert: Unable to open file (/home/fastdfs/data/00/00/wKh-gF9SVwyATIqlAAgBcVdRhz8147.jpg_80x80.jpg) [Permission denied].
GrahicsMagick缺少对fastdfs脚本写的权限,赋予即可
chmod +777 /home/fastdfs/data/