FastDFS+nginx分布式文件系统安装部署+整合springBoot

FastDFS是什么
这是阿里里面一个大牛自己独立开发的一个独立的分布式文件存储系统, 什么是独立的分布式文件存储系统, 就是外部不能访问的, 如果需要外部访问, 需要有web服务代理, 这就nginx+fastDFS
形成自己的图片存储服务器
至于一些具体的解释,大家可以自行百度
1.安装前准备
FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7.4作为安装环境。
1.1 安装gcc 依赖环境 yum install gcc-c++ -y
1.2 yum -y install libevent
1.3 如果没有perl库,需要使用yum install perl* 命令安装一下
1.4 还有一些必要的工具 yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
1.5 安装jdk1.8
安装顺序
1 libfastcommon
2 fdfs_tracker
依赖:Gcc、libevent、perl
3 fdfs_storage
4 FastDFS-nginx-module
5 nginx
依赖:pcre-devel、zlib-devel

目录
opt/fastdfs 数据存储目录
usr/local/fdfs 启动文件目录
etc/fdfs 配置文件目录
usr/bin/fdfs_trackerd 启动配置
etc/init.d/fdfs_trackerd 启动服务脚本

2.开始安装

准备好以下4个需要的安装软件
这里说一下我的软件都安装在/usr/local目录下
在这里插入图片描述
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
2.1开始安装libfastcommon
切换至cd /usr/local/目录
2.1.1 解压 tar -zxvf libfastcommonV1.0.7.tar.gz
2.1.2 cd libfastcommon-1.0.7
2.1.3 ./make.sh
2.1.4 ./make.sh install
执行完如图
在这里插入图片描述

执行完上面4个步骤后 这里需要说明一下,libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

2.1.5 复制类库libfastcommon.so到/usr/lib下 cp /usr/lib64/libfastcommon.so /usr/lib/
2.2安装fastdfs软件(tracker、storage)
2.2.1 解压 tar zxvf FastDFS_v5.05.tar.gz
2.2.2 切换目录 cd FastDFS
2.2.3 ./make.sh
2.2.4 ./make.sh install
执行完上面4个步骤如下如
在这里插入图片描述
看到没自动生成了/etc/fdfs目录
这里将conf下的配置文件全都拷贝到/etc/fdfs目录, 在准备步骤里面就说了该目录是配置文件目录, 这里只是一个习惯问题, 配置文件全都放置在etc目录下
2.2.5 cd /conf
2.2.6 cp * /etc/fdfs/
目录如图
在这里插入图片描述
配置tracker.conf
2.2.7 cd /etc/fdfs
2.2.9 创建目录 mkdir /opt/fastdfs 在安装准备中说明了该目录为数据存储目录
2.2.10 vi /etc/fdfs/tracker.conf 设置软件数据和日志目录
在这里插入图片描述
2.2.11修改 base_path为 base_path=/opt/fastdfs

2.3配置storage
注意说明 storage不需要安装,因为安装tracker时已经同时安装, 但是我们也可以将storage安装至其他服务器, 因为这里我只有一台服务器,所以就都在一台服务器上安装
2.3.1 storage存储文件的目录(新建mkdir /opt/fastdfs/fdfs_storage)名字自定义
2.3.2 编辑 vi /etc/fdfs/storage.conf
2.3.3 修改数据日志存储路径
在这里插入图片描述
2.3.4 修改storage存储文件的目录
如果有多个挂载磁盘则定义多个store_path,如下
在这里插入图片描述
2.3.5 修改storage的tracker_server
如果有多个则配置多个tracker
在这里插入图片描述
2.4 配置tracker和storage的启动服务
进入/etc/init.d启动脚本目录,默认fastdfs已经生成
2.4.1 cd /etc/init.d
在这里插入图片描述
2.4.2 编辑启动脚本vi fdfs_tracherd
在这里插入图片描述
prg 启动配置文件其实在/usr/bin目录下 可以cd /usr/bin/ 然后ls fdfs_*查找一下,如下
在这里插入图片描述
在这里插入图片描述
2.4.3 mkdir /usr/local/fdfs(因为启动脚本还在安装目录下,所以我们新建/usr/local/fdfs目录,并且将启动脚本cp到该目录)
进入安装目录cd /usr/local/FastDFs
在这里插入图片描述
2.4.4 复制启动文件cp restart.sh /usr/local/fdfs/
2.4.5 复制停止文件cp stop.sh /usr/local/fdfs/

