sebastienrousseau/sebastienrousseau.github.io
GitHub: sebastienrousseau/sebastienrousseau.github.io
一个基于 Rust 和 Python 构建的多语言静态站点流水线,用于发布金融科技、应用 AI 与后量子密码学领域的长篇研究内容。
Stars: 1 | Forks: 0
# sebastienrousseau.com
本仓库托管了 Sebastien Rousseau 网站的静态站点 pipeline,该 pipeline 编译了关于应用 AI、支付和密钥的相关研究,并提供二十八种语言支持。
我们使用 Shokunin 静态站点生成器构建网站,并运行自动化的 postbuild 脚本来优化页面。
## 目录
本节概述了本仓库的主要主题和指南。
- [快速开始](#quick-start)
- [仓库导览](#repository-tour)
- [Pipeline 概览](#pipeline-overview)
- [构建阶段](#build-stages)
- [Postbuild 流程](#postbuild-passes)
- [国际化](#internationalisation)
- [安全态势](#security-posture)
- [边缘路由 Worker](#edge-routing-worker)
- [WASM 实验室](#wasm-labs)
- [Schema.org 覆盖范围](#schemaorg-coverage)
- [AI 与 Agent 发现](#ai-and-agent-discovery)
- [开发](#development)
- [CI 门禁](#ci-gates)
- [部署](#deployment)
- [配套文档](#companion-docs)
- [License](#license)
## 快速开始
您只需三个简单的命令行步骤即可安装工具并构建网站。
```
git clone https://github.com/sebastienrousseau/sebastienrousseau.github.io.git
cd sebastienrousseau.github.io
cargo install ssg --locked
pip install -r requirements.txt
./build.sh
```
一次干净的构建会在十二秒内完成,并输出覆盖二十八种语言的数千个页面。
| 工具 | 配置 | 用途 |
|---|---|---|
| `Rust` | 稳定版工具链 | 用于运行静态站点编译器 |
| `Python` | 3.12 版本 | 运行 postbuild 脚本 |
| `Node.js` | 20 或更高版本 | 运行路由测试 |
| `Git` | 标准客户端 | 处理代码版本控制 |
在运行构建之前,请确保您的签名密钥处于激活状态。
## 仓库导览
文件夹大纲将源文章、布局和 python 构建脚本分离开来,以保持工作区的整洁。
- `_posts/` 存放源文章
- `_layouts/` 存放页面模板
- `_data/` 存放 locale 文件
- `scripts/` 包含构建脚本
- `tests/` 存放测试套件
- `project-docs/` 包含指南文件
- `workers/` 存放路由代码
- `labs/` 存放 Rust → WebAssembly 演示
- `public/` 存储构建输出(已被 gitignore;作为 CI 产物部署)
- `sigstore-bundles/` 存储已提交的文章签名捆绑包
每个文件夹只负责单一任务,以便于进行更新。
## Pipeline 概览
静态站点的构建流程以线性的阶段顺序转换内容并应用安全检查。
```
%%{init: {'theme':'neutral'} }%%
flowchart TB
subgraph SRC["Source"]
EN["_posts/*.md
83 English"] T["_posts/<lang>/*.md
1,728 translations"] L["_layouts/*.html
11 templates"] D["_data/i18n/<lang>/
28 locale dirs"] end subgraph SSG["SSG Compile"] COMP["ssg
(Rust binary)"] end subgraph GEN["Generators (Python)"] BT["build_topics.py"] BR["build_translations.py"] BF["build_lang_feeds.py"] BA["build_agent_api.py"] end subgraph POST["Postbuild (Python)"] PB["postbuild.py
25 single-page passes"] end subgraph CI["CI Gates"] G["13 validation gates
(pytest · Pa11y · CSP · RTL)"] end subgraph OUT["Output"] P["public/
1850 pages"] end EN --> COMP L --> COMP COMP --> BT D --> BR BR --> BF BF --> BA BA --> PB PB --> CI CI --> P ``` 该 pipeline 以源文件开始,以优化后的网页结束。 ## 构建阶段 我们使用六个主要的生成器步骤,将英文源草稿转换为完全翻译的页面。 首先,编译器根据布局文件构建英文页面。 其次,主题工具生成主题着陆页。 第三,翻译工具为所有活动的 locale 创建页面。 第四,Feed 工具写入 RSS 和 Atom feed。 第五,Agent 工具为搜索工具构建 JSON feed。 第六,postbuild 工具运行最终的页面检查。 ## 输入和输出 该 pipeline 读取 markdown 文章和 JSON locale 字符串,以构建优化的 HTML 页面。 输入内容包括位于 locale 文件夹中的英文文章和翻译字符串。 输出文件夹存放编译后的 HTML 页面、图像、站点地图和 Feed。 ## Postbuild 流程 postbuild 脚本运行二十五个独立的检查,以更新页面标签和安全规则。 这些检查会添加作者元数据、尺寸、引用列表、站点地图和脚本哈希。 有关每次优化传递的详细信息,请参阅 postbuild 指南。 ## 国际化 我们通过使用翻译映射存根和语言检查来支持二十八种语言。 注册表文件包含显示名称和标志切换器设置。 所有二十八种语言均在实时网站上处于活动状态。 ## 翻译 Pipeline 翻译工具在本地终端会话中运行,将存根翻译为活动的语言。 ``` %%{init: {'theme':'neutral'} }%% sequenceDiagram autonumber participant SSG as Static Site Generator participant FS as "public//"
participant BT as build_translations.py
participant LR as _lang_registry.py
participant J as "_data/i18n//*.json"
participant Out as "public//"
SSG->>FS: Emit English HTML
BT->>LR: load_languages()
loop for each active non-EN lang
BT->>J: load strings, labels, …
BT->>BT: build_chrome_patches(lang) — auto-gen 30+ patches from strings.json
BT->>FS: Read EN page shell
BT->>BT: apply auto-gen + manual chrome patches
BT->>BT: apply body patches (home or static)
BT->>BT: rewrite EN slug links → slugs
BT->>BT: set , og:locale, JSON-LD inLanguage
BT->>BT: inject hreflang block (28 entries + x-default)
BT->>Out: write public///index.html
end
```
该脚本会复制英文页面内容,并自动替换菜单字符串。
## 按语言的 CI 门禁
七项一致性检查确认每个活动的翻译都与参考的英文页面数量匹配。
这些检查会验证网站的语言文件、作者详细信息和结构元素。
任何失败都会停止构建,需要手动修复才能通过。
## 安全态势
该网站实施了混合密钥、严格的脚本内容规则以及已签名的 git 提交,以保护访问者。
除非脚本携带在构建期间计算出的唯一哈希值,否则我们将阻止内联脚本。
我们防御供应链黑客攻击的手段依赖于包列表和资产哈希。
边缘服务器预加载传输规则以阻止安全降级。
## 边缘路由 Worker
Cloudflare Worker 处理语言路由,并在边缘服务器上设置安全响应标头。
该 worker 匹配访问者标头,将他们路由到首选语言。
它还设置安全标头以实现传输安全、referrer 规则、权限和框架限制。
## WASM 实验室
我们将 Rust crate 编译为 WebAssembly,以直接在用户浏览器中提供交互式工具。
每个项目都构建一个可在浏览器中安全加载的独立包。
这些页面在严格的安全策略下运行,以安全地执行代码。
## 威胁模型
威胁模型图概述了平台的安全边界和防御措施。
```
%%{init: {'theme':'neutral'} }%%
graph TB
subgraph EXT["External"]
V[/"Visitor"/]
AI[/"AI crawler"/]
ATK[/"Attacker"/]
end
subgraph EDGE["Cloudflare edge"]
PQ["X25519MLKEM768"]
CFW["lang-router Worker"]
TR["Transform Rules"]
CDN["CDN cache"]
end
V --> PQ
AI --> PQ
ATK --> PQ
PQ --> CFW
CFW --> TR
TR --> CDN
```
该系统经过强化,可抵御解密威胁、页面劫持和供应链篡改。
## 已交付的功能
该实时网站向读者提供数千个快速、安全且易于访问的页面。
我们支持可变字体、边缘压缩和预加载规则,以快速加载页面。
这些页面在可访问性和 SEO 检查中均获得满分。
## Schema.org 覆盖范围
每个页面都带有丰富的 schema 块,以帮助搜索引擎和 AI 工具索引网站。
这些块定义了作者、文章类型、面包屑和引用来源。
我们在每次构建运行时都会自动检查这些 schema。
## AI 与 Agent 发现
我们发布插件规范和文本索引,以协助 AI 爬虫和 Web 客户端。
这些资源允许 AI 爬虫干净地解析内容。
这些 Agent endpoint 为搜索工具公开了文章和主题。
## 开发
您可以通过运行构建脚本并在浏览器中检查页面来在本地测试更改。
- 步骤 1:运行构建脚本来编译网站。
- 步骤 2:在您的本地主机上提供编译后的页面服务。
- 步骤 3:打开浏览器页面以检查布局。
- 步骤 4:运行测试命令以验证所有测试是否保持绿色(通过)。
这可确保您的更改在推送之前是安全的。
## CI 门禁
十三项自动测试会验证所有文件是否正确,然后更改才会合并到分支中。
这些门禁会检查页面计数、搜索索引、布局规则和备用链接。
集成运行器会阻止任何未通过这些检查的 Pull Request。
## 部署
当您推送到 main 分支时,该网站会自动部署到 GitHub Pages。
CI 构建站点,将 `public/` 作为 Pages artifact 上传,并由 `actions/deploy-pages` 发布。
Cloudflare 作为 CDN 和边缘安全层位于 GitHub Pages 源站之前。
## 当本仓库不符合您的需求时
如果您只需要单语言站点,则可以剥离翻译脚本。
通过禁用活动的 locale,核心 pipeline 适用于单语言站点。
您可以自定义 HTML 布局和 CSS 文件以匹配您自己的品牌。
## 配套文档
project-docs 文件夹包含关于架构、发布和安全性的详细指南。
- [架构](project-docs/architecture.md)
- [CI 门禁](project-docs/ci.md)
- [国际化](project-docs/i18n.md)
- [Postbuild 流程](project-docs/postbuild.md)
- [发布](project-docs/publishing.md)
- [Schema](project-docs/schemas.md)
- [安全](project-docs/security.md)
- [Sigstore](project-docs/sigstore.md)
- [每日发布](project-docs/daily-publishing.md)
- [SEO 规范](project-docs/web-performance-seo-spec.md)
阅读这些文件以了解更多关于平台设置的信息。
## License
本项目是开源的,并在 Apache-2.0 许可证下提供。
该代码库可免费修改和共享,供个人或商业使用。
83 English"] T["_posts/<lang>/*.md
1,728 translations"] L["_layouts/*.html
11 templates"] D["_data/i18n/<lang>/
28 locale dirs"] end subgraph SSG["SSG Compile"] COMP["ssg
(Rust binary)"] end subgraph GEN["Generators (Python)"] BT["build_topics.py"] BR["build_translations.py"] BF["build_lang_feeds.py"] BA["build_agent_api.py"] end subgraph POST["Postbuild (Python)"] PB["postbuild.py
25 single-page passes"] end subgraph CI["CI Gates"] G["13 validation gates
(pytest · Pa11y · CSP · RTL)"] end subgraph OUT["Output"] P["public/
1850 pages"] end EN --> COMP L --> COMP COMP --> BT D --> BR BR --> BF BF --> BA BA --> PB PB --> CI CI --> P ``` 该 pipeline 以源文件开始,以优化后的网页结束。 ## 构建阶段 我们使用六个主要的生成器步骤,将英文源草稿转换为完全翻译的页面。 首先,编译器根据布局文件构建英文页面。 其次,主题工具生成主题着陆页。 第三,翻译工具为所有活动的 locale 创建页面。 第四,Feed 工具写入 RSS 和 Atom feed。 第五,Agent 工具为搜索工具构建 JSON feed。 第六,postbuild 工具运行最终的页面检查。 ## 输入和输出 该 pipeline 读取 markdown 文章和 JSON locale 字符串,以构建优化的 HTML 页面。 输入内容包括位于 locale 文件夹中的英文文章和翻译字符串。 输出文件夹存放编译后的 HTML 页面、图像、站点地图和 Feed。 ## Postbuild 流程 postbuild 脚本运行二十五个独立的检查,以更新页面标签和安全规则。 这些检查会添加作者元数据、尺寸、引用列表、站点地图和脚本哈希。 有关每次优化传递的详细信息,请参阅 postbuild 指南。 ## 国际化 我们通过使用翻译映射存根和语言检查来支持二十八种语言。 注册表文件包含显示名称和标志切换器设置。 所有二十八种语言均在实时网站上处于活动状态。 ## 翻译 Pipeline 翻译工具在本地终端会话中运行,将存根翻译为活动的语言。 ``` %%{init: {'theme':'neutral'} }%% sequenceDiagram autonumber participant SSG as Static Site Generator participant FS as "public/
标签:AI工具, MITM代理, Rust, WebAssembly, 可视化界面, 后端开发, 后量子密码学, 国际化, 无障碍访问, 程序员工具, 网络流量审计, 逆向工具, 静态网站生成器