前言
静态博客已成为现代技术博客、个人站点和文档系统的热门选择。
本文基于Hugo
Hugo优势
生产的性能好。Hugo是由 Go 语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。
无论是Hugo还是Hexo,本质上都是将master文件通过预定好的模板渲染html文件
环境准备
-
下载golang
-
下载node.js
安装golang
安装hugo之前,先安装好golang,推荐安装最新版本。
安装时选择安装目录为 C:\Users\sky\work\soft\golang
或者 D:\sky\work\soft\golang
。
修改环境变量,将 GOPATH 的值修改为 C:\Users\sky\work\soft\gopath
或者 D:\sky\work\soft\gopath
(默认为 %USERPROFILE%\go)。
安装nodejs/npm
为了使用Google Docsy主题,需要安装nodejs/npm。
在网站下载nodejs
安装时选择安装路径为C:\Users\sky\work\soft\nodejs
或者 D:\sky\work\soft\nodejs
。
安装Hugo
在Hugo Releases页面下载对应操作系统版本的安装包。Hugo官方下载文档
,如hugo_extended_0.150.0_windows-amd64.zip
.下载下来之后,解压缩,将 hugo.exe 文件复制到目录下。
然后修改环境变量,在 Path 中增加这个路径,
验证安装
$ which hugo
、$ hugo version
。
切记由于 hugo和主题之间版本有依赖关系,因此不同主题选择不同版本
打开命令提示符,输入hugo version
来验证安装是否成功。
Hugo安装完成后的配置工作
设置别名
为了方便使用,增加 hugo server 命令的 alias 用来本地编辑时的实时预览: vi ~/.zshrc 增加内容:
|
|
hugo命令行参数说明:
-D: 等同–buildDrafts,标记为 Draft 的内容也会一起构建,方便在本地编写和预览新的暂时未发布的内容。
-F: 等同–buildFuture,发布时间为"未来"(即时间比当前时间还要晚)内容也会一起构建,方便在本地编写和预览新的暂时未发布的内容。 –disableFastRender:当内容修改时,进行完整的重新构建,避免预览的内容不够新 h2/h3/h4 指定了不同的端口,当需要在本地打开多个时,可以使用固定端口而不是随机端口。
设置代理
npm代理
主要是 npm 命令需要代理才能顺利下载文件,比如:安装 PostCSS 要构建或更新站点的 CSS 资源,您还需要PostCSS创建最终资产。
如果您需要安装它,您必须在您的机器上安装最新版本的NodeJS,以便您可以使用npmNode 包管理器。
默认情况npm下,在您运行的目录下安装工具
|
|
如果发生报错,并且查看到如下的错误信息
|
|
解决方式:
|
|
如果遇到报错信息:
|
|
注意修改成自己的IP和端口号
|
|
站点骨架
每个 Hugo 项目都是一个目录,其中的子目录贡献于站点的内容、结构、行为和呈现。
在创建新站点时,Hugo 会生成一个项目骨架。例如,以下命令:
利用hugo new site myblog(此时需要用到hugo.exe,假设存放在bin下),会在bin下生成myblog
|
|
-
config.toml
Hugo的全局配置文件,用于定义站点的基本信息、URL、语言、主题、菜单等。也可以使用config.yaml/config.json
-
content/
存放所有博客文章和页面。每个markdown文件的Front matter中定义标题、日期、草稿状态、标签与分类等信息。
示例文件:
title:"我的第一篇文章"
date:2024-03-21
draft:false
tags:["入门"、“Hugo”]
categories:[“技术博客”]
这里是文章内容
- archetypes/
定义新建内容时所用的模板(原型),方便统一管理文章格式。你可以自定义默认模板以满足特定格式要求
下有模板index.md
|
|
-
layouts/
存放网站页面模板文件,决定网站的外观和布局。主题通常也会提供一套layouts,当你需要自定义时可以自此覆盖主题默认模板
-
static/
内容所有不会经过Hugo处理的静态文件,如图片、CSS文件、JS文件等。生成网站时,这些文件会直接复制到输出目录。
-
themes/
存放第三方主题,每个主题通常都包含自己的layouts、static、配置文件等。启用主题后,Hugo会先从主题中加载布局文件,再加载站点内自定义的覆盖文件。
- 利用Hugo命令构建站点时,Hugo 会创建一个 public 目录,目录包含发布的网站,在运行 hugo 命令时生成。Hugo 根据需要重建此目录及其内容。
- 通常还会创建一个 resources 目录:目录包含 Hugo 资源管道的缓存输出,在运行 hugo 或 hugo server 命令时生成。默认情况下,此缓存目录包括 CSS 和图片。Hugo 根据需要重建此目录及其内容。
- Hugo 创建了一个联合文件系统,允许将两个或多个目录挂载到同一位置。例如,假设您的主目录包含一个 Hugo 项目的目录,另一个目录包含共享内容。您可以使用挂载(mounts)在构建站点时包含共享内容。
- 在站点配置中当两个或多个文件具有相同路径时,优先级顺序遵循挂载的顺序。例如,如果共享内容目录包含 books/book-1.md,则会被忽略,因为项目的 content 目录先被挂载。
- 将archetypes/default.md,"+“改成”-","=“改成”+",因为这个时toml格式的,我们要改成yaml格式
配置主题
以Stack为例,下载发布页面.把解压好的主题放在themes下,并把后面的版本号如3.3.10
去掉
或者将存储库克隆到 themes/hugo-theme-stack
git clone https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack
或者如果您已经在您的网站中使用 Git,则可以通过在 Hugo 网站的根目录中运行以下命令将主题添加为子模块:
git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack
-
把子模块的hugo-theme-stack里的layouts复制出来,复制到myblog下的layouts
-
在hugo-theme-stack里examplesite里面的content和hugo.yaml,复制到myblog 下,然后把原来的hugo.toml删掉
1 2 3 4 5 6 7
示例 baseurl: https://example.com/ languageCode: en-us theme: hugo-theme-stack#指定主题 title: Example Site copyright: Example Person DefaultContentLanguage: zh-cn# 默认语言
-
然后在终端执行hugo,进行构建(如果有一些我们没有,删除content下post的内容,只留下chinese-test)
-
同一个文件可以通过多个markdown,后缀名不同来实现。默认的index就是默认的名字
zh-cn# 默认语言
,默认的主题下的名字。如果。即content/post/chinese-test下的 index-zh-cn.md可以通过index-zh-cn来改变在中文界面显示。index-en会在英文界面下显示。
方法一:通过文件后缀名实现
你想要的效果 | 做法 |
---|---|
只在中文站显示 | 只创建 index.zh-cn.md |
只在英文站显示 | 只创建 index.en.md |
中英文都显示 | 创建 index.zh-cn.md 和 index.en.md |
根据默认语言 | 只创建 index.md (使用默认语言,在blog/hugo.yaml) |
方法二:通过Front Matter指定
|
|
文章开头可以有categories分类和用来打tags标签
注意:如果创建多级文件夹时文章文件名不是 index.md
或者类别、标签文件名不是 _index.md
的话,设置封面图片会出现问题。
如何快速创建一个文章?hugo new potst/test/index.md
,就生成了test/index.md
,将draft:true改成draft:false(此时是在content/post下)
|
|
常用命令
命令 | 说明 |
---|---|
hugo new post/test/index.md | 创建新文章。新建文章后,Hugo会在content/post 目录下生成一份Markdown文件,并根据archetypes 中的模板填充默认Front Matter |
hugo server -D | 启动本地服务器预览,使用-D 参数可包含草稿内容进行预览 |
hugo | 构建站点(生成静态文件到public/目录) |
hugo –cleanDestinationDir | 清理构建文件并重新生成 |
hugo –minify | 构建并压缩HTML/CSS/JS文件(适合生产部署) |
hugo new site [path] | 创建一个新站点 |
hugo server | 启动本地服务器预览 |
hugo config | 显示站点配置信息 |
hugo list drafts | 列出所有处于草稿状态的文章 |
常用参数
- -D ,–buildDrafts:包括草稿文章
- -F,–buildFuture:包括未来发布的文章
- -E,–buildExpired:包括已过期的文章
- –minify:生成时压缩输出文件
- –gc:构建时运行垃圾回收
在content/page里修改左侧的内容
404 Page Not Found
注意,一旦网站可以建立,那么除非你做一个新的文件,否则就一直404
- hugo server –theme=your_theme_name(echo “theme = ‘ananke’” » hugo.toml),这个相当于向hugo.toml添加theme
- 删去 hugo.toml,保留config.toml
推荐:在 config.toml
中写 theme = "your_theme_name"
临时:命令行 hugo server --theme=your_theme_name
如果需要更多,如配置favicon,评论区,参考建站技术 | 使用 Hugo + Stack 简单搭建一个博客
Github推送自动化
在使用 GitHub Pages 构建并托管博客时,我们面临一个常见问题:如何在保持源码安全的同时,将构建好
的 public 文件用于页面展示。直接丢上去的往往是public文件。为了解决这一问题,我们可以通过创建两个 GitHub 仓库来实现不同用途的分离和自动化管理。
- 源码仓库(source_blog)
- 用于存储博客相关的源码, 包括markdown文件、配置信息等未构建的内容
- 设置为Private仓库
- 展示仓库(blog_show)
- 用于存储构建后的文件(如public文件夹),供Github Pages或其他托管服务使用
- 设为Public仓库,确保可以正常访问页面
自动化流程
利用Github Actions或脚本实现如下自动化:
-
在源码仓库更新时触发构建操作,生成博客所需的静态文件。将生成的文件自动推送到展示仓库,无需手动干预。
-
Settings->Developer Settings->Personal access tokens -> Tokens(classic),勾选repo和workflow,过期时间选择永远不过期。generate token,然后复制生成的token。
-
点开source_blog,Security-Secrets and variables-Actions-Repository secrets-New repository secret,填写2中生成的token。
-
修改自动化代码(deploy.yml),将修改分支改成master。将.github_hugo移到blog下,并且去掉
_hugo
,作为部署文件 -
git init 创建.git 文件
-
EXTERNAL_REPOSITORY:
xx/blog_show
,展示的博客
blow_show里所展示的就是public里面的内容
- blow_show>Settings>Pages>Build and delployment,改成 master 和root
你可以在根目录创建一个批处理脚本,用来快速启动本地服务器并使用 chrome 打开网页。
|
|
使用Netlify
Add new project → import an existing project→选择blog_show
Typora +PicGo 图床配置
下载PicGo
创建一个新的仓库如blog_picture 设置为公开博客图片
再次重复操作,生成一个blog_show,然后在PicGo里填写对应Token.
这样子就可以通过PicGo上传了。
但是我不想每次都得要先通过PicGo上传至Github,然后将链接如(https://raw.githubusercontent.com/S1-19027/blog_picture/master/image-20250925115857370.png
)再复制到Markdown里的链接语法。
我希望截图后就可以直接上传至github
在Typora中:
-
指定一下图形设置的上传服务设定
-
插入图片时选择上传图片。
注:阿里云的99元/年云服务器似乎不太行,还是老实买点2核4Gib的70元/月
华为云相比较太贵了,更多的我也懒得去找了。
使用云服务器
利用Nginx即可
附录
参考文献
版权信息
本文原载于blog.chenalna.site,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。