# jdf-system
**Repository Path**: juque-framework/jdf-system
## Basic Information
- **Project Name**: jdf-system
- **Description**: 分布式文件服务平台,基于springboot2.X的纯java应用,去中心化,支持节点嗅探,动态下线,节点间文件自动同步,支持不停机扩展。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2023-03-15
- **Last Updated**: 2024-11-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# jdf-system
#### 介绍
分布式文件服务平台,基于springboot2.X的纯java应用,去中心化,支持节点嗅探,动态下线,节点间文件自动同步,支持不停机扩展。
#### 软件架构
软件架构说明
#### 安装教程
1. clone 源码,并使用maven编译打包;
2. 修改application-*.yml的数据库配置、jdf部分配置、日志路径配置;
3. 创建数据库jdf_system,并执行bin目录下的脚本;
4. 使用maven编译打包;
5. 拷贝jdf-system-server-1.0-SNAPSHOT.jar;
6. 基于jar包的形式启动即可;
7. 默认浏览器访问地址: http://127.0.0.1:8080;
8. 管理端界面(默认登录帐号: admin / 123456):
9. 修改配置;
* WORKSPACE_ID:工作空间ID,默认DEFAULT;
* NODE_NAME:节点名称,约定在同一工作空间内必须唯一;
* BIND_IP:实例对应的ip,要求其他实例能正常访问该ip;
* FILE_PATH:文件保存路径,约定各实例必须对应单独目录;
* USER_MAC_SECRET:用户密码密钥,变更会自动同步到所有实例;
* 注册信息加密的密钥:REGISTER_AES_KEY,所有实例必须保持一致;
* SIGNATURE:消息同步的签名,32为随机字符串,所有实例必须保持一致;
10. 脚本启动:
```
./startup.bat <配置文件>
或
./startup.sh <配置文件>
```

11. 容器启动参考目录:/bin/docker/
12. 多实例ng负载参考:/bin/nginx/
#### 管理端截图:


#### 预览地址:
- https://www.juque.top/jdf-admin1
- https://www.juque.top/jdf-admin2
#### 使用说明
1. 技术栈使用springboot 2.3.3.RELEASE、mybatis、mybatis-plus、httpClient、disruptor;
2. 提供docker部署方案,参考bin目录下的docker配置;
3. 项目的设计初衷是为了实现去中心化的分布式文件管理系统。所以在集群模式下,支持动态扩展节点;
4. 前端模块参考:vue-jdf-system;
5. jdf-system-api模块提供基于api形式的文件上传下载;
6. 服务对外统一的上传接口:/jdf/file/upload,统一下载接口: /jdf/file/view/{fileId};
7. api模块集成步骤:
* 添加jdf-system-api到本地maven仓库:
```shell
/bin/mvn_install_api.bat
```
* 添加依赖:
```xml
cn.juque
jdf-system-api
1.0-SNAPSHOT
cn.juque
framework-common
1.0-SNAPSHOT
```
* 添加配置:
```yaml
jdf:
protocol: http # http协议
ip-list: # jdf集群实例的ip端口
- 172.170.0.15:8080
view-url-list: # 访问文件的根路径
- https://www.juque.top
platform-id: system-service # 客户端对应的平台ID
secret: 139fd7368a6145dfa28830a360f268fb # jdf管理端初始化平台ID的凭据,不要保存到公共网络环境
```
* 初始化客户端:
```java
@Data
@Configuration
@ConfigurationProperties(prefix = "jdf")
public class JdfSystemConfig {
private String platformId;
private String protocol;
private List ipList;
private List viewUrlList;
private String secret;
@Bean
public FileInfoClient fileInfoClient() {
return new FileInfoClient(this.protocol, this.ipList, this.platformId, this.secret, this.viewUrlList);
}
}
```
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 版本日志:
##### 2.0
1. 移除mysql的依赖,文件、配置数据冗余到各个实例节点;
2. 文件新增虚拟目录用于归类文件;
3. 文件新增作用域,私域文件可自定义访问时长,可授权第三方客户端访问;
4. 新增权限管理模块,授权第三方管理端访问指定虚拟目录下的文件;
5. 部分配置参数由配置文件移到前端手动配置。配置管理新增“作用范围”,“系统级别”的配置不允许删除,配置也支持节点间相互同步;
6. 新增IP黑名单模块,加入黑名单的IP将无法访问jdf集群;
7. 引入工作空间概念,文件将冗余到同一工作空间下的所有实例,但文件只会存在任一工作空间;
8. 修复首页没有自动刷新的bug;
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)