Cloudreve是一个支持多种存储方案的云盘系统,可以很方便地搭建一个属于自己的云盘。
最近Cloudreve有一次大更新,将v2版本升级到了v3版本,由原来的ThinkPHP ,更换成了Go版本,将前后端整合为一个可执行文件,直接运行就可以,十分方便。
但有利也有弊,这对于一些需要修改源码的人不太友好,尤其是不太熟悉Go的(例如博主)。
认真研究的话,其实还好,需要熟悉Cloudreve v3前后端的基本组成,以及对material-ui有基本的认识。
博主使用系统:Centos7 amd64
博主在本地虚拟机使用Centos7编译好之后上传到服务器上(Ubuntu)就可以使用了。
必备环境:Go+Node.js+Yarn+statik 命令行工具
Cloudreve 项目主要由两部分组成:后端主仓库 cloudreve/Cloudreve,以及前端仓库 cloudreve/frontend 。编译 Cloudreve 后端前,需要先构建assets 目录下的前端子模块,并使用statik嵌入到后端仓库。
Step.1-安装Node.js
我们可以使用epel-release安装Node
1 2 |
sudo yum install epel-release sudo yum install nodejs |
然后使用
1 |
node --version |
检查一下是否安装成功。
这个时候我们通过epel安装的node版本比较旧,达不到Cloudreve编译的要求,我们使用:
1 |
n 10.3.0 stable |
来将node升级到10.3.0即可。
Step.2-安装Yarn
我们可以通过 RPM 包仓库安装 Yarn:
1 |
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo |
然后输入:
1 |
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - |
之后使用
1 |
sudo yum install yarn |
即可简单地将yarn安装完成了。
我们使用
1 |
yarn --version |
来看看yarn是否安装成功。
Step.3-安装Go
首先在 ~ 下创建 go 文件夹,并进入 go 文件夹
1 |
mkdir ~/go && cd ~/go |
然后在Golang官网下载地址选择适合你系统的Go版本,博主这里选择的是go1.14.1.linux-amd64.tar.gz。
下载安装包:
1 |
wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz |
然后解压到/usr/loacl目录下:
1 |
tar -C /usr/local -zxvf go1.14.1.linux-amd64.tar.gz |
然后添加/usr/loacl/go/bin目录到PATH变量中
1 |
vim /etc/profile |
在最后一行加入:
1 2 |
export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin |
:wq保存后,使用
1 |
source /etc/profile |
使配置生效。
最后使用
1 |
go version |
来看看Go是否安装成功。
Step.4-安装statik 命令行工具
一句命令搞定:
1 |
go get github.com/rakyll/statik |
Step.5-下载&修改Cloudreve源码
首先安装git工具(已安装请忽视),然后克隆GitHub上的源码:
1 |
yum install git -y |
1 |
git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git |
然后我们
1 |
cd Cloudreve |
assets里面的就是前端的源码,一般我们只需修改assets文件夹里面的即可。
由于Cloudreve前端是使用material-ui的,大家可以自行去material-ui官网,里面有比较详细的例子和教程,相信花时间琢磨一下是不难的。
修改好前端源码之后我们安装一下依赖。
1 2 3 4 |
# 进入前端子模块 cd assets # 安装依赖 yarn install |
Step.6-构建&编译
在assets目录下,我们使用
1 |
yarn run build |
来构建修改好的前端的代码。
完成后,所构建的静态资源文件位于assets/build 目录下。
你可以将此目录改名为statics 目录,放置在 Cloudreve 主程序同级目录下并重启 Cloudreve,Cloudreve 将会使用此目录下的静态资源文件,而非内置的。
然后我们开始嵌入静态资源:
1 2 3 4 5 6 7 8 |
# 回到项目主目录 cd ../ # 安装 statik, 用于嵌入静态资源 go get github.com/rakyll/statik # 开始嵌入 statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f |
如果在嵌入时找不到statik 命令,请尝试执行:export PATH=$PATH:$(go env GOPATH)/bin
之后,我们就可以编译可执行文件了:
1 2 3 4 5 6 |
# 获得当前版本号、Commit export COMMIT_SHA=$(git rev-parse --short HEAD) export VERSION=$(git describe --tags) # 开始编译 go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$VERSION' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'" |
首次编译时,Go 会下载相关依赖库,如果您的网络环境不佳,可能会导致这一步速度过慢或者失败。你可以使用 GOPROXY.IO 加快模块下载速度。
编译完成后,会在项目根目录下生成最终的可执行文件cloudreve 。
然后我们将cloudreve 这个可执行文件上传到服务端或者生产环境中,就可以使用了。(注意系统架构要相同)
Step.7-修改和一键编译篇
当我们需要再次修改源码时,我们又要重新执行上面的一大串步骤重新编译可执行文件。
为此,博主整理了一下更方便的方法(其实也就是将前面的命令整合在一起,不用一条一条输入而已2333):
在Cloudreve目录下(也就是存在可执行文件的那个目录下),输入以下代码即可快速重新构建新的可执行文件并自动测试执行:
1 |
cd assets&&rm -rf /home/test2/Cloudreve/assets/build&&yarn run build&&cd ../&&export PATH=$PATH:$(go env GOPATH)/bin&&statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f&&export COMMIT_SHA=$(git rev-parse --short HEAD)&&export VERSION=$(git describe --tags)&&go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$VERSION' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'"&&./cloudreve |
Tips-修改教程提示
如需修改边栏代码(增加按钮项),可修改assets/src/component/Navbar/Navbar.js文件
在对应位置仿照格式增添/修改即可,如:
1 2 3 4 5 6 7 8 9 10 11 12 |
<ListItem button key="菜单A" #新的边栏名称 onClick={() => this.props.history.push("/XXX")} #onClick事件绑定,路由到指定地址(可使用window.location.href = 'http://fxit.top'跳出程序,跳转外部链接) > <ListItemIcon> <AppsIcon #引入了对应的图标 className={classes.iconFix} #这里是对引入的图标修改大小格式 /> </ListItemIcon> <ListItemText primary="菜单A" /> #新的边栏名称 </ListItem> |