2.4.6 配置storage启动服务, 和tracker一样配置(restart和stop脚本已经拷贝到/usr/local/fdfs下,所以storage只需要配置/etc/init.d/fdfs_storage脚本就可以了)

将启动脚本加入linux服务
在这里插入图片描述
启动
启动tracker service fdfs_trackerd start
启动storage service fdfs_storaged start
在这里插入图片描述

检查是否启动成功
在这里插入图片描述
3. 测试上传图片
3.1本地 通过fdfs_test程序测试
fdfs_test是内部的一个测试程序
3.1.1 修改 vi /etc/fdfs/client.conf client.conf只是fdfs_test读取的一个测试的配置文件
3.1.2 修改base_path 为 base_path=/opt/fastdfs
3.1.3 修改tracker_server 为 tracker_server=192.168.1.101:22122 注意是自己的服务器地址
3.1.4 上传文件 , 比如将/根目录下的erha.png这个图片上传到FastDFS中:
命令 /usr/bin/fdfs_test /etc/fdfs/client.conf upload /erha.png
这个命令的解释

/usr/bin/fdfs_test 运行fdfs_test这个测试进程
/etc/fdfs/client.conf 读取测试配置文件
upload 上传命令
/erha.png 需要上传的图片

在这里插入图片描述
查看我上传至linux服务器上的蹄片, 和我本地的图片一样
在这里插入图片描述
至此 FastDFS搭建完成

4 搭建nginx

4.1安装FastDFS-nginx-module插件
4.1.1 cd /usr/local
4.1.2 tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
4.1.3 cd fastdfs-nginx-module/src
4.1.4 vi config修改config文件将/usr/local/路径改为/usr/ 有3处
在这里插入图片描述

4.1.5 将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下 cp mod_fastdfs.conf /etc/fdfs/
并修改mod_fastdfs.conf的内容:
4.1.6 vi /etc/fdfs/mod_fastdfs.conf
改变如下4项内容

base_path=/opt/fastdfs/
tracker_server=192.168.1.101:22122
#tracker_server=192.168.1.101:22122(多个tracker配置多行)
url_have_group_name=true #url中包含group名称
store_path0=/opt/fastdfs/fdfs_storage #指定文件存储路径

在这里插入图片描述
4.2安装nginx
4.2.1创建目录 mkdir -p /var/temp/nginx/client
4.2.2解压 tar zxvf nginx-1.12.2.tar.gz
4.2.3执行如下命令
./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=/usr/local/fastdfs-nginx-module/src
最后一步是添加插件,就是你安装这个插件的目录

出现如下结果,说明你配置成功了
在这里插入图片描述
4.2.4 make
4.2.5 make install

4.2.6 cd /usr/local/nginx/conf
4.2.7 修改nginx.conf文件 vi nginx.conf
修改内容如下
在这里插入图片描述
server_name指定本机ip

location /group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定义store_path1,这里就是M01

启动nginx

cd /usr/local/nginx/sbin\
 ./nginx

访问我原来上传的图片
http://192.168.1.101/group1/M00/00/00/wKgBZV2uuceAMxytAAlgc6kXdo0574_big.png
在这里插入图片描述
设置开启启动项
编辑 vi /etc/rc.d/rc.local
在这里插入图片描述

至此 自己搭建的一个文件服务器完成

