Nginx+FastDFS搭建图片服务器

  • 时间:2018-09-08 22:41 作者:叩丁狼教育stef 来源:叩丁狼教育stef 阅读:494
  • 扫一扫,手机访问
摘要:fastdfs 是淘宝资深架构师余庆贡献的一款开源分布式文件系统,通常使用来做小文件的存储或者访问服务,具体使用途和架构我们就不多说了,可以看这篇博文理解一下https://blog.csdn.net/u013378306/article/details/74852355github地址:https
Nginx+FastDFS搭建图片服务器

fastdfs 是淘宝资深架构师余庆贡献的一款开源分布式文件系统,通常使用来做小文件的存储或者访问服务,具体使用途和架构我们就不多说了,可以看这篇博文理解一下

https://blog.csdn.net/u013378306/article/details/74852355

github地址:https://github.com/happyfish100/fastdfs

下面我们具体说一下fastdfs的安装步骤 和与nginx 整合的步骤, 网上尽管有不少资料,但是很多教程写的并不完整,照着去做的时候会出现各种各样的问题,在网上也搜不出个处理方式来, 其实主要都是版本的问题,之前少量版本引使用的库位置有问题,需要自己修改,我们还是自己整理一遍整个流程,使用起来才放心.安装的时候请按照相同的版本安装,之前的少量版本的确是会出现不少问题的

系统: Centos7

环境和依赖

按照后面标注的方式下载或者者安装好需要的依赖

系统: centos7
yum install -y gcc-c++ #需要依赖gcc
yum install -y pcre #使用于支持rewrite板块 pcre-8.32-17
yum install -y libevent #FastDFS依赖libevent库 libevent-2.0.21-4.el7.x86_64
yum install -y zlib zlib-devel #使用于支持gzip板块 zlib-1.2.7-17.el7.x86_64
libfastcommon-master.zip #libfastcommon包含了FastDFS运行所需要的少量基础库。https://github.com/happyfish100/libfastcommon/releases
fastdfs-nginx-module-master.zip # https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
FastDFS版本:fastdfs-5.11.zip #https://github.com/happyfish100/fastdfs/archive/V5.11.zip
Nginx版本:nginx-1.14.tar.gz : #官网下载: http://nginx.org/en/download.html

安装依赖

可以yum 安装的先直接yum 安装

将所有下载好依赖上传至服务器/download目录

安装libfastcommon

unzip libfastcommon-1.0.39.zip 
mv libfastcommon-1.0.39 /usr/local/libfastcommon
cd /usr/local/libfastcommon/
./make.sh #编译
./make.sh install #安装
# 检查确认/usr/lib64 和 /usr/lib 目录下都生成了 libfastcommon.so (有些版本可能/usr/lib下不会生成)
ls /usr/lib64 | grep libfastcommon.so
ls /usr/lib | grep libfastcommon.so

安装tracker

FastDFS由跟踪服务器(tracker server)、存储服务器(storage server)和用户端组成,

fastdfs的tracker 和storage其实使用的是同一个服务,只是配置文件不同

Tracker是FastDFS的协调者,负责管理所有的storage server和group

storage server 负责存储服务

