经历了一番大折腾之后,咱终于成功的将博客从 Typecho 迁移到了 Hugo,但是受限于 Hugo 静态博客的特性,咱无法实时编辑博客哩😤,
于是只能探索一下如何能快捷的将博客同步到服务器上去了,不过好在 Hugo 的文档给出了一些方案
[1]
。
在简单浏览之后决定选择使用 rsync
的方式。
简单用法
虽然在很早之前就了解到了 rsync
但是并没有实际的用过,在简单查阅了ArchWiki
[2]
上相关的内容之后,并结合 rsync
自己的 help 输出之后
咱总结出只需要在 Hugo 的工作目录使用下面的命令就能将内容上传到远程了。
|
|
这句命令中的参数 -a
表示归档的方式来传输文件,这等同于 -rlptgoD
,这意味着它会递归的把文件复制到远程,同时保留文件的元信息,包括所属、权限、链接等信息;
而 -u
表示仅更新,用于增量传输;-v
表示输出详细信息,-z
表示压缩,--progress
表示显示过程。
最关键的是 --delete
会将远程与本地不符的文件删除。
不过这样上传的文件会导致其文件所属为本地的用户,即使使用 --no-og
也会导致远程的文件所属变为SSH登陆的用户,而咱的 Nginx 运行在 http 用户下,
从而导致权限问题。
在经过一番研究之后,发现使用 rsyncd
配置中的 module
可以解决指定远程文件所属的需求,这也就是本文的重点啦´ ▽ ` )ノ`
使用 rsyncd
配置 rsyncd
首先是在远程服务器上安装好 rsync
,绝大多数Linux发行版都会提供这个包。然后编辑配置文件 /etc/rsyncd.conf
,
|
|
值得注意的是,这里设置的 auth users
并不是 Linux 用户,所以可以随便指定,主要是定义在 /etc/rsyncd.secrets
中的。
接下来在 /etc/rsyncd.secrets
中按照以下格式写入你的用户名和密码,
(可以把这个文件创建在任何你觉得合适的地方)
并设置为只有 rsyncd
运行用户可读写的权限,这里是 root
用户。
|
|
最后,别忘了启动 rsyncd
,以及在防火墙上开放 TCP 873 端口,rsyncd
默认监听在这个端口,
如果需要调整可以在 /etc/rsyncd.conf
里添加 port <prefer_port>
来设置
|
|
使用 rsync 上传
由于使用了 rsyncd,所以上传用的指令也发生了变化
|
|
这里的 --password-file
指向本地存储密码的文件,注意其权限也需要只有当前用户可读写,
然后是后面的远程路径使用了双冒号来指定使用 rsync
协议,冒号后跟的是设置的模块名和模块内路径了。
总结
至此,就能方便的使用 rsync 将生成好的博客网站快速的同步到远程服务器,如果觉的命令太长,可以写个shell脚本来方便使用。