5.整合springboot,利用Java客户端调用fastdfs

服务器安装完毕后,咱们通过Java调用fastdfs
加载Maven依赖
原来没有 fastdfs 没有在中心仓库中提供获取的依赖坐标。
只能自己通过源码方式编译,打好jar 包,安装到本地仓库。
官方源码仓库地址:
https://github.com/happyfish100/fastdfs-client-java

下载源码 git https://github.com/happyfish100/fastdfs-client-java.git
源码放入项目根目录中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
install一下
在这里插入图片描述
在其他项目中引入该坐标就行了
在这里插入图片描述

新建springboot项目,这里就忽略了
在resource文件夹下新建tracker.conf配置文件, 内容如下

tracker_server=192.168.1.101:22122
# 连接超时时间,针对socket套接字函数connect,默认为30秒
connect_timeout=30000
# 网络通讯超时时间,默认是60秒
network_timeout=60000

写个测试类

import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;

@RunWith(SpringRunner.class)
@SpringBootTest
public class GmallManageWebApplicationTests {
	@Test
	public void contextLoads() throws IOException, MyException {
		// 配置fdfs的全局链接地址
		String tracker = GmallManageWebApplicationTests.class.getResource("/tracker.conf").getPath();// 获得配置文件的路径
		ClientGlobal.init(tracker);
		TrackerClient trackerClient = new TrackerClient();
		// 获得一个trackerServer的实例
		TrackerServer trackerServer = trackerClient.getConnection();
		// 通过tracker获得一个Storage链接客户端
		StorageClient storageClient = new StorageClient(trackerServer,null);
		//返回的是一个数组,其实就是group组名和文件路径两个信息
		String[] uploadInfos = storageClient.upload_file("d:/haha.jpg", "jpg", null);
		String url = "http://192.168.1.101";
		for (String uploadInfo : uploadInfos) {
			url += "/" + uploadInfo;
		}
		System.out.println(url);
	}

}

启动测试类
在这里插入图片描述
访问改地址就可读取该图片

封装工具类

import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

public class PmsUploadUtil {


    public static String uploadImage(MultipartFile multipartFile) {

		//自己的服务器域名,我这里没有域名,直接写ip
        String imgUrl =  "http://192.168.1.101";

        // 上传图片到服务器
        // 配置fdfs的全局链接地址
        String tracker = PmsUploadUtil.class.getResource("/tracker.conf").getPath();// 获得配置文件的路径

        try {
            ClientGlobal.init(tracker);
        } catch (Exception e) {
            e.printStackTrace();
        }

        TrackerClient trackerClient = new TrackerClient();

        // 获得一个trackerServer的实例
        TrackerServer trackerServer = null;
        try {
            trackerServer = trackerClient.getConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 通过tracker获得一个Storage链接客户端
        StorageClient storageClient = new StorageClient(trackerServer,null);

        try {

            byte[] bytes = multipartFile.getBytes();// 获得上传的二进制对象

            // 获得文件后缀名
            String originalFilename = multipartFile.getOriginalFilename();// a.jpg
            System.out.println(originalFilename);
            int i = originalFilename.lastIndexOf(".");
            String extName = originalFilename.substring(i+1);

            String[] uploadInfos = storageClient.upload_file(bytes, extName, null);

            for (String uploadInfo : uploadInfos) {
                imgUrl += "/"+uploadInfo;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return imgUrl;
    }
}

对外提供文件上传接口

@RequestMapping("fileUpload")
    @ResponseBody
    public String fileUpload(@RequestParam("file") MultipartFile multipartFile){
        // 将图片或者音视频上传到分布式的文件存储系统
        // 将图片的存储路径返回给页面
        String imgUrl = PmsUploadUtil.uploadImage(multipartFile);
        System.out.println(imgUrl);
        return imgUrl;
    }

至此整个流程走完

fastdfs集群 待续**************************

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值