在自己服务器上搭建Hexo静态博客

先说说整个流程。

打算用 hexo 搭建一个静态博客,每次写完文章,把 hexo 的文件同步到 GitLab 上,再把 hexo 生成的 public 文件上传到自己的服务器上,以便从外网访问博客。

Hexo

搭建这块不准备多说,网上教程很多,差不多就是 hexo init,然后改个主题,配置一下就可以了。

当然 hexo 还可以配合上“多说”等的评论系统,修改页面,添加 RSS 等。

GitLab

之所以选择上传到Git,还是为了方便。

  • 把文件放到服务器上(GitLab、GitHub等),比较安全,主要目的就是把 hexo 的 source 目录(包含自己所有文章的目录做好备份)。如果在自己的服务器上搭建 Git 服务也是可以的,这个随意。

  • 用 Git 同时可以做好版本管理,方便后续的回滚,也可以看到每次提交的目的。

做法很简单,就是在 hexo 的根目录下用 Git 管理,Hexo 生成的目录已经包含了 .gitignore 文件,把 public 等目录排除在外。如果你只需要上传 source 目录,也可以对其进行修改。

提交时就是普通的 Git 提交代码

1
2
3
git add .
git commit
git push origin master

这里还有一个主题的问题,一般 themes 下的主题都是用 git clone 下载下来的,要同时进行两份 Git 的管理也是可以的。

同步到服务器

在 hexo 根目录下的 _config.yml 文件中,找到 deploy 模块,修改如下

1
2
3
4
5
6
7
deploy:
type: rsync
host: 你的服务器IP地址
user: root
root: 你要同步到的路径,比如/homepage/blog
port: 22
delete: false

这样,每次使用 hexo deploy 的时候 public 目录就会同步到服务器上,当然同步需要花费一点时间,特别是使用海外服务器的时候。

部署

最后,是在服务器上部署访问刚刚搭建好的博客。

首先要在 DNSPod 上添加一条主机记录为 blog 的记录,便于我们通过blog.chenkun.life 访问博客。

接下来配置 nginx 文件。

和之前搭建 ghost 的流程差不多。

添加文件 /etc/nginx/sites-available/blog.conf

1
2
3
4
5
6
7
server {
listen 80;
server_name chenkun.life blog.chenkun.life;
root /homepage/blog/;
index index.html;
charset utf-8;
}

这里的 server_name 添加了两个字段,是为了访问 chenkun.life 和 blog.chenkun.life 的时候都可以同时访问到我们的博客。

然后执行

1
2
3
4
// 配置文件软链接到 sites-enabled 文件夹下
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/blog.conf
// 重启 nginx
sudo service nginx restart

重新访问我们的域名,就可以看到效果啦!

迁移

把之前 ghost 文章迁移到 hexo 的目录下。由于我目前的文章不多,所以直接手动迁移过来了,不过还是有些自动化工具可以做这个事。

自动化

接下来是写完文章后,需要一键执行上面的流程。其实很简单,我们上面的流程全部都是通过命令完成的,所以把命令组合起来 alias 就可以了。

1
alias myhexod="git add .; git commit; git push origin master; hexo g && hexo d;"

把这个命令添加到 .bash_profile 里就可以了。

总结

其实思路理清后一切都很简单。

之所以要迁移到 hexo 还是为了方便管理。虽然 ghost 写起来也很爽,但文章保存在自己的服务器上总是觉得不安全😂,所以还是改为用 hexo 和 git 来管理。

一不小心把旧博客的 source 目录搞丢了……所以后面还需要把以前的 public 目录下的文件进行一次提取,然后补充上标签等才行。真是好事多磨……

参考

部署hexo静态博客到自有服务器

常见问题 - NexT使用文档

NexT主题的配置和优化