什么是hugo?
A fast and modern static website engine。众多的现代静态网站生成器之一,选择它主要是看中安装非常简单,仅仅一个可执行程序。而不像其他更流行的Jekyll之类的需要装一大堆ruby/gem之类的环境才能用,这样大家就不用学习什么依赖关系,包管理等等等等了。
动手试试看吧:
- 打开服务器的管理界面(Virtualmin)备用:https://nnm.jnu.rocks:10000/ (统一用这个入口)
- 以及你自己的网站备用:http://2019000000.nnm.jnu.rocks/ (记得替换成你自己的学号)
- 用VSCode连接到自己的服务器,连接信息在这里:期末作业说明
基础准备:
tmux #首先打这个命令
tmux可以在在终端窗口中运行多个终端会话,即终端复用(terminal multiplexer)。在以下场合会很有用:
- 需要在后台持续运行特定任务
- 网络连接不稳定,远程连接到服务器经常意外中断
常用的tmux命令
- 按ctrl+b,松手,再按英文的双引号,也就是shift+’ # 会看到两个分割的Panel
- ctrl+b之后按方向键 #在Panel之间切换
- ctrl+b之后按英文问号? #查看更多命令
- ctrl+b之后按d #离开tmux,使之在后台继续运行
- tmux ls #列出后台打开的tmux清单
- tmux at -t 编号或名称 #返回之前的tmux界面
在其中任意一个Panel输入下面的命令来试试。
初始化工作目录并安装第一个主题:
cd #进入用户主目录
hugo new site lol #创建名为lol的工作目录,当然也可以是别的名字
cd lol #进入工作目录
cd themes #进入主题目录
git clone https://github.com/spf13/hyde.git #下载hyde这个主题
cd ~/lol #返回工作目录,注意之后的命令都是在此目录下输入的
直接使用VSCode编辑网站配置文件,也就是“lol”目录下的“config.toml”这个文件。当然你更喜欢命令行也可以用vim或者其他编辑器,不限麻烦也可以去Virtualmin的“File Manager”里面修改
baseURL = "http://2019000000.nnm.jnu.rocks/hugo/" #你的网址
languageCode = "en-us" #语言,先不用改
title = "yet another hugo sample" # 网站标题
theme = "hyde" #你选用的主题
开始创作内容
hugo new test.md #创建一个新的页面,注意编辑时删除draft状态的行才会真的发布
hugo new post/2020.md #创建一个带路径的页面
然后去编辑这些新生成的文件,同样可以直接用VSCode或者通过命令行方式或者Virtualmin的“File Manager”……
注意hugo默认使用Markdown语言进行内容编写:
- 什么是Markdown
- 同时推荐上面这个教程所在的网络服务:作业部落
- Markdown的更多应用,例如:微信排版进化论–终于找到一种优雅的写作方式
当然你也可以在其他的任何Markdown编辑器比如说Typora里面写好了粘贴过来。
调试
hugo server
应该会在VSCode的右下角看到类似这样的提示:

选择“在编辑器中预览”,此时你就可以通过VSCode来查看网站内容和配置的实时变化了,注意尽管此时VSCode的“简易浏览器”的地址栏中显示的域名是localhost,但实际上访问的是远程服务器的“localhost”。

甚至你可以选择在终端的输出中按提示按住Ctrl单击链接,在浏览器中也可以打开。这是因为VSCode自动做了远程到本地的端口转发。单击“终端”标签旁的“端口”就可以看到:

发布:
当通过实时调试看到没什么问题,符合你的预期的时候
hugo #自动将内容渲染成html,并放在工作目录的public目录下
rm -Rf ~/public_html/hugo/ #把之前复制过去的旧版本干掉
cp -R public/ ~/public_html/hugo/ #将生成的站点网页文件夹复制到域名对应的系统目录下的hugo子目录rm -Rf ~/public_html/hugo/
接下来就可以用域名来访问了,用浏览器打开http://2019000000.nnm.jnu.rocks/hugo #注意替换成你自己的学号!
每次更新的时候嫌麻烦,将上面三行命令合成一行搞定的话:
hugo -v && rm -Rf ~/public_html/hugo/ && cp -Rf public/ ~/public_html/hugo/ #生成并强行复制,直接覆盖上次的文件
常见问题:
- 配置没错,但是无法生成静态页面,报错类似:“Error building site: TOCSS: failed to transform “sass/style.sass” (text/x-sass): resource “sass/hugo/sass/style.sass_48b060fe05b0a273d182ef83c0605941” not found in file cache”
- 原因:使用了某些特殊的主题,使用了sass
- 解决思路:联系管理员安装扩展版的HUGO
- 本地图片显示不出来
- 原因:没有理解HUGO处理本地图片的机制
- 解决思路:冷静观察对比渲染后生成的具体页面的html里面那个图片显示不出的xx的路径和你的原始md里面写的图片路径,不难发现:
- 绝对路径/对应的是域名/,无论你的HUGO的BaseURL是否是在/或某个子目录中
- 相对路径的起始点是该html所在的路径
- 正确的做法:
- 图片本身放在工作目录的static子目录下,也可以考虑放在static/media、static/image之类的下级目录里面
- 这些图片在打hugo命令后,会被自动复制到public中
- md中根据未来你的HUGO的实际网址来写图片的路径
- 最终网址如果是网站域名的根目录,那么图片链接就以/开头
- 最终网址如果是某个子目录例如作业要求的hugo,那么图片链接就以/hugo开头
- 打开缓慢/排版错位:
- 原因:多半是静态资源(JS/CSS/字体)等没有正确加载造成
- 定位:使用浏览器调试工具,Network面板,观察加载的资源来自哪些域名。
- 理应在站内的资源,请求地址错误
- 站外的资源(往往是一些公共托管库中的js或者google字体等)如果所在网络不能正常访问,就会诱发各种问题,比如等到超时才继续加载网站页面或导致功能失效、排版错位等
- 解决思路:
- 仔细检查配置文件,修改到正确的写法
- 去除主题中对相应资源的引用(对于字体)或指向国内镜像(对于js)
- 具体操作:去Terminal,定位到HUGO工作目录的主题目录内,用grep命令查找“定位”步骤发现的域名,找到引用特定资源的文件和行编号,进行处理
- js公共库可以考虑更换为国内镜像地址
- 字体等资源可以先注释掉,重新发布观察没有问题,可考虑删除
参考资源:
- 一份更详细(适合自己玩)的学习笔记:https://skyao.io/learning-hugo/
- Hugo 从入门到会用:https://olowolo.com/post/hugo-quick-start/
- HUGO官网:https://gohugo.io/
- 机翻官方文档:https://s0gohugo0io.icopy.site/documentation/
- 中文文档:https://www.rectcircle.cn/series/hugo/
- 主题展示:https://themes.gohugo.io/
本周作业:
参考本教程,结合上方对原理解释更清楚的相关资源,尝试在作业服务器上使用HUGO自选主题创建一个网站,并对游客可见。截止时间是week15上课前,即2021-06-07之前。具体要求:
- 访问网址:最终此网站内容不要放在域名根目录,而要在 http://你的域名/hugo,例如http://2019000000.nnm.jnu.rocks/hugo/
- 至少包含3个以上的内容页面
- 文章正文中,至少要包含1个超链接、1张本地图片