Update Hugo Config to Zopiya

This commit is contained in:
2025-06-17 16:12:12 +08:00
parent e3ceb1bb10
commit ff2131dd2f
7 changed files with 321 additions and 161 deletions

View File

@@ -1,65 +0,0 @@
name: Deploy Hugo Blog
on:
schedule:
- cron: '0 6 * * *' # 每天早上 6 点UTC执行一次
push:
branches:
- main # 当 main 分支有新提交时执行
jobs:
build:
# 使用默认环境,并在最新的 Ubuntu 系统上运行
environment: default
runs-on: ubuntu-latest
steps:
# 1. 克隆当前博客仓库代码(包含完整历史记录)
- name: 克隆当前博客仓库
uses: actions/checkout@v3
with:
fetch-depth: 0
# 2. 安装 Hugo 静态站点生成器extended 版本支持 Sass/SCSS 等扩展功能)
- name: 安装 Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.145.0'
extended: true
# 3. 克隆私有 wiki 仓库,作为博客内容的来源
- name: 克隆私有 wiki 仓库
run: |
# 遇到错误立即退出,并确保管道中任一命令失败时退出
set -eo pipefail
# 清除旧的 wiki 临时目录,避免残留影响
rm -rf /tmp/wiki
# 使用 secrets 中存储的认证信息从私有仓库克隆 wiki 到 /tmp/wiki
git clone https://${{ secrets.GITEA_REPO_READ }}@git.7wate.org/zhouzhongping/wiki.git /tmp/wiki
# 4. 将 wiki 中的博客内容拷贝到 Hugo 的 content/posts 目录中
- name: 拷贝 wiki 内容到 content/posts
run: |
set -eo pipefail
WIKI_BLOG_DIR="/tmp/wiki/Personal/Blog"
TARGET_DIR="content/posts"
if [ -d "$WIKI_BLOG_DIR" ]; then
cp -r "$WIKI_BLOG_DIR"/* "$TARGET_DIR"/ || { echo "拷贝失败"; exit 1; }
else
echo "目录 $WIKI_BLOG_DIR 不存在,拷贝失败"
exit 1
fi
# 5. 使用 Hugo 构建静态站点,并启用资源压缩优化
- name: 构建 Hugo 静态站点
run: |
set -eo pipefail
hugo --minify
# 6. 使用 gh-pages Action 将生成的静态站点部署到指定分支(此处为 html 分支)
- name: 部署站点到 gh-pages 分支
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: html
publish_dir: ./public

53
.github/workflows/deploy-pages.yml vendored Normal file
View File

@@ -0,0 +1,53 @@
name: Deploy Hugo to GitHub Pages
on:
schedule:
- cron: "0 22 * * *"
push:
branches:
- main
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: true
jobs:
build-and-deploy:
runs-on: ubuntu-latest
environment: production
env:
TZ: Asia/Shanghai
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.147.0'
extended: true
- name: Clone private wiki repository
run: |
rm -rf /tmp/wiki && git clone "${{ secrets.GITEA_REPO_CLONE }}" /tmp/wiki
if [ -d "/tmp/wiki/Personal/Blog" ]; then
cp -r /tmp/wiki/Personal/Blog/* content/posts/ || exit 1
else
echo "Wiki content not found"
exit 1
fi
- name: Build Hugo site
run: hugo --minify
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
cname: zopiya.com
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'

View File

@@ -23,7 +23,7 @@ layout: "about"
博客不设评论区,短期内也暂无开放计划。 博客不设评论区,短期内也暂无开放计划。
但如果你有什么想说的,欢迎通过邮件联系:[zhouzhongping@7wate.com](mailto:zhouzhongping@7wate.com) 但如果你有什么想说的,欢迎通过邮件联系:[i@zopiya.com](mailto:i@zopiya.com)
你也可以使用 Delta Chat 与我匿名通信:[点此扫码加好友](https://static.7wate.com/2025/03/26/bf7226c87704f.png) 你也可以使用 Delta Chat 与我匿名通信:[点此扫码加好友](https://static.7wate.com/2025/03/26/bf7226c87704f.png)

240
hugo.toml
View File

@@ -1,131 +1,181 @@
# 网站基本信息 #────────────────────────────────────────────
baseURL = "https://blog.7wate.com/" # 1. 全局基础设置
languageCode = "zh-cn" #────────────────────────────────────────────
title = "向阳而生" # baseURL = "https://zopiya.com/"
theme = "typo" languageCode = "zh"
defaultContentLanguage = "zh-cn" title = "向阳而生"
hasCJKLanguage = true theme = "typo"
enableEmoji = true defaultContentLanguage = "zh"
canonifyURLs = true hasCJKLanguage = true
enableEmoji = true
canonifyURLs = true
timeout = "300s"
enableRobotsTXT = true
# 构建性能 #────────────────────────────────────────────
timeout = "300s" # 2. 模块化(可选,推荐 Hugo Modules 管理主题)
#────────────────────────────────────────────
# [module]
# [[module.imports]]
# path = "github.com/7wate/typo"
# 永久链接结构 #────────────────────────────────────────────
# 3. URL 与国际化
#────────────────────────────────────────────
[permalinks] [permalinks]
posts = ":slug/" posts = ":slug/"
# 自定义分类标签 # 如果未来要做多语言,这里可启用
# enableMultilingual = true
# [languages]
# [languages.zh]
# languageName = "中文"
# weight = 1
# [languages.en]
# languageName = "English"
# weight = 2
#────────────────────────────────────────────
# 4. 自定义分类、标签、系列
#────────────────────────────────────────────
[taxonomies] [taxonomies]
tag = "tags" tag = "tags"
category = "categories" category = "categories"
series = "series" series = "series"
# 菜单设置 #────────────────────────────────────────────
[[params.menu]] # 5. 输出格式与输出控制
name = "首页" #────────────────────────────────────────────
url = "/" [outputFormats]
weight = 1 [outputFormats.RSS]
mediaType = "application/rss+xml"
baseName = "rss"
isHTML = false
isPlainText = false
noUgly = true
rel = "alternate"
[[params.menu]] [outputFormats.Feed]
name = "文辑" mediaType = "application/rss+xml"
url = "/posts/" baseName = "feed"
weight = 2 isHTML = false
isPlainText = false
noUgly = true
rel = "alternate"
[[params.menu]] [outputs]
name = "片语" home = ["HTML", "RSS", "Feed", "SITEMAP", "ROBOTS"]
url = "https://memos.7wate.com/explore"
newTab = true
weight = 3
[[params.menu]] #────────────────────────────────────────────
name = "关于" # 6. 主题参数
url = "/about/" #────────────────────────────────────────────
newTab = true
weight = 4
# Typo 主题参数
[params] [params]
description = "愿我们都能:执着于热爱,纯粹于当下。" description = "愿我们都能:执着于热爱,纯粹于当下。"
theme = "auto" theme = "auto"
colorPalette = "base16-default" colorPalette = "base16-default"
# 可选颜色default, catpuccin, gruvebox, eink, base16-default, base16-eighties, base16-ocean, base16-mocha, base16-cupcake. hideHeader = true
readTime = true
paginationSize = 10
listSummaries = false
# 若启用 listSummaries = true需要指定 summaryLength
# summaryLength = 70
listDateFormat = "2006 Jan"
homeDateFormat = "2 Jan"
homeIntroTitle = "👋👋👋"
homeIntroContent = """愿我们都能:执着于热爱,纯粹于当下。"""
homeCollectionTitle = "文辑"
homeCollection = "posts"
# 首页设置 [params.breadcrumbs]
homeIntroTitle = "👋👋👋" enabled = true
homeIntroContent = """ showCurrentPage = true
愿我们都能:执着于热爱,纯粹于当下。 home = "首页"
"""
# 文辑设置 [params.umami]
homeCollectionTitle = "文辑" enable = true
homeCollection = "posts" websiteId = "ce53db0e-af27-4703-ba19-d4792c8cff78"
# 建议托管到 CDN 域名,或根目录以减少跨域请求
jsLocation = "https://umami.7wate.com/script.js"
# 文章设置 #────────────────────────────────────────────
hideHeader = true # 7. 菜单与社交
readTime = true #────────────────────────────────────────────
paginationSize = 7 [[params.menu]]
listSummaries = false name = "首页"
listDateFormat = "2006 Jan" url = "/"
homeDateFormat = "2 Jan" weight = 1
# 面包屑导航 [[params.menu]]
[params.breadcrumbs] name = "文辑"
enabled = true url = "/posts/"
showCurrentPage = true weight = 2
home = "首页"
# 社交链接 [[params.menu]]
[[params.social]] name = "片语"
name = "github" url = "https://memos.7wate.com/explore"
url = "https://github.com/7wate" newTab = true
weight = 3
[[params.menu]]
name = "关于"
url = "/about/"
newTab = true
weight = 4
[[params.social]] [[params.social]]
name = "gmail" name = "github"
url = "mailto:zhouzhongping@7wate.com" url = "https://github.com/zopiya"
[[params.social]] [[params.social]]
name = "rss" name = "gmail"
url = "https://blog.7wate.com/index.xml" url = "mailto:i@zopiya.com"
# Markdown 与高亮设置 [[params.social]]
name = "rss"
# 通常 RSS 放在 /rss.xml 而非 /index.xml
url = "/rss.xml"
#────────────────────────────────────────────
# 8. Markdown 与高亮
#────────────────────────────────────────────
[markup] [markup]
[markup.highlight] [markup.highlight]
style = "algol" style = "algol"
[markup.goldmark.renderer] [markup.goldmark.renderer]
unsafe = false unsafe = true # 生产环境建议设为 false
# 安全设置 #────────────────────────────────────────────
# 9. 安全与隐私
#────────────────────────────────────────────
[security] [security]
enableInlineShortcodes = true enableInlineShortcodes = true
# 站点地图SEO
[sitemap]
changefreq = "weekly"
priority = 0.5
filename = "sitemap.xml"
# RSS 订阅
[services]
[services.rss]
limit = 7
# 网站分析
[params.umami]
enable = true
websiteId = "ce53db0e-af27-4703-ba19-d4792c8cff78"
jsLocation = "https://umami.7wate.com/script.js"
# 隐私与 GDPR
[privacy] [privacy]
[privacy.googleAnalytics] [privacy.googleAnalytics]
anonymizeIP = true anonymizeIP = true
respectDoNotTrack = true respectDoNotTrack = true
useSessionStorage = false useSessionStorage = false
disable = false disable = true # 如不使用 GA建议删掉整个块
# 构建压缩设置 #────────────────────────────────────────────
# 10. 构建压缩与优化
#────────────────────────────────────────────
[minify] [minify]
disableXML = true disableXML = false
minifyOutput = true minifyOutput = true
#────────────────────────────────────────────
# 11. 站点地图SEO
#────────────────────────────────────────────
[sitemap]
changefreq = "weekly"
priority = 0.5
filename = "sitemap.xml"
#────────────────────────────────────────────
# 12. RSS 服务
#────────────────────────────────────────────
[services]
[services.rss]
limit = 7 # -1 表示不限制条目数

59
layouts/home.feed.xml Normal file
View File

@@ -0,0 +1,59 @@
{{- $authorEmail := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .email }}
{{- $authorEmail = . }}
{{- end }}
{{- end }}
{{- end }}
{{- $authorName := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .name }}
{{- $authorName = . }}
{{- end }}
{{- else }}
{{- $authorName = . }}
{{- end }}
{{- end }}
{{- $pctx := . }}
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
{{- $pages := slice }}
{{- if or $.IsHome $.IsSection }}
{{- $pages = $pctx.RegularPages }}
{{- else }}
{{- $pages = $pctx.Pages }}
{{- end }}
{{- $limit := .Site.Config.Services.RSS.Limit }}
{{- if ge $limit 1 }}
{{- $pages = $pages | first $limit }}
{{- end }}
{{- printf "<?xml version= \"1.0\" encoding= \"utf-8\" standalone= \"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on
{{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link>
<description>Recent
content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{
.Site.Title }}</description>
<generator>Hugo</generator>
<language>{{
site.Language.LanguageCode }}</language>{{ with $authorEmail }} <managingEditor>{{.}}{{ with
$authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }} <webMaster>{{
. }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }} <copyright>{{
. }}</copyright>{{ end }}{{ if not .Date.IsZero }} <lastBuildDate>{{ (index
$pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{
end }} {{- with .OutputFormats.Get "RSS" }} {{ printf "<atom:link href= %q rel= \"self\" type= %q />"
.Permalink .MediaType | safeHTML }} {{- end }} {{- range $pages }} <item>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<pubDate>{{ .PublishDate.Format
"Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> {{- with $authorEmail }}<author>{{
. }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }} <guid>{{ .Permalink }}</guid>
<description>{{
.Summary | transform.XMLEscape | safeHTML }}</description>
</item> {{- end }} </channel>
</rss>

59
layouts/home.rss.xml Normal file
View File

@@ -0,0 +1,59 @@
{{- $authorEmail := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .email }}
{{- $authorEmail = . }}
{{- end }}
{{- end }}
{{- end }}
{{- $authorName := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .name }}
{{- $authorName = . }}
{{- end }}
{{- else }}
{{- $authorName = . }}
{{- end }}
{{- end }}
{{- $pctx := . }}
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
{{- $pages := slice }}
{{- if or $.IsHome $.IsSection }}
{{- $pages = $pctx.RegularPages }}
{{- else }}
{{- $pages = $pctx.Pages }}
{{- end }}
{{- $limit := .Site.Config.Services.RSS.Limit }}
{{- if ge $limit 1 }}
{{- $pages = $pages | first $limit }}
{{- end }}
{{- printf "<?xml version= \"1.0\" encoding= \"utf-8\" standalone= \"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on
{{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link>
<description>Recent
content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{
.Site.Title }}</description>
<generator>Hugo</generator>
<language>{{
site.Language.LanguageCode }}</language>{{ with $authorEmail }} <managingEditor>{{.}}{{ with
$authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }} <webMaster>{{
. }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }} <copyright>{{
. }}</copyright>{{ end }}{{ if not .Date.IsZero }} <lastBuildDate>{{ (index
$pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{
end }} {{- with .OutputFormats.Get "RSS" }} {{ printf "<atom:link href= %q rel= \"self\" type= %q />"
.Permalink .MediaType | safeHTML }} {{- end }} {{- range $pages }} <item>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<pubDate>{{ .PublishDate.Format
"Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> {{- with $authorEmail }}<author>{{
. }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }} <guid>{{ .Permalink }}</guid>
<description>{{
.Summary | transform.XMLEscape | safeHTML }}</description>
</item> {{- end }} </channel>
</rss>

4
layouts/robots.txt Normal file
View File

@@ -0,0 +1,4 @@
User-agent: *
Allow: /
RSS: {{ .Site.BaseURL }}index.xml
Sitemap: {{ .Site.BaseURL }}sitemap.xml