重建个人应用入口与静态博客,保留旧文章并支持本地发布
This commit is contained in:
@@ -1,67 +1,29 @@
|
||||
# blog
|
||||
# famzheng.me
|
||||
|
||||
Fam 的博客源码 (Hugo + PaperMod 主题),线上 https://famzheng.me/。
|
||||
自己维护的应用入口与博客,纯静态 HTML/CSS/JS。不再依赖 Hugo、PaperMod 或运行时后端。
|
||||
|
||||
## 写一篇文章
|
||||
## 开发与发布
|
||||
|
||||
```bash
|
||||
make new SLUG=hello-world TITLE='你好,世界' SUMMARY='第一篇,随便聊聊'
|
||||
$EDITOR content/posts/hello-world.md # 写正文 (markdown)
|
||||
make publish MSG='post: hello world' # commit + push,触发 CI
|
||||
```
|
||||
源码:~/projects/fzc-src/blog(本机);生产:ssh fzc。服务器只接收构建产物。
|
||||
|
||||
约 1 分钟后文章在 `https://famzheng.me/posts/<slug>/` 上线。
|
||||
CI 状态: <https://famzheng.me/gitea/fam/blog/actions>
|
||||
- make install:安装固定版本构建依赖。
|
||||
- make test:文章完整性、站内链接、RSS、应用清单测试。
|
||||
- make serve:http://127.0.0.1:4176 本地预览。
|
||||
- make deploy:本机构建测试,rsync 产物,切换指定站点的挂载目录,公网验收。
|
||||
|
||||
## 目录
|
||||
应用清单集中在 apps.json:名称、简介、URL、分类、图标、访问提示。不要放密钥、分享令牌或管理初始化链接。
|
||||
|
||||
```
|
||||
content/posts/ # 文章 markdown,文件名 = URL slug
|
||||
hugo.toml # 站点配置 (baseURL, 主题选项, social 链接)
|
||||
layouts/ # 主题 override (尽量别动)
|
||||
static/ # favicon 等公开资源
|
||||
themes/PaperMod/ # 主题 (git submodule, 尽量别动)
|
||||
.gitea/workflows/publish.yml # CI: hugo build -> rsync 到 /var/gnoc/hugo-public/
|
||||
```
|
||||
文章在 content/posts/<slug>.md,保留 YAML frontmatter(title/date/summary/draft/tags)。文件名就是永久 URL。原有 11 篇文章全文、/posts/、/about/、标签、归档、分页旧地址、RSS 和 /demos/ 均保留。
|
||||
|
||||
## Frontmatter
|
||||
assets/ 是独立设计;首页无外部字体、分析脚本或 JS 框架。过滤是渐进增强,无 JS 仍可浏览全部入口。只有含 Mermaid 的文章按需加载固定版本渲染器,失败保留文本。
|
||||
|
||||
每篇文章顶部 YAML:
|
||||
## 部署边界与回滚
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: "标题"
|
||||
date: 2026-04-30T10:00:00+01:00
|
||||
draft: false
|
||||
summary: "一句话摘要 (可选,影响列表页和 og:description)"
|
||||
---
|
||||
```
|
||||
沿用 gnoc-hugo/hugo 的 nginx、Service、Ingress 与 TLS;名称是历史兼容,不再运行 Hugo。
|
||||
每次产物上传到 /var/gnoc/site-releases/<timestamp>-<commit>,只更新该 Deployment 的 site hostPath;失败恢复原目录。
|
||||
原 /var/gnoc/hugo-public 和每版发布目录保留,可回滚 Deployment 或改回发布时显示的旧路径。
|
||||
Gitea、其他子域名、数据库及私人应用数据不受影响。CI 仅校验,不再在服务器重建站点。
|
||||
|
||||
`make new` 会填好这四个字段,你只需要写正文。
|
||||
## 文风
|
||||
|
||||
## 文风 (供 AI 参考)
|
||||
|
||||
- 第一人称、口语化,不要 AI 流水账
|
||||
- 标题简洁,正文别堆 emoji
|
||||
- 长度 500-2000 字偏多,宁短勿长
|
||||
- 写之前先扫一眼 `content/posts/*.md` 已发文章,对齐 Fam 的语气
|
||||
|
||||
## 部署机制
|
||||
|
||||
```
|
||||
git push origin main
|
||||
→ Gitea 触发 .gitea/workflows/publish.yml
|
||||
→ host shell act_runner (gnoc 用户, 在 famzheng.com 节点)
|
||||
→ 装 hugo 0.147.6 extended → hugo --minify --gc → rsync public/ /var/gnoc/hugo-public/
|
||||
→ k8s gnoc-hugo/hugo (nginx) hostPath 直出
|
||||
→ ingress famzheng.me/ 命中
|
||||
```
|
||||
|
||||
## 本地预览 (可选)
|
||||
|
||||
需要 hugo 0.147.6 extended:
|
||||
|
||||
```bash
|
||||
make serve # http://localhost:1313, 热重载, draft 也能看
|
||||
make build # 一次性 build 到 public/, sanity check
|
||||
```
|
||||
第一人称、自然简洁。原文不为改版而改写;不要替作者捏造经历、观点或项目能力。
|
||||
|
||||
Reference in New Issue
Block a user