使用 Git Hook 自动部署 Hexo 到个人 VPS
CentOS 升级 Git 到最新版本
CentOS 上的 Git 最新版本只有1.8.3,因此我们需要自己重新安装一遍 。
卸载旧版本 Git
1 | # 安装 Development tools |
下载 Git
1 | # 选择安装目录 |
编译安装
1 | $ cd git-2.16.3 |
修改环境变量
1 | $ vim /etc/profile |
检测
1 | $ git --version |
配置服务器远程 Git
大家都知道 Git 是分布式的版本控制系统,远程仓库跟本地仓库是没什么不同的。
创建用户
虽说现在的仓库只有我们自己在使用,新建一个 git
用户显得不是很有必要,但是为了安全起见,还是建议使用单独的 git
用户来专门运行 git
服务
创建一个 git
用户,用来运行 git
服务:
1 | $ adduser git |
创建证书登录
把自己电脑的公钥,也就是 ~/.ssh/id_rsa.pub
文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys
文件中,添加公钥之后可以防止每次 push 都需要输入密码。
1 | # *切换至 git 用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限 |
初始化 Git 仓库
我是将其放在 /var/repo/blog.git
目录下的:
1 | $ sudo mkdir /var/repo |
配置 git hooks
关于 hooks 的详细内容可以参考这里。
我们这里要使用的是 post-receive
的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。
在 blog.git/hooks
目录下新建一个 post-receive
文件:
1 | $ cd /var/repo/blog.git/hooks |
在 post-receive
文件中写入如下内容:
1 |
|
注意,/var/www/kingmui
要换成你自己的部署目录。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。
不要忘记设置这个文件的可执行权限:
1 | chmod +x post-receive |
变更拥有者
改变 blog.git
目录的拥有者为 git
用户:
1 | $ sudo chown -R git:git blog.git |
禁用权限
出于安全考虑,我们要让 git
用户不能通过 shell 登录。可以编辑 /etc/passwd
来实现,在 /etc/passwd
中找到类似下面的一行:
1 | git:x:1002:1002:,,,:/home/git:/bin/bash |
将其改为:
1 | git:x:1002:1002:,,,:/home/git:/usr/bin/git-shell |
这样 git
用户可以通过 ssh 正常使用 git,但是无法登录 sehll。
至此,服务器端的配置就完成了。
本地配置
修改 hexo 目录下的 _config.yml
文件,找到 [deploy] 条目,并修改为:
1 | deploy: |
要注意切换成你自己的服务器地址,以及服务器端 git 仓库的目录。至此,我们的 hexo 自动部署已经全部配置好了。
使用
往后,要发布新博客只需按照如下步骤:
1 | $ hexo new "new-post" |