前言
时光真的好快哦!转眼间,我就从学生成为了一名上班族,走上了工作岗位。而我能够从事网络相关的工作,我本人是非常意外的。我想我大概率会成为一名软件研发工程师吧,但我的确做上了网络相关的工作。我想,这的确就是我和网络有缘吧。
经历了刚刚入职时什么都不会、业务做不完需要经常加班的阵痛期,我现在可以拥有更多的时间来思考、学习、输出,况且折腾一个新的blog就是继续熟悉网络、云计算的一个极好现实教程,于是我就有了再开一套博客的想法。我之前的博客是基于Wordpress的,然而即便用了Markdown的插件,也需要对每篇文章进行一些微调。恰好我在2020年暑期基于Github Pages搭建过另一套博客,所以我这次想,能不能再搞一套服务器,点滴记录我工作以后的成长。
那么,就让我们开始吧!
本地搭建Hexo
安装Hexo
第一步就是搭建本地的Hexo。由于我是MacBook,通过Homebrew安装一些前置项即可:
1 | brew install git |
如果想要用Homebrew安装最新版的node.js,如下:
1 | # Download and install Homebrew |
有一个小坑,如果你的系统里有多个版本的node.js,那么可能用的是老版本的,需要你调整PATH让homebrew安装的node.js优先级最高:
1 | which -a node # 如果你观察到了多个版本,则可能需要调整 |
接着就可以安装Hexo了:
1 | npm install -g hexo-cli |
我们可以验证是否安装成功:
1 | hexo --version |
其输出了版本,证明搭建成功。
本地Hexo初始化
我们找个地方来存放Hexo的文章吧!我想放在/Users/caiguu/Desktop/newblog里,作为我的新博客的本地存储地。
我执行了如下命令:
1 | cd ~/Desktop |
按理来说,就会在newblog下新建一个博客了。然而,我遇到了证书过期的报错:
error An unexpected error occurred: “https://registry.npm.taobao.org/hexo: certificate has expired”.
WARN Failed to install dependencies. Please run ‘npm install’ in “/Users/caiguu/newblog” folder.
很显然,这个网址可能不对了。定位是镜像源的问题。我们换个源:
1 | npm config get registry |
这次就没再报错了!看到了成功提示:
这是我们newblog文件夹下能够看到的东西:
接下来,我们让这个博客运行在本地!执行:
1 | npm install |
如果成功了,会有下面的显示:

本地Hexo验证
我们打开这个网址看看:

说明本地运行Hexo成功了!
至此,本地的部署就完成了,下面将进行云服务器的配置。
云服务器配置
创建SSH密钥对
我们的云服务器创建后还没登录过,我们可以通过腾讯云默认提供的方案进行登录,不过我想在本地就能远程登录,这样我们可以利用SSH来做。我们先去创建一个SSH密钥对,并下载、保存好私钥,然后用密钥绑定实例。

需要注意的是,绑定密钥对需要在实例关机的情况下操作,因此务必最开始就做好应有的绑定。而且,使用了密钥就不能单纯通过密码来进行登录了。密钥对绑定完之后,我们需要在本地电脑进行如下操作:
1 | chmod 400 <私钥文件> |
以赋予自己读权限。
于是我们就可以登录了:
1 | ssh -i <私钥文件> root@<云服务器IP> |

设置完SSH登录,此时就可以安全地访问轻量级服务器了。虽然Cent OS的包管理工具是yum,但是dnf是它的未来。
我们先做一些基础操作:
1 | # 更新系统 |

创建裸Git
接下来,我们为了能够在服务器上获取并解析出这些页面文件,我们需要创建一个裸Git并设置一个钩子。
1 | # 创建博客文件存放目录 |
这个hooks文件是个新文件,我们可以直接用vim进行编辑。


我们先暂且不用管它做了什么,原理会在后面解释。我们还要给这个脚本一个可以执行的权限:
1 | chmod +x /root/blog.git/hooks/post-receive |
可以看到,已经具备了执行权限。

Nginx配置(测试页面)
接下来我们创建一个nginx配置文件:
1 | vim /etc/nginx/conf.d/hexo.conf |
1 | server { |
我们可以看到此云服务器的80端口默认开放的:

然后我们去这个默认路径/var/www/hexo里加一个默认页面index.html:

我们执行如下命令:
1 | nginx -t |
所以我们可以做一下测试:

为什么是这个?因为有默认配置!默认配置存在了/etc/nginx/nginx.conf下面,把默认的这个注释掉,就不会存在冲突了。
不过这至少说明了Nginx服务成功。
注释掉默认配置后,我们的配置就生效了,生效效果如下:

至此,我们确认nginx已经能够顺利显示我们想要的静态页面了。
当然了,如果云服务器申请了IPv6地址,那么在有IPv6 GLA地址的设备上,也是可以通过IPv6进行访问的。对于腾讯云轻量服务器来说,这个地址必须主动申请,之后会给你分配一个GLA地址。想用IPv6进行访问,同时需要你的设备、你所在的网络和云服务器支持。

至此,我们服务器的v4和v6双栈都已经顺利配置了!恭喜!
至于Nginx的结构如何,里面是怎么组织的,后面会单独开一篇博文去讲讲。
博客项目Git与服务器裸Git联动
GitHub项目与本地同步
我们接下来要做的事情就是让本地的Hexo能够同步到服务器上。我们先创建一个GitHub项目:
接着我们在本地把Hexo文件夹设置为Git文件夹。
1 | # 进入你的博客目录 |
接着我们配置一下本地Git和远程Git的同步。我已经预先配置了SSH Key来登录GitHub。
1 | git remote add origin git@github.com:<我的GitHub账号>/blog.git |

是这个,不要搞错哦。可以看到顺利完成了操作:

1 | # 查看当前文件状态(确认要提交的文件) |
最后看看提交效果:
我们完成了同步,这样以后就可以用GitHub来管理博客内容了。
与云服务器裸Git联动
接着,我们希望能够通过deploy,让云服务器获取到我们需要的静态文件。所以,执行如下操作:
1 | cd ~/Desktop/newblog |
接着,去Hexo里配置云服务器的信息。编辑_config.yml文件,找到Deployment部分,按照如下配置:
1 | deploy: |
接下来,我们在本地安装一个插件:npm install hexo-deployer-git --save,然后执行hexo deploy,这样以后每次hexo deploy,就会自动同步更新到云服务器上了!

当然,为了方便,我配置了~/.ssh/config,把密钥对的文件路径指定,这样以后只要在本用户下,无论哪个终端应用,都可以直接登录到云服务器上去了。
我们的联动配置大成功!
第一篇Hexo博文
如你所见,这就将是我们的第一篇博文。
这篇文章我预先在本地写的,我们先在Hexo里创建这篇文章。
1 | hexo new post "文章名" |
我们还做了一些其他的基础配置,例如将URL方式按照分类进行组织,而非按照日期。
就这样,第一篇博文也就是我搭建这个博客的经历啦,欢迎大家常来看看!