cd /download
unzip fastdfs-5.11.zip
mv fastdfs-5.11 /usr/local/FastDFS
cd /usr/local/FastDFS/
./make.sh && ./make.sh install #编译之后接着进行安装
#确认安装成功,没有报错后,拷贝配置文件到/etc/fdfs
cp /usr/local/FastDFS/conf/* /etc/fdfs/
#,进入/etc/fdfs 目录, 假如没有tracker.conf就拷贝一份tracker.conf.sample 去掉sample
cp tracker.conf.sample track.conf

配置tracker.conf ;

 vi track.conf # 修改以下配置
#===============
base_path=/home/fastdfs #基础目录,以后的data 和日志目录都会放在此目录下
http.server_port=80 #配置http服务端口,这个端口跟后面nginx的监听端口对应

创立目录(目录可能不存在)

mkdir /home/fastdfs

启动tracker,运行如下命令:

/usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart
#检查能否启动成功:默认端口22122
ps -ef | grep fdfs
#检查/home/fastdfs下能否生成data / logs 两个目录
ls /home/fastdfs/

安装storage

fastdfs的tracker 和storage其实使用的是同一个服务,只是配置文件不同,我们只要要用storage的配置文件启动fastdfs即是storage服务

cd /etc/fdfs 
#假如没有storage.conf 拷贝一份storage.conf.sample 命名为storage.conf
cp storage.conf.sample storage.conf
#配置storage.conf
vi storage.conf #修改如下配置
#===========================
group_name=group1 #配置组名,同一个组的storage 互为备份
base_path=/home/fastdfs #基础目录
#store存放文件的位置(store_path), 可以配置多个, 记得创立路径
store_path0=/home/fdfs_storage
#假如有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
#配置tracker服务器:IP,阿里云服务器假如需要外部访问请配置公网ip, 不要用私有ip
tracker_server=192.168.112.130:22122
#假如有多个tracker则配置多个tracker
#tracker_server=192.168.112.131:22122
#配置http端口
http.server_port=80
#==========完===========
#创立 /home/fdfs_storage 目录
mkdir -p /home/fdfs_storage
#启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
#查看启动能否成功
fdfs_monitor /etc/fdfs/storage.conf #查看fdfs状态
ps -ef | grep fdfs
#查看目录能否创立,/home/fdfs_storage/data 应该会自动生成256个文件夹
ls /home/fdfs_storage/data

测试上传文件

fastdfs自带了测试用户端,我们可以用它测试搭建能否成功

cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf #修改如下配置
#=================
base_path=/home/fastdfs
tracker_server=192.168.112.130:22122
#=======完========
#准备一张图片进行测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg
#一切正常的话会返回图片地址等信息
example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg
#检查文件能否存在(文件名被存放在/home/fdfs_storage/data/00/00对应的目录中),假如存在即是保存 OK,此时还无法用http下载
cd /home/fdfs_storage/data/00/00 #查看能否存在wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg

FastDFS 和Nginx整合

单独的Fastdfs 对http支持不好,所以作为图片服务器,我们一般都会整合Nginx来支持图片的http访问

#解压 fastdfs-nginx-module 到 /usr/local目录下;
cd /download
unzip fastdfs-nginx-module-master.zip
mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module
cd /usr/local/fastdfs-nginx-module/src

修改config文件,

# 将文件中的所有 /usr/local/ 路径改为 /usr/ , 
#假如后面步骤中编译nginx报错把下面两项做以下修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

拷贝配置文件到/etc/fdfs

 cp mod_fastdfs.conf /etc/fdfs/
#修改 /etc/fdfs/mod_fastdfs.conf ;
vi /etc/fdfs/mod_fastdfs.conf
#======修改以下内容========
base_path=/home/fastdfs #保存日志的路径
tracker_server=192.168.112.130:22122 #track_server配置的服务端口
url_have_group_name=true #url中能否包含group名称
store_path0=/home/fdfs_storage #指定文件存储路径(必需和storage.conf配置相同)

检查/usr/lib 和usr/lib64下能否有 libfdfsclient.so

ls /usr/lib | grep libfdfsclient.so
ls /usr/lib64 | grep libfdfsclient.so

创立nginx/client目录

mkdir -p /var/temp/nginx/client

安装nginx

tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/

编译nginx,加入fastdfs板块, 假如之前装过nginx, 需要重新安装

#进入解压目录, 日志目录可自己定义,主要是add-modoule
cd /usr/local/nginx-1.14.0
#增加板块
./configure \
--prefix=/usr/local/nginx \
--add-module=/usr/local/fastdfs-nginx-module/src

编译并安装

#在nginx1.14.0目录下执行
make && make install

编译后在/usr/local下生成nginx 目录

修改nginx 配置文件

vi /usr/local/nginx/conf/nginx.conf
#======增加配置===========
server {
listen 80;
server_name 192.168.112.130;
location /group1/M00/ {
root /home/fdfs_storage/data;
ngx_fastdfs_module;
}
}

启动nginx

 /usr/local/nginx/sbin/nginx 
#检查能否启动成功,不成功就去查看错误日志/var/log/nginx/error.log
ps -ef | grep nginx

关闭防火墙或者者增加对应端口

systemctl stop firewalld.service

再次上传一张图片

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg

得到一个地址

example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg

在浏览器中访问该图片:

http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg

假如能够正常浏览图片那就大功告成,

#查看nginx 日志可以看到访问记录
tail -f -n 100 /var/log/nginx/access.log

PS: nginx fastfds的安装最坑的就是少量版本中动态链接的问题, 在用之前少量版本的时候经常会出现各种问题,假如的确需要用之前的版本可能就需要自己去改少量动态链接的指向了,假如没有特别版本要求,用本文的版本是没有问题的

项目中如何用fastdfs

用方式比较简单,我们就直接拿来一个示例代码了

导入依赖(也可以自己去git编译一个jar包出来)

 
net.oschina.zcx7878
fastdfs-client-java
1.27.0.0

配置文件: fdfs.conf

# 连接tracker服务器超时时长
connect_timeout = 10
# socket连接超时时长
network_timeout = 30
# 文件内容编码
charset = UTF-8
# tracker服务器端口
http.tracker_http_port = 80
http.anti_steal_token = no
#密码
http.secret_key = 123456
# tracker服务器IP和端口(可以写多个)
tracker_server = 192.168.58.128:22122

测试代码

public class FastdfsTest {
@Test
public void testUpload() throws Exception {
//1、把FastDFS提供的jar包增加到工程中
//2、初始化全局配置。加载一个配置文件。
ClientGlobal.init("F:\\wolf-shop\\src\\main\\resources\\fdfs.conf");
//3、创立一个TrackerClient对象。
TrackerClient trackerClient = new TrackerClient();
//4、创立一个TrackerServer对象。
TrackerServer trackerServer = trackerClient.getConnection();
//5、公告一个StorageServer对象,null。
StorageServer storageServer = null;
//6、取得StorageClient对象。
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//7、直接调使用StorageClient对象方法上传文件就可。
String[] result = storageClient.upload_file("F:\\redis_demo\\src\\main\\resources\\logo.png", "png", null);
StringBuilder sb = new StringBuilder("http://192.168.112.130/");
sb.append(result[0]).append("/").append(result[1]);
System.out.println("图片访问地址: "+sb.toString());
}
}

项目中根据自己的实际用情况抽取一个工具类使用起来就方便了。

本文作者:叩丁狼教育禹明明老师

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】通义万相wan2.2本地部署要求有哪些?通义万相wan2.2怎么本地部署(2025-10-21 04:05)
【系统环境|】Vue3 页面卡顿严重?7 个实战技巧让渲染速度飙升 80%!(2025-10-21 04:01)
【系统环境|】前端小白 2 周 Vue3+TS+NaiveUI 学习计划大纲(2025-10-21 04:00)
【系统环境|】Vue3 入门指南: 深入理解 Setup 函数(2025-10-21 03:59)
【系统环境|】2024前端面试真题之—VUE篇(2025-10-21 03:58)
【系统环境|】搞懂Vue3的toRefs与toRef:响应式对象的解构(2025-10-21 03:55)
【系统环境|】三.不定词副词的用法(2025-10-21 03:53)
【系统环境|】歌曲中汉字的信息量真的是吊打英语(2025-10-21 03:52)
【系统环境|】跟着《肖申克的救赎》学英语(002)--安迪法庭受审(2025-10-21 03:52)
【系统环境|】词根词缀-前缀1-27: de-(2025-10-21 03:50)
手机二维码手机访问领取大礼包
返回顶部