静态博客的部署

最近把 hexo 博客迁移到了腾讯云,中途折腾了很久,算是有了一些经验。正好把静态博客的部署问题总结一下。

本文涉及到的绑定自定义域名,都是指在国内备案过的域名。国内服务,没有备案不让用的。

博客的分类

静态博客主要是通过工具直接生成博客 html,常见的有 jekyll,hexo 两种。

其他动态博客,比如 WordPress,typecho 等,都是要数据库的动态博客,不在本次考虑范围之内。因为这种博客必须要有 PHP 或类似的环境以及数据库,成本比静态博客高很多。

这次的内容主要针对静态博客。

静态博客的部署方案

对于静态博客,可玩的点并不多。主要有:

  • 静态文件放在那里?对象存储?静态虚拟主机?全全托管?
  • 能否直接配置自定义域名?
  • 是否可以配置 HTTPS?
  • 是否走CDN加速了?

静态文件放在那里

全全托管

现在这种提供服务器,你只需要上传文章,还有配置主题文件的服务商不多了,但是还要提一下。这种普遍价格最高,而且定制难度较大。好处就是只要不跑路,博客算是比较踏实。

虚拟主机

博客生成的静态文件,很久以前是需要放到虚拟主机上的。通过 FTP 之类可以直接上传。基本上都可以绑定自定义域名,但是 HTTPS 就未必了。

这种方案,成本稍高。大概一年不到100块,能找到一个静态资源虚拟主机或者低廉的 PHP 虚拟主机。不过近些年来感觉很难找了,因为很少有提供低配虚拟主机的。

我用过阿里云的共享 PHP 虚拟主机,一年 68 块左右,博客没什么访问量,每年仍会因为访问量过大被强制关闭 2 次左右。所以不太推荐这种方案了。

云对象存储

对象存储是近些年才推出的概念,简单说就是可以放置文件。大部分云平台允许开启网站模式,进而直接变成了静态资源服务器。

不过各大平台良莠不齐,我需要特殊说说用过的一些。要说明一下,所有平台的对象存储都很快,即便不走 CDN,作为博客来用很足够了。不过个别平台不支持绑定域名,这意味着你必须同时使用他们家的CDN(比如七牛云),或者不支持上传 HTTPS,你必须用他们家的CDN来实现 HTTPS(比如腾讯云)。

自定义域名和 HTTPS 配置

首先我用的是阿里云,本来直接用对象存储非常好,支持自定义域名,还能上传 HTTPS 证书,一个对象存储直接搞定了博客。但是我发现他们平台有 “bug”,只能根节点文件自动匹配到 index.html 文件,子目录是不支持的,会报错。

在我用 jekyll 自制主题时候,所有链接都是 index.html 结尾,也就规避了问题。但是换成了 hexo 并选择了一个主题后,发现主题不能定制!这就意味我不能用阿里云对象存储了。

现在,我换成了腾讯云。解决了子目录不能默认访问 index.html 的问题。腾讯云也是巧解方案,他们把标准对象存储和网站模式通过域名彻底分开了,所以没有阿里云这个问题。

不过腾讯云遇到了新的问题。他们的对象存储不支持上传 HTTPS 证书,必须配合 CDN 来实现。

一般来讲,哪家的对象存储,就要用他们自己家的 CDN。虽然不是强制,但是不是一家的服务,可能会出现各种“不兼容”情况。

开启腾讯云 CDN 后,最主要的影响就是博客一旦修改,就必须去主动刷新 CDN,否则博客默认 CDN 会缓存很久。当然新的文章是不用刷新的。虽然可以把 CDN 缓存设置很短,但是不停地回源对象存储,成本就上升了。所以我还是推荐手工刷新 CDN。

最后,我把博客图片都放到了七牛云,其实最早是因为它有对个人的服务,别的厂商一开始不开发个人业务,所以就这样一直用下来了。据说,七牛云都是租用阿里等大平台的企业级云服务,所以在各个地区速度几乎都是最快的(个人用的阿里云,是个人版的,所以是没有企业版快的)。不过费用上也是最贵的。而且七牛云不太推荐放网站,会遇到和阿里云一样的问题!

虽然我没有用过百度云、华为云、金山云等,但是也基本上看过了。可能百度云还算好一点,其他云平台普遍价格高,不太适合个人用户。

平台 工具 自定义域名 自定义HTTPS 子目录index.html解析
阿里云 通过命令行工具支持FTP 支持 支持 不支持
腾讯云 类似网盘工具,可申请开通FTP 支持 需要通过CDN支持 支持
七牛云 好像只有网页 不支持 需要通过CDN支持 疑似不支持

还有一个问题也很重要,那就是如何把静态资源部署到对象存储中。

阿里云提供官方命令行工具,开启后可以虚拟一个本地 FTP 服务器,虽然不能完整支持 FTP,但是常规的上传和下载都是可以的。我之前很喜欢用 beyond compare 连接,方便比对文件,每次增量部署。

腾讯云默认情况下提供一个类似百度网盘的软件,虽然没有 FTP 用着舒服,但好在还算省事,先全量删除博客文件,再重新部署,根据我的体验,唯独一点不好就是操作响应速度不快,有时候感觉和卡死类似。形象一点来说就是,明明上传了文件,却看不到,过一会又看到了。

虽然工具可能有欠缺,但单就部署来讲,还是推荐这两个平台,因为比如 hexo 就有对应的部署插件可以解决。

CDN 加速

如果博客访问量不是特别大,或者图片资源没那么多,我建议 CDN 还是能不用就不用。用了可能反而麻烦。

而且本身大平台的云服务,没有 CDN 的加持各地访问速度都还尚可。就算是用了 CDN,也是个人版服务,国内也就顶多给你不超过 30 个节点。提升效果没有那么显著。

当然如果你访问量大,我建议还是配上 CDN。如果图片资源多,我认为应该图片等单独部署,和博客分开。比如上传图床,或者和我一样用七牛云。

方案小结

考虑到上手难度和费用,基本上就是阿里云和腾讯云了。其他平台倒不是不能用,可能会遇到费用高、遇到小问题的情况。

如果博客是自定义的,能保证所有连接都可以对应到文件(而不是目录),我还是比较推荐阿里云的,感觉速度要比腾讯云快一点。

其他情况还是选择腾讯云吧,如果不用 HTTPS,那么也可以不开通 CDN。可以省点事。

技巧诡计

最后放一个小技巧。阿里云的。

所有云平台,至少我试过很多,都不支持绑定没有备案的域名。

但是阿里云,如果你选择对象存储为非大陆地区的服务,是可以绑定没有备案的域名的。根据经验,选择香港是不错的。

但是阿里云的 CDN 就不要想了,国内 CDN 还是要域名备案的。

所以如果没有备案,那么只能选择非大陆地区的对象存储,这可能是唯一的解法。

–END–