04121416@cumt.edu.cn
Centos安装FastDFS并在Springboot项目中集成其客户端
这是我的第一篇技术博客,内容来自于慕课网授课讲师风间影月的收费课程《Netty/Spring Boot仿微信聊天全栈实战 从0开发到上线部署》,这里仅作笔记及技术分享,不作任何商业用途
我的需求
最近一个springboot的项目,需要存储及查看大量的小图片,因而想到要搭建一个文件服务。百度查了下,目前免费的文件服务器软件有NFDS、GFS、FastDFS等,大概搜索了下性能,基本结论是FastDFS最适合存储大量高并发的小文件,足够满足要求,且慕课网上有手把手的视频教程,就选它了。接下来就是如何一步步实现该需求,主要包括两个部分:
1、在服务器上搭建FastDFS服务
2、在springboot项目中集成FastDFS客户端
一、centos服务器上搭建FastDFS服务
1、背景知识了解
2、必要文件准备
-
nginx-1.12.0.tar.gz
-
libfastcommon-1.0.7.tar.gz
-
fastdfs-nginx-module_v1.16.tar.gz
-
fastdfs-5.05.tar.gz
下载链接见:https://download.csdn.net/download/tuguai7887/11442072 (声明:我不想要积分,是CSDN默认5个积分,还不让我修改,真真是。。。)
下载后,将这些安装包上传到服务器,这里,我将nginx-1.12.0.tar.gz放到/home/tar目录下,将其它3个放在了/home/tar/fastdfs目录下。
3、安装tracker服务
1、首先安装必要的依赖–libevent,输入命令yum -y install libevent
安装,如下图:
2、然后安装fastDFS基本运行库–libfastcommon,解压libfastcommon-1.0.7.tar.gz,命令如下:
cd /home/tar/fastdfs
tar -zxvf libfastcommon-1.0.7.tar.gz
解压完毕后,进入libfastcommon-1.0.7文件夹,cd libfastcommon-1.0.7
,输入ll
命令可以看到有如下几个文件:
其中,make.sh就是编译安装脚本,先./make.sh
编译,等待编译完成后,再./make.sh install
安装,如下图所示:
安装完成后,相应的文件会自动放在/usr/lib64目录下面,cd /usr/lib64
,再ll libfast*
即可看到刚才安装好的libfastcommon的一个文件–libfastcommon.so
将该文件拷贝到相应的32位文件目录下,cp libfastcommon.so /usr/lib
3、接下来安装fastdfs软件包,cd /home/tar/fastdfs
,然后tar -zxvf fastdfs-5.05.tar.gz
解压,解压后生成fastdfs-5.05目录,cd fastdfs-5.05
进入该目录下,ll
可以看到有如下文件:
同样的,make.sh是编译安装脚本,./make.sh
编译,编译完成后./make.sh install
安装即可
安装完成后,相关的命令脚本会放到/usr/bin目录下,cd /usr/bin
,ll fdfs*
可查看到文件如下:
此外,相关的配置文件放在了/etc/fdfs目录下,cd /etc/fdfs
,ll
看到文件如下:
见名知义,上面三个文件分别为client、storage服务、tracker服务的配置样例。这里,需要将原来fastdfs-5.05.tar.gz解压后目录下的配置文件全部拷贝到/etc/fdfs目录下,命令如下:
cp /home/tar/fastdfs/fastdfs-5.05/conf/* /etc/fdfs/
然后ll
可以看到多了下面几个文件:
4、接下来是配置tracker服务,vim tracker.conf
打开该配置文件
这里port指tracker服务的端口,可以根据自己需要修改,这里我不做改动。要改动的是tracker日志对应的base_path配置,改为自定义的/fastdfs/tracker目录,然后:wq
保存退出。创建该目录mkdir /fastdfs/tracker -p
,为后面方便,将storage及client目录一并创建,mkdir /fastdfs/storage
,mkdir /fastdfs/client
5、最后是启动tracker服务,cd /usr/bin,然后ll fdfs*
其中fdfs_trackerd文件即为启动命令,fdfs_trackerd /etc/fdfs/tracker.conf
即可启动,直接换行没有报异常就是启动成功,若配置变化,需要重新启动,在该目录下输入命令fdfs_trackerd /etc/fdfs/tracker.conf restart
即可
4、安装storage服务
上面已经将fastdfs软件包安装好,并配置启动了tracker服务,接下来就是配置并启动storage服务
1、修改storage配置,cd /etc/fdfs
,vim storage.conf
打开配置文件,这里要配置4个地方:
- 修改base_path配置值为/fastdfs/storage,该配置用于存放storage日志
- 修改group_name配置值为/imooc,这里group_name表示组织名,是服务正常运行后,文件访问的url前缀,这里使用imooc,作为对内容原版权的尊重,读者可根据自己情况更改
- 修改store_path0配置值为/fastdfs/storage,该配置用于存放上传的文件
- 修改tracker_server配置值为192.168.1.70:22122,该配置用于storage服务和tracker服务通信,原因见上面第1章–背景知识了解,192.168.1.70:22122即为上面tracker服务的地址及端口,读者需根据自己的情况更改
修改完成后:wq
保存退出
2、启动storage服务,cd /usr/bin
,ll fdfs*
看到如下文件
其中fdfs_storaged便是storage服务启动命令,fdfs_storaged /etc/fdfs/storage.conf
启动即可,修改配置需要重启该服务,重启命令:fdfs_storaged /etc/fdfs/storage.conf restart
。若不放心,可通过ps aux|grep storage
查看是否有该进程运行。
至此,tracker和storage服务都已经正确启动
5、配置client并且上传测试图片
首先申明,这里client只是作为客户端,可以不必配置运行,第5章内容只是用来验证上面的tracker和storage服务是否能正常使用。
1、修改client配置,cd /etc/fdfs
,vim client.conf
打开配置文件,修改2处配置:
- 修改base_path配置值为/fastdfs/client,该配置用于存放client日志
- 修改tracker_server配置值为192.168.1.70:22122,该配置用于client和tracker之间通信,读者需根据自己需要修改配置值
配置完成后,:wq
保存退出
2、上传测试图片。先准备一张图片cat.png放到/home目录下,执行命令/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/cat.png
,执行返回结果如下
其中,最下面的example file url即为图片的访问路径,此时,因为还没有启动web服务,该路径暂时还不能外部访问。我们cd /fastdfs/storage,ll可以看到下面的两个目录
data目录存储图片,logs目录存储日志。cd data/00/00
,ll
即可看到刚刚上传的文件,说明tracker和storage都已经可用
6、nginx安装与FastDFS配置
上文已经通过client成功在服务器本地上传了一张图片,但实际使用中,我们是通过http上传及查看图片,因而还需要安装nginx以及fastdfs-nginx-module(nginx与fastdfs的关联模块)
1、首先安装fastdfs-nginx-module。cd /home/tar/fastdfs
,tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
解压该文件,cd fastdfs-nginx-module
进入该文件夹,ll
看到目录如下
vim src/config
打开配置文件
可以看到里面有三个“local”,将它们删除,删除后的文件如下:
然后:wq
保存退出,这样,关联模块的配置就完成了第一步。
2、安装nginx。nginx安装之前需要一些必要的依赖库,yum -y install gcc-c++
安装gcc,完成后yum -y install pcre pcre-devel
安装pcre(pcre为nginx提供解析正则的功能支持),完成后yum -y install zlib zlib-devel
安装zlib,完成后yum -y install openssl openssl-devel
安装openssl,至此,依赖安装完毕。
然后,cd /home/tar
,tar -zxvf nginx-1.12.0.tar.gz
解压该文件,cd nginx-1.12.0
进入该文件夹,复制粘贴并运行如下命令,
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/home/tar/fastdfs/fastdfs-nginx-module/src
其中,最后一行即为关联模块fastdfs-nginx-module的目录。配置完成后,./configure
配置及依赖检查,make
编译,结束后make install
安装。安装完成后,可以在/usr/local目录下看到nginx文件夹,至此安装完成
3、修改nginx及关联模块fastdfs-nginx-module的配置。
先改关联模块的配置。将关联模块的配置文件复制到/etc/fdfs目录下:cp /home/tar/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
,然后vim /etc/fdfs/mod_fastdfs.conf
打开该配置文件,修改5处配置:
- 修改base_path配置值为/fastdfs/tmp,该配置用来存储日志
- 修改tracker_server配置值为192.168.1.70:22122,读者需根据自己情况修改
- 修改group_name配置值为imooc,该配置要与storage服务配置中的相同
- 修改url_hava_group_name配置值为true,该配置用于启用上面的group_name配置
- 修改store_path0配置值为/fastdfs/storage,该配置用于指定文件存放路径
修改完成,:wq
保存退出,mkdir /fastdfs/tmp
创建上面base_path对应的目录。
接下来改nginx的配置。cd /usr/local/nginx/conf
,ll
看到文件如下:
其中,nginx.conf便是要找的配置文件,vim nginx.conf打开配置,增加配置如下:
server{
listen 88;
server_name 192.168.1.70;
location /imooc/M00 {
ngx_fastdfs_module;
}
}
配置增加完成后,:wq
保存退出。
cd /usr/local/nginx/sbin
,./nginx -t
测试下配置是否正确。我这里报了错误,如下图:
根据错误内容,可以看出,原因是/var/temp/nginx/client目录不存在,那么mkdir /var/temp/nginx/client -p
创建该目录,再次./nginx -t
,测试结果显示ok,如下图:
然后./nginx
启动即可。
启动后浏览器输入地址http://192.168.1.70,却报无法访问此网站,那么很明显是网络上有问题。/etc/init.d/iptables status
看到防火墙是开的,如下图:
/etc/init.d/iptables stop
关闭防火墙,然后重新在浏览器输入http://192.168.1.70,可以访问到nginx的欢迎页。找到上面测试图片的路径http://192.168.1.70:88/imooc/M00/00/00/wKgBRltFNp-AdqPJAAQEWfwWqaQ002.png,尝试访问该测试图片,发现也是可以正常访问,至此,FastDFS服务已经部署完工。道阻且长,善哉善哉。
二、springboot项目中集成FastDFS客户端
1、要引入的客户端的源码及使用官方教程见:https://github.com/tobato/FastDFS_Client
2、考虑到人都是懒的,我就将里面的内容重新搬出来讲一下。
-
引入pom依赖
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency>
-
添加application配置
fdfs.soTimeout=1501 fdfs.connectTimeout=601 #缩略图宽度和高度 fdfs.thumbImage.width=80 fdfs.thumbImage.height=80 #tracker服务器地址 fdfs.trackerList[0]=192.168.1.70:22122
-
代码中使配置生效
在SpringBoot项目/src/[com.xxx.主目录]/conf当中创建FastdfsImporter.java配置文件@Configuration @Import(FdfsClientConfig.class) // 解决jmx重复注册bean的问题 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class FastdfsImporter { // 导入依赖组件 }
-
上传样例代码UploadController.java
@Configuration /** * @Description: 上传用户头像 */ @PostMapping("/uploadTest") public IMoocJSONResult uploadTest() throws Exception { // 准备好图片test.png,放在C盘 String userFacePath = "C:\\test.png"; // 上传文件到fastdfs MultipartFile faceFile = FileUtils.fileToMultipart(userFacePath); String url = fastDFSClient.uploadBase64(faceFile); System.out.println(url); // 获取缩略图的url String thump = "_80x80."; String arr[] = url.split("\\."); String thumpImgUrl = arr[0] + thump + arr[1]; System.out.println(thumpImgUrl); return IMoocJSONResult.ok(thumpImgUrl); }
-
样例代码打包下载
下载链接:https://download.csdn.net/download/tuguai7887/11442072 (和上面第2章的链接是同一个,不必重复下载)