这篇文章将如何搭建hexo,以及如何经过git webhooks实现远程vps的自动部署html
这篇文件适合的条件:node
流程:先在本机搭建好hexo环境,push到git仓库,再部署到服务器上。nginx
第一步,安装hexo命令行工具,这个工具在服务器端也须要执行安装git
1
|
npm install hexo-cli -g
|
第二部,生成一个本地hexo项目github
1
2
3
4
5
6
7
|
# 建立blog目录,并初始化hexo项目
hexo init blog
cd blog
# 安装hexo依赖,hexo是基于nodejs开发的,npm是nodejs的包管理工具
npm install
# 启动本地服务,打开localhost:4000测试是否成功
hexo server
|
第三部,新建一篇文章web
1
2
3
|
hexo new
"My First Post"
# 启动本地服务,查看效果
hexo server
|
这样,在/source/_posts目录下就生成了了my-first-post.md
这样一个文件,.md是markdown文件的扩展名,咱们可使用本身喜欢的工具去编辑markdown,好比Sublime Text。npm
这里推荐一个Sublime Text插件,给人家免费推广了,OmniMarkupPreviewer。ubuntu
你得须要一个远程仓库托管代码,可使用Github或国内的Coding.net,由于我有些项目属于私有项目,Github开私有项目是须要收费的,因此我选择的是国内的Coding.net,速度也比较理想。centos
先在coding上新建一个项目名为hexo,并拷贝仓库ssh地址(使用ssh须要配置ssh公钥和私钥,若是不会配能够google或使用http地址)。服务器
提示,若是须要经过webhooks实现服务器自动化部署,推荐使用ssh会更方便一些
而后在hexo目录初始化本地仓库并提交到coding
1
2
3
4
5
|
git init
git remote add origin git@git.coding.net:lianer/hexo-blog.git
git add .
git commit -m
'publish'
git push origin master
|
这时候coding上已经有我提交的代码了。
登陆你本身的vps服务器,安装好nodejs,git,nginx,我的服务器仍是推荐使用ubuntu,安装这些工具很容易,具体百度或谷歌。
我在公司搭的hexo,公司服务器使用的是centos,git我是请运维同窗帮我安装的,比较麻烦。
一样的服务器也须要配置ssh才能使用ssh地址,不然仍是使用http地址吧。
在这里,我直接把项目放在root目录下了。
1
2
3
4
|
mkdir hexo
git init
git remote add origin git@git.coding.net:lianer/hexo-blog.git
git pull origin master
|
1
2
3
|
cd ~/hexo
npm install hexo-cli -g
npm install
|
1
|
hexo g
|
这一步会在hexo目录下生成一个public目录,这里面就是编译后的静态文件目录,
其实这时候直接访问里面的html文件便可看到完整的效果了,只不过还须要一个服务来运行它。
进入nginx服务配置文件目录,该目录下应该已经有一个default.conf,不去管它,另外新建一个配置文件
1
2
|
cd /etc/nginx/conf.d/
vi hexo.conf
|
在hexo.conf中输入如下内容并保存,注意细节,不要少分号。
1
2
3
4
5
6
7
8
|
server {
listen 80; # 监听端口
server_name imlianer.com www.imlianer.com; # 你的域名
location / {
root ~/hexo;
index index.html;
}
}
|
重载nginx,使配置生效。
1
|
nginx
-s reload
|
而后就能够经过 http://imlianer.com 访问hexo了。
是否是以为每次写完文章还要登陆服务器去执行一次git pull很麻烦?
ok,git有不少钩子,能够在仓库发生变化的时候触发,相似js中的事件。
WebHooks就是在你本地执行git push的时候,
远程仓库(coding)会检测到仓库的变化,并发送一个请求到咱们配置好的WebHooks。
实现WebHooks自动化部署的推荐条件:
Coding WebHooks 配置界面
这张图的配置的意思是:当仓库发生push的时候,会发送一个请求到http://imlianer.com/webhooks/push/123456。
为了服务端的简易处理,这里没有使用token,而是将url地址当作token,123456就充当了token的角色。
到这,仓库这边的配置就完成了,接下来的问题就是服务器如何接收这个请求并从新部署hexo了。
我使用的是nodejs,其它语言也能够。
在本地hexo目录中新建一个webhooks.js文件,内容以下:
1
2
3
4
5
6
7
8
9
10
11
|
var http = require('http')
var exec = require('child_process').exec
http.createServer(
function (req, res) {
// 该路径与WebHooks中的路径部分须要彻底匹配,实现简易的受权认证。
if(req.url === '/webhooks/push/123456'){
// 若是url匹配,表示认证经过,则执行 sh ./deploy.sh
exec(
'sh ./deploy.sh')
}
res.end()
}).listen(
4002)
|
这段代码就能启动一个nodejs服务,监听4002端口。
当请求过来的url彻底匹配的时候,执行deploy.sh。
再新建一个文件deploy.sh处理部署相关脚本,内容以下:
1
2
|
git pull origin master
hexo g
|
将新增的webhooks.js与deploy.sh两个文件push到服务器。
而后在服务器中启动nodejs服务监听webhooks
1
|
node ./webhooks.js
|
这样,当你本地提交文章的时候,服务器就会自动部署啦。
若是你使用上面的命令运行nodejs服务,nodejs服务会在前台运行,
可使用pm2使nodejs运行在后台。