我的博客同步:http://www.deepinblog.com/%e6%96%87%e4%bb%b6%e6%9c%8d%e5%8a%a1%e5%99%a8/142/
系统环境:Linux Centos7(3台)
1. 安装编译环境
yum install git gcc gcc-c++ make automake vim wget libevent -y
2.安装ibfastcommon基础库
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
修改tracker.conf
vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122
base_path=/home/fastdfs
修改storage.conf
vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000
base_path=/home/fastdfs # 数据和日志文件存储根目录
store_path0=/home/fastdfs # 第一个存储目录
tracker_server=192.168.211.136: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.测试上传
编辑client.conf
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
#执行上传 /root/fastdfs/1.png 为您本机上的图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png
#返回的图片
group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png
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/
#编辑mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.211.136:22122
url_have_group_name=true
store_path0=/home/fastdfs
mkdir -p /var/temp/nginx/client #创建nginx临时目录,防止报错
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;
}
#启动nginx
/usr/local/nginx/sbin/nginx
8.测试下载
关闭防火墙
systemctl stop firewalld 或者 iptables
#使用浏览器访问
http://192.168.211.136:8888/group1/M00/00/00/xxx.png http://192.168.211.136:8888/group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png
9.fastdfs集群安装
3台Centos7
| 10.211.55.7 | 10.211.55.8 | 10.211.55.10 |
|---|---|---|
| tracker | tracker | tracker |
| storage(group1) | storage(group2) | |
| nginx | nginx | nginx |
按照之前的单机方式先进行安装
9.1. 配置tracker集群 三台相同
vi /etc/fdfs/tracker.conf
store_lookup=0 # 0是轮询,1是指定组,2是剩余存储空间多的group优先
9.2 配置storage集群
vi /etc/fdfs/storage.conf
tracker_server=192.168.211.130:22122
tracker_server=192.168.211.136:22122
tracker_server=192.168.211.135:22122
group_name=group1 #注意组名 10.211.55.10 配置是 group2
port=23000 #storage 的端口号,同一个组的 storage 端口号必须相同
#重启所有tracker storage
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
9.3 查看storage的日志查看tracker集群信息
cat /home/fastdfs/logs/storaged.log
访问FastDFS时 可以把Tracker 理解成对等的,但实际底层多个Tracker时在运行过程中会选择其中一个 作为Leader,由该Leader执行一些唯一性的操作。在早期版本中Tracker-Leader有两个作用,分别 是:为新加入的Storage分配一个源Storage;为开启合并存储的Group选择Trunk-Server。但是在最新 的版本中实际上只有第二个作用,也就是选择Trunk-Server。
查看之后 如果连接不上 注意防火墙
systemctl stop firewalld
9.4 查看存储集群信息
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
9.5测试上传
vim /etc/fdfs/client.conf
tracker_server=192.168.211.130:22122
tracker_server=192.168.211.136:22122
tracker_server=192.168.211.135:22122
#重复调用该上传脚本,发现会一会上传到group1 一会上传到group2上面
#这是因为在tracker.conf中我们配置的store_lookup=0 # 0是轮询
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png
#查询上传的图片,在相同的group下面是可以查看到的
#如果这里通过nginx去访问图片,你会发现不同组的图片也是可以相互访问的
find / -name *.png
10.使用nginx和FastDFS集群结合
在每台机器上按照上面单机的步骤安装nginx
vi /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.211.130:22122
tracker_server=192.168.211.136:22122
tracker_server=192.168.211.135:22122
group_name=group1 #注意组名 如果是group2 则一定要改
#添加如下配置
vim /usr/local/nginx/conf/nginx.conf
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
启动各个nginx/usr/local/nginx/sbin/nginx
11.测试文件服务器
http://10.211.55.7/group1/M00/00/00/wKjIZVyLMi6AH08jAADtXa53YW0605.png
http://10.211.55.8/group1/M00/00/00/wKjIZVyLMi6AH08jAADtXa53YW0605.png
Ok,至此我们FastDFS集群+Nginx文件服务器已经安装完毕,接下来我们安装
Nginx+FastDFS+Lua+GraphicsMagick搭建类似淘宝的图片服务器
**12.Nginx+FastDFS+Lua+GraphicsMagick搭建类似淘宝的图片服务器 **
12.1 依赖包下载
本人已整理好FastDFS整合Nginx+FastDFS+Lua+GraphicsMagick所需要的依赖包,包含:
ngx_devel_kit
lua-nginx-module-0.10.9rc7
fastdfs-nginx-module-master
LuaJIT-2.0.4
lua-5.3.1
GraphicsMagick-1.3.18
autoSize.lua 定高或定宽模式裁切图片处理lua脚本
cropSize.lua 固定高宽模式裁切图片处理lua脚本
下载地址:
链接: https://pan.baidu.com/s/1CHc9l323ZdnQ-xkA686WwQ 提取码: 5xd8
下载完成后将Nginx+FastDFS+Lua+GraphicsMagick.zip上传至storage容器下的/usr/local/src目录中备用。
具体操作:
1、下载Nginx+FastDFS+Lua+GraphicsMagick.zip
2、使用ftp工具上传到宿主机
12.2 安装软件基础包
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
12.3 依赖安装
1.解压
cd /usr/local/src
unzip Nginx+FastDFS+Lua+GraphicsMagick.zip
cd Nginx+FastDFS+Lua+GraphicsMagick
mv * /usr/local/src
2.安装LuaJIT
cd /usr/local/src/LuaJIT-2.0.4
make && make install
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
3.安装Lua
cd /usr/local/src/lua-5.3.1
make linux && make install
4.安装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
5.在其中一台服务器上面对nginx加入新的Module
# 停止Nginx服务
/usr/local/nginx/sbin/nginx -s stop
# 进入Nginx源码目录
cd /root/fastdfs/nginx-1.15.6/
#备份原先的Nginx二进制文件,防止安装失败可以回滚
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-backup
#注意这里的--add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
#这些都是你自己所在的目录,不要死copy,看一看
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-pcre \
--add-module=/usr/local/src/lua-nginx-module-0.10.9rc7 \
--add-module=/usr/local/src/ngx_devel_kit \
--add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
--with-stream
#执行完上面然后执行make,主要这里不用make install,因为我已经安装过了
make
#最后覆盖之前nginx的二进制文件
cp objs/nginx /usr/local/nginx/sbin/nginx
12.4配置Lua脚本实现图片缩略图
因为Nginx+FastDFS+Lua+GraphicsMagick.zip的包中已经包含了lua脚本,所以可以省去编写lua脚本的步骤。只需要通过修改nginx的配置文件,即可实现lua脚本的调用。
12.5修改nginx.conf配置
# 编辑nginx.conf
vi /usr/local/nginx/conf/nginx.conf
server {
listen 8888;
server_name localhost;
set $img_thumbnail_root /var/fdfs/thumb; #缩略图保存的根目录
set $img_file $img_thumbnail_root$uri; #缩略图路径
# like:/xx/xx/xx.jpg_100-.jpg or /xx/xx/xx.jpg_-100.jpg
location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png)))_((\d+\-)|(\-\d+))\.(jpg|jpeg|gif|png)$ {
root $img_thumbnail_root; # root path for croped img
set $fdfs_group_root /var/fdfs/data; #图片存放目录
if (!-f $img_file) { # if thumb file not exists
add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue'; # header for test
add_header file-path $request_filename; # header for test
set $request_filepath $fdfs_group_root$4; # origin_img full path:/document_root/1.gif
set $img_size $6; # img width or height size depends on uri : img size like "-100" or "100-", "-" means auto size
set $img_ext $5; # file ext
content_by_lua_file /usr/local/src/lua/autoSize.lua; # load auto width or height crop Lua file
}
}
# like:/pic/M00/xx/xx/xx.jpg_200x100.jpg
location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png))_(\d+)+x(\d+)+\.(jpg|jpeg|gif|png))$ {
root $img_thumbnail_root; # root path for croped img
set $fdfs_group_root /home/fastdfs/data; #set fastdfs group path $2你自己的fastdfs data的目录
if (!-f $img_file) { # if thumb file not exists
add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue'; # header for test
add_header file-path $request_filename; # header for test
set $request_filepath $fdfs_group_root$4; # real file path
set $img_width $6; # img width
set $img_height $7; # img height
set $img_ext $5; # file ext
content_by_lua_file /usr/local/src/lua/cropSize.lua; # load crop Lua file
}
}
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
修改完成后重新启动nginx
# 启动命令
/usr/local/nginx/sbin/nginx
# 查看日志
tail -f /usr/local/nginx/logs/error.log
12.6缩略图测试
至此,FastDFS集成Nginx+FastDFS+Lua+GraphicsMagick实现图片压缩完成。