hexo通过git自动部署到vps
本文环境:
vps:centos 7 64位
本地: windows 10 32位
本地安装并配置git
安装git
创建SSH Key
在git bash中运行
1 | ssh-keygen -t rsa -C "mcosx@example.com" //注意替换邮箱 |
生成id_rsa
和id_rsa.pub
或你自己命名的两个文件
- 配置ssh key
因为我将vps的ssh端口更改了,所以此处多一步
在.ssh
目录config文件中增加以下配置
1 | Host 00.00.00.00 //替换主机ip |
据说也可以更改git地址为 ssh://git@00.00.00.00:56734/home/git/hexo.git类似这样的(未测试)
vps上git配置
- 安装git
1 | yum install -y git |
- 创建git用户
1 | useradd git // 或 adduser git |
- git服务器打开RSA认证
在Git服务器上需要将/etc/ssh/sshd_config中的RSA认证打开,即
1 | #RSAAuthentication yes |
然后将本地生成的公钥文件id_rsa.pub内容复制入/home/git/.ssh/authorized_keys文件中
- 禁用git用户的shell登陆
出于安全考虑,新创建的git用户不允许登陆shell,这可以通过编辑/etc/passwd文件完成。
将类似
1 | git:x:1003:1003:,,,:/home/git:/bin/bash |
这样的代码替换为
1 | git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell |
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
在vps上部署hexo自动发布
- vps上初始化git仓库
1 | cd /home //注意,我开始试着用/root目录,出现错误,应该是git用户权限的问题 |
- vps配置hexo自动发布
我们上一步建立的git仓库(相当于git服务器)位于/home/git/hexo.git,而vps上我设置的web对应目录为/home/wwwroot/blog.mcosx.cn,所以要再设置个git(相当于客户端)从git仓库中clone到对应的web目录.并且要让这一步骤自动进行可以通过git hook中的post-receive。
通过执行vim /home/git/hexo.git/hooks/post-receive
新建文件并添加以下代码
1 |
|
然后运行
1 | chmod +x /home/git/hexo.git/hooks/post-receive |
- hexo本地配置
然后在本地站点hexo中添加
1 | deploy: |
其他
- 权限问题
本文执行git操作的为git用户,所以上传的文件只能做git用户权限类的事。例如本文中就只能解析静态网页,因为git用户没有php的访问权限。
如果需要解析php动态页面,可以通过修改php-fpm的配置文件www.conf,让`user = git`,甚至还可以修改nginx的nginx.conf文件,让user为git:git,使它成为nginx的操作用户。
遇到的问题
- ./post-receive文件执行错误
1 | [root@localhost hooks]# ./post-receive |
原来是文件格式问题,dos自动给行尾加^M,要将文件格式转为unix。
vim可以这样:set fileformat=unix
,
通过cat -v <文件名>
可以查看是否有^M.
2015-12-28 更新
git连接问题
可以用ssh -v git@00.00.00.00
测试并判断错误出处remote: fatal: Not a git repository: ‘.’
检查hooks文件目标文件夹空
post-receive必须接受到更新才会触发,没有更改不会执行
参考
http://huifeng.me/2015/08/16/deploy-hexo-to-vps/
https://isudox.com/2015/09/03/hexo-your-blog/
http://blog.csdn.net/u012345283/article/details/42970991