hexo + gitlab 服务隐藏静态文件

2018-08-01 12:42

前情提要#

由于之前一直托管博客的网站 https://bitcron.com/ 无法更新证书,而该网站的 Let’s Encrypt 自动脚本又挂掉不能用了(这网站该不会凉了吧(小声)。我决定抽空把博客迁移到纯静态博客上。

之前有过使用 hexo 的经验,又加上 node 的生态在个人博客这里又异常繁荣(大量node相关的第三方插件可用),还是决定迁移过来了。

Github 被微软收购后,虽然其CEO直接升级成为 Billionaire,但我对他的好感降到了冰点,目前仅留了几个开源的小项目和之前fork的项目在上面,私有库的付费计划已经停止了。现在把大部分代码及私有库都转移到了 gitlab 上。于是使用 gitlab pages + hexo 的初步技术选型就已经定下来了。

顺利进行#

首先,跟着 hexo 官方的文档,一步一步安装,将大的框架搭起来。再配合 GitLab CI 来自动生成及部署静态页面。一切看起来异常的简单。

遇到问题#

在 gitlab 上的 pages 选项中,很容易就找得到绑定域名和给域名设置证书的选项。在vps上安装 Let’s Encrypt的命令行工具 certbot
按照官方的文档:

1
certbot certonly --manual -d www.ogura.io

下一步,下一步,直到停在需要验证网站所有权的地方:

访问 http://www.ogura.io/.well-known/acme-challenge/JDbJQP50-rI3LgKGLy7U7EhOkSxr73P0bP2UeTIh1yE 得到指定内容的静态文件。

在自己的 VPS 上做静态文件服务再简单不过了,不过如果是在 gitlab + hexo 的情形下又该怎么做呢。

经过试验得知,在 source/ 文件夹下的文件会被直接扔到 public/ 文件夹下,但特殊情况是,.well-known 文件夹是个隐藏文件夹,
hexo generate 在生成静态文件的时候,会忽略隐藏文件和隐藏文件夹。

gitlab pages 中举例了一个 jekyll 中的解决方案是使用一个 xxx.md 的文件,其内容为:

1
2
3
4
5
6
---
layout: null
permalink: /.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
---

5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U

但是在 hexo 中(起码是 next 这个主题下,没有 null 这个 layout),而且生成的链接中带有 .html 后缀,无法通过校验。

折腾了半天自定义layout,也没弄成功。
最终在 .gitlab-ci.yml 中,加了一行手动 copy 的命令,也就成功了。(折腾了半个小时layout模版= =)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# This file is a template, and might need editing before it works on your project.
# Full project: https://gitlab.com/pages/hexo
image: node:6.10.0

pages:
script:
- npm install
- ./node_modules/hexo/bin/hexo generate
- /bin/cp -rv static/.well-known public/
- ./node_modules/.bin/hexo algolia
artifacts:
paths:
- public
cache:
paths:
- node_modules
key: project
only:
- master

标签:hexo

点击加载Disqus评论
Creative Commons © 2013 — 2018 xiao_cang | Theme based on fzheng.me & NexT | Hosted by Netlify