【保姆级】FastDFS+Nginx搭建图片文件服务器,SpringBoot实现本地上传

本文详细介绍了如何在CentOS7.6上搭建FastDFS文件服务器,结合Nginx实现图片服务,并通过SpringBoot进行文件上传。教程包括FastDFS和Nginx的安装配置,以及SpringBoot项目的集成,最后通过测试验证了系统的正确性。

fastDFS

写在最前:
1、由于是最近做毕设用到了,而原笔记是2年前写的,所以截图里的服务器可能不一样。因为近期(2022.3.14)毕设我重新搭建了一套,并完善了笔记。所以总体来说,没有任何问题,不影响食用,按照步骤搭建可以100%成功!!
2、本次毕设的环境是CentOS7.6【Linux内核没什么影响的其实】
3、如果有问题,可以评论区留言~

1 简述

​ FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

​ FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

​ 作者余庆(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用。

2 上传下载流程

在这里插入图片描述

3 安装

功能文件目录:

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

下载地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

或者进入usr/local使用命令:

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

  • 上传压缩包文件libfastcommonV1.0.7.tar.gz 到 /opt目录下,并解压。

  • 赋予权限 chmod 777 libfastcommonV1.0.7.tar.gz

  • tar -zxvf libfastcommonV1.0.7.tar.gz

  • 进入到解压后的文件夹中

    cd libfastcommon-1.0.7/

  • ./make.sh

    如果出现编译perl 不识别 运行下面这段命令:

    yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget

  • ./make.sh install

  • cp /usr/lib64/libfastcommon.so /usr/lib/

    注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

3.2 fastDFS软件——tracker

下载地址:https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

或者使用命令:

wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

  • 上传FastDFS_v5.05.tar.gz到 /usr/local 目录下

  • 解压编译安装

    • tar -zxvf FastDFS_v5.05.tar.gz

    • cd FastDFS

    • ./make.sh

    • ./make.sh install

  • 安装成功之后,将安装目录下的conf下的文件拷贝到/etc/fdfs/下。

    • cd conf

    • cp * /etc/fdfs/

  • 修改配置文件

    • cd /etc/fdfs

    • vim /etc/fdfs/tracker.conf

      可以用set nu显示行数,这个在第22行

      或者 /base_path直接寻找。

    在这里插入图片描述

  • 保存退出后,创建fastdfs文件夹

    • mkdir /opt/fastdfs
3.3 配置storage(不需要安装,因为安装tracker时已经同时安装了)
  • 创建fdfs_storage文件夹:mkdir /opt/fastdfs/fdfs_storage

  • vim /etc/fdfs/storage.conf 【一共要修改如下的三个地方】

    软件目录: /opt/fastdfs
    在这里插入图片描述
    ​ Storage存储文件的目录: /opt/fastdfs/fdfs_storage
    在这里插入图片描述
    ​ Storage的tracker的ip:(端口22122,IP地址写本机,云服务器则写公网IP)
    在这里插入图片描述


从下面开始,要进行修改配置,一定要仔细!!!!

修改可能有点乱,经常会把fdfs写成dfds之类的。一定要注意,慢慢修改,检查仔细!!!!!


3.4 配置tracker启动服务
  • cd /etc/init.d/

  • vi fdfs_trackerd

    修改如下的几个地方,大多是将bin改为fdfs
    在这里插入图片描述
    在这里插入图片描述
    wq保存退出。

  • mkdir /usr/local/fdfs ===》作为启动脚本的放置目录

  • cd /opt/FastDFS 【这里要注意一下,可能这个名字不是FastDFS,这个名字是一开始解压fastdfs后,得到的文件的名字】
    在这里插入图片描述

    • cp restart.sh /usr/local/fdfs/
    • cp stop.sh /usr/local/fdfs/
3.5 配置storage的启动脚本
  • cd /etc/init.d

  • vi fdfs_storaged
    在这里插入图片描述
    在这里插入图片描述
    wq保存退出。

3.6 加入启动项中
  • cd /etc/init.d
  • chkconfig --add fdfs_trackerd
  • chkconfig --add fdfs_storaged
3.7 启动测试
  • cd /etc/init.d
  • service fdfs_trackerd start
  • service fdfs_storaged start
    在这里插入图片描述

4 FDFS的Linux的上传测试

切记切记!!!如果是云服务器,一定要放行22122和23000端口。

在这里插入图片描述

修改/etc/fdfs/client.conf

vi /etc/fdfs/client.conf
在这里插入图片描述
这里准备一张图片:test.jpg,并上传到/root目录下

cd /root

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/test.jpg

在这里插入图片描述
可以看到上传成功,并且打印了日志。

并且看到最下面返回了一个链接:http://192.168.225.132/group1/M00/00/00/wKjhhF50szKAAcprAAMKPD200bI644_big.jpg

【但是,是肯定打不开的。因为我们还缺一个nginx】

进入放文件的data目录:cd /opt/fastdfs/fdfs_storage/data/00/00

在这里插入图片描述

这个就是刚才上传的图片文件。

FastDFS不是一个web服务器,无法处理这种http协议的web请求。不过接下来有个方法可以帮助我们解决这个问题。

5 安装FDFS整合Nginx的插件

下载地址:http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz

或者使用命令:

wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
  • 上传fastdfs-nginx-module_v1.16.tar.gz到/opt目录下

  • 解压:tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

  • 修改插件读取fdfs的目录(插件自己的配置文件)

    cd /opt/fastdfs-nginx-module/src

    vi config
    在这里插入图片描述
    ​ 【注意,这里是两个路径!】

  • 将插件整合FDFS的配置文件拷贝到fdfs的配置目录下(整合fdfs的配置文件)

    cp mod_fastdfs.conf /etc/fdfs/

    vi /etc/fdfs/mod_fastdfs.conf
    在这里插入图片描述

6 安装配置Nginx

下载地址:https://nginx.org/download/nginx-1.12.2.tar.gz

或者使用命令:

cd

  • 将nginx上传到/opt下

  • 解压tar -zxvf nginx-1.12.2.tar.gz

  • cd nginx-1.12.2

    注意目录:在这里插入图片描述

    • 直接粘贴:【回车】
    ./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=/opt/fastdfs-nginx-module/src
    

    出现:在这里插入图片描述
    代表成功。

    • make
      在这里插入图片描述
    • make install
      在这里插入图片描述
  • 创建临时的目录

    mkdir -p /var/temp/nginx/client

  • 修改nginx的配置文件

    /usr/local/nginx/conf

    vi nginx.conf

    [ngx_fastdfs_module;]

在这里插入图片描述

  • 启动nginx

    cd /usr/local/nginx/sbin

    ./nginx
    在这里插入图片描述

  • 这时候我们再去之前那个打不开的图片地址访问一下:http://192.168.225.132/group1/M00/00/00/wKjhhF50szKAAcprAAMKPD200bI644_big.jpg

在这里插入图片描述

发现可以用了。

7 设置nginx为开机自启动

vi /etc/rc.d/rc.local
/usr/local/nginx/sbin/nginx

在这里插入图片描述

8 FDFS的集群概念

配置参考博客:https://www.cnblogs.com/sunnydou/p/49b92d511047f4f9da6cd727cfd415d5.html

在这里插入图片描述
在这里插入图片描述

9 FDFS和SpringBoot的整合

9.1 通过git下载FDFS的客户端

github地址:https://github.com/happyfish100/fastdfs-client-java

git clone https://github.com/happyfish100/fastdfs-client-java
在这里插入图片描述
将该工程直接拷贝进入我们要用FDFS的工程下即可。
在这里插入图片描述

9.2 将FDFS的客户端打包到本地Maven仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

之后一直next,然后点击finish。

在这里插入图片描述

9.3 上传图片

【建议在另一个modules中进行】

  • 添加依赖

    <!--文件上传和下载只存储在于web层-->
    <dependency>
        <groupId>org.csource</groupId>
        <artifactId>fastdfs-client-java</artifactId>
        <version>1.29-SNAPSHOT</version>
    </dependency>
    
  • 配置

    tracker.conf

    在这里插入图片描述

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

    利用juint测试一下。

    这里准备一张图片:a.jpg

    在这里插入图片描述

    package com.geekst.gmall.manage;
    
    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;
    
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class GmallManageWebApplicationTests {
    
    
        @Test
        public void contextLoads() throws IOException, MyException {
            //配置FDFS的全局连接地址
            String tracker = FastDFSApplicationTests.class.getResource("/tracker.conf").getPath();//获得配置文件的路径
            tracker = URLDecoder.decode(tracker,"utf-8");//对路径规范化
            
            ClientGlobal.init(tracker);
    
            TrackerClient trackerClient = new TrackerClient();
    
            //获得一个trackerServer的实例
            TrackerServer trackerServer = trackerClient.getTrackerServer();
    
            //通过tracker获得一个Storage连接客户端,就可以进行上传和下载操作
            StorageClient storageClient = new StorageClient(trackerServer,null);
    
            String[] uploadInfos = storageClient.upload_file("xxxxx/test.jpg", "jpg", null);
    
            for (String uploadInfo : uploadInfos) {
                System.out.println(uploadInfo);
            }
    
        }
    
    }
    

在这里插入图片描述

然后将输出的组名和路径组合在一起:http://192.168.225.132/group1/M00/00/00/wKjhhF57NSqAaZKvAAJisLOyeNA513.jpg

浏览器打开:

在这里插入图片描述

成功!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值