用FastDFS一步步搭建文件管理系统


 

目录

  •  一、FastDFS介绍
    • 1、简介
    • 2、FastDFS的存储策略
    • 3、FastDFS的上传过程
    • 4、FastDFS的文件同步
    • 5、FastDFS的文件下载
  • 二、安装FastDFS环境
    • 0、前言
    • 1、下载安装 libfastcommon
    • 2、下载安装FastDFS
    • 3、配置FastDFS跟踪器(Tracker)
    • 4、配置 FastDFS 存储 (Storage)
    • 5、文件上传测试
  • 三、安装Nginx
    • 1、安装nginx所需环境  
    • 2、安装Nginx
    • 3、访问文件
  • 四、FastDFS 配置 Nginx 模块
    • 1、安装配置Nginx模块
  • 五、Java客户端
    • 1、首先需要搭建 FastDFS 客户端Java开发环境
    • 2、客户端API
    • 六、权限控制

 


回到顶部https://github.com/happyfish100

参考:分布式文件系统FastDFS设计原理 

参考:FastDFS分布式文件系统

个人封装的FastDFS Java API:https://github.com/bojiangzhou/lyyzoo-fastdfs-java

回到顶部FastDFS 配置文件详解

① 进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。

# cd /etc/fdfs
# cp tracker.conf.sample tracker.conf
# vim tracker.conf

② 编辑tracker.conf ,标红的需要修改下,其它的默认即可。

# 配置文件是否不生效,false 为生效
disabled=false
# 提供服务的端口 port=22122
# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建) base_path=/ljzsg/fastdfs/tracker
# HTTP 服务端口 http.server_port=80

③ 创建tracker基础数据目录,即base_path对应的目录

# mkdir -p /ljzsg/fastdfs/tracker

④ 防火墙中打开跟踪端口(默认的22122)

# vim /etc/sysconfig/iptables
添加如下端口行: -A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重启防火墙: # service iptables restart

⑤ 启动Tracker

初次成功启动,会在 /ljzsg/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。

可以用这种方式启动
# /etc/init.d/fdfs_trackerd start

也可以用这种方式启动,前提是上面创建了软链接,后面都用这种方式
# service fdfs_trackerd start

查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

# netstat -unltp|grep fdfs

关闭Tracker命令:

# service fdfs_trackerd stop

⑥ 设置Tracker开机启动

# chkconfig fdfs_trackerd on

或者:
# vim /etc/rc.d/rc.local
加入配置:
/etc/init.d/fdfs_trackerd start

⑦ tracker server 目录及文件结构

Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:

${base_path}
  |__data
  |   |__storage_groups.dat:存储分组信息
  |   |__storage_servers.dat:存储服务器列表
  |__logs
  |   |__trackerd.log: tracker server 日志文件 

回到顶部回到顶部回到顶部https://github.com/bojiangzhou/lyyzoo-fastdfs-java.git

 

六、权限控制

前面使用nginx支持http方式访问文件,但所有人都能直接访问这个文件服务器了,所以做一下权限控制。

FastDFS的权限控制是在服务端开启token验证,客户端根据文件名、当前unix时间戳、秘钥获取token,在地址中带上token参数即可通过http方式访问文件。

① 服务端开启token验证

修改http.conf
# vim /etc/fdfs/http.conf

设置为true表示开启token验证
http.anti_steal.check_token=true

设置token失效的时间单位为秒(s)
http.anti_steal.token_ttl=1800
密钥,跟客户端配置文件的fastdfs.http_secret_key保持一致 http.anti_steal.secret_key=FASTDFS1234567890 如果token检查失败,返回的页面 http.anti_steal.token_check_fail=/ljzsg/fastdfs/page/403.html

记得重启服务。

② 配置客户端

客户端只需要设置如下两个参数即可,两边的密钥保持一致。

# token 防盗链功能
fastdfs.http_anti_steal_token=true
# 密钥
fastdfs.http_secret_key=FASTDFS1234567890

③ 客户端生成token

访问文件需要带上生成的token以及unix时间戳,所以返回的token是token和时间戳的拼接。

之后,将token拼接在地址后即可访问:file.ljzsg.com/group1/M00/00/00/wKgzgFnkaXqAIfXyAAEoRmXZPp878.jpeg?token=078d370098b03e9020b82c829c205e1f&ts=1508141521

 1     /**
 2      * 获取访问服务器的token,拼接到地址后面
 3      *
 4      * @param filepath 文件路径 group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
 5      * @param httpSecretKey 密钥
 6      * @return 返回token,如: token=078d370098b03e9020b82c829c205e1f&ts=1508141521
 7      */
 8     public static String getToken(String filepath, String httpSecretKey){
 9         // unix seconds
10         int ts = (int) Instant.now().getEpochSecond();
11         // token
12         String token = "null";
13         try {
14             token = ProtoCommon.getToken(getFilename(filepath), ts, httpSecretKey);
15         } catch (UnsupportedEncodingException e) {
16             e.printStackTrace();
17         } catch (NoSuchAlgorithmException e) {
18             e.printStackTrace();
19         } catch (MyException e) {
20             e.printStackTrace();
21         }
22 
23         StringBuilder sb = new StringBuilder();
24         sb.append("token=").append(token);
25         sb.append("&ts=").append(ts);
26 
27         return sb.toString();
28     }

④ 注意事项

如果生成的token验证无法通过,请进行如下两项检查:
  A. 确认调用token生成函数(ProtoCommon.getToken),传递的文件ID中没有包含group name。传递的文件ID格式形如:M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg

  B. 确认服务器时间基本是一致的,注意服务器时间不能相差太多,不要相差到分钟级别。

⑤ 对比下发现,如果系统文件隐私性较高,可以直接通过fastdfs-client提供的API去访问即可,不用再配置Nginx走http访问。配置Nginx的主要目的是为了快速访问服务器的文件(如图片),如果还要加权限验证,则需要客户端生成token,其实已经没有多大意义。

关键是,这里我没找到FastDFS如何对部分资源加token验证,部分开放。有知道的还请留言。


OK,以上就是单机中使用FastDFS搭建文件系统并上传下载的过程。

完!!!