本篇是在VPS上搭建Hexo静态博客的第一篇博文,写本篇的目的一是纪念一下,二是作为一个部署文档保留。

博客地址

相关描述

VPS环境是在搬瓦工上安装的centos6(x86),1核,512MB,10GB,1000GB/月的配置($19.99/年,可用支付宝支付),主要的功能是搭个梯子,只做梯子好像有点浪费,于是买了个域名,搭建了这个博客。

Hexo好早之前有听说了,尤其喜欢next主题,简洁大方,考虑到VPS环境的不稳定问题,所以使用github作为博文的中转及保存的仓库,利用github的webhooks,当有push操作时直接发送请求,VPS监听该请求并执行更新操作,这样即使VPS环境挂了,博文信息还在github上,重新部署一遍就可以了。

具体过程

主要的步骤有:Hexo本地环境搭建、github仓库创建、webhooks创建、VPS服务器Hexo下载安装、VPS监听和更新脚本。

Hexo本地环境搭建

关于Hexo本地环境搭建比较简单,直接参考Hexo,这里只做简单的记录:

npm install -g hexo-cli

hexo init hexoblog

cd hexoblog

npm install

# 新增文章
hexo new <title> # 生成静态文件
hexo generate # 简写
hexo g # 启动服务,查看博文
hexo server

有关Hexo主题,本人比较喜欢next,最近好像有点样式的调整,不是特别喜欢,所以使用的还是原有的旧版。

github仓库创建

github远程仓库创建so easy,直接进入github仓库tab页面,点击创建即可。为了提交本地hexo相关文件的方便,我在github上配置了本地环境的ssh公匙信息,以达到不用输入用户名密码即可使用git命令将更改的文件提交到github相关仓库上。

具体配置过程

首先在本地环境配置生成秘钥文件,使用git的命令客户端

# 检查本地环境是否已有生成的密匙信息
cd ~/.ssh
# 如果没有.ssh目录文件,执行下面命令,直接一路回车
ssh-keygen -t rsa

生成如下结构

.
├── id_rsa
├── id_rsa.pub
└── known_hosts

直接拷贝id_rsa.pub里面的内容,并在github-setting-SSH and GPG keys中创建SSH key,粘贴内容到Key中,title可不填,保存后title直接显示所添加主机的主机名。

webhooks创建

