上周末刚买了 Linode 的 VPS,打算把自己和朋友的几个小站部署上去。之前准备折腾下 Ghost,但是在 mbp 本地部署的时候报错,而且因为是基于 nodejs 的 webserver,还要配置 nginx 反向代理,所以先搁置下。系统干干净净地装了 Apache,allenkung.com 和另外几个「此域名出售」的静态站反正一百年不更新挂着了事。
剩下 blog 部分,blog.allenkung.com 是利用 hexo 部署在 github 上的,hexo 的 git deploy 机制很好用。但是小迟同学的 cakepoet.com 我计划尝试下使用 hexo 的 Rsync deploy 机制来部署。
Rsync是linux/Unix文件同步和传送工具。用于替代rcp的一个工具,rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时rsync server会开一个873端口,等待客户端去连接。连接时,rsync server会检查口令是否相符,若通过口令查核,则可以通过进行文件传输,第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份.
于是跟 alex 讨教了下 Rsync 的部署,在 VPS 上试验了一下:
Step 2. 开启 Rsync 服务,将 /etc/default/rsync
文件中的:
1 | RSYNC_ENABLE = true |
Step 2. 建立一个 conf 文件,文件内容参考这篇《rsync命令详解》:
1 | $ sudo nano /etc/rsyncd.conf |
1 | [confname] //自定义模块名称 |
Step 3. 建立并编辑验证密码文件 rsyncd.pass,文件内容如下:
1 | username:password |
Step 4. 更改 /etc/rsyncd.pass
文件权限 600
1 | $ sudo chown 600 /etc/rsyncd.pass |
至此,准备工作都做完了。我们测试一下吧:
1 | $ rsync -av /databack [email protected]::confname |
拷贝本地机器文件到远程 rsync 服务器(daemon 形式运行 rsync)中。当DST路径信息包含”::”分隔符时启动该模式。
发现已经成功啦!那么回到此文的话题,在 hexo 中配置 rsync,编辑 _config.yml
:
1 | deploy: |
其中 root
和 port
两项比较困惑,先大致填一下,然后 $ hexo d
一下发现会报错:
1 | Permission denied |
于是开始漫长地 check 帖子之旅,找到最接近的情况是这个帖子,但是 hexo 作者表示已经修复并且 close 掉了这个 issue。
于是开始扒 hexo 的 code,首先是要找 hexo 的安装目录:
1 | $ npm root -g |
然后在node_modules/hexo/lib/plugins/deployer/rsync.js
找到这个文件,仔细的朋友会发现跟之前提到的时候作者修复 rsync bug 时候比,现在的文件目录是把 rsync 当成一个 plugin 来处理了,可见 hexo 也一直在进步中。
进一步扒代码找到相关的逻辑:
1 | var params = [ |
可以看到 hexo 的 rsync deploy 模式是通过 ssh 的模式,貌似不能通过 daemon 模式去运行(有个很明显的好处就是不用通过系统用户去管理使用者的帐号密码,而可以通过 /etc/rsyncd.pass
文件来管理)。
目前还没有找到解决方案,我去研究下。