在校内搭建的 Git 仓库,有时候需要在校外访问操作。因为使用的是 Gogs 搭建,所以只需要同步 data 文件夹即可,网上关于双向同步的方案有很多,但是都很麻烦,而且经常会“打架”,文件冲突。
所以本文使用一些比较奇葩的办法解决这个问题,那就是使用 webdav 传输,因为我电脑本地装有 Nextcloud 的客户端,服务器装有 Nextcloud 的服务端,而服务端自带 Webdav 接口,所以我只需要把 Gogs 容器的数据卷挂载到本地 Nextcloud 同步文件夹中,Nextcloud就会上传到服务器。
而服务器使用 davfs 挂载一个 webdav 文件夹用于挂载服务器上的 Gogs 容器数据卷,这样两个跨主机 Gogs 容器就共享一个数据卷了。
这种办法的好处就是把文件冲突交给 Nextcloud 处理,这种私人云存储在处理文件冲突时还是很有一套的,最重要的是不会陷入“掐架”或者“死循环”中。
关于 Docker 数据卷跨主机共享其实有专门的插件可以实现,例如:Flocker,但是本文不想折腾得太复杂,尽量用现成的服务实现,所以选择 Webdav 双向同步传输。本地:一个 Nextcloud 客户端,一个 Gogs 容器,数据卷挂载到 Nextcloud 客户端的同步文件夹中。
服务器:一个 Nextcloud 容器,一个 Gogs 容器,Gogs 数据卷使用 davfs2 通过 webdav 服务连接到 Nextcloud。
之所以不使用直接挂载 Nextcloud 容器的数据卷是因为 Nextcloud 上传文件时需要在 Mysql 中记录历史记录,直接挂载 Gogs 数据卷到 Nextcloud