Case study · 2026

从公开仓库到生产级多站点作品集

一次有边界、可回滚、证据驱动的 Agent 执行:盘点 6 个公开仓库,在一台 Azure VM 上保留动态服务、部署静态项目、配置 DNS/HTTPS,并通过真实浏览器验证关键交互。

Outcome

结果先于过程

每项数字都有当前线上状态或浏览器交互作为证据,不以 Agent 自我评价代替验证。

6/6

公开仓库完成分类

可运行项目直接部署;文档、AI 历史代码与静态实验使用诚实的展示或归档方式。

9

HTTPS 主机名

主域名、www、动态 paper-search 与 6 个仓库子域名由同一张自动续期证书覆盖。

0

最终控制台错误

核心页面和交互在 Playwright Extension 最终门禁中未发现浏览器控制台错误。

Architecture

一台 VM,清晰隔离

Nginx 只公开 80/443,静态站点按 hostname 选择根目录;唯一 Node API 继续监听 localhost,避免扩大公网攻击面。

Azure DNS (*.leikunx.com)
          │
          ▼
     Nginx :443
       ├── leikunx.com ───── portfolio + roadmap
       ├── search.* ──────── static UI → localhost API
       ├── loan.* / kuns.* ─ verified React builds
       └── skills.* / ai.* / x.* / resume.* ─ showcases

Safety contract

明确不做什么

  • 只检查确认过的公开仓库,不读取或发布私有仓库
  • 不购买资源、不创建新增付费 Azure 服务
  • 生产修改前保存 webroot 与 Nginx 回滚副本
  • 不发布凭据、内部绩效原文或具体薪酬
  • 不暗示微软官方背书,不把历史代码包装成现代产品

Execution loop

状态、最小动作、客观门禁

DISCOVER

建立权威清单

Playwright 观察 GitHub 页面,公共 API 独立确认 6 个公开仓库;读取每个仓库的构建文件和内容类型后再决定部署方式。

Public-only scopeRepository manifestDeployment map
STAGE

先在生产入口后面预发布

本地构建 React 项目,使用 Host header 验证每个 Nginx 路由;全部返回 200 后才创建 DNS 记录和证书。

Build gatesNginx syntaxHost routing
DEPLOY

DNS、证书和可回滚切换

通过 Azure Portal 创建 wildcard A 记录,扩展 SAN 证书,保留原主站和配置备份后切换 apex 与子域名。

DNS evidenceTLS SANsRollback copies
VERIFY

用真实交互证明结果

Playwright 检查桌面/移动导航、页面内容、贷款计算、GitHub 用户搜索、paper-search API/任务页和控制台。

Browser DOMInteractionsConsole gate

Failure → evidence → recovery

失败不是终点,是下一条证据

每次恢复只改变已被证据指向的最小范围。

APIRecovered

任务列表返回 500

日志定位到缺失的可写 tasks 目录;只创建指定目录并设置服务账号权限,API 从 500 变为 200,无需重启服务或扩大目录权限。

WEBRecovered

第三方头像重试失败

功能已成功但 CDN 头像产生控制台错误;改用稳定文字头像,保留 GitHub 搜索和主页链接,复测恢复零错误。

A11YRecovered

移动导航覆盖首屏

390px 快照发现导航永久展开;复用可访问折叠按钮,验证 aria-expanded 状态和移动布局。

What this proves

Agent 工程不是“让模型自己做”,而是让自主性处于证据和边界之内。

这个案例证明了目标契约、工具编排、生产诊断、权限最小化、可回滚交付和浏览器验证。下一阶段是把同样的方法应用到公开 Agent Evaluation Lab,并公开质量、延迟、成本和安全指标。