Hexo博客并使用Git Hook自动部署到个人服务器上

AI摘要

正在生成中……


第一步

安装git:

1
sudo apt install git

第二步

创建一个 git 用户,用来运行 git 服务:

1
sudo adduser git

虽说现在的仓库只有我们自己在使用,新建一个 git 用户显得不是很有必要,但是为了安全起见,还是建议使用单独的 git 用户来专门运行 git 服务

第三步

使用su - git登录git用户

在自己电脑cmd终端输入

1
ssh-keygen

选择某一个文件存放密钥对, 把刚刚生成的公钥,比如 ~/.ssh/ddd.pub 文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys 文件中,如果没有 .ssh/ 目录和 authorized_keys 文件需要新建,添加公钥之后可以防止每次 push 都输入密码。
然后配置电脑的~/.ssh/config文件, win系统路径为"C:\Users\用户\.ssh\config"

1
2
3
4
5
6
7
8
9
10
11
Host ddd
Hostname 111.111.11.11
Port 22
User git
IdentityFile C:\Users\用户\.ssh\ddd

Host 随便填个昵称, 比如ddd
Hostname 服务器地址
Port 服务器开放的ssh端口
User 设置的用户
IdentityFile 私钥地址, 比如C:\Users\\.ssh\ddd

cmd终端测试是否可以连接

1
ssh -T ddd

第四步

初始化 Git 仓库,我是将其放在 /home/hexo/blog.git目录下的:

1
2
cd /home/hexo/
sudo git init --bare blog.git

使用 --bare 参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在。

第五步

配置 git hooks,关于 hooks 的详情内容可以参考这里

我们这里要使用的是 post-receive 的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。
blog.git/hooks 目录下新建一个 post-receive 文件:

1
2
/home/hexo/blog.git/hooks
vim post-receive

在 post-receive 文件中写入如下内容:

1
2
#!/bin/sh
git --work-tree=/www/hexo --git-dir=/home/hexo/blog.git checkout -f

注意 /www/hexo 要换成你自己的部署目录。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。

不要忘记设置这个文件的可执行权限:

1
chmod +x post-receive

第六步

改变 blog.git 目录的拥有者为 git 用户:

1
sudo chown -R git:git blog.git

改变网站/www/hexo目录的拥有者为git用户:

1
sudo chown -R git:git /www/hexo

第七步

禁用 git 用户的 shell 登录权限。
出于安全考虑,我们要让 git 用户不能通过 shell 登录。可以编辑 /etc/passwd 来实现,在 /etc/passwd 中找到类似下面的一行:

1
git:x:1000:1000:,,,:/home/git:/bin/bash

将其改为:

1
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 sehll。

至此,服务器端的配置就完成了。

本地配置

配置你的 hexo 博客可以自动 deploy 到服务器上,再也不用 ftp 上传了。

修改 hexo 目录下的 _config.yml 文件,找到 [deploy] 条目,并修改为:

1
2
3
4
deploy:
type: git
repo: ddd:/home/hexo/blog.git
branch: master

其中这里也可以写成repo: git@服务器ip:/home/hexo/blog.git

或者git init其他文件夹进行同步上传
步骤一:初始化 Git 并添加远程

1
2
git init
git remote add origin ssh://git@ddd/var/repo/blog.git

步骤二:创建一个初始提交

1
2
git add .
git commit -m "initial push"

步骤三:推送到远程, 其中-u--set-upstream的简写, 将当前本地分支与远程分支关联(设置默认上游分支), 后续只需要git push

1
git push -u origin master

本地配置完成。至此,我们的 hexo 自动部署已经全部配置好了。