快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」
文档版本:2026-07-06
仓库:https://cnb.cool/onedayxyy/hugo-teek-private
博客站点:https://onedayxyy.cn
管理后台:https://oneblogadmin.onedayxyy.cn
次项目是在上游 余温大佬开发的 Hugo Teek / RouxZhee 主题能力之上 二开的,增加了可视化运维后台(基于 PrimeEdge Admin 适配),使用户可以在浏览器中编辑 Markdown、调整站点配置、上传媒体,而无需在本机安装 Hugo 或手工改 Git。
这里说下关于oneblog项目的迭代历程:
vdoing博客(基于vuepress,Evan大佬开发)-->teek博客(基于vitepress,天客大佬开发)-->RouxZhee博客(基于hugo, 余温大佬开发)-->oneblog博客(基于RouxZhee博客二开,one菜鸡二开)。(这一路走来实属不易哈哈哈🤣🤣🤣)
待更新。
OneBlog 是一套「静态博客 + Web 管理后台」一体的个人站全栈方案,以 monorepo 形态托管于腾讯云开发者平台 CNB(Cloud Native Build)。
它在上游 Hugo Teek / RouxZhee 主题能力之上,增加了可视化运维后台(基于 PrimeEdge Admin 适配),使作者可以在浏览器中编辑 Markdown、调整站点配置、上传媒体,而无需在本机安装 Hugo 或手工改 Git。
| 组件 | 说明 | 生产域名 |
|---|---|---|
| 博客前台 | Hugo Extended 静态站点,主题 hugo-teek | https://onedayxyy.cn |
| 管理后台 | EdgeOne Pages(静态资源 + Edge Functions + KV) | https://oneblogadmin.onedayxyy.cn |
| 源码仓库 | CNB 唯一真相源;Admin 写入与 CI 均在此仓 | onedayxyy/hugo-teek-private |
| 对象存储 | 站点静态产物同步到腾讯云 COS,由 EdgeOne CDN 加速 | COS Bucket + onedayxyy.cn |
| 媒体 / 备份 | 七牛云 Kodo(图床、媒体库、JSON 配置备份) | oneblogoss.onedayxyy.cn(可选) |
| 评论 | Twikoo | 站点内嵌 |
| 代码备份 | CNB master push 时同步到 Gitee | gitee.com/onlyonexl/ongblog-gitee-backup |
核心产品定位:
1hugo-teek-private/
2├── hugo-teek-site/ # Hugo 站点(内容、主题、静态资源)
3│ ├── content/ # posts / docs 等 Markdown
4│ ├── data/ # 侧边栏、分析、图库等数据
5│ ├── themes/hugo-teek/ # Teek 移植主题
6│ └── static/ # 静态资源
7├── user-configuration/ # 用户层配置(覆盖主题默认)
8│ ├── hugo.toml
9│ ├── themes/hugo-teek/*.toml
10│ └── teek-plugins/*.toml
11├── oneblog-admin/ # EdgeOne Pages:Functions + public 输出
12│ ├── functions/ # Edge Functions(API / SPA / 静态透传)
13│ ├── public/ # EO 静态输出目录
14│ └── edgeone.json
15├── admin-frontend/ # Vue3 + Element Plus 管理前端(build 产物写入 oneblog-admin/public)
16├── bin/ # Windows/Linux 构建工具与 Hugo 二进制
17├── .cnb.yml # CNB CI:构建、COS、EO Admin、Gitee 备份
18├── Makefile # 本地 / Docker 构建入口
19└── LOCAL_DEV.md # 本地开发快速指南截图:

| 层级 | 技术选型 | 职责 |
|---|---|---|
| 内容渲染 | Hugo Extended ≥ 0.150,主题 hugo-teek | Markdown → 静态 HTML/CSS/JS |
| 构建工具链 | hugo-teek-tools(Go)+ Makefile | 配置合并、permalink、索引、VitePress 语法转换、分析统计、搜索索引 |
| 管理前端 | Vue 3、Vite、Element Plus、Pinia、md-editor-v3、ECharts | 仪表盘、文章/文档、站点配置、媒体、备份等 GUI |
| 管理后端 | EdgeOne Pages Functions(JS) | JWT 鉴权、Git/CNB 流水线触发、七牛上传签名、配置读写 |
| 状态存储 | EdgeOne KV(ADMIN_KV) | 密码、JWT_SECRET、Git Token 覆盖项、会话限流等 |
| 内容存储 | Git(CNB) | hugo-teek-site/content、user-configuration、data |
| 静态托管 | 腾讯云 COS + EdgeOne CDN | 博客前台全球加速 |
| 媒体对象 | 七牛云 Kodo(可选,未配置则回退 Git 图床) | uploads / imagebed / backup |
| CI/CD | CNB .cnb.yml | push 构建、大文件 admin write、手动重建、Admin 条件部署 |
oneblogadmin.onedayxyy.cn 登录(JWT + HttpOnly Cookie)。api_trigger_admin_write。git commit → git push origin master。master.push 流水线启动:make build-docker 构建 Hugocoscli sync 推送到 COS
-(若改动了后台代码)edgeone makers deploy 更新 Adminhttps://onedayxyy.cn 获取最新静态页。线上与本地一致,采用「用户配置覆盖默认主题配置」:
user-configuration/:你在后台或手工维护的配置真相源hugo-teek-tools config merge:合并进 hugo-teek-site/config/_default/因此:改配置只改 user-configuration/,不要直接改构建产物目录。
git push 走同一条 CI,行为一致oneblog-admin/** 或 admin-frontend/** 变更时重新部署,避免每次改文都重部署后台| 模式 | 启动方式 | 数据读写 |
|---|---|---|
| 本地 | start-blog-frontend.bat / start-blog-admin.bat | 直接读写仓库文件,无需 Token |
| 线上 | EO Pages + CNB | JWT + Git/流水线 Token |
本地改完 → git push origin master 即可上线。
git-sync,含 tags)/api/setup/status 诊断密钥是否就绪七牛侧约定布局:
| 前缀 | 用途 |
|---|---|
media/uploads/ | 编辑器 / 云存储上传 |
media/imagebed/ | 媒体库默认图床 |
backup/oneblog/ | 配置 JSON 备份 |
gallery/ | 相册(预留) |
生产环境由三条主链路组成:
| 链路 | 触发 | 产物 |
|---|---|---|
| A. 博客发布 | master push / web_trigger / api_trigger_rebuild | hugo-teek-site/public → COS → CDN 刷新 |
| B. Admin 发布 | master push 且 oneblog-admin/** 或 admin-frontend/** 有变更 | edgeone makers deploy ./oneblog-admin |
| C. Admin 写内容 | Admin 保存 API → api_trigger_admin_write | Runner 写文件 commit/push → 再走链路 A |
不要把整个博客静态站部署到 EdgeOne Pages 作为主发布路径。 当前博客体量大,Hugo 构建在 CNB Docker 中完成,再 coscli sync 到 COS,由 EdgeOne CDN 源站 加速;Pages 只承载 管理后台。
https://cnb.cool/onedayxyy/secret → envs.yml)建议至少包含:
| 变量 | 用途 |
|---|---|
COS_SECRET_ID / COS_SECRET_KEY | COS 与 CDN 刷新鉴权 |
COS_BUCKET / COS_REGION | 博客静态桶与地域 |
EDGEONE_API_TOKEN | edgeone makers deploy 部署 Admin |
GIT_USERNAME / GIT_ACCESS_TOKEN | 同步 Gitee 备份仓 |
SECRET / WEBHOOK | 钉钉通知 |
QINIU_*(可选) | 与 EO Admin 环境变量对齐,便于对照 |
CNB Runner 通过
.cnb.yml的imports注入上述密钥,不要把真实密钥写进仓库。
见 4.4.3。
在 CNB 个人设置中创建访问令牌,权限建议:
| 用途 | Token 变量 | 权限 |
|---|---|---|
| Admin 内容写入 | GIT_TOKEN(或 CNB_TOKEN) | repo-code:r + repo-code:rw,建议含触发流水线以支持 api_trigger_admin_write |
| 仅手动重建 | 可选独立 CNB_TOKEN | 额外勾选「触发流水线」 |
COS_BUCKET 一致)。coscli 使用的密钥具备列表与写入权限。onedayxyy.cn。cnb.cool/onedayxyy/hugo-teek-private。.cnb.yml 已包含:master.push:备份 → 构建 → COS →(条件)Admin → CDN → 钉钉web_trigger:控制台手动「构建&部署」api_trigger_admin_write:后台写文件api_trigger_rebuild:后台手动重建envs.yml 已在 imports 中引用。docker.cnb.cool/yuwen-gueen/docker-images-chrom/hugo-teek-blog:latest(内置 Hugo、hugo-teek-tools)。1# 在本机推送到 CNB master
2git push origin master或在 CNB 页面使用 构建&部署(web_trigger)。
成功标志:
build 与「部署到 cos」为绿色https://onedayxyy.cn/ 内容已更新(注意 CDN 刷新后可能仍有极短缓存)CI 中实际执行:
1make build-docker
2# 合并配置 → frontmatter → permalink → index → sidebar → VitePress 转换
3# → doc analysis → search index → hugo --minify
4# 输出:hugo-teek-site/public随后:
1coscli sync ./hugo-teek-site/public cos://$COS_BUCKET/ -r \
2 --delete --force --routines=1000 --thread-num=1000CDN 刷新(首页路径示例):
1kind: tencenteo
2rtype: path
3domain: onedayxyy.cn
4urls: https://onedayxyy.cn/如需全站更强一致,可在流水线中扩展刷新 URL 列表(注意接口配额)。
生产后台项目名:oneblog-admin,域名:oneblogadmin.onedayxyy.cn。
后台由两部分组成,部署前需理解:
| 部分 | 目录 | 说明 |
|---|---|---|
| Functions | oneblog-admin/functions/ | API、登录页、SPA 回退、/js /css 透传 |
| 静态输出 | oneblog-admin/public/ | admin/ SPA、css、js、version.json |
| 前端源码 | admin-frontend/ | Vue 工程;npm run build 产物进 public/ |
| Pages 配置 | oneblog-admin/edgeone.json | outputDirectory: public,KV 绑定 ADMIN_KV |
edgeone.json 关键内容:
1{
2 "name": "oneblog-admin",
3 "version": "1.0.0-mvp",
4 "outputDirectory": "public",
5 "bindings": [
6 { "type": "kv", "name": "ADMIN_KV" }
7 ]
8}仓库已内置:当 oneblog-admin/** 或 admin-frontend/** 变更并 push 到 master 时:
1- name: deploy to edgeone makers
2 ifModify:
3 - "oneblog-admin/**"
4 - "admin-frontend/**"
5 image: node:20
6 script: |
7 cd admin-frontend && npm ci && npm run build && cd ..
8 test -f oneblog-admin/public/admin/index.html
9 npx edgeone makers deploy ./oneblog-admin -n oneblog-admin -t $EDGEONE_API_TOKEN前置条件:
EDGEONE_API_TOKEN(EdgeOne API 令牌,具备 Pages / Makers 部署权限)。oneblog-admin(首次需手工创建一次,见 4.4.2)。QINIU_*、ADMIN_PASSWORD 等密钥,必须在控制台维护)。日常更新后台:
1# 修改 admin-frontend 或 oneblog-admin 后
2git add admin-frontend oneblog-admin
3git commit -m "feat(admin): ..."
4git push origin master等 CI 中 deploy to edgeone makers 成功后,访问 https://oneblogadmin.onedayxyy.cn 验证。
仅改博客正文(
hugo-teek-site/content)时,Admin 不会 重新部署,仅重建前台。这是预期行为。
适用于第一次把后台放到 EO,或 CI Token 不可用时的手工部署。
步骤:
hugo-teek-private(若平台支持 CNB/导入压缩包,则导入 oneblog-admin 目录内容)。| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 项目根目录 / Root Directory | oneblog-admin | 避免根目录 catch-all 路由与路径混淆 |
| 构建命令 | 留空(或见下方「含前端构建」) | Functions 为原生 JS,无需编译框架 |
| 输出目录 | public | 必须与 edgeone.json 的 outputDirectory 一致 |
| Functions 目录 | functions | Edge Functions |
若希望控制台构建也最新 SPA,可将构建命令设为(需把根目录设为仓库根,并调整输出路径,复杂度更高——更推荐用 CNB 构建 + makers deploy):
1cd admin-frontend && npm ci && npm run build输出仍为 oneblog-admin/public。
ADMIN_KVedgeone.json → bindings[].name 一致*.edgeone.cool 的默认域名。混清点先讲清:
| 概念 | 含义 |
|---|---|
ADMIN_KV | Pages 绑定名(命名空间别名),代码里通过这个名字访问 KV |
JWT_SECRET / ADMIN_PASSWORD 等 | 可以是 Pages 环境变量,也可以是 KV 里的数据键;代码支持两端读取 |
推荐:方式 A — Pages 环境变量(更清晰、更安心)
项目设置 → 环境变量:
| 变量 | 必填 | 说明 |
|---|---|---|
ADMIN_PASSWORD | 是 | 后台登录密码 |
JWT_SECRET | 是 | JWT 签名密钥,openssl rand -base64 32 |
GIT_TOKEN | 是 | CNB 访问令牌(也可写 CNB_TOKEN),需 repo 读写 |
GIT_PLATFORM | 否 | 默认 cnb |
GIT_OWNER | 否 | 默认 onedayxyy |
GIT_REPO | 否 | 默认 hugo-teek-private |
GIT_BRANCH | 否 | 默认 master |
SITE_BASE_URL | 否 | 如 https://onedayxyy.cn(Twikoo 跳转) |
QINIU_AK / QINIU_SK | 否* | 七牛 AK/SK(仅服务端,勿下发前端) |
QINIU_BUCKET | 否 | 默认 oneblogoss |
QINIU_DOMAIN | 否 | 默认 oneblogoss.onedayxyy.cn |
QINIU_REGION | 否 | 默认 z0(华东) |
CNB_TOKEN | 否 | 独立流水线触发 Token(可与 GIT_TOKEN 共用) |
* 未配置七牛时,云存储相关能力回退 Git 图床。
修改环境变量后需要 重新部署 Pages 才生效。
方式 B — 在 ADMIN_KV 中写数据键
适用于不想把密码放在环境变量列表、或希望改密钥后无需重新部署的场景:
| KV 键 | 说明 |
|---|---|
JWT_SECRET | JWT 密钥 |
ADMIN_PASSWORD | 登录密码明文 |
GIT_TOKEN | Git 令牌 |
QINIU_AK / QINIU_SK / QINIU_BUCKET / QINIU_DOMAIN / QINIU_REGION | 七牛相关 |
KV 变更通常 无需重新部署。
健康检查:
1GET https://oneblogadmin.onedayxyy.cn/api/setup/status期望:ready: true,且 sources 标明 kv 或 env(表示已读到密钥)。
示例(结构示意):
1{
2 "ready": true,
3 "sources": {
4 "ADMIN_PASSWORD": "env",
5 "JWT_SECRET": "env",
6 "GIT_TOKEN": "env"
7 }
8}oneblogadmin.onedayxyy.cn。onedayxyy.cn,在站点 DNS 下)添加控制台提示的 CNAME。https://oneblogadmin.onedayxyy.cn/,应出现登录页。需本机安装 Node.js 20+,并有 EDGEONE_API_TOKEN:
1# 在仓库根目录
2cd admin-frontend
3npm ci
4npm run build
5cd ..
6
7# 确认 SPA 产物存在
8test -f oneblog-admin/public/admin/index.html # Linux/macOS
9# Windows PowerShell:
10# Test-Path oneblog-admin/public/admin/index.html
11
12npx edgeone makers deploy ./oneblog-admin -n oneblog-admin -t $EDGEONE_API_TOKENWindows PowerShell:
1$env:EDGEONE_API_TOKEN = "你的Token"
2cd admin-frontend
3npm ci
4npm run build
5cd ..
6npx edgeone makers deploy ./oneblog-admin -n oneblog-admin -t $env:EDGEONE_API_TOKEN注意: CLI 不会改写控制台里的环境变量;QINIU_* / ADMIN_PASSWORD 等仍需在 EO 控制台维护。
https://oneblogadmin.onedayxyy.cn/。ADMIN_PASSWORD 登录。CNBonedayxyyhugo-teek-privatemasterapi_trigger_admin_write → master.push 成功。https://onedayxyy.cn 验证前台。关键文件:
1oneblog-admin/functions/
2├── [[default]].js # API + /admin SPA 回退
3├── js/[[path]].js # /js/* 透传(优先于 catch-all)
4├── css/[[path]].js # /css/* 透传
5├── version.json.js
6└── index.js # 登录页 /常见故障:登录后侧栏在、主区空白。
Workaround / 根因:
functions/[[default]].js 会拦截未匹配路由;若 /js/app.js、/css/style.css 未从正确 public/ 发布,或被 catch-all 先吞,前端脚本 404,主区空白。outputDirectory: public + 专属 js/[[path]].js、css/[[path]].js 透传修复。排查步骤:
/js/app.js、/css/style.css、/admin/、/admin/assets/* 为 200。oneblog-admin,输出目录为 public。public/admin/index.html 在部署包内存在(CI 已有 test -f 守护)。edgeone makers deploy 或等待 CI。| 触发器 | 阶段概要 |
|---|---|
| master.push | Gitee 备份 → make build-docker → COS sync →(条件)EO Admin deploy → CDN 刷新 → 钉钉 |
| web_trigger | 构建 → COS → CDN(控制台按钮,不部署 Admin) |
| api_trigger_admin_write | Base64/gzip 落盘或删除 → commit → push master(再触发 push) |
| api_trigger_rebuild | 仅重建前台并部署 COS(不部署 Admin) |
大文件写入:Admin 侧 prepareCnbWritePayload() 对超限内容启用 ADMIN_WRITE_ENCODING=gzip,Runner 用 gunzip 解压后写入,避免「文件过大无法经后台写入」类错误。当前写接口字节上限接近约 96KB(Base64 后),gzip 后通常远低于此。
master.push 阶段使用 tencentcom/git-sync:
1target_url: https://gitee.com/onlyonexl/ongblog-gitee-backup.git
2branch: master
3force: true
4push_tags: trueSecret 需提供:
GIT_USERNAME:Gitee 用户名GIT_ACCESS_TOKEN:具备 projects 写权限的私人令牌Gitee 不是 CI 构建源,仅作备份。请勿把 Admin 默认远程改到仅有 Gitee 而无 CNB CI 的仓。
详见根目录 LOCAL_DEV.md。摘要:
| 脚本 | 用途 | 地址 |
|---|---|---|
start-blog-frontend.bat | Hugo 预览 | http://localhost:9090 |
start-blog-admin.bat | Admin API + Vue | http://localhost:6173/admin |
依赖:Hugo Extended、Node.js 18+、pnpm(脚本可协助安装)。仓库已附带 bin/windows 工具链。
本地保存后需自行:
1git add user-configuration hugo-teek-site
2git commit -m "更新站点配置"
3git push origin master线上 Admin 保存则自动 commit/push,无需本机介入。
| 现象 | 排查方向 |
|---|---|
| Admin 无法登录 | ADMIN_PASSWORD / JWT_SECRET 是否就绪;/api/setup/status |
| 登录后主区空白 | /js/* /css/* 是否 200;outputDirectory 是否为 public |
| 保存失败「文件过大」 | 已支持 gzip;若仍失,检查 api_trigger_admin_write env 与 Runner 日志 |
| 保存成功但前台未变 | CNB master.push 是否成功;COS / CDN 刷新是否失败 |
| Admin CI 未部署 | 本次 commit 是否触及 oneblog-admin/** 或 admin-frontend/** |
| 七牛上传失败 | EO 环境变量 QINIU_*(CLI 不注入,必须控制台配置) |
| Gitee 备份失败 | GIT_USERNAME / GIT_ACCESS_TOKEN / 目标仓权限 |
结合当前仓库实现与运维现状,建议按优先级推进如下优化。
| # | 项 | 说明 |
|---|---|---|
| 1 | CI 耗时 | master.push 同步 Gitee、完整 Hugo 构建、COS 全量 sync 串联,后台写一文也走全量链路。可评估:Gitee 异步化、增量 COS sync、文档路径级 CDN 刷新列表。 |
| 2 | COS 成本优化 | 静态站可评估迁到七牛 Kodo 作源 + EdgeOne 拉源,节省 COS 月费;需改 .cnb.yml 同步目标与 CDN 源。 |
| 3 | CDN 刷新覆盖面 | 当前刷新主要为首页路径,深层文章/静态资源可能依赖 TTL。扩展刷新列表或版本化静态资源文件名。 |
| 4 | 写入并发与冲突 | api_trigger_admin_write 采用 commit + pull --rebase + push,多端同时编辑可能冲突,需更友好的冲突提示或锁。 |
| 5 | 密钥轮转与最小权限 | 拆分「只写内容 Token」与「触发流水线 Token」;定期轮换 JWT_SECRET、Git Token、COS Key。 |
| # | 项 | 说明 |
|---|---|---|
| 6 | 批量操作 API | Functions 中仍有 Phase 2/3 批量操作占位(menus/media 等),需补齐真实实现。 |
| 7 | 栏目映射等 Stub | 部分 Section Mapping POST/DELETE 等接口能力不完整,GUI 与后端需对齐。 |
| 8 | 多用户与审计 | 现单密码模式,缺角色、操作审计日志(谁在何时改了哪篇)。 |
| 9 | 图片 / 媒体库体验 | 七牛与 Git 图床双路径的 UI 一致性、失败重试、体积压缩(WebP)、引用检查待加强。 |
| 10 | 主题配置表单覆盖度 | teek-plugins/*.toml、hugo.toml 部分高级项仍依赖预览 TOML 手改。 |
| 11 | 版本检测与升级 | version.json 已有基础,可与主题远程版本、变更日志联动,降低「后台新、主题旧」错配。 |
| # | 项 | 说明 |
|---|---|---|
| 12 | Automated 测试 | Admin Functions、写入流水线、关键配置合并缺回归测试;建议至少冒烟集。 |
| 13 | admin-frontend TypeScript / PINIA 类型化 | 当前以 JS 为主,大型表单易出现隐式错误。 |
| 14 | Edge Function 体积与模块化 | [[default]].js 体量很大,后续宜拆分路由模块,提升可维护性与冷启动可读性。 |
| 15 | 文档与 README 同步 | 根 README 仍偏上游 RouxZhee 描述,可与 OneBlog 产品说明、本部署文档互链。 |
| 16 | 大仓库与 content 膨胀 | _cache、历史归档目录体积大,会影响 clone/CI(可考虑 Git LFS 或内容分层仓)。 |
| # | 项 | 说明 |
|---|---|---|
| 17 | 首页卡片与响应式持续打磨 | 已修复 14" 比例、hover 接缝线等问题,不同 DPR / 浏览器需持续回归。 |
| 18 | 无障碍与 SEO | 图片 alt、结构化数据、sitemap 增量策略可继续强化。 |
| 19 | Service Worker / 离线阅读(可选) | 文档站场景下,可评估本地缓存策略。 |
| # | 项 | 说明 |
|---|---|---|
| 20 | Admin 域名与博客域名隔离策略 | 已分离;可加强制 HTTPS、安全头(CSP、HSTS)、登录二次验证(TOTP)。 |
| 21 | 限流与防暴破 | 已有登录限流雏形,可补 IP 级网关规则与告警。 |
| 22 | 备份恢复演练 | Gitee / 七牛 backup JSON 定期验证「能完整拉起」。 |
| 文件 | 用途 |
|---|---|
.cnb.yml | 生产 CI 定义 |
.cnb-cos.yml / .cnb-qn.yml | 备用 / 试验部署配置 |
oneblog-admin/README.md | Admin 模块说明 |
oneblog-admin/edgeone.json | EO Pages 绑定与输出目录 |
oneblog-admin/.env.example | 环境变量模板 |
LOCAL_DEV.md | 本地开发 |
Makefile | build / build-docker / dev |
1Admin 保存
2 → Edge Function
3 → CNB api_trigger_admin_write(落盘 + commit + push)
4 → master.push
5 → Gitee backup
6 → Hugo build (Docker)
7 → COS sync
8 → CDN refresh
9 → 钉钉通知
10 → 读者看到更新后台代码变更额外多一步:
1admin-frontend / oneblog-admin 变更进 master
2 → npm run build
3 → edgeone makers deploy ./oneblog-admin文档维护: 部署架构变更(域名、存储、CI 阶段)时,请同步更新本文档日期与对应章节。
oneblog / hugo-teek-private · 2026-07-06
精选 · 友链 · 更多

One的公众号
爱折腾博客的小白