为hexo部署自己的git服务器

将hexo迁移到自己的服务器上后,部署方法变的有点烦琐,所以一直有个想法,在服务器上搭建一个git服务器,利用hook技术,实现自动部署。

###1. hexo部署到github
hexo部署到github很简单,确保自己的github.io项目正确配置后,只要在_config.yml中配置好github.io项目的地址,配置如下:

1
2
3
4
5
# Deployment
## Docs: http://hexo.io/docs/deployment.html
deploy:
type: git
repo: https://github.com/username/username.github.io.git

但是服务器在github.io上有诸多不便,比如偶尔github.io会出现访问不了的情况。

###2. 在服务器上配置git server

####2.1 服务器配置
为git server创建一个单独的用户,并设置密码:

1
2
sudo adduser git
sudo passwd git

####2.2 创建git仓库
首先确认服务器上成功安装了git。git可以很方便的创建一个repository。使用git用户登录服务器,使用如下命令创建仓库:

1
2
cd ~
git --bare init myblog.git

使用上面的命令,在git用户的用户目录下创建一个bare git仓库。相较于git init,上面的命令不会创建work tree,即工作目录。

####2.3 hexo自动部署到服务器
为了方便,首先配置了SSH无密码登录(以git用户登录)。在hexo的_config.yml中添加如下部署配置:

1
2
3
4
5
deploy:
- type: git
repo: https://github.com/username/username.github.io.git
- type: git
repo: git@gitserver:mysblog.git

如此配置后,在执行hexo d时,会将博客部署到github.io和刚刚创建的git仓库中。

####2.4 创建部署文件夹
现在要做的事情就是在服务器上使用hook的技术,每次hexo部署后,会切换到网站根目录,执行pull操作。
切换到网站根目录,克隆刚才push到git server上的静态文件。

1
2
cd WEBROOT
git clone myblog.git

切换到myblog.git仓库目录,可以看到其中有个叫hooks的目录,里面定义了一些hook例子。这里,创建一个叫post-update的文件,并赋予可执行权限。

1
2
3
cd ~/myblog.git/hooks
touch post-update
sudo chmod u+x post-update

将以下内容复制到post-update中:

1
2
3
4
5
6
7
#!/bin/bash

echo "[*] change to directory: yflog ..."
cd WEBROOT/myblog

echo "[*] clone latest source ..."
env -i git pull

OK, 大功告成了!

Git修改已经提交的Comment Linux下配置SSH无密码安全登录

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×