Go-fastdfs分布式文件系统搭建

17 篇文章 0 订阅

启动命令

服务启动说明

cd /opt/goFileservr
./control start

验证服务地址(自定义验证码需按图填写)

验证请求出错

需要查看配置文件中配置得权限验证接口是否正确返回 ‘ok’

一、服务部署

1、部署环境

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")
    @ResponseBody
    public String securityVerification(HttpServletRequest request){
        String  success = "fail";
        //如果验证关闭则直接返回 ok
        if( 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、部署步骤

  1. 进入网址 https://github.com/sjqzhang/go-fastdfs/releases 选则合适得版本下载到本地
  2. 将fileserver文件赋予可执行权限 (chmod +x fileserver)并执行命令 ./fileserver
  3. 将会得到如下列表

    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、部署环境

2、安装步骤

下载地址:https://github.com/perfree/go-fastdfs-web/releases

  1. 前往下载地址下载对应文件
  2. 上传至服务器对应地址
  3. 解压压缩包
  4. 执行 ./goFastDfsWeb.sh start 即可启动服务

​ ** 启动文件为doc centos7 系统下启动报错 需转变格式为unix (参考 https://github.com/perfree/go-fastdfs-web/issues/21)

     5.访问 http://xxx.xxx.xx.162:9797 (防火墙端口开启9797)

**第一次访问需要设置登录名(以后不可更改)、密码、组名等事项 根据自己实际情况设置

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值