hexo
可快速上手做出自己的博客网站,部署方式 也非常多。在部署到github的时候基本不会遇到什么问题,但是当选择使用rsync
部署到阿里云ECS的时候,windows下部署的坑就一个个的出现了。
遇到的问题
首先看下官方的部署教程, 只有下面一小段内容:
$ npm install hexo-deployer-rsync --save
修改配置
1 | deploy: |
rsync不存在的报错
直接运行 hexo d
之后就会报错了,有可能在powershell上面是乱码,git bash运行后出现以下报错:
1 | INFO Validating config |
windows默认没安装rsync,查找之后要安装cwrsync。然后去官网下载多个版本后出现了各种其他问题,这里我用5.5.0版本完成了后续操作。
下载之后进行了如下操作:
首先,下载的软件包解压到想放的位置,然后双击 cwrsync.cmd
开始安装,正常则会生成 home
目录,但是我这边没有生成(截图中是我后手动添加的)。
ok,先没管 home
目录,先将 bin
目录添加到环境变量,以便访问到 rsync.exe
文件。之后再来 hexo d
一次。好,出现了如下报错:
1 | INFO Validating config |
上面报错那意思没找到ssh密钥存储的目录,奇怪的是我这边用户根目录下有.ssh
目录,且服务器上也添加了对应公钥。而且这个目录很奇怪,/home
这种目录应该指的linux下的目录结构吧。几番研究发现,这个版本的rsync调用的ssh并不是我们安装的,而是cwrsync的bin目录下的ssh.exe
,那意思就是这个密钥目录可能不是指向用户目录的,而是cwrsync的安装目录。于是,在安装目录我新建了 /home/lazy5/.ssh
目录。
同时双击 bin
目录下的 ssh-keygen.exe
文件,之后一路回车,则在 /home/lazy5/.ssh
目录下生成密钥对,目录如下:
将生成的公钥添加到服务器对应用户的 authorized_keys
中,然后再部署一次试试。还是失败了,查看下面的 无权限报错
无权限报错
首先出现的是如下权限过高的问题:
1 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
因此,我删除了 /home/lazy5/.ssh/id_rsa
除了所有者 lazy5
以外的权限。
以上设置之后,权限过高的问题就没有了。理论上这样部署就没有了,但是在实际操作中还遇到了其他权限问题,具体截图没有了,列举如下:
deploy
配置使用的是root
,导致访问被拒绝。这里建议新建一个用户用户rsync的操作,同时建议和本地windows电脑用户名一致,我这里是lazy5
,服务器上也新建了一个一样的用户名。- 部署报建立文件夹没权限的问题:由于新建的
lazy5
不在root
组,而部署的目录属于root
用户,chown
将目录权限改到lazy5
, 同时也可以把lazy5
加到root
组。 - 服务器访问拒绝的其他权限问题:服务器ssh未开启公钥登录的方式,修改配置文件。
vim /etc/ssh/sshd_config
- 增加如下配置:
1
2
3
4PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication no
RSAAuthentication yes - 重新加载,
systemctl restart sshd
成功上传之后域名访问403
一切大功告成,访问网站出现了403,估计是权限的问题了。查看hexo目录下的文件权限如下:
chmod 777 hexo -R
之后可以正常访问,但是每次部署后都需要登录服务器修改权限,这种方式肯定是不行的。那rsync为什么要改权限呢,依据是什么?前面说到了部署到服务器的文件是lazy5权限,那是不是文件访问的权限是不是也是直接用了本地文件权限。
查看本地项目目录属性,权限中没有 Everyone
,因此添加上去再说。
重新部署后,终于权限正常了!
后语
以上就是 hexo
中使用 rsync
遇到坑的大致记录,其中由于填坑过程遗漏了很多记录,所以不一定全面,后续有再遇到会继续补充。另外由于坑太多,感觉这里直接 pm2
部署,在服务器上再 hexo generate
生成,估计也能达到一样的效果,后续可尝试并记录下。