因为工作生活学习等种种方面的问题,差不多快两年没有折腾博客了,之前的 wordpress 上放了几篇随手的笔记,但是后来由于种种原因,没有精力进行维护和更新,但是也舍不得关停,每个月续续费而已。在这段时间里面也接触了 markdown 和 hexo,轻量级的页面,轻量级的部署,给我留下了不少印象,于是选用了 hexo 从头开始。花了一个晚上给部署了起来,这里做一简单记录。
快速上手和常见问题
下载安装及基本使用
这里参考官方文档即可。
切换主题
选择使用 Next 主题替换默认的 landscape 主题,具体可以参考 Next 官方文档。后续的操作均在 Next 主题中进行操作。
部署至 github 并绑定自己的域名
部署可以参考这篇文档进行部署,没什么难度。唯一要注意的是对于多账号多博客而言,需要配置一下私钥的使用范围。具体可以参考多个 SSH KEY 的管理
第一个账号的 ssh key 增加方式直接参考 github 官方文档进行操作即可:
生成公私钥对
ssh-keygen -t rsa -b 4096 -C "[email protected]"
,然后添加私钥至 ssh 管理器ssh-add ~/.ssh/id_rsa
,然后增加至 github 上即可sudo apt-get install xclip
,xclip -sel clip < ~/.ssh/id_rsa.pub
。在博客目录下配置时也一切正常,user.name 和 user.email 都设置为局部参数。第二个账号在生成公私钥对时需额外指定名称,否则会出现名称重复的问题。
1234ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/secondssh-add ~/.ssh/second # 新增私钥ssh-add -l # 确认是否添加成功,此时应有两个私钥xclip -sel clip < ~/.ssh/second_rsa.pub # 复制公钥,打开 github 设置并输入复制的公钥然后在 ~/.ssh/ 目录下新建 config 文件,用于配置各个公私钥对应的主机
12345678910# Default github user([email protected]) 默认配置,一般可以省略Host github.comHostname github.comUser gitIdentityfile ~/.ssh/github# second user([email protected]) 给一个新的Host称呼Host second.github.com // 主机名字,不能重名HostName github.com // 主机所在域名或IPUser git // 用户名称IdentityFile C:/Users/username/.ssh/id_rsa_second // 私钥路径配置完成后测试连接情况
ssh -T [email protected]
,若能正常连接,则在使用第二个账号时使用方式类似git clone [email protected]:username/repo.git
,亦即将本应当为 github.com 的部分设置为与我们的 config 文件中的 Host 一致的 second.github.com。
另外一个问题,由于需要绑定自定义域名,需要明确转发规则。在正确设置了绑定的自定义域名,并在域名管理器中修改 DNS 解析后,即可正常访问。但是,会发现每次使用 hexo d
命令进行部署后,都需要在 github repo 的 setting 中重新设置一次自定义域名绑定,这个可以通过在 source 目录下新增 CNAME 文件,在其中写上需要的自定义域名如 abc.com,以后重新部署时就不会有这个问题了。
最后,由于 github 不支持自定义域名的 https 协议,可以使用 cloudflare 进行加速并启用对 https 的支持。这个也有很多教程,注册 cloudflare 后,添加站点即可完成。在过程中需要按照 cloudflare 的指示,在域名服务商处修改默认的 dns 服务器。
增加 UV、PV 统计功能
使用的 Next 主题早已帮我们提供了内置的选项,在 themes/next/_config.yml 文件中进行配置即可。配置 enable 使用不蒜子统计站点的 UV 值,注册 leancloud 账号获取 app_id 和 app_key 来统计页面的 PV 值。注意这里由于 leancloud 的 app_id 和 app_key 都会出现在前端,因此需要配置好对应 leancloud 应用的安全权限,具体可以参考此处。
增加评论功能
虽然之前不用 hexo,但是多说关闭事件也略有耳闻,为了保证可靠性,决定使用基于 github issues 的 gitcoment 来提供评论服务。具体参考了为 hexo NexT 添加 Gitment 评论插件,摘录如下:
配置样式文件
在 next/source/css/_common/components 目录中新建一个 gitment.styl 的 css 样式文件, 复制以下代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950.gitment_title:hover {color: #fff;background: #0a9caf;background-image: initial;background-position-x: initial;background-position-y: initial;background-size: initial;background-repeat-x: initial;background-repeat-y: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: rgb(10, 156, 175);}.gitment_title {border: 1px solid #0a9caf;border-top-color: rgb(10, 156, 175);border-top-style: solid;border-top-width: 1px;border-right-color: rgb(10, 156, 175);border-right-style: solid;border-right-width: 1px;border-bottom-color: rgb(10, 156, 175);border-bottom-style: solid;border-bottom-width: 1px;border-left-color: rgb(10, 156, 175);border-left-style: solid;border-left-width: 1px;border-image-source: initial;border-image-slice: initial;border-image-width: initial;border-image-outset: initial;border-image-repeat: initial;border-radius: 4px;border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;}.gitment_title {display: inline-block;padding: 0 15px;padding-top: 0px;padding-right: 15px;padding-bottom: 0px;padding-left: 15px;color: #0a9caf;cursor: pointer;font-size: 14px;}添加 gitment 插件。
打开 /next/layout/_partials/comments.swig 文件, 在最后一个 elseif 代码块下面添加 Gitment 的内容。
1234567891011121314151617181920212223242526272829303132333435363738... // 上面内容省略了..{% elseif theme.changyan.appid and theme.changyan.appkey %}<div id="SOHUCS"></div>{% elseif theme.gitment.enable %}<div onclick="showGitment()" id="gitment_title" class="gitment_title">显示 Gitment 评论</div><div id="container" style="display:none"></div><link rel="stylesheet" href="https://imsun.github.io/gitment/style/default.css"><script src="https://imsun.github.io/gitment/dist/gitment.browser.js"></script><script>const myTheme = {render(state, instance) {const container = document.createElement('div');container.lang = "en-US";container.className = 'gitment-container gitment-root-container';container.appendChild(instance.renderHeader(state, instance));container.appendChild(instance.renderEditor(state, instance));container.appendChild(instance.renderComments(state, instance));container.appendChild(instance.renderFooter(state, instance));return container;}}function showGitment() {$("#gitment_title").attr("style", "display:none");$("#container").attr("style", "").addClass("gitment_container");var gitment = new Gitment({id: window.location.pathname,theme: myTheme,owner: '{{ theme.gitment.owner }}',repo: '{{ theme.gitment.repo }}',oauth: {client_id: '{{ theme.gitment.client_id }}',client_secret: '{{ theme.gitment.client_secret }}'}});gitment.render('container');}</script>{% endif %}修改主题配置文件 _config.yml,在评论区添加下列代码,并根据 gitment 文档来添加相应的值。
1234567# Gitment commentsgitment:enable: trueowner: xxxxrepo: xxxxclient_id: xxxxclient_secret: xxxx
更新后本地生效但远端未生效
尝试使用 hexo clean
然后再 hexo d -g
进行部署,浏览器使用 ctrl+F5 强制刷新缓存,再测试应该就正常了。
文章加密
可以使用 hexo-blog-encrypt 对文章进行加密。
细节配置
基本功能都正常后,剩下的就是敲敲打打对博客进行完善了,这时候很有必要把博客的整个体系,以及其配置文件拿出来一个个分析一下,毕竟在过程中已经发现像 next 之类的主题有着强大的第三方插件功能了。下面一个个来分析。
先看站点配置。
站点图标 favicon
支持 16×16,32×32,48×48,64×64
的 ico 文件,将 favicon.ico 放至站点的 sources 文件夹下。
##