目的:实现自己服务器搭建文件服务器
本文章基于github开源项目进行搭建 github地址
https://github.com/sjqzhang/go-fastdfs
该项目有中文版文档,也有提供视频,但是我按照该文档进行操作,是部署不成功的,如有其他好的办法,请忽略此文章,以下是我个人安装经验
前提:本人使用ubuntu 16.04系统
1:检查是否安装go语言
go version
如果没有显示版本,那么先进行安装go
apt install go
apt install golang-go
2:在github下载源代码,但是我使用
git clone https://github.com/sjqzhang/go-fastdfs.git
命令下载的文件数量不正确,并不是

所以我整理了一份完整的代码,并且有control文件的压缩包,和一份提供web操作界面代码的源码放在云盘
链接:https://pan.baidu.com/s/1C0oaDSWFrdUKxSfVjQxO6g
提取码:f0eb
3:把go-fastdfs上传到服务器,我这里上传到了/opt目录下

然后执行
mv vendor src
pwd=`pwd`
GOPATH=$pwd go build -o fileserver fileserver.go
如果执行没有报错
接下来把control变成可执行文件
chmod +x control

然后进入输入命令启动项目
浏览器输入ip:8080访问
项目配置在/opt/go-fastdfs/conf/cfg.json
我们打开看看
vim cfg.json
{
"绑定端号": "端口",
"addr": ":8080",
"是否开启https": "默认不开启,如需启开启,请在conf目录中增加证书文件 server.crt 私钥 文件 server.key",
"enable_https": false,
"PeerID": "集群内唯一,请使用0-9的单字符,默认自动生成",
"peer_id": "1",
"本主机地址": "本机http地址,默认自动生成(注意端口必须与addr中的端口一致),必段为内网,自动生成不为内网请自行修改,下同",
"host": "http://xxxx:8080",
"集群": "集群列表,注意为了高可用,IP必须不能是同一个,同一不会自动备份,且不能为127.0.0.1,且必须为内网IP,默认自动生成",
"peers": ["http://xxxx:8080"],
"组号": "用于区别不同的集群(上传或下载)与support_group_manage配合使用,带在下载路径中",
"group": "group1",
"是否支持按组(集群)管理,主要用途是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": "md5",
"管理ip列表": "用于管理集的ip白名单,",
"admin_ips": ["127.0.0.1"],
"是否启用迁移": "默认不启用",
"enable_migrate": false,
"文件是否去重": "默认去重",
"enable_distinct_file": true,
"是否开启跨站访问": "默认开启",
"enable_cross_origin": true,
"是否开启Google认证,实现安全的上传、下载": "默认不开启",
"enable_google_auth": false,
"认证url": "当url不为空时生效,注意:普通上传中使用http参数 auth_token 作为认证参数, 在断点续传中通过HTTP头Upload-Metadata中的auth_token作为认证参数,认证流程参考认证架构图",
"auth_url": "",
"下载是否认证": "默认不认证(注意此选项是在auth_url不为空的情况下生效)",
"enable_download_auth": false,
"默认是否下载": "默认下载",
"default_download": true,
"本机是否只读": "默认可读可写",
"read_only": false,
"是否开启断点续传": "默认开启",
"enable_tus": true,
"同步单一文件超时时间(单位秒)": "默认为0,程序自动计算,在特殊情况下,自已设定",
"sync_timeout": 0
}
里面可以修改端口加配置,请自行研究
我这把默认下载改为了false,在重启了项目

至此项目部署完成!
可能出现的问题,如果执行
GOPATH=$pwd go build -o fileserver fileserver.go
出现报错 可能是go版本的问题,请先卸载,在安装 go version go1.10.4 linux/amd64
安装步骤
#下载安装包
wget https://studygolang.com/dl/golang/go1.10.4.linux-amd64.tar.gz
#解压安装包
tar -zxvf go1.10.4.linux-amd64.tar.gz
#配置参数
vim /etc/profile
#在最后面添加
export GOROOT=/usr/local/go #这里修改成你解压出来的go文件的位置
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
#保存之后刷新
source /etc/profile
#输入命令查看go版本
go version
