搭建一个blog

购买云主机和域名

腾讯云有学生1元主机和1元域名的优惠,可以去参加下。这一步就不赘述了。

hexo 本地博客搭建

  1. 首先你需要在本地这里安装好hexo,这里安装可以参见hexo官网的步骤,当然需要先安装好hexo的一些依赖比如npmgit等。
  2. 上一步完成后继续看官网教程,直到可以达到hexo s后,能在localhost本机正常显示博客,就可以继续了。

将博客添加为coding项目

这里我们将博客添加到coding中去,当然你要可以添加到任何一个git托管中,比如github,但是github中创建私人项目需要收费,而博客这东西又不太好开源,所以这里选择了coding.net。

  1. 注册coding.net账号,创建一个新的私人项目比如blog。
  2. 将本机的ssh公钥添加到coding.net账号中去,这样这台机器可以免密push到coding的项目去。具体步骤可以看官网指南,感兴趣的可以google搜索相关原理。
  3. 在你的博客目录下执行以下代码
1
2
3
4
5
6
 
git init //初始化
git remote add origin .coding.net:someone/hexo-blog.git //为本地repo添加远程仓库
git add .
git commit -m 'publish'
git push origin master //将文件push到coding

完成以上操作后,你的博客代码就已经成功托管到coding上了,下面需要去服务器端配置环境,实现博客发布。

在服务器上配置环境

  1. 首先需要从coding上将博客代码pull下来,当然添加ssh公钥什么的和上面一样。
1
2
3
4
5
 
mkdir hexo
git init
git remote add origin git@git.coding.net:someone/hexo-blog.git
git pull origin master
  1. 服务器端也需要安装hexo什么的,这里也不赘述了。
  2. 这时你在hexo目录下执行hexo s,然后地址栏里输服务器ip:4000,检测是否能够正常显示。
  3. 下面就轮到nginx上场了,它是一个轻量级的服务器,以擅长高并发收到广泛欢迎。这时现在你的服务器上装上nginx(腾讯云主机CentOS的话自带),具体方法一搜一大把。
    安装完成之后启动nginxsudo systemctl enable nginx,这时可以浏览器地址栏输入服务器ip,看下是否出现“Welcome”,是的话说明安装正常了。
    接下来,利用nginx作为你博客的服务器,在/etc/nginx/conf.d/中创建一个配置文件,比如hexo.conf,
    然后编辑配置如下:
hexo.conf
1
2
3
4
5
6
7
8
9
 
server {
listen 80;
server_name lunarnai.cn www.lunarnai.cn; #这里填你的域名
location / {
root /root/lublog/public; # 这里填写你的网站用hexo生成的静态文件的路径
index index.html;
}
}

然后执行nginx -s reload重载配置,接下来访问lunarnai.cn就能看到博客了(当然你还要在腾讯云平台上设置域名解析)。如果此时页面显示403的话,很可能是你上面配置中root路径的权限问题,利用chmod就可以解决了。

自动化配置

那么如果一路做到这里正常的话,这个博客就算做好了,但是整个workflow有些繁琐。本地写markdown博客,检查调试 -> push到 coding -> 登录服务器pull下来 -> hexo g生成最新的文件。
写一个博客要经过4个步骤,显然有些懒癌患者就不太想写了。
这里我们需要webhook来 帮忙进行自动部署了。
此时,因为之前已经在服务器端进行了配置所以我们只要:

  1. 在coding上设置webhooks。
  2. 在服务器端配置接收请求的服务。
    第一步,在coding项目设置->设置->webhooks中新建一个hook,url就填https://www.yoursite.com:4002/webhooks/push/123好了,这里4002是服务器端的监听接口,后面的123纯粹当做验证token用。
    这一步完成后,我们本地撰写好博客后push到coding上去,coding发现有push,就会向那个url发送一个请求。
    接下来,需要设置服务器端接收请求的动作。
    这里随便用什么语言都行,我直接就抄了之前一个博主写的js,在你的hexo博客目录下新建webhooks.js
webhooks.js
1
2
3
4
5
6
7
8
9
10
11
12
 
var http = require('http')
var exec = require('child_process').exec

http.createServer(function (req, res) {
// 该路径与WebHooks中的路径部分需要完全匹配,实现简易的授权认证。
if(req.url === '/webhooks/push/123'){
// 如果url匹配,表示认证通过,则执行 sh ./deploy.sh
exec('sh ./deploy.sh')
}
res.end()
}).listen(4002) // 监听接口和coding上设置的一样

那么服务器端接收到请求后就会执行deploy.sh脚本如下:

1
2
3
 
git pull origin master
hexo g

然后在服务器中启动nodejs脚本就行了node ./webhooks.js(这里也可以用pm2后台运行)

至此,博客就大功告成~(≧▽≦)/~。

参考资料

在搭建过程中参考了之前各位博主的一些经验:

  1. Hexo快速搭建静态博客并实现远程VPS自动部署
  2. 使用Nginx部署Hexo站点
  3. 在搬瓦工 VPS 上搭建 Hexo