Hugo环境搭建

轻松搞定博客系统

[toc]

Hugo是什么?

Hugo以速度快著称,号称是世界上最快的网站生成框架。

tl;dr

当前放弃了WordPress作为博客的选择!😂😂 体验不够优雅顺滑!其技术栈复杂,用到了mysql, php-fpm, openresty以及wordpress本身,而且wordpress本身一大堆的插件,2U2G的机器不足以容纳如此重的内容;

下述文档仅记录Hugo环境搭建过程需要注意的内容,以备后续查阅需要。

FAQ

  1. 关于nginx ssl 证书的获取

    当前的方案是参考在阿里云申请的免费ssl证书1,证书由于是有有效期的,到期了还得去阿里云重新申请证书并且绑定,有点繁琐;当前申请的证书是在浏览器访问的时候并不会出现不安全的提示。

    为了避免繁琐的证书到期而切换,希望有一种方法能够自动化实现证书的定期更新,因而找到了另外在skyao的博客中提及的内容2(有待后续进一步验证)

  2. 对于nginx的80端口和443端口

    对于服务能够对外提供既能够提供https, 也能够提供http服务;默认https走的443端口,而http走的80端口,可以按照如下的配置使http的请求都会跳转到对应的https

    server {
        listen 80;
        server_name liaolile.com www.liaolile.com;
        rewrite ^(.*)$  https://$host$1 permanent;
    }
    
  3. 关于当前Hugo国际化i18n配置

    需要在hugo的根目录下进行i18n目录的创建,并且在其中加上对应的zh.toml配置文件,用于国际化内容替换

  4. 关于高效的写作环境 使用的是Typora + PicGo + SM.MS 三个配合进行使用3,其中Typora为Markdown写作编辑器,体验不错;PicGo主要用于处理当前Markdown文档中图片自动落床的问题,其会把Markdown文档中插入的图片自动上传到SM.MS图床服务账号中,为啥不选gitee作为图床呢,当前遇到了一些坑,服务端一直报403。

  5. 关于hugo academic主题

    • acadmic主题的地址是:start-hugo-academic,类似于springboot的一键式集成,其对应的主题实际是在go.mod中指定的github.com/wowchemy/wowchemy-hugo-modules/wowchemy/v5 ,主题会下载到本地,因而主题的定制需要在对应的本地文件中。

      image-20220521094822726

      • 该wowchemy/v5主题中很多资源引用的cdn.jsdelivr.net的资源,但是目前其资源由于dns污染,在中国加载有问题4,所以需要切换对静态资源加载的地址,主要的资源地址配置在/opt/blog/hugo-theme/wowchemy/wowchemy-hugo-modules/wowchemy/data/assets.toml文件中,其中上述加粗/opt/blog/hugo-theme是对应的主题的本地路径。该文件中主要有两种资源:cdn.jsdelivr.net/npm和cdn.jsdelivr.net/gh资源(github静态资源托管),其中https://cdn.jsdelivr.net/npm资源替换为https://unpkg.com/, cdn.jsdelivr.net/gh暂时找不到对应的替换cdn地址,只能去github上下载对应的源码文件并且托管到自身的服务器上,如下是参考:

        image-20220521100110619
      • 对于出现替换本地文件后出现Failed to find a valid digest in the ‘integrity’ attribute for resource ‘https://liaolile.com/js/local/cdn.jsdelivr.net/gh/krisk/Fuse@v3.2.1/dist/fuse.min.js' with computed SHA-512 integrity ‘tm9sNooEMtnClt+Dyrr0YPWwlOdUSm9/y97x0WjXHahG7QyPXs334pApMrY2cxitrW5zZIDCHveVvvgHfJS9uQ==’. The resource has been blocked.问题,直接找到对应的文件的sri值,替换为对应的SHA-512值即可。

  6. 关于分享集成

    • 对于share.js的集成,参考相关的帖子5,同时对应share.js的github地址可供相关的定制使用参考:overtrue/share.js: 一键分享到微博、微信。界面相关的一些其他的定制,均可参考该帖子,方法类似;当前微信的分享标签在手机端是不显示的,因为手机端的app一般都有分享的控件直接进行控制;网页版效果如下:

      image-20220522213142045

      修改/opt/blog/hugo-theme/wowchemy/wowchemy-hugo-modules/wowchemy/layouts/partials/page_footer.html,放上自己定义的share.html嵌入;

      image-20220527230558677
    • 关于author微信二维码的图片,当前尚无现有的方法进行集成,需要自行写js以及插入到对应的html界面中。获取当前微信头像的悬浮事件,然后绑定图像呈现在对应的下方;当前所有的社交icon均在network-icon class中定义的(当前有两个地方引用,一个是author的个人简介部分,一个是每篇文章的末尾介绍),需要把相关的js加载的,并且把二维码渲染绑定到.fa-weixin上。如下图:

      文章后面的社交媒体账号信息

      对应的需要修改的html对应的文件是:/opt/blog/hugo-theme/wowchemy/wowchemy-hugo-modules/wowchemy/layouts/partials/social_link.html

      新增下述红色内容:

      <script src="/js/jquery.js"></script>
      <script src="/js/self.js"></script>
      
      image-20220527225350013 个人简介的社交媒体账号信息

      对应的需要修改的html对应的文件是:/opt/blog/hugo-theme/wowchemy/wowchemy-hugo-modules/wowchemy/layouts/partials/widgets/about.html,也是新增自定的js脚本

      image-20220527230303178
  7. 关于文章内容加密

    Hugo-Encryptor6 是一款能够帮助作者保护文章内容的工具。它使用 AES-256 来对文章的内容进行加密,并且通过在文章中嵌入内联 JavaScript 代码来验证读者输入的密码是否正确。没有正确的文章密码,读者将无法看到文章的加密内容7

    遇到如下的问题:

    image-20220812001935062

参考


  1. 阿里云免费SSL证书配置(图文详解)_老吉丶的博客-CSDN博客_阿里云免费ssl证书 ↩︎

  2. 开启HTTPS | Hugo学习笔记 (skyao.io) ↩︎

  3. 使用Gitee作为Markdown的图床_小锋学长生活大爆炸的博客 ↩︎

  4. jsdelivr炸了如何解决|用这些免费cdn_地域男孩的博客-CSDN博客_jsdelivr ↩︎

  5. Hugo集成Share.js一键分享插件 | 黄忠德的博客 (huangzhongde.cn) ↩︎

  6. hugo_encryptor/README-zh_CN.md at master · Li4n0/hugo_encryptor (github.com) ↩︎

  7. 这是一个Hugo文章加密工具 (0n0.fun) ↩︎

Liao lile
Liao lile
架构师 | 系统工程师

目前主要方向在微服务、服务网格等云原生相关领域技术