钩子的创建在github上配置非常简单,进入到仓库页面,点击Settings-Webhooks,直接Add webhooks,这里只选择监听push事件,push事件发生后github将发送请求到VPS监听的URL(http://host:监听端口/webhooks/push/123 ) 上,VPS负责相关的更新操作。

VPS服务器安装Hexo

与本地安装一样,执行

npm install -g hexo-cli

即可(当然首先需要安装nodejs环境)

VPS监听

最近一直研究Nodejs,所以在VPS上使用Nodejs启动监听服务,非常简单:

// hexowebhooks.js

var http = require('http')
var exec = require('child_process').exec http.createServer(function (req, res) {
if(req.url === '/webhooks/push/123'){
exec('sh ./deploy.sh');
}
res.end()
}).listen(监听端口)

其中,deploy.sh为更新脚本,用于更新VPS静态博文,将监听端口更换成你要监听端口即可。这里使用pm2管理监听服务。

运行

pm2 start hexowebhooks.js

更新脚本

更新脚本使用shell脚本,主要步骤是:

  • 清除静态文件
  • 删除db.json文件(不然pull github代码有冲突)
  • 拉github上的代码
  • 生成静态文件

在执行shell之前,需要先将github仓库代码pull下来,设置远程仓库信息

git clone https://github.com/tonny0812/hexoblog.git
或者
git clone git@github.com:tonny0812/hexoblog.git cd hexoblog git remote add hexo "git@github.com:tonny0812/hexoblog.git"

其中,hexo是远程仓库地址的别名。

更新脚本:

// deploy.sh

hexo clean
rm -f ./db.json
git pull hexo master
hexo g

然后访问博客网址即可,这里使用nginx反向代理,将静态网页内容映射到80端口上,由于VPS在美国,所以不需要备案即可访问80端口,国内的VPS(如阿里云)需要备案,查到使用HTTPS监听443端口不需要备案可以使用,还没有去折腾。

总结

这里的关键是使用了github的webhooks钩子机制,可以利用github这种免费的git数据仓库保存文章信息,VPS直接拉github上的代码,然后执行更新脚本,发布文章,由于使用nginx做代理,所以直接执行完更新脚本之后就可以直接访问新写的文章了。

Hexo博客部署-使用github作为保存中转仓库的更多相关文章

  1. 搭建自己的技术博客系列(二)把 Hexo 博客部署到 GitHub 上

    1.在GitHub上建一个新仓库

  2. Hexo 博客部署到 GitHub

    本文简单记录了一下把 Hexo 部署到 GitHub 上的过程,也是搭建静态博客最常用的一种方式. 前面写了关于如何把 Hexo 安装在树莓派上的教程,但树莓派毕竟是连着自己的家的路由器,万一哪天网断 ...

  3. hexo博客部署到github无法上传的问题

    博客生成之后,按照网上别人的教程,讲项目部署到github上,修改_config.yaml中的deploy部分如下所示: deploy: type: git repository: https://g ...

  4. Hexo博客部署到远程仓库(Conding、Gitee、Github)

    一.本地环境搭建 1.安装Git Git可以有效.高速的处理各种项目版本管理.也就是用来管理你的hexo博客文章,上传到GitHub的工具. Git下载地址 安装好了之后使用git -version查 ...

  5. 将`VuePress`建立的博客部署到GitHub或Gitee上

    将VuePress建立的博客部署到GitHub或Gitee上 在上一篇中,我们详细介绍了如何利用VuePress搭建起个人博客系统,但这只是在本地debug启动的,接下来,我们把它部署到Github网 ...

  6. Hexo博客部署到腾讯云服务器全过程(Nginx,证书,HTTPS),你要的这里都有

    背景 说来也惭愧,博客已经搭建很久了,一直免费的部署在 Coding 和 Github Pages 上,前者迁移到腾讯云 Serverless,导致原有的配置始终有问题,没时间仔细研究,刚好腾讯服务器 ...

  7. Hexo博客部署

    前些天使用wordpress程序搭建了个人网站,但感觉太重比较适合个人空间,所以这次介绍Hexo搭建免费博客,先提供官网给大家英文版的请点击这里,中文版的请点击这里,在安装一个Git,再是github ...

  8. 【hexo博客搭建】将搭建好的hexo博客部署到阿里云服务器上面(下)

    一.部署到阿里云服务器 既然博客也已经成功在本地部署,然后主题也成功安装,接下来就可以部署到服务器上面了,如果你也想要魔改matery主题,可以去各种博客上面找一找大佬的教程,或者联系我,也可以让你少 ...

  9. 将Hexo博客部署到云主机

    摘要: 在云主机上搭建一个git裸仓库,然后使用nginx作为网页服务器,就可以轻松将Hexo博客通过git部署到云主机上. 这是一个忧伤的故事 我的博客KiwenLau之前部署在Coding Pag ...

随机推荐

  1. python 验证码识别库pytesseract的使用

    笔者环境 centos7 python3 pytesseract只是tesseract-ocr的一种实现接口.所以要先安装tesseract-ocr(大名鼎鼎的开源的OCR识别引擎). 依赖安装 yu ...

  2. Excel自定义公式,类似VLOOKUP的查询

    Excel在使用VLOOKUP时,当检索值超过255长度的时候就会报错,没法正常检索. 官方提供的办法是通过INDEX和MATCH公式组合使用来解决. 微软官方方案 1,公式 =INDEX($A$5: ...

  3. samba介绍和安装

    samba基本介绍 为什么需要samba 早期网络文件数据在不同主机之间传输大都可以使用Ftp完成,不过ftp使用有个小小的问题,它不能让你之间修改主机上的文件.要想修改必须要通过下载——修改——上传 ...

  4. linux的常用命令介绍

    1.ls  列出当前目录下的所有的文件和文件夹的名称. 参数如下:-a 显示隐藏文件 -l 显示方式为列表 -h 以可读性高的方式输出 eg: ls -lh /logs/tran  目录如果不指定(相 ...

  5. 项目中遇到angular时间插件datetinepicker汉化问题

    问题描述: 测试需要中文的时间插件: 参考资料: angularjs封装bootstrap官网的时间插件datetimepicker https://www.cnblogs.com/cynthia-w ...

  6. SQL 表值函数/标量函数

    表值函数 定义表值函数 --定义表值函数 CREATE FUNCTION GetStuScore(@Stu_ID INT ) RETURNS TABLE AS RETURN (SELECT ),[St ...

  7. 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数

    Description 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数.n由键盘输入. Input 输入一个整数 Output 输出表达式的值 Sample Input 5 Sam ...

  8. 【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

  9. jQuery 中的事件绑定

    一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...

  10. 数据结构排序算法插入排序Java实现

    public class InsertDemo { public static void main(String args[]) { int[] sort ={4,2,1,3,6,5,9,8,10,7 ...