Go-fastdfs分布式文件系统搭建
启动命令
服务启动说明
cd /opt/goFileservr
./control start
验证服务地址(自定义验证码需按图填写)
验证请求出错
需要查看配置文件中配置得权限验证接口是否正确返回 ‘ok’
一、服务部署
1、部署环境
- 地址: xxx.xxx.xx.162
- 端口: 9595
- 访问地址: http://xxx.xxx.xx.162:9595/
- 路径: /opt/go-fastdfs
- github地址: https://github.com/sjqzhang/go-fastdfs
- 中文文档: https://sjqzhang.github.io/go-fastdfs/#character
2、pmis.porperties 新增配置说明
# 文件系统服务地址 files-server-url = http://xxx.xxx.xx.162:9595/pmis/upload# 是否关闭安全验证 false 开启 true 关闭 security-verification-run = false# 安全验证码 security-verification-code = pmis-code# 安全验证服务器地址 就是本系统安装地址 须在文件服务器配置 security-verification-url = http://xxx.xxx.xx.167:18085/pmis/a/core/pmDoc/security
3、安全验证接口(此接口为白名单、参数获取(auth_token)只有return ”ok“ 才会验证通过)
http://xxx.xxx.xx.167:18085/pmis/a/core/pmDoc/security
安全接口配置示例
// 示例@RequestMapping("/security")@ResponseBodypublic String securityVerification(HttpServletRequest request){String success = "fail";//如果验证关闭则直接返回 okif( securityVerificationRun ){success = "ok";} else {String auth_token = request.getParameter("auth_token");if ( securityVerificationCode.equals( auth_token ) ){success = "ok";}}return success;}
4、上传接口说明
参数:
- MultipartFile file 文件流 (必填项)
- scene:" default" 场景(必填项)
- filename: 文件名
- output: ”json“
- path: 自定义路径 默认年月日时分秒文件夹
- auth_token: String // 验证权限接口获取得值
采用HttpClient方式 引入pom依赖
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId> </dependency> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId> </dependency>
/*** 上传文件示例* @param file 文件* @param filePath 文件路径* @param docId 文档id,判断文档是否存在* @return* @throws IOException*/ @Transactional(readOnly = false) public PmDocCustom uploadFile(MultipartFile file, String filePath, String docId,HttpServletRequest request) throws IOException {PmDocCustom pmDoc = new PmDocCustom();try {CloseableHttpClient httpClient = HttpClientBuilder.create().build();CloseableHttpResponse httpResponse = null;RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(2000000).build();HttpPost httpPost = new HttpPost(filesServerUrl + "upload");httpPost.setConfig(requestConfig);MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName("UTF-8")).addTextBody("output", "json").addTextBody("scene", "default").addTextBody("auth_token", securityVerificationCode).addBinaryBody("file", file.getInputStream(),ContentType.DEFAULT_BINARY, file.getOriginalFilename());httpPost.setEntity(multipartEntityBuilder.build());httpResponse = httpClient.execute(httpPost);if (httpResponse.getStatusLine().getStatusCode() == 200) {String respStr = EntityUtils.toString(httpResponse.getEntity());String originalFilename = file.getOriginalFilename();String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);JSONObject resp = JSONObject.parseObject(respStr);pmDoc.setMessageDigest(resp.get("md5").toString());pmDoc.setDomain(resp.get("domain").toString());pmDoc.setSize(((Integer)resp.get("size")).longValue());pmDoc.setFileServer("1");pmDoc.setFileName(originalFilename.substring(0, originalFilename.lastIndexOf(".")));pmDoc.setFileExtension(fileExtension);pmDoc.setFileUrl(resp.get("url").toString());super.save(pmDoc);}httpClient.close();httpResponse.close();} catch (Exception e) {e.printStackTrace();}return pmDoc; }
5、部署步骤
- 进入网址 https://github.com/sjqzhang/go-fastdfs/releases 选则合适得版本下载到本地
- 将fileserver文件赋予可执行权限 (chmod +x fileserver)并执行命令 ./fileserver
- 将会得到如下列表
4.修改配置文件
vim ./conf/cfg.json 看到如下配置文件(修改对应端口、本主机地址、集群、组号即可,其余配置可看说明自行决定改不改)
{"绑定端号": "端口","addr": ":9595","是否开启https": "默认不开启,如需启开启,请在conf目录中增加证书文件 server.crt 私钥 文件 server.key","enable_https": false,"PeerID": "集群内唯一,请使用0-9的单字符,默认自动生成","peer_id": "0","本主机地址": "本机http地址,默认自动生成(注意端口必须与addr中的端口一致),必段为内网,自动生成不为内网请自行修改,下同","host": "http://xxx.xxx.xx.162:9595","集群": "集群列表,注意为了高可用,IP必须不能是同一个,同一不会自动备份,且不能为127.0.0.1,且必须为内网IP,默认自动生成","peers": ["http://xxx.xxx.xx.162:9595"],"组号": "用于区别不同的集群(上传或下载)与support_group_manage配合使用,带在下载路径中","group": "pmis","是否支持按组(集群)管理,主要用途是Nginx支持多集群": "默认支持,不支持时路径为http://10.1.5.4:8080/action,支持时为http://10.1.5.4:8080/group(配置中的group参数)/action,action为动作名,如status,delete,sync等","support_group_manage": true,"是否合并小文件": "默认不合并,合并可以解决inode不够用的情况(当前对于小于1M文件)进行合并","enable_merge_small_file": false,"允许后缀名": "允许可以上传的文件后缀名,如jpg,jpeg,png等。留空允许所有。","extensions": [],"重试同步失败文件的时间": "单位秒","refresh_interval": 1800,"是否自动重命名": "默认不自动重命名,使用原文件名","rename_file": false,"是否支持web上传,方便调试": "默认支持web上传","enable_web_upload": true,"是否支持非日期路径": "默认支持非日期路径,也即支持自定义路径,需要上传文件时指定path","enable_custom_path": true,"下载域名": "用于外网下载文件的域名,不包含http://","download_domain": "","场景列表": "当设定后,用户指的场景必项在列表中,默认不做限制(注意:如果想开启场景认功能,格式如下:'场景名:googleauth_secret' 如 default:N7IET373HB2C5M6D ","scenes": [],"默认场景": "默认default","default_scene": "default","是否显示目录": "默认显示,方便调试用,上线时请关闭","show_dir": true,"邮件配置": "","mail": {"user": "abc@163.com","password": "abc","host": "smtp.163.com:25"},"告警接收邮件列表": "接收人数组","alarm_receivers": [],"告警接收URL": "方法post,参数:subject,message","alarm_url": "","下载是否需带token": "真假","download_use_token": false,"下载token过期时间": "单位秒","download_token_expire": 600,"是否自动修复": "在超过1亿文件时出现性能问题,取消此选项,请手动按天同步,请查看FAQ","auto_repair": true,"文件去重算法md5可能存在冲突,默认md5": "sha1|md5","file_sum_arithmetic": "sha1","管理ip列表": "用于管理集的ip白名单,","admin_ips": ["127.0.0.1"],"是否启用迁移": "默认不启用","enable_migrate": false,"文件是否去重": "默认去重","enable_distinct_file": false,"是否开启跨站访问": "默认开启","enable_cross_origin": true,"是否开启Google认证,实现安全的上传、下载": "默认不开启","enable_google_auth": false,"认证url": "当url不为空时生效,注意:普通上传中使用http参数 auth_token 作为认证参数, 在断点续传中通过HTTP头Upload-Metadata中的auth_token作为认证参数,认证流程参考认证架构图","auth_url": "http://xxx.xxx.xx.167:18085/pmis/a/core/pmDoc/security","下载是否认证": "默认不认证(注意此选项是在auth_url不为空的情况下生效)","enable_download_auth": false,"默认是否下载": "默认下载","default_download": false,"本机是否只读": "默认可读可写","read_only": false,"是否开启断点续传": "默认开启","enable_tus": true,"同步单一文件超时时间(单位秒)": "默认为0,程序自动计算,在特殊情况下,自已设定","sync_timeout": 0}
5.再次执行 ./fileserver 则运行看到如下图所示 (**CTRL+c 则可以关闭服务)
访问 http:路径+端口 (注意防火墙打开端口9595)成功即可
6.下载后台启动shll脚本
在git目录下找到control 脚本 ,上传至fileserver 脚本同级目录下,赋权可执行权限(chmod +x fileserver),执行 ./control 可得如下图 帮助文档,执行对应操作
执行./control start 如下图,服务即可正常启动
二、后台管理配置
1、部署环境
- 地址 xxx.xxx.xx.162
- 端口: 9797
- 访问地址: http://xxx.xxx.xx.162:9797
- 登录名: pmis
- 密码: pmis123
- 部署路径: /opt/go-fastdfs-web
- github地址: https://github.com/perfree/go-fastdfs-web
2、安装步骤
下载地址:https://github.com/perfree/go-fastdfs-web/releases
- 前往下载地址下载对应文件
- 上传至服务器对应地址
- 解压压缩包
- 执行 ./goFastDfsWeb.sh start 即可启动服务
** 启动文件为doc centos7 系统下启动报错 需转变格式为unix (参考 https://github.com/perfree/go-fastdfs-web/issues/21)
5.访问 http://xxx.xxx.xx.162:9797 (防火墙端口开启9797)
**第一次访问需要设置登录名(以后不可更改)、密码、组名等事项 根据自己实际情况设置
Go-fastdfs分布式文件系统搭建相关推荐
- 搭建自己的云存储空间|FastDFS分布式文件系统考虑一下?
一. 前言 最近有很多小伙伴问壹哥,大规模的文件存储该怎么做? 这个感觉很难实现呢.其实这个需求,并没有大家想的那么难以实现.今天壹哥就带着各位,用10分钟的时间来搞定这个需求.不信?那你就跟着壹哥一 ...
- FastDFS分布式文件系统(详细入门级介绍)
分布式文件系统 (Distributed File System) 是一个软件/软件服务器: 这个软件可以用来管理文件: 但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些 ...
- 大量文件不知道 怎么管理,快试试FastDFS(分布式文件系统)
FastDFS(分布式文件系统)入门到精通 GitHub:个人GitHub Blog: 个人博客 1 什么是FastDFS 1.1 简介 FastDFS是用c语言编写的一款开源的分布式文件系统,它是由 ...
- FastDFS 分布式文件系统详解
FastDFS 分布式文件系统详解 什么是文件系统 文件系统是操作系统用于在磁盘或分区上组织文件的方法和数据结构.磁盘空间是什么样的我们并不清楚,但文件系统可以给我们呈现一个非常清晰的表象,我们可以创 ...
- FastDFS分布式文件系统使用手册
FastDFS分布式文件系统使用手册 1.概述 1.1.FastDFS简介 FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100,FastDFS ...
- FastDFS分布式文件系统详解
FastDFS 简介 FastDFS 是基于 C 语言开发的,是一个轻量级开源的高性能分布式文件系统.主要功能有:文件存储.文件同步.文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问 ...
- Spark环境搭建(一)-----------HDFS分布式文件系统搭建
下载的压缩文件放在~/software/ 解压安装在~/app/ 一:分布式文件系统搭建HDFS 1,下载Hadoop HDFS环境搭建 使用版本:hadoop-2.6.0-cdh5.7. ...
- Fastdfs分布式文件系统的应用
2019独角兽企业重金招聘Python工程师标准>>> 26 MARCH 2016 on fastdfs, 分布式文件系统 我们在实际项目中常常遇到这样的应用场景,用户需要上传图片, ...
- Docker安装FastDFS分布式文件系统
Docker安装FastDFS分布式文件系统: 1.首先下载FastDFS文件系统的docker镜像 2.拉取镜像 3.查看镜像 4.使用docker镜像构建tracker容器(跟踪服务器,起到调度的 ...
- Linux - 搭建FastDFS分布式文件系统
1. FastDFS简介 说明:FastDFS简介部分的理论知识全部来自于博主bojiangzhou的 <用FastDFS一步步搭建文件管理系统>,在此感谢博主的无私分享.当然最最要感谢的 ...
最新文章
- EditText中的几个常用属性
- 惹女友生气了不用慌用python做一个3D立体花朵送女友
- [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞
- 实验3.1 简单实现Intent带返回值的跳转
- ASP调用.Net dll
- 男性早孕-从软件与程序的区别说起
- c语言递归算法实验报告,递归算法实验报告.docx
- 浅谈如何进行测试用例管理
- 资深技术专家张荣华:架构的方法论
- 逆Laplace数值逆变换
- FireFox精彩电视广告欣赏
- 反直觉的一个游戏 - 三门问题 (Monty Hall problem)
- P1685 飞跃悬崖
- ITEXT处理pdf详解
- intellij idea 工具栏的隐藏和显示
- 李航 统计学习方法 中的adaboost案例详解
- vue run dev报错 缺少package.json文件、missing dev 命令 解决办法
- Oracle数据库块之旅
- 【SpringBoot】application配置文件及注入
- Python之base64加密解密
热门文章
- 2018顺丰视觉岗笔试几个知识点
- 从三级界面直接跳回一级调用方法
- 前人栽树,后人擦屁股
- GPU:上的了AI,下的了游戏 | 简谈计算机图形学、深度学习与硬件的“三角关系“
- linux cpu 没有内核,linux – 如何获得无内核的工作? nohz_full,rcu_nocbs,isolcpus还有什么?...
- JAVA获取同一路径下所有子类或接口实现类
- 网站服务器 凭证,登录云服务器的凭证是什么
- PHP32向右位移2位是多少,PHP的二进制位移操作
- 关于vmware中的centos无法ping通宿主机或者是外网的解决思路
- JavaScript基础知识(一)