<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zayn's Blog</title><link>https://blog.treesir.pub/</link><description>Recent content on Zayn's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>yangzun@treesir.pub (Zayn)</managingEditor><webMaster>yangzun@treesir.pub (Zayn)</webMaster><copyright>2021-2026 Zayn</copyright><lastBuildDate>Thu, 02 Apr 2026 22:00:00 +0800</lastBuildDate><atom:link href="https://blog.treesir.pub/index.xml" rel="self" type="application/rss+xml"/><item><title>每日技术实践简报 - 2026-04-02：博客 Git 工作流治理、Linux 笔记本选购调研与 AI 安全事件追踪</title><link>https://blog.treesir.pub/posts/daily-practice-2026-04-02/</link><pubDate>Thu, 02 Apr 2026 22:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-04-02/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-31/">每日技术实践简报 - 2026-03-31&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/">从 MCP 到一键发包：把 Teambition 评论里的 APK 自动上传 Nexus 的那些坑&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆层降级策略：从故障中构建可靠的 AI Agent 记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>博客 MR 合并冲突解决&lt;/strong>：MR !53 合并后，后续推送的 03-29、03-30 日报和 03-31 重写版未包含在合并中。根因是合并后继续往同一分支推送新 commit，但未创建新 MR。最终通过本地 &lt;code>git merge&lt;/code> 解决冲突，直接推送到 main 分支。&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-31：Claude Code 源码泄露、运维告警集中爆发与海南骑行决策</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-31/</link><pubDate>Tue, 31 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-31/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-30/">每日技术实践简报 - 2026-03-30&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/">从 MCP 到一键发包：把 Teambition 评论里的 APK 自动上传 Nexus 的那些坑&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆层降级策略：从故障中构建可靠的 AI Agent 记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>多源运维告警分级梳理&lt;/strong>：一天之内收到 5 类告警——腾讯云 SSL 证书过期（3/28 通知，已过 3 天未续期）、YangZun Playground 反复宕机（3/29-3/31 共 6 次 DOWN/UP 循环）、TrueNAS 存储告警连续触发、CloudflareSpeedTest CI 连续 10 次失败、GitLab 暴力登录（1 分钟内 7 次验证码错误）。按紧急度分级：SSL 续期和 YangZun 根因排查为最高优先级。&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-30：工作周报整理、编程范式梳理与运维治理体系沉淀</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-30/</link><pubDate>Mon, 30 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-30/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-29/">每日技术实践简报 - 2026-03-29&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>工作周报生成&lt;/strong>：使用 &lt;code>work-report-generator&lt;/code> Skill 从对话记录中提取本周工作内容，先生成详细版再转化为领导汇报版（结果导向、简洁专业、突出重点和下一步计划）。&lt;/li>
&lt;li>&lt;strong>编程范式梳理&lt;/strong>：整理了面向过程、面向函数、面向对象三种编程范式的演进关系、核心区别和实际应用场景。现代语言已走向多范式混合路线。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>领导汇报版周报格式&lt;/strong>：分&amp;quot;重点工作&amp;quot;和&amp;quot;其他工作&amp;quot;两大块，重点工作按项目编号列出成果，底部用表格呈现下周计划和预期目标。语言风格要结果导向，不说过程只说结论。&lt;/li>
&lt;li>&lt;strong>编程范式本质区别&lt;/strong>：面向过程关注&amp;quot;步骤&amp;quot;（流程图），面向函数关注&amp;quot;变换&amp;quot;（数学映射），面向对象关注&amp;quot;协作&amp;quot;（角色交互）。三者不互斥，现代语言多范式混合是主流。&lt;/li>
&lt;li>&lt;strong>运维治理三重机制验证&lt;/strong>：预防层（配置审查、安全检查、操作规范）→ 监控层（日常检查、日志监控、错误追踪）→ 修复层（降级策略、备份恢复、故障诊断），已形成闭环且错误率显著下降。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">实际产出
&lt;div id="实际产出" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e9%99%85%e4%ba%a7%e5%87%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>本周工作周报（领导汇报版）1 份&lt;/li>
&lt;li>博客运营优化巡检自动执行（每日 10:15），当天优化了 03-21 和 03-15 日报标题&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Cron 任务 delivery 报错&lt;/strong>：多个 isolated agentTurn 任务（博客巡检、AI 论文简报、AI 资讯速览等）因缺少 &lt;code>channel&lt;/code> 参数报 &amp;ldquo;Channel is required&amp;rdquo; 错误。在多通道配置（telegram + openclaw-weixin）环境下必须显式设置 &lt;code>delivery.channel: &amp;quot;telegram&amp;quot;&lt;/code>。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">其他思考
&lt;div id="其他思考" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%85%b6%e4%bb%96%e6%80%9d%e8%80%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>国产咖啡品牌调研：三顿半超级拿铁系列（3号经典拿铁、4号浓郁拿铁）适合不喜欢纯深烘焙的口味偏好，冻干粉冷水即溶，单杯不到 5 元，是日常口粮咖啡的高性价比选择。&lt;/li>
&lt;li>外部服务依赖风险：Brave Search API 月度额度耗尽导致搜索能力暂时不可用，提醒了对外部 API 的依赖需要有降级预案。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-29：从 MCP 到一键发包的博客深度写作与 Skill 链优化</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-29/</link><pubDate>Sun, 29 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-29/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-28/">每日技术实践简报 - 2026-03-28&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/">从 MCP 到一键发包：把 Teambition 评论里的 APK 自动上传 Nexus 的那些坑&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>深度博客文章撰写&lt;/strong>：完成&amp;quot;从 MCP 到一键发包&amp;quot;的 300+ 行技术博客，完整记录了从 Teambition MCP 对接到 APK 自动上传 Nexus 的全链路踩坑过程。&lt;/li>
&lt;li>&lt;strong>Blowfish 主题 shortcode 踩坑&lt;/strong>：发现主题没有 &lt;code>notice&lt;/code> shortcode，只有 &lt;code>alert&lt;/code>。经过多次 sed/edit 替换尝试，最终确认正确语法为 &lt;code>{{&amp;lt; alert &amp;quot;icon-name&amp;quot; &amp;gt;}}内容{{&amp;lt; /alert &amp;gt;}}&lt;/code>。&lt;/li>
&lt;li>&lt;strong>Mermaid 流程图修复&lt;/strong>：从 &lt;code>text&lt;/code> 代码块改为 &lt;code>{{&amp;lt; mermaid &amp;gt;}}&lt;/code> shortcode 格式，Hugo 才能正确渲染可视化流程图。&lt;/li>
&lt;li>&lt;strong>Git 分支治理&lt;/strong>：发现旧分支 &lt;code>feat/extract-markdown-rental-risk-20260324&lt;/code> 堆积了大量无关提交（&lt;code>_index.md&lt;/code> 修改、租房信息文章等），从 main 重新创建干净分支，只包含必要文件。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Blowfish 可用 shortcode 清单&lt;/strong>：alert、mermaid、chart、timeline、figure、gist、katex 等。写文章前先确认 shortcode 存在，不要凭记忆用。&lt;/li>
&lt;li>&lt;strong>blog-post-generator Skill 规范&lt;/strong>：frontmatter 需要 &lt;code>featureimage&lt;/code>、&lt;code>keywords&lt;/code>、&lt;code>tags_weight&lt;/code>/&lt;code>categories_weight&lt;/code>；推荐阅读用相对路径内链；代码块必须是实际可用代码，不要伪代码。&lt;/li>
&lt;li>&lt;strong>Git 分支清理策略&lt;/strong>：保护分支的仓库应&amp;quot;从 main 创建新分支 → cherry-pick 或 checkout 需要的文件 → 关闭旧 MR → 创建新 MR&amp;quot;，比 rebase 更可控。&lt;/li>
&lt;li>&lt;strong>租房等非技术内容不应推到技术博客&lt;/strong>：分支提交前必须 review 文件列表，排除无关内容。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">实际产出
&lt;div id="实际产出" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e9%99%85%e4%ba%a7%e5%87%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>深度博客文章 1 篇（302 行，9892 字节）&lt;/li>
&lt;li>3月28日日报 1 篇&lt;/li>
&lt;li>Git MR !53 创建（干净版本，排除租房信息）&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>notice shortcode 不存在&lt;/strong>：Blowfish 主题没有 &lt;code>notice&lt;/code>，只有 &lt;code>alert&lt;/code>。Skill 文档记录有误，需以实际 shortcode 目录为准。&lt;/li>
&lt;li>&lt;strong>多次 sed 替换导致文件状态混乱&lt;/strong>：部分 &lt;code>notice&lt;/code> 被替换为 &lt;code>alert&lt;/code>，但残留不完整标签。应一次性 read 全文确认再精确 edit。&lt;/li>
&lt;li>&lt;strong>Hugo 版本兼容性警告&lt;/strong>：Module &amp;ldquo;blowfish&amp;rdquo; is not compatible with Hugo 0.137.0/0.148.0，但实际构建可通过，属于警告而非阻断。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">其他思考
&lt;div id="其他思考" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%85%b6%e4%bb%96%e6%80%9d%e8%80%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>博客写作风格确立：口语化、有实操感、不要 AI 味；像一个资深工程师在写给同行看；段落简短，多用小标题。&lt;/li>
&lt;li>博客 Skill 链（blowfish-hugo + blog-post-generator + structured-guide-writer）已形成完整工作流，后续写作效率会持续提升。&lt;/li>
&lt;/ul></description></item><item><title>从 MCP 到一键发包：把 Teambition 评论里的 APK 自动上传 Nexus 的那些坑</title><link>https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/</link><pubDate>Sun, 29 Mar 2026 10:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/from-mcp-to-one-click-release-ai-agent-automation/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-28/">每日技术实践简报 - 2026-03-28&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/ai-agent-workflow-practice/">当 AI Agent 遇上运维自动化：我的实践踩坑之路&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 class="relative group">目录
&lt;div id="目录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%9b%ae%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="#%e7%9b%ae%e6%a0%87%e6%8a%8a%e6%89%8b%e5%b7%a5%e7%82%b9%e7%82%b9%e7%82%b9%e5%8f%98%e6%88%90%e5%8f%af%e5%a4%8d%e7%94%a8%e9%93%be%e8%b7%af">目标：把&amp;quot;手工点点点&amp;quot;变成可复用链路&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%8a%80%e6%9c%af%e6%96%b9%e6%a1%88%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-mcp--skill">技术方案：为什么选 MCP + Skill&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e5%ae%9e%e6%88%98%e4%bb%8e-mcporter-%e8%b0%83%e9%80%9a%e7%ac%ac%e4%b8%80%e6%9d%a1%e9%93%be%e8%b7%af">实战：从 mcporter 调通第一条链路&lt;/a>
&lt;ul>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%9d%91mcporter-%e7%9a%84%e5%8f%82%e6%95%b0%e6%a0%bc%e5%bc%8f">第一个坑：mcporter 的参数格式&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%8b%bf%e8%af%84%e8%ae%ba%e5%92%8c%e9%99%84%e4%bb%b6listtaskactivitiesv3">拿评论和附件：ListTaskActivitiesV3&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%ba%8c%e4%b8%aa%e5%9d%91%e6%88%90%e5%91%98-id-%e5%85%a8%e6%98%af-objectid">第二个坑：成员 ID 全是 ObjectId&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e7%ac%ac%e4%b8%89%e4%b8%aa%e5%9d%91apk-%e6%96%87%e4%bb%b6%e5%90%8d%e5%a4%aa%e9%87%8e%e4%ba%86">第三个坑：APK 文件名太野了&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a
href="#skill-%e5%b0%81%e8%a3%85tb-apk-uploader-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%b5%81%e7%a8%8b">Skill 封装：tb-apk-uploader 的核心流程&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e6%9c%80%e7%bb%88%e6%95%88%e6%9e%9c%e4%b8%80%e5%8f%a5%e8%af%9d%e5%8f%91%e5%8c%85">最终效果：一句话发包&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#%e8%b8%a9%e5%9d%91%e6%80%bb%e7%bb%93%e5%88%ab%e8%a2%ab%e7%bb%86%e8%8a%82%e6%8b%96%e6%ad%bb">踩坑总结：别被细节拖死&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>这周我被一个很&amp;quot;低级但很费命&amp;quot;的流程折磨了好几次:&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-28：从 MCP 到一键 APK 发布的 Skill 封装</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-28/</link><pubDate>Sat, 28 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-28/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-27/">每日技术实践简报 - 2026-03-27&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/">OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Teambition MCP 全链路打通&lt;/strong>：验证了 &lt;code>BatchGetFileDetails&lt;/code>、&lt;code>ListTaskActivitiesV3&lt;/code>、&lt;code>PostV3MemberQuery&lt;/code> 三个核心 API 的完整调用链路，解决了从任务评论中提取附件信息的需求。&lt;/li>
&lt;li>&lt;strong>成员 ID 映射机制&lt;/strong>：建立了项目成员 ObjectId → 真实姓名的映射表（37人），支持&amp;quot;陌生 ID 自动触发全量刷新&amp;quot;的缓存策略，让任务动态终于可读了。&lt;/li>
&lt;li>&lt;strong>tb-apk-uploader Skill 封装&lt;/strong>：将&amp;quot;TB附件获取 → 下载 → 重命名 → 上传 Nexus → 返回链接&amp;quot;的完整流程封装为独立 Skill，经 skill-creator 规范优化并打包验证通过。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>mcporter 调用参数格式&lt;/strong>：&lt;code>mcporter call&lt;/code> 必须用 &lt;code>--args&lt;/code> 传参且包在 &lt;code>requestBody&lt;/code> 里，用 &lt;code>--body&lt;/code> 会报 SyntaxError。这是踩了一个小时的坑才找到的。&lt;/li>
&lt;li>&lt;strong>Skill 封装规范&lt;/strong>：frontmatter description 要包含完整触发词，body 只保留工作流程和脚本用法，不要重复 frontmatter 信息。渐进式披露，核心逻辑在脚本里。&lt;/li>
&lt;li>&lt;strong>APK 文件名标准化规则&lt;/strong>：TB 附件下载后经常带 &lt;code>.1&lt;/code> 后缀、&lt;code>(1)&lt;/code> 括号、&lt;code>E&lt;/code> 前缀，需要正则清洗。如 &lt;code>RinoTrack_E4218_3.2.820260326_release(1).apk.1&lt;/code> → &lt;code>RinoTrack_4218_3.2.820260326_release.apk&lt;/code>。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">实际产出
&lt;div id="实际产出" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e9%99%85%e4%ba%a7%e5%87%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>成功上传了两个 APK 到 Nexus（RinoTrack 85MB + 微信 248MB）&lt;/li>
&lt;li>自动回复了下载链接到 DO-6456 评论区&lt;/li>
&lt;li>tb-apk-uploader Skill 打包为 &lt;code>.skill&lt;/code> 文件，可分发复用&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>mcporter 参数格式&lt;/strong>：&lt;code>--body&lt;/code> → &lt;code>--args&lt;/code> + &lt;code>requestBody&lt;/code> 包装&lt;/li>
&lt;li>&lt;strong>Nexus 重复上传&lt;/strong>：同一文件重复上传返回 HTTP 400，不是错误而是&amp;quot;已存在&amp;quot;，需要正确处理&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">其他思考
&lt;div id="其他思考" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%85%b6%e4%bb%96%e6%80%9d%e8%80%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>骑行语音 AI 助手项目构思（代号备选 CADENCE），核心场景：骑行中记录灵感 + 处理工作任务，已创建滴答清单任务储备。&lt;/li>
&lt;li>讨论了 DevOps/SRE 在 AI 时代的转型方向，核心结论：不需要转行，需要在现有方向上叠加 AI 能力。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-27：GPU 分层选型与 OpenClaw 安全基线</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-27/</link><pubDate>Fri, 27 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-27/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-26/">每日技术实践简报 - 2026-03-26&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-25/">每日技术实践简报 - 2026-03-25&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆回退模式：确保知识持久化不中断&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>GPU 选型与分层规划&lt;/strong>：明确了 PVE 虚拟化场景下的硬件方案。针对 Creo 5.0 的 3D 图形需求，确定以 GPU Passthrough 为主，建议配置 NVIDIA T1000 8GB 或 RTX A2000，而 Cadence 和 PADS 等 2D/EDA 工具则优先使用 CPU 渲染或基础 VDI。&lt;/li>
&lt;li>&lt;strong>AirDesk 交付路径收敛&lt;/strong>：硬件方案从“技术可行性分析”转向“可执行采购口径”。剔除了非必要授权费，成本模型更贴合实际落地场景。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>经济型 VDI 策略&lt;/strong>：在 7-8 人共享场景下，按并发使用 Creo 的人数配置 2-3 张 T1000 比全员配置 vGPU 更经济，规避了高昂的 GRID 许可证成本。&lt;/li>
&lt;li>&lt;strong>OpenClaw 安全基线&lt;/strong>：确立了“先读后改”的文件编辑规范，并强化了第三方 Skill 的供应链安全审查流程，自动化运维开始向安全可维护转型。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>自动化推送链路稳定性&lt;/strong>：在实现 AI 论文简报定时推送时，发现 cron + dashboard-pusher 的配合需要更严格的超时处理和环境隔离。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>完成 AirDesk 审批前的最后合规性映射。&lt;/li>
&lt;li>优化 RSS 抓取链路的重试机制。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-26</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-26/</link><pubDate>Thu, 26 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-26/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-25/">每日技术实践简报 - 2026-03-25&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-24/">每日技术实践简报 - 2026-03-24&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆回退模式：确保知识持久化不中断&lt;/a>&lt;/li>
&lt;/ul>
&lt;h1 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>博客元数据标准化：将每日简报的 categories 统一为“实践记录”，优化归档页聚合口径。&lt;/li>
&lt;li>Git 提交规范：修正 commit message 格式以通过仓库 hook 检查（使用 &lt;code>chore:&lt;/code> 前缀）。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>技术工具约束：确认 &lt;code>bird news&lt;/code> 命令不支持 &lt;code>--hours&lt;/code> 参数。&lt;/li>
&lt;li>替代方案：在需要时间窗口过滤时，应通过搜索能力叠加时间参数实现，而非依赖无效的 CLI 原生参数。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>Git 提交被拒绝：原因在于 commit message 不符合仓库预设的规范（amend 后成功推送）。&lt;/li>
&lt;li>注意事项：发布博客时应遵循“只提交正文文件，不提交 resources/_gen 生成资源”的原则，保持仓库整洁。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>优化 AI 资讯推送的筛选逻辑。&lt;/li>
&lt;li>补全本周其余简报的相互内链（推荐阅读）。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-25</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-25/</link><pubDate>Wed, 25 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-25/</guid><description>&lt;h1 class="relative group">今日技术实践
&lt;div id="今日技术实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%8a%e6%97%a5%e6%8a%80%e6%9c%af%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h1>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>把分散的 DevOps 反馈从“零散问题”改写为“工程健康治理”视角，先做问题分层，再做治理路线，避免头痛医头式修修补补。&lt;/li>
&lt;li>对未解决痛点做了结构化快照，统一了后续追踪入口，减少跨工具来回翻找的时间成本。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>当问题长期存在且跨团队反复出现时，最有效的切入点不是继续加临时补丁，而是定义统一指标与优先级，把“处理单点故障”升级为“治理系统性风险”。&lt;/li>
&lt;li>轻量任务管理在早期调研阶段很关键：先把研究动作显式化，再逐步补齐验收标准，执行阻力会明显下降。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>仅有结论没有上下文时，后续复盘很难复用；因此当天补齐了“问题快照 + 行动项”配对记录，确保后续能直接接力推进。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续完善工程健康治理的指标草案（稳定性、交付效率、可观测性）。&lt;/li>
&lt;li>将今日痛点快照扩展为可执行清单，补充负责边界与时间窗口。&lt;/li>
&lt;li>对研究任务增加阶段性产出定义，确保每次推进都有可验证结果。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-24/">每日技术实践简报 - 2026-03-24&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-23/">每日技术实践简报 - 2026-03-23&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆层降级策略：当 Working Memory 不可用时，如何保持稳定输出&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>把一张 RX 6400 塞进虚拟机：PVE GPU 直通 + Windows Server RDS 部署全记录</title><link>https://blog.treesir.pub/posts/pve-gpu-passthrough-windows-server-rds/</link><pubDate>Wed, 25 Mar 2026 10:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/pve-gpu-passthrough-windows-server-rds/</guid><description>一张 x4 通道的入门显卡、一块消费级 B550 主板、一个巨大的 IOMMU 分组 —— 这大概是 GPU 直通最不利的起点。但 ACS Override 改变了游戏规则。</description></item><item><title>3 行 YAML 接入生产级 GitLab CI/CD：gitlab-ci-templates 实战</title><link>https://blog.treesir.pub/posts/gitlab-ci-templates-3-line-production-cicd/</link><pubDate>Tue, 24 Mar 2026 23:45:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-ci-templates-3-line-production-cicd/</guid><description>&lt;blockquote>
&lt;p>来源声明：本文基于开源仓库 &lt;code>cdryzun/gitlab-ci-templates&lt;/code> 的 README、目录结构与公开文档整理，重点提炼可直接落地的工程实践。&lt;/p>&lt;/blockquote>
&lt;p>很多团队在 GitLab CI/CD 上都踩过同一个坑：&lt;/p>
&lt;ul>
&lt;li>每个仓库维护一份独立流水线，重复劳动严重；&lt;/li>
&lt;li>语言一多（Java / Node.js / Python / Go），规则开始分裂；&lt;/li>
&lt;li>扫描、部署、回滚策略缺少统一治理。&lt;/li>
&lt;/ul>
&lt;p>这篇文章的核心目标很明确：&lt;strong>用一套可复用模板，把“能跑”升级成“可持续维护”。&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 class="relative group">一、3 行接入：把流水线从“项目资产”变成“平台能力”
&lt;div id="一3-行接入把流水线从项目资产变成平台能力" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%803-%e8%a1%8c%e6%8e%a5%e5%85%a5%e6%8a%8a%e6%b5%81%e6%b0%b4%e7%ba%bf%e4%bb%8e%e9%a1%b9%e7%9b%ae%e8%b5%84%e4%ba%a7%e5%8f%98%e6%88%90%e5%b9%b3%e5%8f%b0%e8%83%bd%e5%8a%9b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>最小接入：&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-24</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-24/</link><pubDate>Tue, 24 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-24/</guid><description>&lt;p>今天的重点是把“偶发不响应”从体感问题落到可验证的工程问题上：先处理运行形态冲突，再压低高延迟链路，最后形成可复用的排障路径。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>插件加载失败从“无法启动”修到“可控禁用”&lt;/strong>：针对插件依赖 &lt;code>openclaw/plugin-sdk&lt;/code> 解析失败和 SDK 版本不兼容的问题，先做了本地兼容修复，再按当前需求将相关插件置为禁用，避免持续影响主链路可用性。&lt;/li>
&lt;li>&lt;strong>网关偶发不响应定位到运行冲突&lt;/strong>：通过日志和进程状态确认了“多套守护/重复拉起”带来的端口争用与重启风暴风险，最终收敛为“仅 PM2 单监管器”模式，减少了短时不可用窗口。&lt;/li>
&lt;li>&lt;strong>记忆检索超时有了明确根因&lt;/strong>：&lt;code>nmem&lt;/code> 超时并非随机波动，而是查询输入过长、结构不佳时触发；同时保留 API fallback 作为兜底，保证主流程不被单点阻塞。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>稳定性优化要先做形态治理&lt;/strong>：先统一进程监管、端口绑定和启动入口，再谈参数调优，收益通常更大。&lt;/li>
&lt;li>&lt;strong>兼容修复应优先“可回退”&lt;/strong>：遇到插件与宿主版本错配时，先保证系统整体可运行，再决定是升级、重构还是临时下线。&lt;/li>
&lt;li>&lt;strong>观测信号比主观感受更关键&lt;/strong>：重启次数、端口占用、超时日志比“感觉卡顿”更能指导下一步动作。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>同一服务被多路径拉起时，问题会被放大成随机故障&lt;/strong>：看似偶发，实际是运行拓扑不一致导致的不确定性。&lt;/li>
&lt;li>&lt;strong>把整段上下文直接喂给检索接口会引发超时&lt;/strong>：检索输入需要短、准、结构化，否则很容易触发 CLI 超时。&lt;/li>
&lt;li>&lt;strong>插件生态与主程序版本耦合度高&lt;/strong>：升级或安装插件前，最好先做导出接口和依赖路径核对。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续观察 PM2 单监管模式下的错误率与响应时延，确认是否彻底消除重启风暴。&lt;/li>
&lt;li>为记忆检索补一层输入裁剪与超时重试策略，减少长查询导致的阻塞。&lt;/li>
&lt;li>梳理一份“插件兼容检查清单”，用于后续安装或升级前的快速自检。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/">OpenClaw 记忆层降级策略：当 Working Memory 不可用时，如何保持稳定输出&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-23/">每日技术实践简报 - 2026-03-23&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/daily-practice-2026-03-22/">每日技术实践简报 - 2026-03-22&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>OpenClaw 记忆层降级策略：当 Working Memory 不可用时，如何保持稳定输出</title><link>https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/</link><pubDate>Tue, 24 Mar 2026 09:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openclaw-memory-fallback-pattern/</guid><description>&lt;p>很多团队在做 AI Agent 时，最容易忽略的一件事是：&lt;strong>记忆系统也会故障&lt;/strong>。&lt;/p>
&lt;p>平时我们都把注意力放在提示词、模型效果、工具编排上，但一旦记忆层出现“半可用”（不是完全挂掉，而是读写行为不稳定），Agent 会很快进入一种尴尬状态：&lt;/p>
&lt;ul>
&lt;li>能跑，但上下文变浅；&lt;/li>
&lt;li>能答，但连续性变差；&lt;/li>
&lt;li>能写，但沉淀质量下降。&lt;/li>
&lt;/ul>
&lt;p>这篇文章不讲概念，直接讲一套能落地的策略：当 Working Memory 不可用时，如何通过分层降级保证业务连续性，并且为后续恢复留出“可回放”的证据链。&lt;/p>
&lt;hr>
&lt;h2 class="relative group">1. 问题不是“挂了没”，而是“退化到什么程度还能用”
&lt;div id="1-问题不是挂了没而是退化到什么程度还能用" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e9%97%ae%e9%a2%98%e4%b8%8d%e6%98%af%e6%8c%82%e4%ba%86%e6%b2%a1%e8%80%8c%e6%98%af%e9%80%80%e5%8c%96%e5%88%b0%e4%bb%80%e4%b9%88%e7%a8%8b%e5%ba%a6%e8%bf%98%e8%83%bd%e7%94%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>真实线上里，记忆层异常通常分三种：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>读失败&lt;/strong>：拿不到当日焦点与上下文。&lt;/li>
&lt;li>&lt;strong>写失败&lt;/strong>：新结论无法写回工作记忆。&lt;/li>
&lt;li>&lt;strong>部分成功&lt;/strong>：偶发成功，偶发 JSON 解析错误/超时，最难处理。&lt;/li>
&lt;/ol>
&lt;p>第三种最危险。因为它让系统看起来“偶尔正常”，导致团队误判稳定性。&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-23</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-23/</link><pubDate>Mon, 23 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-23/</guid><description>&lt;p>今天的技术工作比较像一次集中收口：一边把几类工程软件的虚拟化路线梳理清楚，一边继续留意自动化链路的稳定性问题，同时也顺手整理了几条对 AI 工具落地很有用的判断。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>软件虚拟化路线终于从“都研究一下”变成“按场景拆分”&lt;/strong>：针对不同软件的图形负载和授权约束，今天把结论明确下来。轻量 2D 场景可以优先考虑 RDS 或普通 VDI，重图形建模场景则必须走带 GPU 的 VDI 或远程工作站，避免一开始就把所有软件硬塞进同一套方案里。&lt;/li>
&lt;li>&lt;strong>EDA 工具的可虚拟化判断更务实了&lt;/strong>：从技术上看并不是不能跑，而是不能只看“能启动”。授权、图形性能和稳定性验证要先做小范围 PoC，再决定是否上线，不然前期省下来的部署时间，后面会在故障和兼容性上全部还回去。&lt;/li>
&lt;li>&lt;strong>CI 失败不再当成偶发噪音处理&lt;/strong>：今天把多仓库持续出现的 lint、测试和数据同步失败看成系统性问题，而不是零散报警。这个视角调整很重要，因为只要把它当成“偶尔红一下”，流水线就会长期处在不可依赖的状态。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>虚拟化不是统一平台问题，本质上是工作负载分层问题&lt;/strong>：同样叫“设计软件”，2D 制图、3D 建模、EDA 仿真对资源的要求完全不是一个量级。与其追求一套方案覆盖全部，不如先按图形强度和授权风险分层，再匹配 RDS、VDI 或远程工作站。&lt;/li>
&lt;li>&lt;strong>轻量自动化工具已经进入“随手可做”的阶段&lt;/strong>：今天再次验证了一个趋势——很多运营辅助、校验类、解析类小工具，已经可以用 AI 代码助手在很短时间内做出可执行版本。真正稀缺的不是写代码本身，而是能否把需求边界说清楚。&lt;/li>
&lt;li>&lt;strong>AI 治理开始从“能不能用”转向“能不能被信任”&lt;/strong>：对于企业场景来说，后续评估 AI 系统时，身份说明、审计轨迹和责任边界会越来越重要。只有结果，没有可追溯过程的系统，后面会越来越难进入关键流程。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>想用共享 RDS 一次性兜住所有工程软件，这条路看起来省事，实际风险很高&lt;/strong>：一旦把高图形负载和轻量办公型场景混在一起，性能、体验和授权都会互相拖累。&lt;/li>
&lt;li>&lt;strong>CI 重复失败最怕“看见了，但没升级处理级别”&lt;/strong>：如果同类错误连续出现，还只是逐次修补单个 job，团队会慢慢失去对流水线结果的信任，后续问题定位成本会越来越高。&lt;/li>
&lt;li>&lt;strong>低成本维护项最容易被拖延&lt;/strong>：像版本巡检这种投入不大但能提前发现兼容性问题的任务，如果长期没人接，就会在真正出故障时放大代价。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>把软件虚拟化结论整理成更清晰的选型文档，便于后续验证和落地。&lt;/li>
&lt;li>针对近期反复失败的 CI 链路做一次集中排查，优先看 lint 规则、测试稳定性和依赖一致性。&lt;/li>
&lt;li>补上自动化工具和关键依赖的版本巡检，避免小问题积累成兼容性故障。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-22</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-22/</link><pubDate>Sun, 22 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-22/</guid><description>&lt;p>今天的工作重心比较集中，基本都围绕内部平台迭代、AI 能力验证和汇报方式收口这三件事展开。比起堆更多功能，今天更像是在做“把事情做稳、把表达讲清”的整理工作。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>内部平台迭代开始进入可用性收口阶段&lt;/strong>：这次重点不只是补功能，而是把代码仓库整理、稳定性修复和大文件上传验证一起补齐。这样做的好处很直接，后面继续加功能时，不会反复被基础问题拖住。&lt;/li>
&lt;li>&lt;strong>AI 评审服务正式落到业务链路里&lt;/strong>：今天把评审系统 V2 和 AI 评审服务继续往前推进，同时联动调试了 CI/CD 流水线调度器。相比单点试验，这一步更像是把能力真正接到可运行流程里。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>模型验证不能只看参数，要看落地效果&lt;/strong>：今天对几组模型和方案做了对比，结论不是谁规格更高谁就一定更合适，而是谁在当前任务里输出更稳定、结果更像可交付内容。&lt;/li>
&lt;li>&lt;strong>技术汇报按业务结果分组，比按模块罗列更清楚&lt;/strong>：把内容从“做了哪些技术项”改成“稳定性、能力建设、验证结果、问题处理”这类结构后，整体可读性明显更好，也更方便别人快速抓重点。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>很多技术内容本身没问题，问题出在表达方式太像模板&lt;/strong>：如果汇报里全是“优化、提升、赋能”这类词，读起来很顺，但信息密度其实不高。今天比较明确的一点是，汇报更适合直接写动作、结果和当前状态。&lt;/li>
&lt;li>&lt;strong>验证链路如果没有和真实流程一起调，结论很容易偏乐观&lt;/strong>：单独测试能跑通，不等于接进平台后也稳定。今天继续调度器和评审链路时，这个感受更明显。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续把内部平台剩余的稳定性问题收口，避免后续功能迭代反复返工。&lt;/li>
&lt;li>继续完善 AI 评审链路和调度器联动，优先解决真实流程里的边界问题。&lt;/li>
&lt;li>继续优化技术汇报结构，尽量让输出更自然、更具体，少一点空话。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-21</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-21/</link><pubDate>Sat, 21 Mar 2026 22:05:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-21/</guid><description>&lt;p>今天把注意力放在两个方向：一是让信息流更适合长期使用，二是让自动化系统在扩展时更稳一点。看起来都像工程细节，但本质上都指向同一个问题：系统不是功能越多越好，而是越能长期稳定输出价值越好。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>长期记忆开始真正做“减法”&lt;/strong>：这次重点不是继续往记忆系统里加内容，而是清理低价值信息。像占位模板、一次性播报、运行态重复内容、完成通知这类信息，短期看似有用，长期只会污染检索结果。把这些内容清掉之后，后续搜索和回顾都会更干净。&lt;/li>
&lt;li>&lt;strong>AI 信息流完成结构化收口&lt;/strong>：原本的信息汇总更像“把看到的东西发出来”，现在开始转向“按决策价值组织内容”。换句话说，不再只追求多，而是更强调什么值得关注、什么值得试、什么值得警惕。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>记忆系统的核心不是存储能力，而是筛选能力&lt;/strong>：真正有价值的长期记忆，通常只来自稳定偏好、关键决策、已验证结论、长期计划、重要事实和可复用流程。其余内容如果没有被压缩成方法论，留着只会变成噪声。&lt;/li>
&lt;li>&lt;strong>系统稳定性的关键常常不是功能本身，而是边界是否一致&lt;/strong>：当一个系统开始分层、拆实例、接更多自动化链路后，最容易出问题的往往不是某个单点能力，而是入口、认证、职责划分这些边界没有统一。&lt;/li>
&lt;li>&lt;strong>新能力接入越克制，长期越稳&lt;/strong>：相比一上来就做全量接管，先手动使用、局部验证、逐步扩大范围，往往更适合持续运行的环境。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>搜索词过长会直接拖垮检索质量&lt;/strong>：把整段提示词、上下文说明甚至工作区注入内容一起扔进检索，看起来像“信息更全”，实际上更容易造成召回失真甚至超时。检索系统更喜欢短、准、明确的问题。&lt;/li>
&lt;li>&lt;strong>自动化摘要如果不做过滤，会悄悄把系统变臃肿&lt;/strong>：成功通知、定时任务运行记录、线程同步信息，这些内容在当下有参考价值，但不适合作为长期知识保留。系统越自动，这类噪声越容易积累。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续压缩记忆系统里的边界项和重复主张，让长期记忆更适合检索和复用。&lt;/li>
&lt;li>继续完善 AI 信息流的自动化链路，重点补上去重与防重复触发。&lt;/li>
&lt;li>继续把正在推进的几个方向往“可持续”上收：不是追求一次做完，而是让系统以后少返工、少回退。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-20</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-20/</link><pubDate>Fri, 20 Mar 2026 22:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-20/</guid><description>&lt;p>今天的工作更偏向“把系统说明白”。很多时候，工程效率不是来自多写几段代码，而是来自把命名、提醒和选型这些基础问题先梳理清楚。基础一旦清楚，后续很多动作都会顺下来。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>命名体系开始收口&lt;/strong>：围绕一套产品命名方式做了结构化梳理，把原本分散的叫法整理成更清晰的层级关系。命名一旦统一，后续无论是归档、映射还是自动识别，成本都会明显下降。&lt;/li>
&lt;li>&lt;strong>任务提醒链路继续稳定化&lt;/strong>：同一套提醒机制在不同时间点给出了相对一致的结果，说明这条链路已经不只是“能跑”，而是在向“可依赖”靠近。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>好的命名规范本质上是在降低系统沟通成本&lt;/strong>：如果一套命名只能被少数人理解，它就更像内部黑话；如果它能稳定映射到平台、代际和能力差异，它才真正具备长期价值。&lt;/li>
&lt;li>&lt;strong>自动化体系成熟的标志不是任务数量，而是分层是否清楚&lt;/strong>：当提醒、汇总、检测和执行这些能力开始形成稳定分工，系统就会从单点脚本堆叠，演进成更像“运营架构”的东西。&lt;/li>
&lt;li>&lt;strong>硬件选型最怕脱离使用场景&lt;/strong>：同样一颗 CPU，在不同任务下价值完全不同。比起盯着参数高低，更重要的是明确自己的主要负载到底是什么。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>兼容性问题不能只看理论方案&lt;/strong>：纸面上可行的硬件方案，落到具体设备时仍然可能受安装位、接口规格和结构差异影响。越接近实体世界，越要尊重“逐项确认”这件事。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续把命名规范往后续流程里落，验证它是否真的能减少返工。&lt;/li>
&lt;li>继续观察提醒链路在真实使用中的稳定性，而不只停留在单次成功。&lt;/li>
&lt;li>继续把技术选择建立在实际使用场景之上，而不是单看参数表。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-19</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-19/</link><pubDate>Thu, 19 Mar 2026 22:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-19/</guid><description>&lt;p>今天更多是在看“系统什么时候该提醒，什么时候该克制”。一个自动化系统如果只会不停报消息，很快就会让人失去耐心；但如果它什么都不说，又失去了存在意义。真正难的是边界感。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>告警范围开始更接近真实风险&lt;/strong>：把关注点从单纯的应用状态，扩展到更广义的自动化运行状态。这样做的意义不在于让告警更多，而在于让真正值得人工介入的问题更早被看见。&lt;/li>
&lt;li>&lt;strong>异常状态识别更完整了一步&lt;/strong>：当某些凭证或访问条件失效时，系统不一定能继续判断全部上下文。这提醒我，自动化系统不只是要处理“正常输入”，还要明确面对“信息不完整”的表现方式。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>提醒系统的价值来自筛选，而不是频率&lt;/strong>：如果什么都提醒，提醒就会失去价值。比起频繁轮询，更重要的是找准哪些任务值得优先看、哪些状态只需要留痕不需要打扰。&lt;/li>
&lt;li>&lt;strong>静默策略是自动化系统成熟的重要标志&lt;/strong>：很多系统会做“能提醒”，但很少认真做“什么时候不该提醒”。真正长期可用的自动化，必须包含安静时段、节奏边界和打扰成本的设计。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>只有告警，没有自愈，系统仍然很脆&lt;/strong>：能发现问题固然重要，但如果后续没有重试、回退或补救机制，很多告警最终还是只能堆成人工负担。&lt;/li>
&lt;li>&lt;strong>依赖单点前提的监控很容易出现盲区&lt;/strong>：一旦某个关键前提失效，系统可能不只是“报错”，而是直接失去判断能力。这类问题往往比普通失败更值得优先补上。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续区分“需要提醒”和“只需记录”的事件类型。&lt;/li>
&lt;li>评估哪些告警链路值得补自动重试或基础自愈。&lt;/li>
&lt;li>继续把监控目标从单点状态扩展到真实可用性。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-18</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-18/</link><pubDate>Wed, 18 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-18/</guid><description>&lt;p>今天的信息输入比较密集，但真正值得留下来的，不是“看到了多少新东西”，而是几个越来越清楚的趋势：模型在分化，助手在贴近个人场景，工具链则在向更专门化的方向走。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>信息监控继续维持可用状态&lt;/strong>：今天的重点不是做大的改动，而是确认几条关键监控链路依旧可靠。对自动化系统来说，稳定地获得输入，往往比增加新能力更重要。&lt;/li>
&lt;li>&lt;strong>工具版本保持收敛&lt;/strong>：没有为了追新而升级，而是先确认当前版本是否足够稳定。很多时候，不升级也是一种工程判断。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>模型正在明显分化成更细的使用形态&lt;/strong>：一部分模型继续追求通用能力，另一部分则越来越强调特定任务、特定负载和特定场景的效率。这意味着以后做技术选型，不能再只看“谁最强”，而要看“谁最合适”。&lt;/li>
&lt;li>&lt;strong>个人助理式 AI 正在更接近真实使用场景&lt;/strong>：当工具开始更深地理解用户的历史行为、个人上下文和长期偏好时，AI 的角色也会从“回答问题的工具”逐渐走向“持续协作的助手”。&lt;/li>
&lt;li>&lt;strong>稳定版本的价值经常被低估&lt;/strong>：如果一个工具当前已经足够稳定、足够满足需求，那么保持版本不乱动，本身就是降低风险的一种方式。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>信息监控最容易滑向“信息堆积”&lt;/strong>：输入越多，越容易把重要和不重要混在一起。系统要真正有价值，核心不是看得多，而是能不能把重点筛出来。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续观察模型和工具链的演进方向，重点关注那些真正改变工作方式的变化。&lt;/li>
&lt;li>继续收敛监控内容，把注意力集中在少量高价值信号上。&lt;/li>
&lt;li>在稳定优先的前提下，再决定哪些工具值得进一步跟进。&lt;/li>
&lt;/ul></description></item><item><title>每日技术实践简报 - 2026-03-17</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-17/</link><pubDate>Tue, 17 Mar 2026 23:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-17/</guid><description>&lt;p>今天更像一次“把系统从能用推向稳用”的过程。很多问题表面看是单点故障，但往下挖，会发现真正需要治理的是配置习惯、安全边界和系统默契。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>索引与可发现性问题得到修复&lt;/strong>：一项影响内容被发现的能力恢复正常。看起来只是一个结果恢复，但背后真正重要的是验证链路是否重新闭环。&lt;/li>
&lt;li>&lt;strong>一项平台能力完成阶段性增强&lt;/strong>：这次推进的重点不在“功能更多”，而在“能力更完整”，包括模型接入、动态配置以及基本的安全防护都往前走了一步。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>安全治理最好在系统早期就做进默认动作里&lt;/strong>：输入校验、认证、输出清洗这类能力，如果一开始没建立边界，后面补起来通常成本更高。&lt;/li>
&lt;li>&lt;strong>静默策略不是附属规则，而是系统体验的一部分&lt;/strong>：深夜只做状态检查、不重复提醒，看似只是交互细节，实际上决定了系统是否长期可用。&lt;/li>
&lt;li>&lt;strong>配置清洁度会直接影响系统稳定性&lt;/strong>：占位符、硬编码、路径约定这些小问题，平时看不起眼，但往往最容易在后续运维里变成真实故障。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>远程依赖的可用性经常卡在认证而不是逻辑&lt;/strong>：很多“拉不下来”“连不上”的问题，最终都不是代码逻辑本身，而是访问边界没有配置对。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续把配置治理、安全边界和运行策略做得更一致。&lt;/li>
&lt;li>继续验证恢复后的链路是否稳定，而不是只看一次成功。&lt;/li>
&lt;li>继续审查外部依赖的访问前提，减少后续中断。&lt;/li>
&lt;/ul></description></item><item><title>2026 AI Agent 工程化全景：从框架选型到生产落地</title><link>https://blog.treesir.pub/posts/ai-agent-engineering-landscape-2026/</link><pubDate>Mon, 16 Mar 2026 14:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/ai-agent-engineering-landscape-2026/</guid><description>从 7 层架构到框架选型、从多智能体协作到记忆系统、从 Coding Agent 到企业工具链的 AI Agent 2026 工程化实践全景。</description></item><item><title>PVE 虚拟机启动失败：qcow2 corrupt 标记残留的排查与修复</title><link>https://blog.treesir.pub/posts/pve-qcow2-corrupt-fix/</link><pubDate>Mon, 16 Mar 2026 14:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/pve-qcow2-corrupt-fix/</guid><description>qcow2 镜像 corrupt 标记残留导致 PVE 虚拟机无法启动，快照回滚也失效。25 分钟内通过分阶段低风险修复恢复，附完整 SOP。</description></item><item><title>Claude Code + GitLab pr-agent：AI 驱动的持续迭代开发实践</title><link>https://blog.treesir.pub/posts/claude-code-pr-agent-continuous-iteration/</link><pubDate>Mon, 16 Mar 2026 13:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/claude-code-pr-agent-continuous-iteration/</guid><description>32 个 MR 的真实案例，展示 Claude Code + GitLab CI + pr-agent 三位一体的 AI 驱动持续迭代开发工作流。</description></item><item><title>从 60 分到 95 分：Hugo Blowfish 博客的极致优化之路</title><link>https://blog.treesir.pub/posts/hugo-blowfish-blog-optimization-journey/</link><pubDate>Mon, 16 Mar 2026 12:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/hugo-blowfish-blog-optimization-journey/</guid><description>20+ 项优化、16 个 MR、涵盖 SEO 修复、布局重构、苹果代码框、封面图自动化和 SSH 远程部署的完整博客优化复盘。</description></item><item><title>Blowfish 文章优化前后对比分析</title><link>https://blog.treesir.pub/posts/blowfish-optimization-comparison/</link><pubDate>Mon, 16 Mar 2026 02:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/blowfish-optimization-comparison/</guid><description>通过 Front Matter、内容结构和 Shortcodes 的具体优化前后对比，直观展示文章质量提升效果。</description></item><item><title>Blowfish 主题文章优化指南</title><link>https://blog.treesir.pub/posts/blowfish-optimization-guide/</link><pubDate>Mon, 16 Mar 2026 02:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/blowfish-optimization-guide/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
本文提供全面的 Blowfish 主题文章优化最佳实践，帮助你创建优雅、简洁、结构化、美观、逻辑清晰的技术文档。从 Front Matter 到 Shortcodes，一站式掌握 Blowfish 的正确用法。
&lt;/div>
&lt;h2 class="relative group">Front Matter 优化
&lt;div id="front-matter-优化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#front-matter-%e4%bc%98%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">推荐的完整 Front Matter 模板
&lt;div id="推荐的完整-front-matter-模板" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e7%9a%84%e5%ae%8c%e6%95%b4-front-matter-%e6%a8%a1%e6%9d%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 基础信息&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;文章标题&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SEO 友好的简短描述，建议 150-160 字符&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T10:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">lastmod&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T12:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">draft&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 分类&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;kubernetes&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;devops&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;云原生&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;技术实践&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Kubernetes 进阶&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 如果属于某个系列&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series_order&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 系列中的顺序&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 图片&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">featureimage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;https://images.unsplash.com/photo-1461749280684-dccba630e2f6?w=1920&amp;amp;h=1080&amp;amp;fit=crop&amp;amp;q=100&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">featureimagecaption&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;图片说明（可选）&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;background&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># basic, big, background, thumbAndBackground&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 显示控制&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showDate&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showDateUpdated&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showReadingTime&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showWordCount&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTaxonomies&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showBreadcrumbs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showPagination&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showZenMode&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># SEO&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">robots&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;index, follow&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">excludeFromSearch&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">Front Matter 参数分类
&lt;div id="front-matter-参数分类" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#front-matter-%e5%8f%82%e6%95%b0%e5%88%86%e7%b1%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;h4 class="relative group">必需参数
&lt;div id="必需参数" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%bf%85%e9%9c%80%e5%8f%82%e6%95%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>示例&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>title&lt;/code>&lt;/td>
&lt;td>文章标题&lt;/td>
&lt;td>&lt;code>&amp;quot;Kubernetes 部署指南&amp;quot;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>description&lt;/code>&lt;/td>
&lt;td>SEO 描述&lt;/td>
&lt;td>&lt;code>&amp;quot;从零开始学习 K8s 集群部署&amp;quot;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>date&lt;/code>&lt;/td>
&lt;td>发布日期&lt;/td>
&lt;td>&lt;code>2026-03-16T10:00:00+08:00&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tags&lt;/code>&lt;/td>
&lt;td>标签（数组）&lt;/td>
&lt;td>&lt;code>[&amp;quot;kubernetes&amp;quot;, &amp;quot;devops&amp;quot;]&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 class="relative group">推荐参数
&lt;div id="推荐参数" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e5%8f%82%e6%95%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>建议值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>showHero&lt;/code>&lt;/td>
&lt;td>显示英雄图&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>heroStyle&lt;/code>&lt;/td>
&lt;td>英雄图样式&lt;/td>
&lt;td>&lt;code>&amp;quot;background&amp;quot;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>showTableOfContents&lt;/code>&lt;/td>
&lt;td>显示目录&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>showReadingTime&lt;/code>&lt;/td>
&lt;td>显示阅读时间&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>showBreadcrumbs&lt;/code>&lt;/td>
&lt;td>显示面包屑&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>showZenMode&lt;/code>&lt;/td>
&lt;td>显示 Zen 模式&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 class="relative group">可选参数
&lt;div id="可选参数" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8f%af%e9%80%89%e5%8f%82%e6%95%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>参数&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>使用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>lastmod&lt;/code>&lt;/td>
&lt;td>最后更新日期&lt;/td>
&lt;td>更新文章后&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>series&lt;/code>&lt;/td>
&lt;td>系列名称&lt;/td>
&lt;td>多篇相关文章&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>series_order&lt;/code>&lt;/td>
&lt;td>系列顺序&lt;/td>
&lt;td>系列文章排序&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>featureimage&lt;/code>&lt;/td>
&lt;td>特性图片&lt;/td>
&lt;td>有配图的文章&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>robots&lt;/code>&lt;/td>
&lt;td>SEO 指令&lt;/td>
&lt;td>控制搜索引擎行为&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 class="relative group">不同类型文章的 Front Matter 建议
&lt;div id="不同类型文章的-front-matter-建议" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%8d%e5%90%8c%e7%b1%bb%e5%9e%8b%e6%96%87%e7%ab%a0%e7%9a%84-front-matter-%e5%bb%ba%e8%ae%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;h4 class="relative group">技术教程
&lt;div id="技术教程" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8a%80%e6%9c%af%e6%95%99%e7%a8%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;从零开始部署 Kubernetes 集群&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;详细介绍如何在生产环境部署高可用 K8s 集群&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T10:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;kubernetes&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;devops&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;tutorial&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;技术教程&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Kubernetes 生产实践&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series_order&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;background&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">featureimage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;k8s-cluster.jpg&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showReadingTime&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h4 class="relative group">概念解析
&lt;div id="概念解析" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a6%82%e5%bf%b5%e8%a7%a3%e6%9e%90" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;深入理解 Kubernetes 架构&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;解析 K8s 核心组件和设计理念&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T10:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;kubernetes&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;architecture&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;技术概念&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;basic&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showReadingTime&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h4 class="relative group">实战案例
&lt;div id="实战案例" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e6%88%98%e6%a1%88%e4%be%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;K8s 故障排查：Pod 一直处于 CrashLoopBackOff&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;记录一次完整的 K8s 故障排查过程&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T10:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">lastmod&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T12:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;kubernetes&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;troubleshooting&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;case-study&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;故障排查&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;background&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">featureimage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;debugging.jpg&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showDateUpdated&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 class="relative group">内容结构最佳实践
&lt;div id="内容结构最佳实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%86%85%e5%ae%b9%e7%bb%93%e6%9e%84%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">1. 使用 Lead 引言
&lt;div id="1-使用-lead-引言" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e4%bd%bf%e7%94%a8-lead-%e5%bc%95%e8%a8%80" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>在文章开头使用 &lt;code>lead&lt;/code> 突出核心内容：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">从零开始学习 Kubernetes 集群部署，涵盖环境准备、集群初始化、
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">网络配置到生产就绪的完整流程。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">2. 结构化标题层级
&lt;div id="2-结构化标题层级" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#2-%e7%bb%93%e6%9e%84%e5%8c%96%e6%a0%87%e9%a2%98%e5%b1%82%e7%ba%a7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 主标题（H1，自动由 title 生成）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">引言内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 第一部分（H2）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 子章节 1.1（H3）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">#### 细节说明（H4）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 子章节 1.2（H3）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 第二部分（H2）
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div
class="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900"
>
&lt;span
class="text-primary-400 ltr:pr-3 rtl:pl-3 flex items-center"
>
&lt;span class="relative block icon">
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/>&lt;/svg>
&lt;/span>
&lt;/span>
&lt;span
class="dark:text-neutral-300"
>&lt;strong>标题建议&lt;/strong>：H2 用于主要章节，H3 用于子章节，H4 用于细节说明，避免超过 4 级标题。&lt;/span>
&lt;/div>
&lt;h3 class="relative group">3. 使用表格对比信息
&lt;div id="3-使用表格对比信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#3-%e4%bd%bf%e7%94%a8%e8%a1%a8%e6%a0%bc%e5%af%b9%e6%af%94%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">| 特性 | Docker | Kubernetes |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|--------|-----------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 容器编排 | 单机 | 集群级别 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 服务发现 | 手动配置 | 自动发现 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 负载均衡 | 需要额外工具 | 内置支持 |
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">4. 代码块语法高亮
&lt;div id="4-代码块语法高亮" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#4-%e4%bb%a3%e7%a0%81%e5%9d%97%e8%af%ad%e6%b3%95%e9%ab%98%e4%ba%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>支持的语言：&lt;code>bash&lt;/code>, &lt;code>yaml&lt;/code>, &lt;code>json&lt;/code>, &lt;code>go&lt;/code>, &lt;code>python&lt;/code>, &lt;code>javascript&lt;/code>, &lt;code>typescript&lt;/code>, &lt;code>dockerfile&lt;/code>, &lt;code>nginx&lt;/code> 等。&lt;/p>
&lt;h3 class="relative group">5. 使用 Callout 提示重要信息
&lt;div id="5-使用-callout-提示重要信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#5-%e4%bd%bf%e7%94%a8-callout-%e6%8f%90%e7%a4%ba%e9%87%8d%e8%a6%81%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">alert&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;triangle-exclamation&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**警告**&lt;/span>：此操作不可逆，请先备份数据！
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">alert&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">alert&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;check-circle&amp;#34;&lt;/span> &lt;span class="na">cardColor&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="ni">#10b981&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="na">iconColor&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="ni">#fff&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="na">textColor&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="ni">#fff&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**最佳实践**&lt;/span>：使用 Helm 管理应用配置。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">alert&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 class="relative group">Shortcodes 使用指南
&lt;div id="shortcodes-使用指南" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#shortcodes-%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">1. Mermaid 流程图
&lt;div id="1-mermaid-流程图" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-mermaid-%e6%b5%81%e7%a8%8b%e5%9b%be" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>替代 ASCII 字符画，使用 Mermaid 绘制流程图：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">graph TB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[开始部署] --&amp;gt; B{环境检查}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt;|通过| C[安装 Docker]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt;|失败| D[修复环境]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D --&amp;gt; B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt; E[初始化集群]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt; F[部署网络插件]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G[验证集群]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常见图表类型：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>流程图&lt;/strong> &lt;code>graph TD&lt;/code> - 决策流程、部署步骤&lt;/li>
&lt;li>&lt;strong>时序图&lt;/strong> &lt;code>sequenceDiagram&lt;/code> - API 调用、组件交互&lt;/li>
&lt;li>&lt;strong>架构图&lt;/strong> &lt;code>graph TB&lt;/code> + &lt;code>subgraph&lt;/code> - 系统架构&lt;/li>
&lt;/ul>
&lt;h3 class="relative group">2. Figure 增强图片
&lt;div id="2-figure-增强图片" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#2-figure-%e5%a2%9e%e5%bc%ba%e5%9b%be%e7%89%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">figure&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;architecture.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">alt&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;Kubernetes 架构图&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">caption&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;图 1：Kubernetes 集群架构&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://kubernetes.io&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">target&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;_blank&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">3. Button 行动按钮
&lt;div id="3-button-行动按钮" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#3-button-%e8%a1%8c%e5%8a%a8%e6%8c%89%e9%92%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">button&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://github.com&amp;#34;&lt;/span> &lt;span class="na">target&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;_blank&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">查看源码
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">button&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">4. Badge 标签
&lt;div id="4-badge-标签" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#4-badge-%e6%a0%87%e7%ad%be" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">badge&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}New{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">badge&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">badge&lt;/span> &lt;span class="na">style&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;warning&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}Deprecated{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">badge&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">5. Timeline 时间线
&lt;div id="5-timeline-时间线" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#5-timeline-%e6%97%b6%e9%97%b4%e7%ba%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">timeline&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">timelineItem&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;check&amp;#34;&lt;/span> &lt;span class="na">header&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;第一步&amp;#34;&lt;/span> &lt;span class="na">subheader&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;2026-03-01&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">项目启动
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">timelineItem&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">timelineItem&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;check&amp;#34;&lt;/span> &lt;span class="na">header&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;第二步&amp;#34;&lt;/span> &lt;span class="na">subheader&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;2026-03-10&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">完成开发
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">timelineItem&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">timeline&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">6. KaTeX 数学公式
&lt;div id="6-katex-数学公式" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#6-katex-%e6%95%b0%e5%ad%a6%e5%85%ac%e5%bc%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- 行内公式 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">katex&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}a^2 + b^2 = c^2{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">katex&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- 块级公式 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">katex&lt;/span> &lt;span class="na">display&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;true&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">katex&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 class="relative group">实战优化示例
&lt;div id="实战优化示例" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%9e%e6%88%98%e4%bc%98%e5%8c%96%e7%a4%ba%e4%be%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">技术教程优化
&lt;div id="技术教程优化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8a%80%e6%9c%af%e6%95%99%e7%a8%8b%e4%bc%98%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;strong>优化前：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Traefik 部署&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2021-01-17&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;traefik&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># Traefik 简介
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Traefik 是一个反向代理...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 安装
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">kubectl apply -f traefik.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>优化后：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Traefik Ingress Controller 完整部署指南&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;从零开始学习 Traefik：详细介绍如何在 Kubernetes 中部署和配置 Traefik Ingress Controller&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2021-01-17T16:15:32&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">lastmod&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-16T10:00:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;traefik&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ingress&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;kubernetes&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;网络&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Kubernetes&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Kubernetes 网络实践&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series_order&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">featureimage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;traefik-architecture.png&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;background&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showReadingTime&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showDateUpdated&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>优化后的内容结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Traefik 是现代化的云原生反向代理和负载均衡器，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">专为微服务架构设计。本指南将带你从零开始掌握 Traefik 的部署和配置。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## Traefik 核心优势
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 特性 | 传统代理 | Traefik |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|----------|---------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 配置方式 | 手动编辑 | 自动发现 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 配置更新 | 需要重启 | 动态实时更新 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 容器支持 | 需要额外配置 | 原生支持 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 架构概览
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">graph TB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Client[客户端] --&amp;gt; Traefik
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Traefik --&amp;gt; Service1[服务 A]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Traefik --&amp;gt; Service2[服务 B]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Traefik --&amp;gt; Service3[服务 C]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> subgraph Kubernetes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Service1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Service2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Service3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> end
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 部署方式
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 使用 Helm 部署
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">​``&lt;span class="sb">`bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">helm repo add traefik https://traefik.github.io/charts
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">helm install traefik traefik/traefik \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb"> --namespace traefik \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb"> --create-namespace
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">​`&lt;/span>`&lt;span class="sb">`
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">### 使用 kubectl 部署
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">​`&lt;/span>`&lt;span class="sb">`bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">kubectl apply -f https://raw.githubusercontent.com/.../kubernetes-crd-rbac.yml
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sb">​`&lt;/span>``
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">alert&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;triangle-exclamation&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**注意**&lt;/span>：生产环境建议配置持久化存储和 RBAC 权限。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">alert&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">架构文档优化
&lt;div id="架构文档优化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9e%b6%e6%9e%84%e6%96%87%e6%a1%a3%e4%bc%98%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;strong>优化前：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;OpenClaw 架构&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-15&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>优化后：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;OpenClaw AI Agent 架构解析：多引擎联动与记忆系统&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;深入解析 OpenClaw AI Agent 的核心架构设计，包括多 AI 引擎联动、Skills 系统和 MCP 集成&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-03-15T22:30:00&lt;/span>&lt;span class="m">+08&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;AI&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Agent&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;OpenClaw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Architecture&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;系统架构&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;OpenClaw 技术解析&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series_order&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showHero&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">heroStyle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;background&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showTableOfContents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showReadingTime&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">showZenMode&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>优化后的内容结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenClaw 是一个现代化的 AI Agent 框架，支持多引擎联动、技能系统和记忆管理。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">本文将深入解析其核心架构设计。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">lead&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 核心架构
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">graph TB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> subgraph Agent[&amp;#34;OpenClaw Agent&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Claude[&amp;#34;Claude Sonnet 4.6&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPT[&amp;#34;GPT-5.2/5.3&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> end
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> subgraph Router[&amp;#34;Model Router&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Route[&amp;#34;路由层&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> end
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Claude --&amp;gt; Route
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPT --&amp;gt; Route
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Route --&amp;gt; Skills[&amp;#34;Skills Layer&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Skills --&amp;gt; MCP[&amp;#34;MCP Layer&amp;#34;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 核心组件说明
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 组件 | 职责 | 技术栈 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|------|--------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| &lt;span class="gs">**Agent 层**&lt;/span> | AI 模型集成 | Claude, GPT, GLM, Gemini |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| &lt;span class="gs">**Router 层**&lt;/span> | 智能路由分发 | 自定义路由规则 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| &lt;span class="gs">**Skills 层**&lt;/span> | 技能系统 | 90+ 预置技能 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| &lt;span class="gs">**MCP 层**&lt;/span> | 外部集成 | Teambition, Nowledge Mem |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nt">alert&lt;/span> &lt;span class="na">icon&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;triangle-exclamation&amp;#34;&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**重要**&lt;/span>：Working Memory 每日自动清理，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">重要信息需要手动归档到 Long-term Memory。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="nt">alert&lt;/span> &lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 class="relative group">常见问题
&lt;div id="常见问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">如何选择 heroStyle？
&lt;div id="如何选择-herostyle" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e9%80%89%e6%8b%a9-herostyle" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>heroStyle&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;th>特点&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>basic&lt;/code>&lt;/td>
&lt;td>简单文章&lt;/td>
&lt;td>小图片，简洁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>big&lt;/code>&lt;/td>
&lt;td>重要文章&lt;/td>
&lt;td>大图片，突出&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>background&lt;/code>&lt;/td>
&lt;td>推荐&lt;/td>
&lt;td>全屏背景，现代感&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>thumbAndBackground&lt;/code>&lt;/td>
&lt;td>双图需求&lt;/td>
&lt;td>缩略图+背景&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>大多数文章推荐使用 &lt;code>background&lt;/code>。&lt;/p>
&lt;h3 class="relative group">何时使用 Mermaid？
&lt;div id="何时使用-mermaid" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bd%95%e6%97%b6%e4%bd%bf%e7%94%a8-mermaid" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>适用场景：流程图、时序图、架构图、状态转换图、甘特图。&lt;/p>
&lt;p>不适用场景：简单的 2-3 步流程（用列表即可）、需要精细控制的图形（用图片）。&lt;/p>
&lt;h3 class="relative group">如何优化图片？
&lt;div id="如何优化图片" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e4%bc%98%e5%8c%96%e5%9b%be%e7%89%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ol>
&lt;li>使用 WebP 格式（Hugo 自动转换）&lt;/li>
&lt;li>提供不同尺寸（响应式）&lt;/li>
&lt;li>添加 alt 文本（SEO）&lt;/li>
&lt;li>使用 caption 说明&lt;/li>
&lt;/ol>
&lt;h3 class="relative group">如何组织系列文章？
&lt;div id="如何组织系列文章" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e7%bb%84%e7%bb%87%e7%b3%bb%e5%88%97%e6%96%87%e7%ab%a0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ol>
&lt;li>规划系列名称和顺序&lt;/li>
&lt;li>每篇文章添加 &lt;code>series&lt;/code> 和 &lt;code>series_order&lt;/code>&lt;/li>
&lt;li>第一篇设置 &lt;code>seriesOpened: true&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Kubernetes 进阶&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">series_order&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">seriesOpened&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">性能优化建议
&lt;div id="性能优化建议" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96%e5%bb%ba%e8%ae%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;strong>构建优化&lt;/strong>：启用图片优化（默认开启）、使用 CDN 加速、减少不必要的 shortcodes。&lt;/p>
&lt;p>&lt;strong>内容优化&lt;/strong>：合理使用 Mermaid（避免过多）、图片压缩后再上传、使用 `&lt;/p></description></item><item><title>每日技术实践简报 - 2026-03-15</title><link>https://blog.treesir.pub/posts/daily-practice-2026-03-15/</link><pubDate>Sun, 15 Mar 2026 23:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/daily-practice-2026-03-15/</guid><description>&lt;p>今天做的事情很多，但核心其实只有一个：把原本零散的博客发布动作，逐步收成一条更稳定的自动化链路。做这类系统时，最耗时间的往往不是“功能写出来”，而是把那些看似不起眼的前提条件一个个踩实。&lt;/p>
&lt;h2 class="relative group">解决的问题
&lt;div id="解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>自动化任务的执行前提被补齐&lt;/strong>：一些之前容易被忽略的必要参数和调用约束，这次都被重新确认并纳入固定流程。很多自动化任务不是逻辑错，而是前提没说清。&lt;/li>
&lt;li>&lt;strong>博客渲染规则得到统一&lt;/strong>：围绕图表渲染、正文写法和页面配置，把容易反复踩坑的地方都做了规范化处理。统一写法的价值，不是好看，而是避免下次再被同一类问题绊住。&lt;/li>
&lt;li>&lt;strong>重复发布风险开始被正视&lt;/strong>：内容自动生成一旦没有前置检查，很容易把同一主题发成多个版本。与其事后清理，不如在发布前就建立一层重复检查。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">学到的新东西
&lt;div id="学到的新东西" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%a6%e5%88%b0%e7%9a%84%e6%96%b0%e4%b8%9c%e8%a5%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>自动化系统最重要的是“前提显式化”&lt;/strong>：什么字段必须有、什么格式必须对、什么配置必须先开，这些条件如果只存在脑子里，系统迟早会在别的时间点再坏一次。&lt;/li>
&lt;li>&lt;strong>内容系统也需要工程治理&lt;/strong>：博客表面上是内容输出，但一旦接入自动生成、渲染和发布流程，它本质上就是一套工程系统，同样需要规范、去重和失败兜底。&lt;/li>
&lt;li>&lt;strong>好的技能不是功能更多，而是更少重复踩坑&lt;/strong>：当一个技能把超时、重试、格式约束和重复检查都处理好之后，它才算真正变得“能长期用”。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">踩坑记录
&lt;div id="踩坑记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>看似很小的格式问题，会一路放大成发布故障&lt;/strong>：文件命名、大小写、图表写法、正文转义这些细节，只要有一个没处理好，就可能让后面的渲染或发布全部出问题。&lt;/li>
&lt;li>&lt;strong>发布前不做去重，后面就要花更多时间清理&lt;/strong>：自动化一旦缺少“停止条件”，它就会用极高效率把重复问题放大。&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">明日计划
&lt;div id="明日计划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%98%8e%e6%97%a5%e8%ae%a1%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>继续补强博客自动化链路的前置检查与失败兜底。&lt;/li>
&lt;li>继续把容易重复踩的格式和配置问题收敛成固定规范。&lt;/li>
&lt;li>继续观察内容生成与发布流程是否真正具备长期稳定性。&lt;/li>
&lt;/ul></description></item><item><title>OpenClaw Skills Registry 安全架构与企业级实践指南</title><link>https://blog.treesir.pub/posts/openclaw-skills-registry-security-guide/</link><pubDate>Sun, 15 Mar 2026 22:45:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openclaw-skills-registry-security-guide/</guid><description>&lt;h2 class="relative group">OpenClaw Skills Registry 安全架构与企业级实践指南
&lt;div id="openclaw-skills-registry-安全架构与企业级实践指南" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openclaw-skills-registry-%e5%ae%89%e5%85%a8%e6%9e%b6%e6%9e%84%e4%b8%8e%e4%bc%81%e4%b8%9a%e7%ba%a7%e5%ae%9e%e8%b7%b5%e6%8c%87%e5%8d%97" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Author: Negentropy
Updated: 2026-03-15&lt;/p>
&lt;p>This document is based on &lt;a
href="https://community.alibabacloud.com/blog/openclaw-avoiding-malicious-skills-and-why-enterprises-need-their-own-skills-registry---nacos-3-2-release_602946"
target="_blank"
>Alibaba Cloud Community&lt;/a>&lt;/p>
&lt;hr>
&lt;h2 class="relative group">目录
&lt;div id="目录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%9b%ae%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="#0-%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af%e4%b8%8e%e5%8a%a8%e6%9c%ba">0. 问题背景与动机&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#1-%e5%ae%89%e5%85%a8%e9%a3%8e%e9%99%a9%e5%88%86%e6%9e%90">1. 安全风险分析&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#2-%e4%bc%81%e4%b8%9a%e7%ba%a7%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88">2. 企业级解决方案&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#3-nacos-32-skills-registry">3. Nacos 3.2 Skills Registry&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#4-openclaw-%e9%9b%86%e6%88%90%e5%ae%9e%e8%b7%b5">4. OpenClaw 集成实践&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#5-%e9%83%a8%e7%bd%b2%e6%b5%81%e7%a8%8b">5. 部署流程&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#6-%e5%ae%89%e5%85%a8%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5">6. 安全最佳实践&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#7-%e5%af%b9%e6%af%94%e4%b8%8e%e9%80%89%e5%9e%8b">7. 对比与选型&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#8-%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5">8. 故障排查&lt;/a>&lt;/li>
&lt;li>&lt;a
href="#9-%e8%b5%84%e6%ba%90%e9%93%be%e6%8e%a5">9. 资源链接&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 class="relative group">0. 问题背景与动机
&lt;div id="0-问题背景与动机" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#0-%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af%e4%b8%8e%e5%8a%a8%e6%9c%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">0.1 为什么需要 Skills Registry?
&lt;div id="01-为什么需要-skills-registry" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#01-%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81-skills-registry" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>OpenClaw 的 Skills 生态系统正在快速发展，ClawHub 上已有超过 10,000 个技能包。但这种开放生态也带来了安全挑战。&lt;/p></description></item><item><title>OpenClaw AI Agent 架构解析：多引擎联动与记忆系统</title><link>https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/</link><pubDate>Sun, 15 Mar 2026 22:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openclaw-ai-agent-architecture-v2/</guid><description>&lt;h2 class="relative group">OpenClaw AI Agent 架构解析
&lt;div id="openclaw-ai-agent-架构解析" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openclaw-ai-agent-%e6%9e%b6%e6%9e%84%e8%a7%a3%e6%9e%90" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">核心架构
&lt;div id="核心架构" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a0%b8%e5%bf%83%e6%9e%b6%e6%9e%84" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="mermaid" align="center">
&lt;pre>
graph TB
subgraph Agent["OpenClaw Agent"]
Claude["Claude Sonnet 4.6"]
GPT["GPT-5.2/5.3"]
GLM["GLM-5"]
Gemini["Gemini Pro"]
end
subgraph Router["Model Router"]
Route["路由层"]
end
subgraph Skills["Skills Layer"]
Blog["blog-post-generator"]
Daily["daily-blog-generator"]
Code["coding-agent"]
Others["90+ skills..."]
end
subgraph MCP["MCP Layer"]
Team["Teambition MCP"]
NMem["Nowledge Mem MCP"]
Other["其他 MCP..."]
end
Claude --> Route
GPT --> Route
GLM --> Route
Gemini --> Route
Route --> Skills
Skills --> MCP
&lt;/pre>
&lt;/div>
&lt;h2 class="relative group">1. 多 AI 引擎联动
&lt;div id="1-多-ai-引擎联动" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e5%a4%9a-ai-%e5%bc%95%e6%93%8e%e8%81%94%e5%8a%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">模型配置
&lt;div id="模型配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a8%a1%e5%9e%8b%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;providers&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;anthropic-local&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;models&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;openai-codex&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;models&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;gpt-5.2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;gpt-5.3-codex&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;zai&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;models&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;glm-5&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">路由策略
&lt;div id="路由策略" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%b7%af%e7%94%b1%e7%ad%96%e7%95%a5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
flowchart LR
A[任务类型] --> B{判断}
B -->|日常对话| C[Claude Sonnet 4.6]
B -->|代码生成| D[GPT-5.3-Codex]
B -->|复杂推理| E[GPT-5.4]
B -->|中文任务| F[GLM-5]
&lt;/pre>
&lt;/div>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>任务类型&lt;/th>
&lt;th>推荐模型&lt;/th>
&lt;th>原因&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>日常对话&lt;/td>
&lt;td>Claude Sonnet 4.6&lt;/td>
&lt;td>成本低、速度快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>代码生成&lt;/td>
&lt;td>GPT-5.3-Codex&lt;/td>
&lt;td>代码能力强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>复杂推理&lt;/td>
&lt;td>GPT-5.4&lt;/td>
&lt;td>推理能力最强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>中文任务&lt;/td>
&lt;td>GLM-5&lt;/td>
&lt;td>中文理解好&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 class="relative group">Sub-Agent 编排
&lt;div id="sub-agent-编排" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#sub-agent-%e7%bc%96%e6%8e%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
graph LR
Main[主 Agent&lt;br/>Claude Sonnet 4.6] --> S1[Sub-Agent 1&lt;br/>GPT-5.2 搜索总结]
Main --> S2[Sub-Agent 2&lt;br/>Claude 文档处理]
Main --> S3[Sub-Agent 3&lt;br/>GPT-5.3 代码审查]
&lt;/pre>
&lt;/div>
&lt;h2 class="relative group">2. 记忆系统
&lt;div id="2-记忆系统" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#2-%e8%ae%b0%e5%bf%86%e7%b3%bb%e7%bb%9f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">架构图
&lt;div id="架构图" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9e%b6%e6%9e%84%e5%9b%be" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
graph TB
subgraph Memory["记忆系统"]
WM["Working Memory&lt;br/>(工作记忆)"]
NM["Nowledge Mem&lt;br/>(知识图谱)"]
LT["MEMORY.md&lt;br/>(长期记忆)"]
TL["Timeline&lt;br/>(时间线)"]
end
WM &lt;--> NM
NM --> TL
NM --> LT
Session[每次对话] --> WM
Session --> NM
&lt;/pre>
&lt;/div>
&lt;h3 class="relative group">三层记忆
&lt;div id="三层记忆" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%89%e5%b1%82%e8%ae%b0%e5%bf%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
flowchart TD
A[对话启动] --> B[Working Memory&lt;br/>当日焦点]
A --> C[相关记忆&lt;br/>语义搜索]
A --> D[Timeline&lt;br/>最近活动]
B --> E[构建上下文]
C --> E
D --> E
E --> F[Agent 响应]
&lt;/pre>
&lt;/div>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>层级&lt;/th>
&lt;th>存储&lt;/th>
&lt;th>用途&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Working Memory&lt;/td>
&lt;td>Nowledge Mem&lt;/td>
&lt;td>当日焦点、优先事项&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Long-term Memory&lt;/td>
&lt;td>MEMORY.md&lt;/td>
&lt;td>持久化记忆、偏好&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Timeline&lt;/td>
&lt;td>Nowledge Mem&lt;/td>
&lt;td>活动历史、事件记录&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 class="relative group">3. 定时任务系统
&lt;div id="3-定时任务系统" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#3-%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1%e7%b3%bb%e7%bb%9f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">Cron 配置
&lt;div id="cron-配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#cron-%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;每日博客简报生成&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;schedule&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;kind&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;cron&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;expr&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;0 23 * * *&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;payload&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;kind&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;agentTurn&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;message&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;执行 daily-blog-generator skill&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;model&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;anthropic-local/claude-sonnet-4-6&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;sessionTarget&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;isolated&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">任务类型
&lt;div id="任务类型" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%bb%e5%8a%a1%e7%b1%bb%e5%9e%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
flowchart LR
A[Cron 任务] --> B{类型}
B -->|systemEvent| C[注入系统事件&lt;br/>无需 model]
B -->|agentTurn| D[隔离会话执行&lt;br/>需要 model]
&lt;/pre>
&lt;/div>
&lt;h2 class="relative group">4. Skills 体系
&lt;div id="4-skills-体系" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#4-skills-%e4%bd%93%e7%b3%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">目录结构
&lt;div id="目录结构" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;pre tabindex="0">&lt;code>~/.agents/skills/
├── blog-post-generator/
│ └── SKILL.md
├── daily-blog-generator/
│ └── SKILL.md
├── coding-agent/
│ └── SKILL.md
└── ... 90+ skills
&lt;/code>&lt;/pre>
&lt;h3 class="relative group">Skill 触发流程
&lt;div id="skill-触发流程" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#skill-%e8%a7%a6%e5%8f%91%e6%b5%81%e7%a8%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
sequenceDiagram
participant U as 用户
participant A as Agent
participant S as Skill
participant B as 博客
U->>A: 随机找一篇上传 blog
A->>S: 匹配 blog-post-generator
S->>S: 1. 从远程仓库获取文档
S->>S: 2. 检查博客已有内容
S->>S: 3. 优化文风
S->>B: 4. 发布到博客
B-->>U: 发布成功
&lt;/pre>
&lt;/div>
&lt;h2 class="relative group">5. 最佳实践
&lt;div id="5-最佳实践" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#5-%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">模型选择流程
&lt;div id="模型选择流程" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a8%a1%e5%9e%8b%e9%80%89%e6%8b%a9%e6%b5%81%e7%a8%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
flowchart TD
A[任务] --> B{复杂度}
B -->|简单| C[Claude Sonnet 4.6&lt;br/>省钱]
B -->|复杂| D{类型}
D -->|代码| E[GPT-5.3-Codex]
D -->|推理| F[GPT-5.4]
D -->|中文| G[GLM-5]
&lt;/pre>
&lt;/div>
&lt;h3 class="relative group">配置规范
&lt;div id="配置规范" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%85%8d%e7%bd%ae%e8%a7%84%e8%8c%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>✅ 模型名必须写完整：&lt;code>anthropic-local/claude-sonnet-4-6&lt;/code>&lt;/li>
&lt;li>✅ 路径必须用绝对路径&lt;/li>
&lt;li>✅ agentTurn 任务必须带 model 字段&lt;/li>
&lt;/ul>
&lt;h3 class="relative group">避坑指南
&lt;div id="避坑指南" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%81%bf%e5%9d%91%e6%8c%87%e5%8d%97" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
graph LR
A[问题] --> B{诊断}
B -->|模型回退失败| C[检查 fallback provider]
B -->|Cron 不执行| D[检查 model 字段]
B -->|Skills 加载不到| E[检查绝对路径]
&lt;/pre>
&lt;/div>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>问题&lt;/th>
&lt;th>原因&lt;/th>
&lt;th>解决方案&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>模型回退失败&lt;/td>
&lt;td>fallback 模型的 provider 未配置&lt;/td>
&lt;td>检查 providers 配置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cron 任务不执行&lt;/td>
&lt;td>缺少 model 字段&lt;/td>
&lt;td>agentTurn 必须带 model&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills 加载不到&lt;/td>
&lt;td>路径用相对路径&lt;/td>
&lt;td>本机必须用绝对路径&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>&lt;em>这套架构运行稳定，每天自动生成博客简报，任务管理效率提升 49%。&lt;/em>&lt;/p></description></item><item><title>每周技术实践总结 - 2026 年第 11 周</title><link>https://blog.treesir.pub/posts/weekly-report-2026-w11-v2/</link><pubDate>Sun, 15 Mar 2026 22:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/weekly-report-2026-w11-v2/</guid><description>&lt;p>这周做的事情表面上很散：任务管理、博客自动化、记忆系统、监控恢复、工具选型、系统排障。但回头看，真正贯穿整周的其实是同一个问题：&lt;strong>怎么把一个越来越复杂的系统，慢慢收成一个长期可用的系统。&lt;/strong>&lt;/p>
&lt;p>我现在越来越相信，很多工程工作最值钱的部分，不是“又接了一个新能力”，而是把那些已经存在的东西收干净、讲清楚、跑稳定。&lt;/p>
&lt;h2 class="relative group">这一周真正推进的几件事
&lt;div id="这一周真正推进的几件事" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bf%99%e4%b8%80%e5%91%a8%e7%9c%9f%e6%ad%a3%e6%8e%a8%e8%bf%9b%e7%9a%84%e5%87%a0%e4%bb%b6%e4%ba%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">1. 自动化开始从“能跑”变成“有层次”
&lt;div id="1-自动化开始从能跑变成有层次" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e8%87%aa%e5%8a%a8%e5%8c%96%e5%bc%80%e5%a7%8b%e4%bb%8e%e8%83%bd%e8%b7%91%e5%8f%98%e6%88%90%e6%9c%89%e5%b1%82%e6%ac%a1" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>这周一个明显变化是，很多原本孤立的自动化动作，开始不再像散落的脚本，而更像有分工的系统。&lt;/p></description></item><item><title>当 AI Agent 遇上运维自动化：我的实践踩坑之路</title><link>https://blog.treesir.pub/posts/ai-agent-workflow-practice/</link><pubDate>Sun, 15 Mar 2026 22:05:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/ai-agent-workflow-practice/</guid><description>&lt;h2 class="relative group">当 AI Agent 遇上运维自动化：我的实践踩坑之路
&lt;div id="当-ai-agent-遇上运维自动化我的实践踩坑之路" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%bd%93-ai-agent-%e9%81%87%e4%b8%8a%e8%bf%90%e7%bb%b4%e8%87%aa%e5%8a%a8%e5%8c%96%e6%88%91%e7%9a%84%e5%ae%9e%e8%b7%b5%e8%b8%a9%e5%9d%91%e4%b9%8b%e8%b7%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>花了几天把 AI Agent 集成到日常运维里，踩了不少坑，记录下来供参考。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">1. 为什么要用 AI Agent
&lt;div id="1-为什么要用-ai-agent" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e7%94%a8-ai-agent" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>简单说就是：太累了。&lt;/p></description></item><item><title>OpenClaw 配置踩坑记：那些差点把我送走的问题</title><link>https://blog.treesir.pub/posts/openclaw-troubleshooting-guide/</link><pubDate>Sun, 15 Mar 2026 21:58:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openclaw-troubleshooting-guide/</guid><description>&lt;h2 class="relative group">OpenClaw 配置踩坑记：那些差点把我送走的问题
&lt;div id="openclaw-配置踩坑记那些差点把我送走的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openclaw-%e9%85%8d%e7%bd%ae%e8%b8%a9%e5%9d%91%e8%ae%b0%e9%82%a3%e4%ba%9b%e5%b7%ae%e7%82%b9%e6%8a%8a%e6%88%91%e9%80%81%e8%b5%b0%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>踩了整整两天，记录下来希望别再踩第二次。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">1. 模型配置那些破事
&lt;div id="1-模型配置那些破事" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e6%a8%a1%e5%9e%8b%e9%85%8d%e7%bd%ae%e9%82%a3%e4%ba%9b%e7%a0%b4%e4%ba%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">1.1 模型名写错了
&lt;div id="11-模型名写错了" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#11-%e6%a8%a1%e5%9e%8b%e5%90%8d%e5%86%99%e9%94%99%e4%ba%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>写配置的时候顺手就写：&lt;/p></description></item><item><title>字节 Coze 平台实战：从零搭建 AI 智能体</title><link>https://blog.treesir.pub/posts/coze-platform-deep-dive/</link><pubDate>Sun, 15 Mar 2026 21:42:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/coze-platform-deep-dive/</guid><description>&lt;h2 class="relative group">字节 Coze 平台实战：从零搭建 AI 智能体
&lt;div id="字节-coze-平台实战从零搭建-ai-智能体" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ad%97%e8%8a%82-coze-%e5%b9%b3%e5%8f%b0%e5%ae%9e%e6%88%98%e4%bb%8e%e9%9b%b6%e6%90%ad%e5%bb%ba-ai-%e6%99%ba%e8%83%bd%e4%bd%93" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>踩过不少坑，花了不少时间，终于把 Coze 这套东西摸透了。本文不整虚的，直接上干货。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">1. 先说说为什么选 Coze
&lt;div id="1-先说说为什么选-coze" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e5%85%88%e8%af%b4%e8%af%b4%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-coze" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>市面上 AI 应用开发平台不少，Coze 几个点比较实在：&lt;/p></description></item><item><title>Istio in Action 学习笔记</title><link>https://blog.treesir.pub/posts/istio-in-action-study/</link><pubDate>Sun, 15 Mar 2026 21:24:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/istio-in-action-study/</guid><description>&lt;h2 class="relative group">Istio in Action 学习笔记
&lt;div id="istio-in-action-学习笔记" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#istio-in-action-%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>Istio 是当下最流行的 Service Mesh（服务网格）方案之一，本文是学习《Istio in Action》书籍的详细笔记，涵盖从入门到进阶的核心知识点。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">1. Istio 解决的问题
&lt;div id="1-istio-解决的问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-istio-%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在微服务架构中，网络问题往往是最大的挑战之一：&lt;/p></description></item><item><title>Docker 常用命令速查手册</title><link>https://blog.treesir.pub/posts/docker-commands-cheatsheet/</link><pubDate>Sun, 15 Mar 2026 18:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-commands-cheatsheet/</guid><description>&lt;h2 class="relative group">前言
&lt;div id="前言" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Docker 是现代 DevOps 工作流中不可或缺的容器化工具。本文整理了日常工作中最常用的 Docker 命令，方便快速查阅。&lt;/p>
&lt;h2 class="relative group">镜像管理
&lt;div id="镜像管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%95%9c%e5%83%8f%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看镜像
&lt;div id="查看镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image ls
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">搜索镜像
&lt;div id="搜索镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker search nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">拉取镜像
&lt;div id="拉取镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8b%89%e5%8f%96%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker pull nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker pull nginx:1.21
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除镜像
&lt;div id="删除镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rmi nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rmi &lt;span class="k">$(&lt;/span>docker images -q&lt;span class="k">)&lt;/span> &lt;span class="c1"># 删除所有镜像&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">导出/导入镜像
&lt;div id="导出导入镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%af%bc%e5%87%ba%e5%af%bc%e5%85%a5%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker save -o nginx.tar nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker load -i nginx.tar
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">容器管理
&lt;div id="容器管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%b9%e5%99%a8%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看容器
&lt;div id="查看容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker ps &lt;span class="c1"># 查看运行中的容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker ps -a &lt;span class="c1"># 查看所有容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker container ls &lt;span class="c1"># 同 docker ps&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">创建并启动容器
&lt;div id="创建并启动容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e5%b9%b6%e5%90%af%e5%8a%a8%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker run -d --name nginx -p 80:80 nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -it --name centos centos:7 /bin/bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">启动/停止/重启容器
&lt;div id="启动停止重启容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%90%af%e5%8a%a8%e5%81%9c%e6%ad%a2%e9%87%8d%e5%90%af%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker start nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stop nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker restart nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">进入容器
&lt;div id="进入容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bf%9b%e5%85%a5%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -it nginx /bin/bash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker attach nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器日志
&lt;div id="查看容器日志" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e6%97%a5%e5%bf%97" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker logs nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs -f nginx &lt;span class="c1"># 实时查看&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs --tail &lt;span class="m">100&lt;/span> nginx &lt;span class="c1"># 查看最后100行&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器详情
&lt;div id="查看容器详情" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e8%af%a6%e6%83%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker inspect nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器资源使用
&lt;div id="查看容器资源使用" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e8%b5%84%e6%ba%90%e4%bd%bf%e7%94%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker stats
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stats nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除容器
&lt;div id="删除容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rm nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm -f nginx &lt;span class="c1"># 强制删除运行中的容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm &lt;span class="k">$(&lt;/span>docker ps -aq&lt;span class="k">)&lt;/span> &lt;span class="c1"># 删除所有容器&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">数据卷管理
&lt;div id="数据卷管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%95%b0%e6%8d%ae%e5%8d%b7%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">创建数据卷
&lt;div id="创建数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume create mydata
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看数据卷
&lt;div id="查看数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker volume inspect mydata
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除数据卷
&lt;div id="删除数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume rm mydata
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker volume prune &lt;span class="c1"># 删除未使用的数据卷&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">挂载数据卷
&lt;div id="挂载数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8c%82%e8%bd%bd%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker run -d -v mydata:/data nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d -v /host/path:/container/path nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">网络管理
&lt;div id="网络管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看网络
&lt;div id="查看网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker network inspect bridge
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">创建网络
&lt;div id="创建网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network create mynet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker network create --driver bridge mynet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">连接容器到网络
&lt;div id="连接容器到网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e5%ae%b9%e5%99%a8%e5%88%b0%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network connect mynet nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">断开容器网络
&lt;div id="断开容器网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%ad%e5%bc%80%e5%ae%b9%e5%99%a8%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network disconnect mynet nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除网络
&lt;div id="删除网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network rm mynet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">系统清理
&lt;div id="系统清理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e6%b8%85%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">清理退出状态的容器
&lt;div id="清理退出状态的容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e9%80%80%e5%87%ba%e7%8a%b6%e6%80%81%e7%9a%84%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rm &lt;span class="k">$(&lt;/span>docker container ls -f &lt;span class="s2">&amp;#34;status=exited&amp;#34;&lt;/span> -q&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">清理未使用的镜像
&lt;div id="清理未使用的镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e6%9c%aa%e4%bd%bf%e7%94%a8%e7%9a%84%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker image prune
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image prune -a &lt;span class="c1"># 删除所有未使用的镜像&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">一键清理
&lt;div id="一键清理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%80%e9%94%ae%e6%b8%85%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker system prune
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker system prune -a &lt;span class="c1"># 包括镜像&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker system prune --volumes &lt;span class="c1"># 包括数据卷&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">Dockerfile 构建
&lt;div id="dockerfile-构建" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#dockerfile-%e6%9e%84%e5%bb%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">构建镜像
&lt;div id="构建镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9e%84%e5%bb%ba%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker build -t myimage:v1 .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t myimage:v1 -f Dockerfile.custom .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">Dockerfile 示例
&lt;div id="dockerfile-示例" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#dockerfile-%e7%a4%ba%e4%be%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-dockerfile" data-lang="dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="k">FROM&lt;/span>&lt;span class="s"> centos:7&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">LABEL&lt;/span> &lt;span class="nv">maintainer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;admin@example.com&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> yum install -y vim &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> yum clean all&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> app.py /app/&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">EXPOSE&lt;/span>&lt;span class="s"> 8080&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;python&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;app.py&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">容器转镜像（不推荐）
&lt;div id="容器转镜像不推荐" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%b9%e5%99%a8%e8%bd%ac%e9%95%9c%e5%83%8f%e4%b8%8d%e6%8e%a8%e8%8d%90" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker commit container_name image_name
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：不推荐使用 commit 创建镜像。建议使用 Dockerfile 构建镜像，因为 commit 创建的镜像不可复现。&lt;/p></description></item><item><title>代码展示：苹果窗口风格代码框</title><link>https://blog.treesir.pub/posts/code-showcase/</link><pubDate>Sat, 02 Aug 2025 17:20:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/code-showcase/</guid><description>查看我们全新的苹果窗口风格代码框，支持多种编程语言和复制功能。</description></item><item><title>欢迎来到我的博客！</title><link>https://blog.treesir.pub/posts/welcome-to-my-blog/</link><pubDate>Thu, 02 Jan 2025 10:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/welcome-to-my-blog/</guid><description>&lt;p>我很兴奋地推出这个使用 &lt;a
href="https://gohugo.io/"
target="_blank"
>Hugo&lt;/a> 和令人惊叹的 &lt;a
href="https://blowfish.page/"
target="_blank"
>Blowfish&lt;/a> 主题构建的新博客！&lt;/p>
&lt;h2 class="relative group">为什么选择 Hugo 和 Blowfish？
&lt;div id="为什么选择-hugo-和-blowfish" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89%e6%8b%a9-hugo-%e5%92%8c-blowfish" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在研究了各种博客平台和静态网站生成器后，我选择 Hugo 有以下几个原因：&lt;/p>
&lt;h3 class="relative group">Hugo 的优势
&lt;div id="hugo-的优势" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#hugo-%e7%9a%84%e4%bc%98%e5%8a%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>闪电般快速&lt;/strong>: Hugo 是最快的静态网站生成器之一&lt;/li>
&lt;li>&lt;strong>灵活性&lt;/strong>: 支持各种内容类型和自定义选项&lt;/li>
&lt;li>&lt;strong>SEO 友好&lt;/strong>: 内置 SEO 优化功能&lt;/li>
&lt;li>&lt;strong>Markdown 支持&lt;/strong>: 使用简单易读的 Markdown 编写内容&lt;/li>
&lt;/ul>
&lt;h3 class="relative group">Blowfish 主题特色
&lt;div id="blowfish-主题特色" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#blowfish-%e4%b8%bb%e9%a2%98%e7%89%b9%e8%89%b2" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>精美设计&lt;/strong>: 简洁、现代、专业的外观&lt;/li>
&lt;li>&lt;strong>响应式&lt;/strong>: 在桌面、平板和移动设备上都表现出色&lt;/li>
&lt;li>&lt;strong>多种布局&lt;/strong>: 可选择各种首页和内容布局&lt;/li>
&lt;li>&lt;strong>配色方案&lt;/strong>: 多种内置配色方案&lt;/li>
&lt;li>&lt;strong>丰富功能&lt;/strong>: 支持评论、分析、社交分享等功能&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">接下来会写什么？
&lt;div id="接下来会写什么" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a5%e4%b8%8b%e6%9d%a5%e4%bc%9a%e5%86%99%e4%bb%80%e4%b9%88" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>我计划写关于以下主题的内容：&lt;/p></description></item><item><title>Hugo 入门：初学者指南</title><link>https://blog.treesir.pub/posts/getting-started-with-hugo/</link><pubDate>Wed, 01 Jan 2025 15:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/getting-started-with-hugo/</guid><description>&lt;p>&lt;a
href="https://gohugo.io/"
target="_blank"
>Hugo&lt;/a> 是最受欢迎的静态网站生成器之一，以其速度和灵活性而闻名。在本指南中，我们将介绍开始使用 Hugo 所需了解的一切。&lt;/p>
&lt;h2 class="relative group">什么是 Hugo？
&lt;div id="什么是-hugo" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-hugo" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Hugo 是一个用 Go 语言编写的快速现代静态网站生成器。它将你用 Markdown 编写的内容转换为包含 HTML、CSS 和 JavaScript 的完整网站。&lt;/p></description></item><item><title>Python DevOps 完整实战指南</title><link>https://blog.treesir.pub/posts/python-fro-devops-notes/</link><pubDate>Thu, 05 Oct 2023 20:40:24 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/python-fro-devops-notes/</guid><description>&lt;p>Python 在 DevOps 领域扮演着重要角色，其简洁的语法、丰富的生态系统和强大的自动化能力使其成为运维自动化的首选语言。本指南将从 DevOps 理念开始，逐步深入到 Python 在各个 DevOps 场景中的实际应用，帮助您构建高效的自动化运维体系。&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="Python for DevOps 书籍封面" src="https://cdn.treesir.pub/images/2023/10/05/20231005204456.jpg">
&lt;/figure>
&lt;/p>
&lt;p>&lt;em>图：《Python for DevOps: Learn Ruthlessly Effective Automation》&lt;/em>&lt;/p>
&lt;h2 class="relative group">DevOps 理念与文化
&lt;div id="devops-理念与文化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#devops-%e7%90%86%e5%bf%b5%e4%b8%8e%e6%96%87%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 DevOps
&lt;div id="什么是-devops" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-devops" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>DevOps 是一种文化、实践和工具的组合，旨在提高组织快速交付应用程序和服务的能力。它强调开发（Development）和运维（Operations）团队之间的协作与沟通。&lt;/p></description></item><item><title>SlimToolkit 与 GitLab CI/CD 集成实践</title><link>https://blog.treesir.pub/posts/slimtoolkit-slim-study-1/</link><pubDate>Thu, 05 Oct 2023 16:53:53 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/slimtoolkit-slim-study-1/</guid><description>&lt;h2 class="relative group">工具介绍
&lt;div id="工具介绍" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%b7%a5%e5%85%b7%e4%bb%8b%e7%bb%8d" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">SlimToolkit 概述
&lt;div id="slimtoolkit-概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#slimtoolkit-%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>SlimToolkit（原名 DockerSlim）是一个强大的开源工具，专门用于优化 Docker 容器镜像的大小、启动速度和安全性。&lt;/p></description></item><item><title>PVE AutoSnap 自动快照工具使用指南</title><link>https://blog.treesir.pub/posts/pve-autosnap/</link><pubDate>Thu, 05 Oct 2023 16:40:38 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/pve-autosnap/</guid><description>&lt;h2 class="relative group">工具简介
&lt;div id="工具简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%b7%a5%e5%85%b7%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>PVE AutoSnap 是一个用于 Proxmox VE 环境的自动快照管理工具，可以自动创建、管理和清理虚拟机快照。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>项目地址&lt;/strong>：&lt;a
href="https://github.com/Corsinvest/cv4pve-autosnap"
target="_blank"
>cv4pve-autosnap&lt;/a>&lt;/li>
&lt;li>&lt;strong>主要功能&lt;/strong>：自动创建虚拟机快照、设置保留策略、批量管理多个虚拟机&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">安装配置
&lt;div id="安装配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">下载并安装工具
&lt;div id="下载并安装工具" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%8b%e8%bd%bd%e5%b9%b6%e5%ae%89%e8%a3%85%e5%b7%a5%e5%85%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 下载最新版本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">wget https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.8/cv4pve-autosnap-linux-x64.zip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 解压文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">unzip cv4pve-autosnap-linux-x64.zip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 移动到系统路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv cv4pve-autosnap /usr/bin/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置执行权限&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod a+x /usr/bin/cv4pve-autosnap
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：请根据需要选择合适的版本，最新版本信息可查看 &lt;a
href="https://github.com/Corsinvest/cv4pve-autosnap/releases"
target="_blank"
>GitHub Releases&lt;/a>&lt;/p></description></item><item><title>使用 Grafana Loki 构建网站访问统计分析系统</title><link>https://blog.treesir.pub/posts/blog-starts-loki-data-analysis/</link><pubDate>Sat, 29 Jul 2023 16:54:09 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/blog-starts-loki-data-analysis/</guid><description>&lt;p>在网站运营过程中，访问数据分析是了解用户行为和优化网站性能的重要手段。本文将分享如何使用 Grafana Loki 构建一个轻量级且功能强大的网站访问统计分析系统。&lt;/p>
&lt;h2 class="relative group">项目背景
&lt;div id="项目背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%a1%b9%e7%9b%ae%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">现有方案的局限性
&lt;div id="现有方案的局限性" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%b0%e6%9c%89%e6%96%b9%e6%a1%88%e7%9a%84%e5%b1%80%e9%99%90%e6%80%a7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>在寻找网站统计解决方案的过程中，传统的统计工具存在一些局限性：&lt;/p></description></item><item><title>Gitea Actions ActRunner 基于 Systemd 部署安装</title><link>https://blog.treesir.pub/posts/gitea-actrunner-systemd-deployment/</link><pubDate>Tue, 25 Jul 2023 22:06:35 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitea-actrunner-systemd-deployment/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>Gitea是一个开源的自助式Git服务，用于托管和管理Git仓库。它是一个轻量级且易于安装和使用的解决方案，类似于GitHub或GitLab，可以在私有服务器上搭建自己的Git仓库服务。Gitea提供了一系列功能，使团队或个人能够方便地进行版本控制和协作开发，包括：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>仓库管理：可以创建、克隆、推送和拉取Git仓库，管理分支和标签，查看提交历史和代码差异等操作。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>用户和权限管理：可以创建用户账号，管理用户的访问权限，并为不同的用户或团队分配不同的角色和权限，以控制仓库的访问和操作。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>问题追踪：提供了一个问题追踪系统，用户可以创建和管理问题、缺陷或需求，并与仓库的代码和提交相关联，方便团队进行协作和解决问题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Pull请求：支持Pull请求（合并请求），允许用户在不直接修改主分支的情况下，通过提出Pull请求来建议将自己的代码合并到项目中。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>代码审查：Gitea提供了代码审查功能，可以让团队成员对提交的代码进行审查、讨论和评论，以提高代码质量和团队协作。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>集成与插件：Gitea支持与其他工具和服务的集成，如邮件通知、CI/CD工具和第三方插件等。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Gitea 从 &lt;code>1.19&lt;/code> 开始支持 Actions，使用前提需要像 GitlabRunner 一样部署一个独立的 Runner 来管理 Job，名叫 &lt;code>ActRunner&lt;/code>，具体可参考文档:&lt;/p></description></item><item><title>Sonatype Nexus Repository（Nexus3） 私服文件下载至本地 - (使用进阶篇 一)</title><link>https://blog.treesir.pub/posts/nexus-browse-directory-download/</link><pubDate>Tue, 25 Jul 2023 20:47:22 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/nexus-browse-directory-download/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">Sonatype Nexus Repository 是什么？
&lt;div id="sonatype-nexus-repository-是什么" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#sonatype-nexus-repository-%e6%98%af%e4%bb%80%e4%b9%88" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;ul>
&lt;li>Sonatype Nexus Repository 是一个用于管理和分发软件组件的开源仓库管理系统。它提供了一个集中化的平台，使开发人员能够有效地存储、共享和发布各种类型的软件包。Nexus Repository 支持多种主流技术栈，并具有强大的安全性和可扩展性。通过使用 Sonatype Nexus Repository，团队可以更好地控制其软件构建过程，并确保高质量和稳定性的交付。&lt;code> by ChatCPT&lt;/code>&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;h2 class="relative group">Nexus3 私服文件下载至本地的用途是什么？
&lt;div id="nexus3-私服文件下载至本地的用途是什么" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nexus3-%e7%a7%81%e6%9c%8d%e6%96%87%e4%bb%b6%e4%b8%8b%e8%bd%bd%e8%87%b3%e6%9c%ac%e5%9c%b0%e7%9a%84%e7%94%a8%e9%80%94%e6%98%af%e4%bb%80%e4%b9%88" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;ol>
&lt;li>比如我们要将 &lt;code>Nexus3&lt;/code> 私服中的依赖包制品，&lt;code>进行迁移&lt;/code>，因 Nexus3 基于 &lt;a
href="https://help.sonatype.com/repomanager3/planning-your-implementation/storage-guide"
target="_blank"
>BlobStore&lt;/a> 技术实现对文件的落盘存储，无法在对应节点中直接看到制品文件，此时则需要通过一些手段进行转换取出，虽然可以通过网页一个一个点击下载，但如果下载制品数量过多，则不会是个过于明智的选择。迁移的场景也有很多种，如:
&lt;ul>
&lt;li>迁移至其他实例，或离线环境&lt;/li>
&lt;li>需要更换到其他类型的存储库如: &lt;code>JFrog&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>&lt;/blockquote>
&lt;h2 class="relative group">文件下载至本地
&lt;div id="文件下载至本地" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%87%e4%bb%b6%e4%b8%8b%e8%bd%bd%e8%87%b3%e6%9c%ac%e5%9c%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>下面所展示的方法，使用到了 Nexus3 的API 进行实现，具体可参考如下文档：&lt;/p></description></item><item><title>使用 Kubernetes CronJob 自动备份 MySQL 数据到 MinIO</title><link>https://blog.treesir.pub/posts/k8s-cronjob-backup-mysql/</link><pubDate>Mon, 24 Jul 2023 16:14:42 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k8s-cronjob-backup-mysql/</guid><description>&lt;p>随着 Kubernetes 在生产环境中的广泛应用，越来越多的有状态应用（如 MySQL 数据库）也开始部署在 K8s 集群中。数据安全是生产环境的重中之重，本文将详细介绍如何使用 Kubernetes CronJob 实现 MySQL 数据库的自动化备份，并将备份文件安全地存储到 MinIO 对象存储中。&lt;/p>
&lt;h2 class="relative group">方案概述
&lt;div id="方案概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">备份架构
&lt;div id="备份架构" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%a4%87%e4%bb%bd%e6%9e%b6%e6%9e%84" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="mermaid" align="center">
&lt;pre>
flowchart LR
MySQL[MySQL Pod&lt;br/>Database] -->|导出数据| CronJob[CronJob Pod&lt;br/>mysqldump]
CronJob -->|上传备份| MinIO[MinIO Server&lt;br/>Bucket]
&lt;/pre>
&lt;/div>
&lt;h3 class="relative group">方案优势
&lt;div id="方案优势" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e4%bc%98%e5%8a%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>自动化&lt;/strong>: 使用 CronJob 实现定时自动备份，无需人工干预&lt;/li>
&lt;li>&lt;strong>可靠性&lt;/strong>: 备份文件存储在独立的对象存储中，提高数据安全性&lt;/li>
&lt;li>&lt;strong>可扩展&lt;/strong>: 支持多数据库实例的备份，易于扩展&lt;/li>
&lt;li>&lt;strong>监控友好&lt;/strong>: 可以通过 Kubernetes 原生监控查看备份任务状态&lt;/li>
&lt;li>&lt;strong>成本效益&lt;/strong>: 使用开源的 MinIO 作为存储后端，降低成本&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">环境准备
&lt;div id="环境准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">前置条件
&lt;div id="前置条件" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%89%8d%e7%bd%ae%e6%9d%a1%e4%bb%b6" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组件&lt;/th>
&lt;th>版本要求&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Kubernetes&lt;/td>
&lt;td>v1.18+&lt;/td>
&lt;td>支持 CronJob v1 API&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MySQL&lt;/td>
&lt;td>5.7+ / 8.0+&lt;/td>
&lt;td>运行在 K8s 集群中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MinIO&lt;/td>
&lt;td>任意版本&lt;/td>
&lt;td>对象存储服务&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>网络连通性&lt;/td>
&lt;td>-&lt;/td>
&lt;td>CronJob Pod 能访问 MySQL 和 MinIO&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 class="relative group">自定义镜像
&lt;div id="自定义镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%87%aa%e5%ae%9a%e4%b9%89%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>本方案使用了专门构建的备份镜像，包含了 mysqldump 和 MinIO 客户端工具。&lt;/p></description></item><item><title>Linux LVM 分区扩容完整指南</title><link>https://blog.treesir.pub/posts/use-lvm-to-expand-partitions/</link><pubDate>Mon, 24 Jul 2023 14:56:12 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/use-lvm-to-expand-partitions/</guid><description>&lt;h2 class="relative group">LVM 概述
&lt;div id="lvm-概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#lvm-%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 LVM
&lt;div id="什么是-lvm" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-lvm" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>LVM（Logical Volume Manager）是 Linux 系统中的逻辑卷管理器，它在物理存储设备之上提供了一个抽象层，使得存储管理更加灵活和动态。&lt;/p></description></item><item><title>Argocd Cli Usage Tips</title><link>https://blog.treesir.pub/posts/argocd-cli-usage-tips/</link><pubDate>Mon, 24 Jul 2023 14:19:17 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/argocd-cli-usage-tips/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>此篇文档，用于记录在使用 &lt;code>ArgoCD CLi&lt;/code> 的过程中，所使用到的一些常用命令，&lt;code>且供参考&lt;/code>。&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 class="relative group">使用记录
&lt;div id="使用记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>ArgoCD cli &lt;a
href="https://argo-cd.readthedocs.io/en/stable/cli_installation/"
target="_blank"
>安装文档&lt;/a>，使用前，配置登录&lt;/p></description></item><item><title>修复 SSH 免密无法连接</title><link>https://blog.treesir.pub/posts/fix-ssh-connect/</link><pubDate>Mon, 24 Jul 2023 14:01:29 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/fix-ssh-connect/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>我们通常在远程连接目标服务器时，已避免经常性的输入密码，通常会通过 &lt;code>免密钥&lt;/code> 的方式以解决每次连接多需要输入密码问题，但有的时候我们配置免密钥后，却未能生效，可以尝试使用下述方法进行解决。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">SSH 免密钥方式
&lt;div id="ssh-免密钥方式" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#ssh-%e5%85%8d%e5%af%86%e9%92%a5%e6%96%b9%e5%bc%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>生成 SSH 公私钥&lt;/p></description></item><item><title>Git 版本控制完整实战指南</title><link>https://blog.treesir.pub/posts/git-docs/</link><pubDate>Fri, 23 Jun 2023 17:07:38 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/git-docs/</guid><description>&lt;p>Git 是现代软件开发中不可或缺的分布式版本控制系统，它不仅能够追踪代码变更历史，还能支持复杂的团队协作和分支管理。本指南将从基础概念开始，逐步深入到高级技巧，帮助您全面掌握 Git 的使用。&lt;/p>
&lt;h2 class="relative group">Git 基础概念
&lt;div id="git-基础概念" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#git-%e5%9f%ba%e7%a1%80%e6%a6%82%e5%bf%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 Git
&lt;div id="什么是-git" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-git" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Git 是由 Linux 之父 Linus Torvalds 创建的分布式版本控制系统，具有以下特点：&lt;/p></description></item><item><title>NaiveProxy</title><link>https://blog.treesir.pub/posts/naiveproxy/</link><pubDate>Sun, 11 Dec 2022 15:47:03 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/naiveproxy/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>懂的自然懂&lt;/code>，直接上文档。&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>
&lt;p>Caddy 编译安装&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">wget https://go.dev/dl/go1.19.linux-arm64.tar.gz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tar -zxvf go1.19.linux-arm64.tar.gz -C /usr/local/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat &amp;gt;&amp;gt; /etc/profile &lt;span class="s">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">GO_HOME=/usr/local/go
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">export PATH=\$PATH:\$GO_HOME/bin/:/root/go/bin
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> /etc/profile
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xcaddy build --with github.com/caddyserver/forwardproxy@caddy2&lt;span class="o">=&lt;/span>github.com/klzgrad/forwardproxy@naive
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv caddy /usr/local/bin/caddy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir /etc/caddy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Caddyfile 配置文件创建&lt;/p></description></item><item><title>Shell 脚本编程完整实战指南</title><link>https://blog.treesir.pub/posts/shell-docs/</link><pubDate>Fri, 02 Dec 2022 15:12:34 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/shell-docs/</guid><description>&lt;p>Shell 是 Linux/Unix 系统的核心组件，既是命令行解释器，也是强大的脚本编程语言。掌握 Shell 编程对于系统管理员、运维工程师和开发者来说至关重要。本指南将从基础概念开始，逐步深入到高级应用，帮助您全面掌握 Shell 的使用技巧。&lt;/p>
&lt;h2 class="relative group">Shell 基础概念
&lt;div id="shell-基础概念" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#shell-%e5%9f%ba%e7%a1%80%e6%a6%82%e5%bf%b5" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 Shell
&lt;div id="什么是-shell" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-shell" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Shell 是用户与 Linux 内核交互的接口，它具有以下特点：&lt;/p></description></item><item><title>Go 语言完整实战指南</title><link>https://blog.treesir.pub/posts/golang-docs/</link><pubDate>Fri, 02 Dec 2022 14:58:28 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/golang-docs/</guid><description>&lt;p>Go 语言是 Google 开发的现代编程语言，专为构建简单、可靠、高效的软件而设计。本指南将从基础概念开始，逐步深入到高级特性和实际应用，帮助您全面掌握 Go 语言的开发技能。&lt;/p>
&lt;h2 class="relative group">Go 语言概述
&lt;div id="go-语言概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#go-%e8%af%ad%e8%a8%80%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 Go
&lt;div id="什么是-go" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-go" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>Go（也称为 Golang）是一种开源的编程语言，由 Google 在 2009 年发布。它具有以下核心特性：&lt;/p></description></item><item><title>Rke 集群集成 Kube-Vip 实现 Loadbalance Service 资源的使用</title><link>https://blog.treesir.pub/posts/rke-kubevip-loadbalance/</link><pubDate>Tue, 12 Oct 2021 13:44:45 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rke-kubevip-loadbalance/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>Kube-Vip&lt;/code> 最初是为 Kubernetes 控制平面提供 HA 解决方案而创建的，随着时间的推移，它已经发展为将相同的功能合并到 Kubernetes 的 LoadBalancer 类型的 Service 中。Kube-Vip &lt;code>特点&lt;/code> 如下：&lt;/p>
&lt;ul>
&lt;li>VIP 地址可以是 IPv4 或 IPv6&lt;/li>
&lt;li>带有 ARP（第2层）或 BGP（第3层）的控制平面&lt;/li>
&lt;li>使用领导选举或 &lt;code>raft&lt;/code> 控制平面&lt;/li>
&lt;li>带有 kubeadm（静态 Pod）的控制平面 HA&lt;/li>
&lt;li>带有 K3s/和其他（DaemonSets）的控制平面 HA&lt;/li>
&lt;li>使用 ARP 领导者选举的 Service LoadBalancer（第 2 层）&lt;/li>
&lt;li>通过 BGP 使用多个节点的 Service LoadBalancer&lt;/li>
&lt;li>每个命名空间或全局的 Service LoadBalancer 地址池&lt;/li>
&lt;li>Service LoadBalancer 地址通过 UPNP 暴露给网关&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>集群 master 节点一般不会很多，kube-vip 只需在 k8s 中的控制平面部署。这里使用方法采用 &lt;code>静态 pod&lt;/code> + &lt;code>ARP &lt;/code>来简单实现。在大规模的场景下可以尝试使用 BGP ，这需要相应的 BGP 服务来做支撑。&lt;/p></description></item><item><title>CoreDNS 完整部署与管理指南</title><link>https://blog.treesir.pub/posts/coredns-deployment/</link><pubDate>Sat, 25 Sep 2021 16:40:31 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/coredns-deployment/</guid><description>&lt;p>CoreDNS 是现代化的 DNS 服务器，以其插件化架构、高性能和易配置性成为 Kubernetes 默认 DNS 解决方案。本指南将从基础部署到企业级应用，全面介绍 CoreDNS 的部署、配置、优化和管理。&lt;/p>
&lt;h2 class="relative group">CoreDNS 概述
&lt;div id="coredns-概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#coredns-%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 CoreDNS
&lt;div id="什么是-coredns" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-coredns" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>&lt;a
href="https://github.com/coredns/coredns"
target="_blank"
>CoreDNS&lt;/a> 是用 Go 语言编写的现代化 DNS 服务器，具有以下核心特性：&lt;/p></description></item><item><title>Go 语言结构体（Struct）详解与实践</title><link>https://blog.treesir.pub/posts/go-lang-struct/</link><pubDate>Sun, 15 Aug 2021 20:00:50 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/go-lang-struct/</guid><description>&lt;p>Go 语言中的结构体（Struct）是一种用户自定义的数据类型，用于将不同类型的数据组合在一起。虽然 Go 不是传统的面向对象语言，但通过结构体和方法，我们可以实现面向对象编程的核心概念。&lt;/p>
&lt;h2 class="relative group">什么是结构体
&lt;div id="什么是结构体" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af%e7%bb%93%e6%9e%84%e4%bd%93" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>结构体是 Go 语言中实现数据封装的主要方式，它具有以下特点：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>数据聚合&lt;/strong>: 将相关的数据字段组合在一起&lt;/li>
&lt;li>&lt;strong>类型安全&lt;/strong>: 编译时检查字段类型&lt;/li>
&lt;li>&lt;strong>方法绑定&lt;/strong>: 可以为结构体定义方法&lt;/li>
&lt;li>&lt;strong>内存效率&lt;/strong>: 字段在内存中连续存储&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">基础结构体定义
&lt;div id="基础结构体定义" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%9f%ba%e7%a1%80%e7%bb%93%e6%9e%84%e4%bd%93%e5%ae%9a%e4%b9%89" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">简单结构体示例
&lt;div id="简单结构体示例" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%ae%80%e5%8d%95%e7%bb%93%e6%9e%84%e4%bd%93%e7%a4%ba%e4%be%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>让我们通过一个图书管理的例子来学习结构体的使用：&lt;/p></description></item><item><title>使用 Docker Compose 5分钟 部署 一台邮件服务器</title><link>https://blog.treesir.pub/posts/docker-deploy-mailserver/</link><pubDate>Tue, 03 Aug 2021 11:37:38 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-deploy-mailserver/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>由于 &lt;code>Gmail&lt;/code> 邮箱在国内无法使用 且 &lt;code>国内手机&lt;/code> 号码无法继续注册账号原因，最近想着折腾一下 自建一台 &lt;code>邮件服务器&lt;/code> 玩玩。正好在国外有台 vps (搬瓦工的)，比较空闲，目前且用来做扶墙使用，有点浪费，决定使用此台服务器搭建 &lt;code>邮件服务器&lt;/code> 。选择的部署方案选择了较为轻便的 &lt;code>docker&lt;/code>，在了解网上主流的实现镜像后 &lt;code>analogic/poste.io&lt;/code> &amp;amp; &lt;code>mailserver/docker-mailserver&lt;/code>，由于目前 vps 资源为 &lt;code>2c 1g&lt;/code> 的低配置，试着跑了一下前者，资源占用非常大(可能 默认开了什么功能什么的)， 在当前有限的配置下有点跑不动。了解后者这个 &lt;a
href="https://github.com/docker-mailserver/docker-mailserver/"
target="_blank"
>项目&lt;/a> 后，可以在最低 &lt;code>1c 512m&lt;/code> 下运行，最后决定选用后者 &lt;code>docker-mailserver&lt;/code> 进行部署。&lt;/p></description></item><item><title>K3s 集群修改 Flannel CNI 插件网络模式</title><link>https://blog.treesir.pub/posts/k3s-change-flannel-cni-model/</link><pubDate>Thu, 29 Jul 2021 08:56:04 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k3s-change-flannel-cni-model/</guid><description>&lt;h2 class="relative group">背景说明
&lt;div id="背景说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>在 &lt;a
href="https://www.treesir.pub/post/n1-openwrt-k3s-deploy/"
target="_blank"
>之前搭建&lt;/a> 的 k3s 集群中因为某些原因我将 openwrt 节点，进行了系统重装，更改固件为了 &lt;code>esir&lt;/code> 高大全的 op 固件，由于其 固件中没有将 &lt;code>vxlan&lt;/code> 模块编译进内核当中，而 k3s &lt;code>默认&lt;/code> 使用的 cni 为 &lt;code>flannel 的 vxlan&lt;/code> 模式，导致在初始化节点的时候会出现错误，导致节点添加不成功，我们知道原生 flannel 支持的模式不只单单只有 vxlan，还支持 &lt;strong>host-gw&lt;/strong>、&lt;strong>udp&lt;/strong> 模式。进行查阅 k3s 相关资料，看到 k3s 是支持切换多种网络模式的，于是决定将 flannel 模式更改为 &lt;code>host-gw&lt;/code> 。&lt;/p></description></item><item><title>Nexus3 PyPI 私服 Blob Storage 异常修复记录</title><link>https://blog.treesir.pub/posts/nexus3-pypi-blob-storage-fix/</link><pubDate>Thu, 22 Jul 2021 15:38:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/nexus3-pypi-blob-storage-fix/</guid><description>&lt;h2 class="relative group">问题描述
&lt;div id="问题描述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e6%8f%8f%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在 DevOps 集成环境的测试环境中，发现多条 Pipeline 持续处于构建超时状态。初步排查以为是依赖版本兼容性问题导致 pip 无法找到合适版本，与开发团队联合排查后发现：开发环境正常，测试环境异常，且使用相同的代码和 Dockerfile 文件，排除了版本相关问题。具体错误表现如下：&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210721170700491" src="https://cdn.treesir.pub/img/image-20210721170700491.png">
&lt;/figure>
&lt;/p>
&lt;p>&lt;strong>检查 Nexus3 私服日志&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker logs -f --tail &lt;span class="m">100&lt;/span> nexus3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210721171037634" src="https://cdn.treesir.pub/img/image-20210721171037634.png">
&lt;/figure>
&lt;/p></description></item><item><title>记录一次 JupyterLab 插件打包问题的修复</title><link>https://blog.treesir.pub/posts/pipeline-jupyter-labextension-build-fix/</link><pubDate>Tue, 20 Jul 2021 17:04:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/pipeline-jupyter-labextension-build-fix/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>在所关联项目 的 jenkins pipeline ci 流水线中，开发告诉我 生成的 pip 包中未有生成相关的 &lt;code>labextension&lt;/code> 依赖文件夹，导致 pip 包虽然是安装成功了，但仍是一个不可用的状态。开发人员告诉我在 &lt;code>linux&lt;/code> &amp;amp; &lt;code>windows&lt;/code> 环境下 均是可以正常生成相关依赖文件夹的，问我是不是哪里配置有点问题，思索了一下 和他说会不会是 jenkins slave 使用的 是 &lt;code>容器&lt;/code> 的原因？给了他一个启动命令，测试在容器里面生成一下包看看，启动命令如下所示:&lt;/p></description></item><item><title>使用 Cronjob 定时清理 ElasticSearch 中的日志索引</title><link>https://blog.treesir.pub/posts/cronjob-clean-es-index/</link><pubDate>Tue, 13 Jul 2021 11:45:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/cronjob-clean-es-index/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>在日常使用 &lt;code>efk&lt;/code> 日志系统的过程中，每天造成的日志索引量是巨大的，需要进行对相关的索引进行定期清理，来缓解后端储存的占用。如何实现在 kubernetes 中进行优雅的定期清理？本文将介绍使用 kubernetes 中的 &lt;code>Cronjob&lt;/code> 资源对象进行其需求的实现。&lt;/p>&lt;/blockquote>
&lt;p>&lt;strong>常规情况下清理 &lt;code>n&lt;/code> day 以前的数据&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -XDELETE http://elasticsearch-logging.kube-system:9200/logstash-&lt;span class="sb">`&lt;/span>date -d&lt;span class="s2">&amp;#34;n days ago&amp;#34;&lt;/span> +&lt;span class="s2">&amp;#34;%Y.%m.%d&amp;#34;&lt;/span>&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>这种方法，是网上比较常规的方式，如某一天忘记执行了，就会出现数据未清理干净的情况，有点不优雅，如何解决？&lt;/p></description></item><item><title>Macos 一键 使用 wkhtmltopdf 将 html 转换为 pdf</title><link>https://blog.treesir.pub/posts/macos-html-to-pdf/</link><pubDate>Mon, 12 Jul 2021 20:21:48 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/macos-html-to-pdf/</guid><description>&lt;h2 class="relative group">安装 wkhtmltopdf
&lt;div id="安装-wkhtmltopdf" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85-wkhtmltopdf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>使用 brew 进行安装&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">brew install --cask wkhtmltopdf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>将目录下的所有 &lt;code>html&lt;/code> 文件一键转换为 pdf 格式&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> f in *.html&lt;span class="p">;&lt;/span> &lt;span class="k">do&lt;/span> wkhtmltopdf --load-error-handling ignore -n --enable-local-file-access &lt;span class="nv">$f&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$f&lt;/span>&lt;span class="s2">.pdf&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 class="relative group">参考文档
&lt;div id="参考文档" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83%e6%96%87%e6%a1%a3" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a
href="https://segmentfault.com/a/1190000018988358"
target="_blank"
>https://segmentfault.com/a/1190000018988358&lt;/a>&lt;/p></description></item><item><title>Kubernetes VPA 垂直 Pod 自动伸缩完整指南</title><link>https://blog.treesir.pub/posts/k8s-vpa/</link><pubDate>Thu, 08 Jul 2021 14:41:34 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k8s-vpa/</guid><description>&lt;h2 class="relative group">VPA 简介
&lt;div id="vpa-简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#vpa-%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 VPA？
&lt;div id="什么是-vpa" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-vpa" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Vertical Pod Autoscaler（VPA，垂直 Pod 自动伸缩器）是 Kubernetes 的一个组件，它可以根据 Pod 的实际资源使用情况，自动调整 Pod 的 CPU 和内存请求值（requests）。&lt;/p></description></item><item><title>使用 Kube-VIP 部署高可用 Kubernetes 集群</title><link>https://blog.treesir.pub/posts/kube-vip-deploy-ha-k8s-cluster/</link><pubDate>Thu, 24 Jun 2021 11:01:10 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kube-vip-deploy-ha-k8s-cluster/</guid><description>&lt;h2 class="relative group">方案介绍
&lt;div id="方案介绍" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e4%bb%8b%e7%bb%8d" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在私有环境中部署 Kubernetes 高可用集群时，传统方案需要准备硬件或软件负载均衡器来创建多控制平面集群。通常我们会选择使用 HAProxy + Keepalived 来实现这个功能：创建 2 个负载均衡器虚拟机，分配一个 VIP（虚拟 IP），通过 VIP 将流量重定向到后端的 Kubernetes 控制平面节点。架构如下图所示：&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="20210616142006" src="https://cdn.treesir.pub/img/20210616142006.png">
&lt;/figure>
&lt;/p></description></item><item><title>使用 Kaniko 在 Kubernetes 中构建 Docker 镜像</title><link>https://blog.treesir.pub/posts/kaniko-image-build/</link><pubDate>Tue, 15 Jun 2021 10:02:48 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kaniko-image-build/</guid><description>&lt;p>在 Kubernetes 环境中构建 Docker 镜像一直是一个挑战，传统的 Docker-in-Docker 方案存在安全风险和复杂性问题。Kaniko 作为 Google 开源的容器镜像构建工具，提供了一个安全、高效的解决方案。&lt;/p>
&lt;h2 class="relative group">什么是 Kaniko
&lt;div id="什么是-kaniko" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-kaniko" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Kaniko 是由 Google 开发的开源工具，专门用于在容器或 Kubernetes 集群内构建容器镜像。它的核心优势包括：&lt;/p></description></item><item><title>使用 Docker Compose 部署 Nexus3 Docker 私服并配置 Traefik 代理</title><link>https://blog.treesir.pub/posts/nexus-use-traefik-proxy/</link><pubDate>Thu, 10 Jun 2021 09:51:36 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/nexus-use-traefik-proxy/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">软件版本
&lt;div id="软件版本" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>操作系统：CentOS 7.9.2009&lt;/li>
&lt;li>Docker 版本：20.10.7&lt;/li>
&lt;li>Docker Compose 版本：1.18.0&lt;/li>
&lt;li>Mkcert 版本：v1.4.3&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">端口规划
&lt;div id="端口规划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%ab%af%e5%8f%a3%e8%a7%84%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">Nexus 私服端口规划
&lt;div id="nexus-私服端口规划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nexus-%e7%a7%81%e6%9c%8d%e7%ab%af%e5%8f%a3%e8%a7%84%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>私服名称&lt;/th>
&lt;th>私服作用&lt;/th>
&lt;th>私服类型&lt;/th>
&lt;th>私服端口&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>docker-custom&lt;/td>
&lt;td>存放自定义 push 的镜像，与项目环境无关&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8086&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>idocker.io&lt;/td>
&lt;td>代理仓库和 custom 仓库的集合&lt;/td>
&lt;td>group&lt;/td>
&lt;td>8082&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-dev&lt;/td>
&lt;td>存放项目 dev 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8083&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-qa&lt;/td>
&lt;td>存放项目 qa 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8084&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-prod&lt;/td>
&lt;td>存放项目 prod 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8085&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>除了上述 Docker 私服端口外，还有 Nexus3 管理面板端口 8081&lt;/p></description></item><item><title>修复 Rancher 导入集群时 Scheduler 和 Controller Manager 不健康问题</title><link>https://blog.treesir.pub/posts/rancher-import-cluster-fix/</link><pubDate>Tue, 08 Jun 2021 08:45:22 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-import-cluster-fix/</guid><description>&lt;h2 class="relative group">环境配置
&lt;div id="环境配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Kubernetes 版本&lt;/strong>：v1.20.4 (KubeKey 部署)&lt;/li>
&lt;li>&lt;strong>操作系统&lt;/strong>：CentOS 7.9.2009&lt;/li>
&lt;li>&lt;strong>Rancher 版本&lt;/strong>：v2.4.15&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">准备 Kubernetes 测试环境
&lt;div id="准备-kubernetes-测试环境" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%87%86%e5%a4%87-kubernetes-%e6%b5%8b%e8%af%95%e7%8e%af%e5%a2%83" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>本次使用 KubeKey 进行一键部署。KubeKey 底层集群部署基于 kubeadm，详细信息可参考 &lt;a
href="https://github.com/kubesphere/kubekey.git"
target="_blank"
>GitHub 地址&lt;/a>。&lt;/p></description></item><item><title>在 Kubernetes 中使用 localPv 部署 Gitlab</title><link>https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/</link><pubDate>Tue, 01 Jun 2021 10:13:29 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>Kubernetes Version: &lt;code>v1.20.4&lt;/code>&lt;/li>
&lt;li>Postgres Version: &lt;code>12.7&lt;/code>&lt;/li>
&lt;li>Redis Version: &lt;code>5.0.9&lt;/code>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>因在官方提供的 &lt;code>gitlab-ce&lt;/code> 镜像中，内置了 Postgres &amp;amp; Redis 的安装，在实际生产使用过程中，想让其连接使用外部统一的服务进行使用，来合理统一的管理，并有效降低对应资源使用率，这里使用 dokcer 非官方镜像: &lt;code>sameersbn/gitlab:13.12.1&lt;/code> 进行使用&lt;/p></description></item><item><title>快速删除 Rancher 中失败的 Pod 资源</title><link>https://blog.treesir.pub/posts/quick-delete-rancher-failed-pod/</link><pubDate>Thu, 27 May 2021 08:59:56 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/quick-delete-rancher-failed-pod/</guid><description>&lt;h2 class="relative group">问题描述
&lt;div id="问题描述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e6%8f%8f%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在 Rancher 管理的 Kubernetes 集群中，有时会出现副本集中的 Pod 部署失败的情况。如下图所示，失败的 Pod 数量可能达到上千个，手动逐一删除非常耗时。&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210527085545254" src="https://cdn.treesir.pub/img/image-20210527085545254.png">
&lt;/figure>
&lt;/p>
&lt;h2 class="relative group">解决方案
&lt;div id="解决方案" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">批量删除失败的 Pod
&lt;div id="批量删除失败的-pod" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%89%b9%e9%87%8f%e5%88%a0%e9%99%a4%e5%a4%b1%e8%b4%a5%e7%9a%84-pod" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>使用 kubectl 命令批量删除状态为 &lt;code>MatchNodeSelector&lt;/code> 的失败 Pod：&lt;/p></description></item><item><title>Gocron 实践安装，实现统一定时任务管理平台</title><link>https://blog.treesir.pub/posts/gocron-install/</link><pubDate>Wed, 26 May 2021 11:29:34 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gocron-install/</guid><description>&lt;h2 class="relative group">部署环境说明
&lt;div id="部署环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>操作系统: &lt;code>CentOS release 7.8.2003 &lt;/code>&lt;/li>
&lt;li>Gocron Version: &lt;code>v1.5.3&lt;/code>&lt;/li>
&lt;li>Mysql Version: &lt;code>5.5&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">Gocron 说明
&lt;div id="gocron-说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#gocron-%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>gocron&lt;/code> 是使用 &lt;code>go&lt;/code> 语言开发的轻量级定时任务集中调度和管理系统, 可以用于替代 linux-crontab。&lt;/p></description></item><item><title>使用 Helm 配合 localPV 在 K8s 中部署 Mariadb 主程复制集群</title><link>https://blog.treesir.pub/posts/helm-k8s-deploy-mariadb/</link><pubDate>Tue, 25 May 2021 11:33:17 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/helm-k8s-deploy-mariadb/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>helm version: &lt;code>v3.3.1&lt;/code>&lt;/li>
&lt;li>kubernetes: &lt;code>v1.17.9&lt;/code>&lt;/li>
&lt;li>使用 helm chart: &lt;code>bitnami/mariadb&lt;/code>&lt;/li>
&lt;li>操作系统: &lt;code>CentOS 7.8.2003&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">helm 部署 &lt;code>mariadb&lt;/code> 前的准备
&lt;div id="helm-部署-mariadb-前的准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#helm-%e9%83%a8%e7%bd%b2-mariadb-%e5%89%8d%e7%9a%84%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">添加 helm 私服
&lt;div id="添加-helm-私服" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b7%bb%e5%8a%a0-helm-%e7%a7%81%e6%9c%8d" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">helm repo add bitnami https://charts.bitnami.com/bitnami
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">helm repo update &lt;span class="c1"># 更新仓库索引&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">helm search repo mariadb
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bitnami/mariadb 9.3.12 10.5.10 Fast, reliable, scalable, and easy to use open-...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">对 chart 进行 定制更改优化
&lt;div id="对-chart-进行-定制更改优化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%af%b9-chart-%e8%bf%9b%e8%a1%8c-%e5%ae%9a%e5%88%b6%e6%9b%b4%e6%94%b9%e4%bc%98%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;strong>下载对应 chart 文件&lt;/strong>&lt;/p></description></item><item><title>使用 Helm 部署 Spinnaker 持续部署(CD)平台</title><link>https://blog.treesir.pub/posts/spinnaker-helm-installd/</link><pubDate>Mon, 24 May 2021 16:33:49 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/spinnaker-helm-installd/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Kubernetes Version: &lt;code>v1.17.9&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>操作系统: &lt;code>CentOS 7.8.2003 &lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Helm Version: &lt;code>v3.2.1&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Spinnaker Version: &lt;code>1.26.3&lt;/code>&lt;/p>
&lt;blockquote>
&lt;p>&lt;a
href="https://spinnaker.io/community/releases/versions/"
target="_blank"
>spinnaker 版本说明&lt;/a>&lt;/p>&lt;/blockquote>
&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">spinnaker 组件说明
&lt;div id="spinnaker-组件说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#spinnaker-%e7%bb%84%e4%bb%b6%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Deck：前端web页面 端口9000&lt;/p></description></item><item><title>使用 helm 在 Kubernetes 中部署 Nexus 私服</title><link>https://blog.treesir.pub/posts/helm-k8s-deploy-nexus/</link><pubDate>Sun, 23 May 2021 15:50:31 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/helm-k8s-deploy-nexus/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>helm version: &lt;code>v3.3.1&lt;/code>&lt;/li>
&lt;li>kubernetes: &lt;code>v1.17.9&lt;/code>&lt;/li>
&lt;li>nexus: &lt;code>3.29.0&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">部署
&lt;div id="部署" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">准备 storageClass
&lt;div id="准备-storageclass" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%87%86%e5%a4%87-storageclass" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>非 &lt;code>必要&lt;/code> 操作，可以选择手动创建 pvc &amp;amp; pv，如果想部署 &lt;code>nfsStorageClass&lt;/code> 的话，请参考早期整理的 &lt;a
href="https://www.treesir.pub/post/k8s-nfs-strage-class/"
target="_blank"
>文档&lt;/a>。此篇文档实战部署步骤中基于 &lt;code>nfsStorageClass &lt;/code> 进行实现。如果是用于 &lt;code>生产环境&lt;/code> 的话，还是建议使用 ssd 或 iops 较高的 &lt;code>磁盘&lt;/code> 作为数据盘使用，数据盘管理方式可以使用 localPv or hostPath 绑定到对应节点进行运行。&lt;/p></description></item><item><title>Rancher 开启监控后的，阈值告警配置说明 (三)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-third/</link><pubDate>Wed, 19 May 2021 08:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-third/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>此文档为 rancher &lt;code>monitor&lt;/code> 使用系列的 &lt;code>第三篇&lt;/code> ，主要介绍与 &lt;code>dingtalk&lt;/code> 关联配置告警通知、prometheus 告警阈值的配置使用&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">配置安装 dingtalk webhook
&lt;div id="配置安装-dingtalk-webhook" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%85%8d%e7%bd%ae%e5%ae%89%e8%a3%85-dingtalk-webhook" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://github.com/timonwong/prometheus-webhook-dingtalk"
target="_blank"
>webhook github 地址&lt;/a>&lt;/p></description></item><item><title>Rancher 开启监控，及生产应用的优化配置工作说明 (一)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-first/</link><pubDate>Mon, 17 May 2021 10:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-first/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>kubernetes version: &lt;code>v1.17.9&lt;/code>&lt;/li>
&lt;li>rancher dashboard: &lt;code>v2.3.5&lt;/code>&lt;/li>
&lt;li>操作系统: &lt;code>centos 7.8.2003 &lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">基础环境配置
&lt;div id="基础环境配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">使用 kubekey 部署 kubernetes 集群
&lt;div id="使用-kubekey-部署-kubernetes-集群" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8-kubekey-%e9%83%a8%e7%bd%b2-kubernetes-%e9%9b%86%e7%be%a4" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>由于篇幅原因，此处省略部署说明，请参考较早期的 &lt;a
href="http://hugo.blog:1313/post/kubekey-install-k8s/"
target="_blank"
>文档说明&lt;/a>&lt;/p></description></item><item><title>Rancher 开启监控后，exporter/metrics 的添加说明 (二)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-second/</link><pubDate>Mon, 17 May 2021 10:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-second/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://www.treesir.pub/post/rancher-monitor-config-first/"
target="_blank"
>&lt;code>上期&lt;/code>&lt;/a> 介绍了 &lt;code>rancher prometheus operator&lt;/code> 的安装和基础 targets 的修复工作。有的时候我们抓取的 exporter metrics 并不在同集群且与集群没有任何关联时，应该怎么和 rancher &lt;code>monitor&lt;/code> 进行关联配置呢？下面文档将配置展示部署外部 &lt;code>exporter &lt;/code>, 的安装说明、指标抓取、 和监控系统的关联。&lt;/p></description></item><item><title>Velero 备份迁移工具安装与配置</title><link>https://blog.treesir.pub/posts/velero-install/</link><pubDate>Sun, 16 May 2021 18:00:36 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/velero-install/</guid><description>&lt;h2 class="relative group">环境准备
&lt;div id="环境准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">安装基础依赖
&lt;div id="安装基础依赖" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85%e5%9f%ba%e7%a1%80%e4%be%9d%e8%b5%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>安装 Docker Compose：&lt;/p></description></item><item><title>Maven ReleasePlugin 的使用记录</title><link>https://blog.treesir.pub/posts/maven-release-plugin/</link><pubDate>Sun, 16 May 2021 17:52:05 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/maven-release-plugin/</guid><description>&lt;h2 class="relative group">&lt;code>maven&lt;/code> settings.xml 配置使用展示
&lt;div id="maven--settingsxml-配置使用展示" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#maven--settingsxml-%e9%85%8d%e7%bd%ae%e4%bd%bf%e7%94%a8%e5%b1%95%e7%a4%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-xml" data-lang="xml">&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;settings&lt;/span> &lt;span class="na">xmlns=&lt;/span>&lt;span class="s">&amp;#34;http://maven.apache.org/SETTINGS/1.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xmlns:xsi=&lt;/span>&lt;span class="s">&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xsi:schemaLocation=&lt;/span>&lt;span class="s">&amp;#34;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- localRepository
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | The path to the local repository maven will use to store artifacts.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> |
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Default: ${user.home}/.m2/repository
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> &amp;lt;localRepository&amp;gt;/path/to/local/repo&amp;lt;/localRepository&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginGroups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- pluginGroup
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Specifies a further group identifier to use for plugin lookup.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> &amp;lt;pluginGroup&amp;gt;com.your.plugins&amp;lt;/pluginGroup&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginGroups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- proxies
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | This is a list of proxies which can be used on this machine to connect to the network.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Unless otherwise specified (by system property or command-line switch), the first proxy
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | specification in this list marked as active will be used.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> |--&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;proxies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/proxies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-snapshot&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;username&amp;gt;&lt;/span>yangzun&lt;span class="nt">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;password&amp;gt;&lt;/span>12345678&lt;span class="nt">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-release&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;username&amp;gt;&lt;/span>yangzun&lt;span class="nt">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;password&amp;gt;&lt;/span>12345678&lt;span class="nt">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrors&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-snapshot&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrorOf&amp;gt;&lt;/span>*&lt;span class="nt">&amp;lt;/mirrorOf&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-release&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrorOf&amp;gt;&lt;/span>*&lt;span class="nt">&amp;lt;/mirrorOf&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirrors&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>nexus&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;repositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;repository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>central&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;name&amp;gt;&lt;/span>_nexus&lt;span class="nt">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub/&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/repository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/repositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginRepositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginRepository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>central&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;name&amp;gt;&lt;/span>_nexus&lt;span class="nt">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub/&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginRepository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginRepositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;activeProfiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;activeProfile&amp;gt;&lt;/span>nexus&lt;span class="nt">&amp;lt;/activeProfile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/activeProfiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/settings&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">插件打包的使用记录说明
&lt;div id="插件打包的使用记录说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8f%92%e4%bb%b6%e6%89%93%e5%8c%85%e7%9a%84%e4%bd%bf%e7%94%a8%e8%ae%b0%e5%bd%95%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>maven plugin 在打包过程中，是会基于当前分支，创建一个分支进行打包，并会将创建的分支 push 至远端。与 项目的 分支管理模式有所冲突，并不想push 至远端的话&lt;/p></description></item><item><title>使用 Docker Compose 部署 OpenConnect VPN 服务器</title><link>https://blog.treesir.pub/posts/ocserv-vpn-install/</link><pubDate>Sat, 15 May 2021 16:20:46 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/ocserv-vpn-install/</guid><description>&lt;h2 class="relative group">环境要求
&lt;div id="环境要求" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>本文档基于以下环境进行部署：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Docker Compose&lt;/strong>：1.18.0&lt;/li>
&lt;li>&lt;strong>操作系统&lt;/strong>：OpenWrt (x86)&lt;/li>
&lt;li>&lt;strong>Docker 版本&lt;/strong>：19.03.12&lt;/li>
&lt;li>&lt;strong>Docker 镜像&lt;/strong>：&lt;code>yangzun/docker-openconnect-ldap:latest&lt;/code>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>&lt;strong>说明&lt;/strong>：该镜像基于 &lt;code>morganonbass/ocserv-ldap&lt;/code> 进行了修改和优化，解决了原镜像无法正常启动的问题。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">部署准备
&lt;div id="部署准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">安装 Docker Compose
&lt;div id="安装-docker-compose" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85-docker-compose" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">yum install -y docker-compose
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">配置部署文件
&lt;div id="配置部署文件" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%85%8d%e7%bd%ae%e9%83%a8%e7%bd%b2%e6%96%87%e4%bb%b6" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">创建项目目录
&lt;div id="创建项目目录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e9%a1%b9%e7%9b%ae%e7%9b%ae%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir -p /data/docker-compose/openConnect
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /data/docker-compose/openConnect
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">创建 Docker Compose 配置
&lt;div id="创建-docker-compose-配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba-docker-compose-%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cat &amp;gt; docker-compose.yaml &lt;span class="s">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">version: &amp;#34;3&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">services:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> ocserv:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> container_name: ocserv
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> image: yangzun/docker-openconnect-ldap:latest
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> ports:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> - &amp;#34;1443:443/tcp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> - &amp;#34;1443:443/udp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> environment:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> LISTEN_PORT: 443
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> TUNNEL_MODE: &amp;#39;split-include&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> TUNNEL_ROUTES: &amp;#39;192.168.8.0/24&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> DNS_SERVERS: 192.168.8.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> CLIENTNET: 192.168.248.0
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> CLIENTNETMASK: 255.255.255.128
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> BASEDN: &amp;#39;dc=treesir,dc=pub&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> LDAPURI: &amp;#39;ldap://192.168.8.1:389/&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> BINDDN: &amp;#39;cn=admin,dc=treesir,dc=pub&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> BINDPW: &amp;#39;123456&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> SEARCHSCOPE: &amp;#39;ou=users,dc=treesir,dc=pub&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> PAM_LOGIN_ATTRIBUTE: &amp;#39;uid&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> CA_CN: &amp;#39;VPN CA&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> CA_ORG: &amp;#39;OCSERV&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> CA_DAYS: 9999
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> SRV_CN: &amp;#39;nps.treesir.pub&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> SRV_ORG: &amp;#39;Example Company&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> SRV_DAYS: 9999
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> volumes:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> - &amp;#39;./config/:/config/&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> cap_add:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> - NET_ADMIN
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> privileged: true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> restart: unless-stopped
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>配置说明&lt;/strong>：环境变量的详细说明请参考 &lt;a
href="https://hub.docker.com/r/yangzun/docker-openconnect-ldap"
target="_blank"
>Docker Hub 页面&lt;/a>。OpenLDAP 的部署配置请参考 &lt;a
href="https://www.treesir.pub/post/docker-deploy-ldap"
target="_blank"
>LDAP 部署文档&lt;/a>。&lt;/p></description></item><item><title>K8s 部署 Lxcfs 准入控制器，实现容器中资源单独可见</title><link>https://blog.treesir.pub/posts/k8s-lxcfs-admissionhook/</link><pubDate>Fri, 30 Apr 2021 14:10:31 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k8s-lxcfs-admissionhook/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>kubernetes version: v1.17.9 (&lt;code>kubeadm&lt;/code>)&lt;/li>
&lt;li>os: 7.8.2003 (Core)&lt;/li>
&lt;li>kubernetes dashboard: rancher &lt;code>v2.4.15&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">概述
&lt;div id="概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>docker 使用 linux 内核中的 &lt;code>cgroup&lt;/code> 实现了对 容器使用资源的限制，默认容器启动后依旧挂载了宿主机的 &lt;code>/proc&lt;/code> 目录，其中包涵了，&lt;code>meminfo&lt;/code>、&lt;code>cpuinfo&lt;/code>、&lt;code>stat&lt;/code>、&lt;code>uptime&lt;/code> 等资源信息。一些监控工具如 &lt;code>free&lt;/code>、&lt;code>top&lt;/code>、&lt;code>htop&lt;/code> 或 &lt;code>业务应用&lt;/code> 还依赖 &lt;code>/proc&lt;/code> 下文件内容获取资源配置和使用情况。当它们在容器中运行时，实际还是查看到的是宿主机的资源使用，导致资源使用展示源不对，目前社区主流的解决方法是使用 &lt;code>lxcfs&lt;/code> 的方法进行解决。&lt;/p></description></item><item><title>使用 Kubekey 一键 离线/在线 部署 kubernetes 集群</title><link>https://blog.treesir.pub/posts/kubekey-install-k8s/</link><pubDate>Mon, 26 Apr 2021 14:59:36 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kubekey-install-k8s/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">概述
&lt;div id="概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://kubesphere.io/"
target="_blank"
>KubeSphere&lt;/a> 是在 &lt;a
href="https://kubernetes.io/"
target="_blank"
>Kubernetes&lt;/a> 之上构建的面向云原生应用的&lt;strong>分布式操作系统&lt;/strong>，完全开源，支持多云与多集群管理，提供全栈的 IT 自动化运维能力，简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。&lt;/p></description></item><item><title>Git 使用问题的记录</title><link>https://blog.treesir.pub/posts/git-use-issue/</link><pubDate>Sun, 25 Apr 2021 10:35:57 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/git-use-issue/</guid><description>&lt;h2 class="relative group">&lt;strong>指定特定仓库拉取代码&lt;/strong>
&lt;div id="指定特定仓库拉取代码" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8c%87%e5%ae%9a%e7%89%b9%e5%ae%9a%e4%bb%93%e5%ba%93%e6%8b%89%e5%8f%96%e4%bb%a3%e7%a0%81" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git remote add origin https://github.com/demo/example.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull https://repo.csheidou.com/forestry_afterend/prevention_fire_test.git master
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch --set-upstream-to&lt;span class="o">=&lt;/span>origin/master
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git status
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>更改远程仓库地址&lt;/strong>
&lt;div id="更改远程仓库地址" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9b%b4%e6%94%b9%e8%bf%9c%e7%a8%8b%e4%bb%93%e5%ba%93%e5%9c%b0%e5%9d%80" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git remote -v
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git remote set-url origin https://github.com/demo/example.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull origin master --allow-unrelated-histories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git push
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch --set-upstream-to&lt;span class="o">=&lt;/span>origin/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>清理本地错误的用户信息&lt;/strong>
&lt;div id="清理本地错误的用户信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e6%9c%ac%e5%9c%b0%e9%94%99%e8%af%af%e7%9a%84%e7%94%a8%e6%88%b7%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">运行一下命令缓存输入的用户名和密码：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global credential.helper wincred
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">清除掉缓存在git中的用户名和密码
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git credential-manager uninstall
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>解决 Windows git pull 卡住不动问题&lt;/strong>
&lt;div id="解决-windows-git-pull-卡住不动问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3-windows-git-pull-%e5%8d%a1%e4%bd%8f%e4%b8%8d%e5%8a%a8%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>原因 在 git clone 时后面仓库地址是非公开的 需要验证用户及密码 而windows 默认是已弹窗形式&lt;/p></description></item><item><title>OpenVpn 的安装，并配置关联 openLdap 认证</title><link>https://blog.treesir.pub/posts/openvpn-install/</link><pubDate>Thu, 22 Apr 2021 16:19:56 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openvpn-install/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;code>docker-compose&lt;/code>：1.23.2&lt;/li>
&lt;li>操作系统: &lt;code>armbian (斐讯n1)&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">部署软件
&lt;div id="部署软件" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2%e8%bd%af%e4%bb%b6" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">openldap 部署
&lt;div id="openldap-部署" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openldap-%e9%83%a8%e7%bd%b2" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>省略 openldap 的部署配置 请参考之前整理的 &lt;a
href="https://www.treesir.pub/post/docker-deploy-ldap/"
target="_blank"
>&lt;code>文档&lt;/code>&lt;/a>&lt;/p></description></item><item><title>Centos7 执行 shutdown 无法正常关机的解决</title><link>https://blog.treesir.pub/posts/centos-shutdown-notpoweroff/</link><pubDate>Wed, 14 Apr 2021 10:48:42 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/centos-shutdown-notpoweroff/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>因为在公司中，有下班后有需要关闭 &lt;code>服务器&lt;/code> 的操作，并且每天还需要去手动打开。有点违背 极客精神，所有自己通过 &lt;code>shell script&lt;/code> + &lt;code>cron&lt;/code> 的形式进行每天定时的 &lt;code>开关服务器机&lt;/code> 操作。但是服务器中不乏有一些比较老的机型，没有提供类似于&lt;code> ipmi&lt;/code> 管理功能，这些服务器自动启动依赖于主板自带的 &lt;code>网络唤醒&lt;/code> 功能，如果服务器未正常关机时 (卡在关机界面)，第二天早上通过网络唤醒时是无法正常打开服务器的，需要管理人员的介入管理强制关机。这篇文档主要是介绍如何优化服务器的关机时间长，服务器关机卡死问题。&lt;/p></description></item><item><title>Git 日报生成脚本</title><link>https://blog.treesir.pub/posts/git-dailypaper/</link><pubDate>Tue, 13 Apr 2021 13:41:01 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/git-dailypaper/</guid><description>&lt;h2 class="relative group">功能简介
&lt;div id="功能简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8a%9f%e8%83%bd%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>本脚本用于生成 Git 日报通知，将 GitLab 中指定项目组的所有项目 Git 提交信息以 HTML 表格形式发送给相关人员，适用于敏捷开发项目的日常管理。&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">环境要求
&lt;div id="环境要求" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;strong>依赖工具&lt;/strong>&lt;/p></description></item><item><title>GitLab Pre-receive 钩子的配置与使用指南</title><link>https://blog.treesir.pub/posts/gitlab-pre-receive-webhook/</link><pubDate>Mon, 12 Apr 2021 17:25:58 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-pre-receive-webhook/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">版本信息
&lt;div id="版本信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>GitLab 版本：13.10.2&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>如需了解 GitLab 服务器安装方法，请参考 &lt;a
href="https://www.treesir.pub/post/gitlab-deploy/"
target="_blank"
>安装文档&lt;/a>。本文将详细介绍如何在 GitLab 中添加和配置 &lt;code>pre-receive&lt;/code> 钩子，并演示如何对 &lt;code>git push&lt;/code> 操作进行限制。&lt;/p></description></item><item><title>Gitlab 和 jira 之间的集成</title><link>https://blog.treesir.pub/posts/gitlab-integration-jira/</link><pubDate>Fri, 09 Apr 2021 15:52:44 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-integration-jira/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>Gitlab-ce 版本： 13.10.2&lt;/p>
&lt;p>Jira 版本：v8.13.4&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">Jira
&lt;div id="jira" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#jira" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">获取 工作流结束 id
&lt;div id="获取-工作流结束-id" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%8e%b7%e5%8f%96-%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%bb%93%e6%9d%9f-id" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210412165030920" src="https://cdn.treesir.pub/img/image-20210412165030920.png">
&lt;/figure>
&lt;/p></description></item><item><title>Docker 在 Centos7 中离线安装</title><link>https://blog.treesir.pub/posts/docker-centosoffline-install/</link><pubDate>Thu, 25 Mar 2021 11:12:50 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-centosoffline-install/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>操作系统: Centos&lt;/li>
&lt;li>Docker 版本: 19.03.8&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 class="relative group">离线版本安装
&lt;div id="离线版本安装" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%a6%bb%e7%ba%bf%e7%89%88%e6%9c%ac%e5%ae%89%e8%a3%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Docker-ce 版本 YUM源 配置 - &lt;a
href="https://docs.docker.com/engine/install/centos/"
target="_blank"
>参考文档&lt;/a>&lt;/p></description></item><item><title>Jira Webhook Integration Jenkins</title><link>https://blog.treesir.pub/posts/jira-webhook-integration-jenkins/</link><pubDate>Tue, 16 Mar 2021 08:49:04 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/jira-webhook-integration-jenkins/</guid><description>&lt;h2 class="relative group">Jira Webhook 与 Jenkins 集成
&lt;div id="jira-webhook-与-jenkins-集成" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#jira-webhook-%e4%b8%8e-jenkins-%e9%9b%86%e6%88%90" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>此文档为归档数据，暂不具备参考意义&lt;/code>&lt;/p>&lt;/blockquote>
&lt;p>Jira 创建项目 并新建模块 关联 Gitlab 中对应仓库&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210316104758799" src="https://cdn.treesir.pub/img/image-20210316104758799.png">
&lt;/figure>
&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210316105052883" src="https://cdn.treesir.pub/img/image-20210316105052883.png">
&lt;/figure>
&lt;/p>
&lt;p>Jenkins 创建 jira webhook manage pipeline&lt;/p></description></item><item><title>企业级 Prometheus 监控平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/prometheus/</link><pubDate>Tue, 09 Mar 2021 15:50:54 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/prometheus/</guid><description>&lt;h2 class="relative group">Prometheus 监控平台简介
&lt;div id="prometheus-监控平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#prometheus-%e7%9b%91%e6%8e%a7%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Prometheus
&lt;div id="什么是-prometheus" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-prometheus" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Prometheus 是由 SoundCloud 开发并贡献给 CNCF（Cloud Native Computing Foundation）的开源监控和告警系统。作为云原生监控的事实标准，Prometheus 为现代化的微服务架构和容器化环境提供了强大的监控能力。&lt;/p></description></item><item><title>企业级 GitLab 平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/gitlab-deploy/</link><pubDate>Thu, 04 Mar 2021 16:31:06 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-deploy/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/jenkins-install/">企业级 Jenkins CI/CD 平台部署与配置完整指南&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/">Kubernetes 环境下部署 GitLab：localPv + 外部数据库方案&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/spinnaker-helm-installd/">使用 Helm 部署 Spinnaker 持续部署(CD)平台&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">GitLab 平台简介
&lt;div id="gitlab-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#gitlab-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 GitLab
&lt;div id="什么是-gitlab" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-gitlab" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>GitLab 是一个基于 Web 的 DevOps 生命周期工具，提供了 Git 仓库管理、代码审查、问题跟踪、CI/CD 流水线和 Wiki 等功能。作为一个完整的 DevOps 平台，GitLab 帮助团队协作开发、测试和部署应用程序。&lt;/p></description></item><item><title>企业级 Jenkins CI/CD 平台部署与配置完整指南</title><link>https://blog.treesir.pub/posts/jenkins-install/</link><pubDate>Tue, 02 Mar 2021 19:31:09 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/jenkins-install/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/gitlab-deploy/">企业级 GitLab 平台部署与运维完整指南&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/spinnaker-helm-installd/">使用 Helm 部署 Spinnaker 持续部署(CD)平台&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/">在 Kubernetes 中使用 localPv 部署 Gitlab&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">Jenkins 平台简介
&lt;div id="jenkins-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#jenkins-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Jenkins
&lt;div id="什么是-jenkins" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-jenkins" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Jenkins 是世界领先的开源自动化服务器，由 Kohsuke Kawaguchi 于 2004 年创建。作为 DevOps 工具链的核心组件，Jenkins 为软件开发生命周期提供了强大的自动化能力。&lt;/p></description></item><item><title>CentOS 7 编译安装 QEMU 及 libvirt 管理工具</title><link>https://blog.treesir.pub/posts/qume-libvirt-install/</link><pubDate>Thu, 25 Feb 2021 09:07:25 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/qume-libvirt-install/</guid><description>&lt;h2 class="relative group"> 环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>操作系统&lt;/strong>：CentOS 7.9.2009&lt;/li>
&lt;li>&lt;strong>QEMU 版本&lt;/strong>：&lt;a
href="https://download.qemu.org/qemu-5.2.0.tar.xz"
target="_blank"
>5.2.0&lt;/a>&lt;/li>
&lt;li>&lt;strong>libvirt 版本&lt;/strong>：5.4.0&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：libvirt 高版本安装较为复杂，如需安装高版本请参考&lt;a
href="https://libvirt.org/compiling.html"
target="_blank"
>官方文档&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">编译安装 QEMU
&lt;div id="编译安装-qemu" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%bc%96%e8%af%91%e5%ae%89%e8%a3%85-qemu" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：以下操作命令主要在 &lt;code>/data&lt;/code> 目录下进行。&lt;/p></description></item><item><title>Raid 阵列卡 Megacli 管理工具的使用记录</title><link>https://blog.treesir.pub/posts/raid-megacli/</link><pubDate>Wed, 24 Feb 2021 20:54:13 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/raid-megacli/</guid><description>&lt;h2 class="relative group">安装
&lt;div id="安装" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;a
href="https://gist.github.com/fxkraus/595ab82e07cd6f8e057d31bc0bc5e779"
target="_blank"
>&lt;strong>安装参考文档&lt;/strong>&lt;/a>&lt;/p>
&lt;p>&lt;a
href="https://www.cnblogs.com/luxiaodai/p/9871612.html"
target="_blank"
>&lt;strong>使用参考文档&lt;/strong>&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>示例为： &lt;code>Centos7 &lt;/code> 中的安装步骤&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">wget https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-14_MegaCLI.zip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">unzip 8-07-14_MegaCLI.zip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rpm -ivhU Linux/MegaCli-8.07.14-1.noarch.rpm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp -a /opt/MegaRAID/MegaCli/MegaCli64 /usr/local/bin/MegaCli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">命令使用记录
&lt;div id="命令使用记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%91%bd%e4%bb%a4%e4%bd%bf%e7%94%a8%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">将某块物理盘下线/上线
&lt;div id="将某块物理盘下线上线" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%b0%86%e6%9f%90%e5%9d%97%e7%89%a9%e7%90%86%e7%9b%98%e4%b8%8b%e7%ba%bf%e4%b8%8a%e7%ba%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;pre tabindex="0">&lt;code>MegaCli -PDOffline -PhysDrv[31:8] -a0
MegaCli -PDRbld -ShowProg -PhysDrv[31:8] `#[E:S]` -aAll # 查看 rebuild 状态
MegaCli -pdrbld -progdsply -physdrv[31:8] -aALL # 进度条显示 rebuild 状态
MegaCli -PDOnline -PhysDrv [1:4] -a0
&lt;/code>&lt;/pre>&lt;p>&lt;strong>配置示例&lt;/strong>&lt;/p></description></item><item><title>JIRA &amp; Confluence 完整安装配置指南</title><link>https://blog.treesir.pub/posts/jira-install/</link><pubDate>Sun, 21 Feb 2021 11:02:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/jira-install/</guid><description>&lt;h2 class="relative group">系统环境要求
&lt;div id="系统环境要求" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">环境信息
&lt;div id="环境信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组件&lt;/th>
&lt;th>版本&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>操作系统&lt;/td>
&lt;td>CentOS 7+&lt;/td>
&lt;td>推荐使用 CentOS 7 或更高版本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>JIRA 版本&lt;/td>
&lt;td>8.13.4&lt;/td>
&lt;td>企业级项目管理工具&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据库&lt;/td>
&lt;td>MySQL 5.7&lt;/td>
&lt;td>存储 JIRA 数据&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Java 环境&lt;/td>
&lt;td>OpenJDK 1.8&lt;/td>
&lt;td>JIRA 运行环境&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>💡 &lt;strong>提示&lt;/strong>：可以访问 &lt;a
href="https://www.atlassian.com/zh/software/jira/download"
target="_blank"
>JIRA 官方下载页面&lt;/a> 查看最新版本信息&lt;/p></description></item><item><title>VMware ESXi 虚拟机克隆完整操作指南</title><link>https://blog.treesir.pub/posts/esxi-clone-hosts/</link><pubDate>Sun, 21 Feb 2021 10:09:38 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/esxi-clone-hosts/</guid><description>&lt;p>在 VMware ESXi 环境中，虚拟机克隆是一个常见的运维操作，可以快速创建相同配置的虚拟机实例。本文将详细介绍如何在 ESXi 6.7 环境中使用命令行工具进行虚拟机克隆操作。&lt;/p>
&lt;h2 class="relative group">虚拟机克隆概述
&lt;div id="虚拟机克隆概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%99%9a%e6%8b%9f%e6%9c%ba%e5%85%8b%e9%9a%86%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是虚拟机克隆
&lt;div id="什么是虚拟机克隆" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af%e8%99%9a%e6%8b%9f%e6%9c%ba%e5%85%8b%e9%9a%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>虚拟机克隆是指创建现有虚拟机的完整副本，包括：&lt;/p></description></item><item><title>使用斐讯 N1 和 OpenWrt 搭建 K3s 集群</title><link>https://blog.treesir.pub/posts/n1-openwrt-k3s-deploy/</link><pubDate>Tue, 26 Jan 2021 09:26:39 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/n1-openwrt-k3s-deploy/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">软件版本
&lt;div id="软件版本" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>K3s 版本：v1.19.7+k3s1&lt;/li>
&lt;li>Docker 版本：19.03.13 (N1)，19.03.12 (OpenWrt)&lt;/li>
&lt;li>写盘工具：balenaEtcher&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">硬件配置
&lt;div id="硬件配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%a1%ac%e4%bb%b6%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>IP 地址&lt;/th>
&lt;th>机型&lt;/th>
&lt;th>配置&lt;/th>
&lt;th>操作系统&lt;/th>
&lt;th>角色&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>192.168.8.1&lt;/td>
&lt;td>占美（机型不详）&lt;/td>
&lt;td>4C 2G（CPU N2940）&lt;/td>
&lt;td>OpenWrt（X86_64 自编译）&lt;/td>
&lt;td>node/agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>192.168.8.112&lt;/td>
&lt;td>斐讯 N1&lt;/td>
&lt;td>4C 2G&lt;/td>
&lt;td>Armbian（5.0.2-aml-s905）&lt;/td>
&lt;td>master/server&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 class="relative group">OpenWrt 自编译
&lt;div id="openwrt-自编译" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openwrt-%e8%87%aa%e7%bc%96%e8%af%91" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>需要自编译的原因：之前使用 esir 打包的高大全 OpenWrt 固件部署 K3s 时发现，内核没有开启 &lt;code>vxlan&lt;/code> 特性，导致部署失败。如果您使用的 OpenWrt 固件已开启 &lt;code>vxlan&lt;/code> 特性，可跳过此步骤。&lt;/p></description></item><item><title>在 Kubernetes 中部署 NFS 动态存储类完整指南</title><link>https://blog.treesir.pub/posts/k8s-nfs-strage-class/</link><pubDate>Tue, 19 Jan 2021 14:54:30 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k8s-nfs-strage-class/</guid><description>&lt;p>在 Kubernetes 集群中，持久化存储是有状态应用的重要基础设施。NFS（Network File System）作为一种成熟的网络文件系统，可以为 Kubernetes 提供简单可靠的共享存储解决方案。本文将详细介绍如何部署 NFS StorageClass 实现动态存储供应。&lt;/p>
&lt;h2 class="relative group">什么是 StorageClass
&lt;div id="什么是-storageclass" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-storageclass" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>StorageClass 是 Kubernetes 中的一种资源对象，用于描述存储的&amp;quot;类别&amp;quot;。它的主要作用包括：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>动态供应&lt;/strong>: 自动创建 PersistentVolume（PV）&lt;/li>
&lt;li>&lt;strong>存储抽象&lt;/strong>: 为不同类型的存储提供统一接口&lt;/li>
&lt;li>&lt;strong>参数化配置&lt;/strong>: 支持不同的存储参数和策略&lt;/li>
&lt;li>&lt;strong>自动化管理&lt;/strong>: 减少手动创建 PV 的工作量&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">方案架构
&lt;div id="方案架构" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e6%9e%b6%e6%9e%84" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>本方案采用以下架构：&lt;/p></description></item><item><title>Kubernetes 部署企业级 Kafka 集群完整指南</title><link>https://blog.treesir.pub/posts/k8s-deploy-kafka-cluster/</link><pubDate>Tue, 19 Jan 2021 13:44:03 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/k8s-deploy-kafka-cluster/</guid><description>&lt;h2 class="relative group">Apache Kafka 简介
&lt;div id="apache-kafka-简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#apache-kafka-%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Apache Kafka
&lt;div id="什么是-apache-kafka" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-apache-kafka" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Apache Kafka 是一个开源的分布式事件流处理平台，由 LinkedIn 开发并贡献给 Apache 软件基金会。它被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。&lt;/p></description></item><item><title>Traefik Ingress Controller 完整部署指南</title><link>https://blog.treesir.pub/posts/ingress-traefik/</link><pubDate>Sun, 17 Jan 2021 16:15:32 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/ingress-traefik/</guid><description>&lt;h2 class="relative group">Traefik 简介
&lt;div id="traefik-简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#traefik-%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Traefik？
&lt;div id="什么是-traefik" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-traefik" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Traefik 是一个现代化的云原生反向代理和负载均衡器，专为微服务架构设计。它就像一个智能的&amp;quot;交通指挥员&amp;quot;，能够自动发现您的服务并为它们配置路由规则。&lt;/p></description></item><item><title>修复 Rancher 单机部署升级后 Docker 无法启动问题</title><link>https://blog.treesir.pub/posts/rancher-upgrade-docker/</link><pubDate>Sat, 16 Jan 2021 14:39:59 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-upgrade-docker/</guid><description>&lt;h2 class="relative group">环境配置
&lt;div id="环境配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>操作系统&lt;/strong>：CentOS 7.9.2009&lt;/li>
&lt;li>&lt;strong>Docker 版本&lt;/strong>：18.09.9&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">问题复现
&lt;div id="问题复现" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e5%a4%8d%e7%8e%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">安装 Rancher
&lt;div id="安装-rancher" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85-rancher" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker pull rancher/rancher:v2.3.5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--restart&lt;span class="o">=&lt;/span>unless-stopped &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--name rancher &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-p 80:80 -p 443:443 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>--privileged &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>rancher/rancher:v2.3.5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210116134244336" src="https://cdn.treesir.pub/img/image-20210116134244336.png">
&lt;/figure>
&lt;/p></description></item><item><title>记录一次，因误删容器导致的容器恢复过程</title><link>https://blog.treesir.pub/posts/delete-container-reset/</link><pubDate>Thu, 14 Jan 2021 20:09:58 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/delete-container-reset/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>因在日常维护过程中&lt;code>升级了docker的版本&lt;/code> ，碰到了一个 docker 的一个 &lt;a
href="https://treesir.pub/post/rancher-upgrade-docker"
target="_blank"
>&lt;code>bug&lt;/code>&lt;/a>, 导致 docker 服务无法正常启动。在恢复 docker 服务的过程中把 &lt;code>/var/lib/docker/containers&lt;/code> 下的所有文件给 &lt;code>清空&lt;/code> 了，清空后 docker 服务可以正常运行，但发现原来的服务中还存留着一个还在使用的 &lt;code>cmdb&lt;/code> 系统也被我跟着删除了，是之前的前辈部署的。好在自己有 &lt;code>做备份&lt;/code> 的习惯，现记录一下被删除容器的恢复过程。&lt;/p></description></item><item><title>Coredns 出现间断性无法正常解析域名问题</title><link>https://blog.treesir.pub/posts/intermittent-coredns-hosts/</link><pubDate>Thu, 07 Jan 2021 14:34:16 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/intermittent-coredns-hosts/</guid><description>&lt;h2 class="relative group">问题描述:
&lt;div id="问题描述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e6%8f%8f%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Kubernetes 节点中，有&lt;code>一台节点&lt;/code>使用 coredns 进行解析&lt;code>某个域名&lt;/code>时，出现间断性无法正常解析问题，而解析另外一个域名时不会出现解析问题。&lt;/p>
&lt;blockquote>
&lt;p>再次重复一下问题重点: &lt;code>且在集群中的某台节点中出现，且使用某个域名时出现&lt;/code>&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">环境说明：
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>操作系统: CentOS Linux release 7.9.2009&lt;/li>
&lt;li>Kubernetes 集群: v1.17.4 （集群使用 rancher &lt;code>自定义添加集群&lt;/code> 一键部署）&lt;/li>
&lt;li>Dashboard: Rancher-v2.3.5&lt;/li>
&lt;li>Linux Kernel: 5.10.3-1.el7.elrepo.x86_64&lt;/li>
&lt;li>Coredns : Coredns:1.6.5 + Node-local-dns&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">工具说明
&lt;div id="工具说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%b7%a5%e5%85%b7%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>测试时使用的容器: praqma/network-multitool:latest&lt;/p></description></item><item><title>部署 Nginx-Ingress 并配置暴露 kubernetes dashboard</title><link>https://blog.treesir.pub/posts/ingress-to-dashboard/</link><pubDate>Tue, 22 Dec 2020 09:24:55 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/ingress-to-dashboard/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://www.treesir.pub/post/kubeadm-deploy-k8s1.9/"
target="_blank"
>链接文档&lt;/a>&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">软件版本说明
&lt;div id="软件版本说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>helm: &lt;a
href="https://github.com/helm/helm/tags"
target="_blank"
>v3.4.2&lt;/a>&lt;/li>
&lt;li>ingress: &lt;a
href="https://github.com/kubernetes/ingress-nginx/tags"
target="_blank"
>v3.16.1&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">Nginx Ingress
&lt;div id="nginx-ingress" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nginx-ingress" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://kubernetes.github.io/ingress-nginx/"
target="_blank"
>参考文档&lt;/a>&lt;/p></description></item><item><title>企业级 Nexus3 制品仓库平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/docker-deploy-nexus3-upgrade/</link><pubDate>Tue, 22 Dec 2020 09:24:55 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-deploy-nexus3-upgrade/</guid><description>&lt;p>Nexus3 是世界领先的企业级制品仓库管理平台，为现代 DevOps 工具链提供统一的制品管理解决方案。本指南将从基础部署到企业级配置，全面介绍 Nexus3 的部署、配置、管理和运维最佳实践。&lt;/p>
&lt;h2 class="relative group">Nexus3 平台简介
&lt;div id="nexus3-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nexus3-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Nexus3
&lt;div id="什么是-nexus3" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-nexus3" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Nexus Repository Manager 3 是由 Sonatype 公司开发的下一代制品仓库管理平台，作为 DevOps 工具链的核心组件，为软件开发生命周期提供统一的制品管理能力。&lt;/p></description></item><item><title>Kubeadm 部署 kubernetes-v1.19.x 集群</title><link>https://blog.treesir.pub/posts/kubeadm-deploy-k8s1.9/</link><pubDate>Mon, 21 Dec 2020 13:19:31 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kubeadm-deploy-k8s1.9/</guid><description>&lt;h2 class="relative group">系统环境说明
&lt;div id="系统环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>使用操作系统: Centos-7.9.2009&lt;/li>
&lt;li>操作系统内核版本: 4.4.248 (&lt;code>lt&lt;/code>)&lt;/li>
&lt;li>Docker容器版本: 18.09.9&lt;/li>
&lt;li>Kubeadm 版本: 1.19.6&lt;/li>
&lt;li>节点说明:
&lt;ul>
&lt;li>master01: 192.168.8.70 ,192.168.88.70&lt;/li>
&lt;li>node01: 192.168.8.71 ,192.168.88.71&lt;/li>
&lt;li>(备注: 为每个节点配置了两个ip，对外服务网段为: &lt;code>192.168.8.0/24&lt;/code>, 集群内部通讯: &lt;code>192.168.88.0/24&lt;/code>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">OS 准备
&lt;div id="os-准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#os-%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">系统初始化
&lt;div id="系统初始化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e5%88%9d%e5%a7%8b%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>&lt;code>确保已将selinux关闭&lt;/code>&lt;/p></description></item><item><title>企业级 CentOS 7 系统初始化与优化完整指南</title><link>https://blog.treesir.pub/posts/centos-init-config/</link><pubDate>Mon, 21 Dec 2020 09:34:01 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/centos-init-config/</guid><description>&lt;h2 class="relative group">CentOS 7 系统初始化简介
&lt;div id="centos-7-系统初始化简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#centos-7-%e7%b3%bb%e7%bb%9f%e5%88%9d%e5%a7%8b%e5%8c%96%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">概述
&lt;div id="概述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>CentOS 7 作为企业级 Linux 发行版，在生产环境中广泛应用。新安装的系统需要进行全面的初始化配置和优化，以确保系统的安全性、稳定性和高性能。本指南提供了一套经过生产环境验证的完整初始化方案。&lt;/p></description></item><item><title>Docker 部署 OpenLDAP 统一身份认证服务</title><link>https://blog.treesir.pub/posts/docker-deploy-ldap/</link><pubDate>Fri, 18 Dec 2020 16:24:43 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-deploy-ldap/</guid><description>&lt;h2 class="relative group">OpenLDAP 简介
&lt;div id="openldap-简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openldap-%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 OpenLDAP
&lt;div id="什么是-openldap" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-openldap" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>OpenLDAP 是一个开源的轻量级目录访问协议（LDAP）实现，广泛用于企业级统一身份认证和目录服务。它提供了集中化的用户管理、身份验证和授权功能。&lt;/p></description></item><item><title>Kubernetes 集群控制平面组件频繁重启问题排查记录</title><link>https://blog.treesir.pub/posts/flannel-exclusion-records/</link><pubDate>Fri, 18 Dec 2020 16:24:43 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/flannel-exclusion-records/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Kubernetes 版本&lt;/strong>：v1.19.6&lt;/li>
&lt;li>&lt;strong>操作系统&lt;/strong>：CentOS 7.9.2009&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">问题现象
&lt;div id="问题现象" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e7%8e%b0%e8%b1%a1" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>最近在使用 Kubernetes 集群时，发现集群响应变慢。排查发现 Master 节点中 &lt;code>controller-manager&lt;/code> 及 &lt;code>scheduler&lt;/code> 组件频繁重启。&lt;/p></description></item><item><title>使用 Docker 快速部署 Redis 服务器</title><link>https://blog.treesir.pub/posts/docker-quickstart-redis/</link><pubDate>Mon, 30 Nov 2020 10:35:47 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-quickstart-redis/</guid><description>&lt;p>Redis 是一个高性能的内存数据库，广泛用于缓存、会话存储和消息队列等场景。本文将介绍如何在 CentOS 系统上使用 Docker 容器快速部署 Redis 服务器，让您在几分钟内就能拥有一个可用的 Redis 环境。&lt;/p>
&lt;h2 class="relative group">环境准备
&lt;div id="环境准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在开始之前，请确保您的系统满足以下要求：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>操作系统&lt;/strong>: CentOS 7 或更高版本&lt;/li>
&lt;li>&lt;strong>Docker 版本&lt;/strong>: 19.03.8 或更高版本&lt;/li>
&lt;li>&lt;strong>Redis 镜像&lt;/strong>: redis:5.0.4（本教程使用的版本）&lt;/li>
&lt;li>&lt;strong>系统权限&lt;/strong>: 需要 root 权限或 sudo 权限&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">部署步骤
&lt;div id="部署步骤" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2%e6%ad%a5%e9%aa%a4" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">第一步：系统优化配置
&lt;div id="第一步系统优化配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%ac%ac%e4%b8%80%e6%ad%a5%e7%b3%bb%e7%bb%9f%e4%bc%98%e5%8c%96%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>为了确保 Redis 能够稳定高效地运行，我们需要先对系统进行一些优化配置：&lt;/p></description></item><item><title>Docker 部署多网口 openWrt 软路由</title><link>https://blog.treesir.pub/posts/openwrt-docker-multi-net/</link><pubDate>Thu, 19 Nov 2020 17:56:52 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/openwrt-docker-multi-net/</guid><description>&lt;h2 class="relative group">环境说明:
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>操作系统: Centos 7.8.2003&lt;/p>
&lt;p>内核版本: 4.14.129-bbrplus&lt;/p>
&lt;p>Docker 版本: 19.03.12&lt;/p>
&lt;p>使用 Docker 镜像: &lt;a
href="https://hub.docker.com/r/raymondwong/openwrt_r9"
target="_blank"
>raymondwong/openwrt_r9:20.1.24-x86_64&lt;/a>&lt;/p>
&lt;p>网卡说明: 板载螃蟹网卡、绿联 &lt;code>usb3.0&lt;/code> 千M 网卡&lt;/p></description></item><item><title>Docker 部署 OpenWrt 软路由及宿主机通信配置</title><link>https://blog.treesir.pub/posts/n1-docker/</link><pubDate>Sun, 15 Nov 2020 16:09:10 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/n1-docker/</guid><description>&lt;h2 class="relative group">环境配置
&lt;div id="环境配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>本文档基于以下环境配置进行部署：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>宿主机 IP&lt;/strong>：192.168.8.102&lt;/li>
&lt;li>&lt;strong>OpenWrt 容器 IP&lt;/strong>：192.168.8.111 (macvlan 模式)&lt;/li>
&lt;li>&lt;strong>主路由网关&lt;/strong>：192.168.8.1&lt;/li>
&lt;li>&lt;strong>网络段&lt;/strong>：192.168.8.0/24&lt;/li>
&lt;li>&lt;strong>Docker 镜像&lt;/strong>：&lt;code>raymondwong/openwrt_r9:21.2.1-arm64&lt;/code>&lt;/li>
&lt;li>&lt;strong>操作系统&lt;/strong>：ARMBIAN&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">部署 OpenWrt 软路由
&lt;div id="部署-openwrt-软路由" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2-openwrt-%e8%bd%af%e8%b7%af%e7%94%b1" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">1. 安装 Docker Compose
&lt;div id="1-安装-docker-compose" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#1-%e5%ae%89%e8%a3%85-docker-compose" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Debian/Ubuntu 系统&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">apt install -y docker-compose
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># CentOS/RHEL 系统&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yum install -y docker-compose
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">2. 创建配置文件
&lt;div id="2-创建配置文件" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#2-%e5%88%9b%e5%bb%ba%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>首先创建工作目录并准备 Docker Compose 配置文件：&lt;/p></description></item><item><title>Kind 部署本地k8s集群的使用记录</title><link>https://blog.treesir.pub/posts/first-kind/</link><pubDate>Sun, 15 Nov 2020 14:24:42 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/first-kind/</guid><description>&lt;h2 class="relative group">参考资料
&lt;div id="参考资料" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://github.com/kubernetes-sigs/kind"
target="_blank"
>Github 地址&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.tianfeiyu.com/2019/09/06/kind_deploy/"
target="_blank"
>参考博客&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">安装
&lt;div id="安装" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -Lo ./kind &lt;span class="s2">&amp;#34;https://kind.sigs.k8s.io/dl/v0.9.0/kind-&lt;/span>&lt;span class="k">$(&lt;/span>uname&lt;span class="k">)&lt;/span>&lt;span class="s2">-amd64&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod +x ./kind
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv ./kind /some-dir-in-your-PATH/kind
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">启动集群
&lt;div id="启动集群" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%90%af%e5%8a%a8%e9%9b%86%e7%be%a4" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>注意启动集群前 请确认 docker 服务是否启动&lt;/p></description></item><item><title>关于我</title><link>https://blog.treesir.pub/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/about/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
云原生与 DevOps 实践工程师，专注生产环境中的技术落地与经验沉淀。
&lt;/div>
&lt;h2 class="relative group">博客内容
&lt;div id="博客内容" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8d%9a%e5%ae%a2%e5%86%85%e5%ae%b9" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ol class="border-l-2 border-primary-500 dark:border-primary-300 list-none">
&lt;li>
&lt;div class="flex flex-start">
&lt;div
class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full -ml-12 mt-5">
&lt;span class="relative block icon">
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
&lt;path fill="currentColor" d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/>&lt;/svg>
&lt;/span>
&lt;/div>
&lt;div class="block p-6 rounded-lg shadow-2xl min-w-full ml-6 mb-10 break-words">
&lt;div class="flex justify-between">
&lt;h2 class="mt-0">实战教程&lt;/h2>
&lt;/div>
&lt;div class="mb-6">
手把手的技术实施指南，包含详细的操作步骤和配置说明
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/li>
&lt;li>
&lt;div class="flex flex-start">
&lt;div
class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full -ml-12 mt-5">
&lt;/div>
&lt;div class="block p-6 rounded-lg shadow-2xl min-w-full ml-6 mb-10 break-words">
&lt;div class="flex justify-between">
&lt;h2 class="mt-0">工具分享&lt;/h2>
&lt;/div>
&lt;div class="mb-6">
各种开发运维工具的使用心得和最佳实践
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/li>
&lt;li>
&lt;div class="flex flex-start">
&lt;div
class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full -ml-12 mt-5">
&lt;span class="relative block icon">
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/>&lt;/svg>
&lt;/span>
&lt;/div>
&lt;div class="block p-6 rounded-lg shadow-2xl min-w-full ml-6 mb-10 break-words">
&lt;div class="flex justify-between">
&lt;h2 class="mt-0">问题解决&lt;/h2>
&lt;/div>
&lt;div class="mb-6">
工作中遇到的技术难题和解决思路
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/li>
&lt;li>
&lt;div class="flex flex-start">
&lt;div
class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full -ml-12 mt-5">
&lt;span class="relative block icon">
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">&lt;path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/>&lt;/svg>
&lt;/span>
&lt;/div>
&lt;div class="block p-6 rounded-lg shadow-2xl min-w-full ml-6 mb-10 break-words">
&lt;div class="flex justify-between">
&lt;h2 class="mt-0">技术思考&lt;/h2>
&lt;/div>
&lt;div class="mb-6">
对新技术趋势和开发实践的一些个人理解
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/li>
&lt;/ol>
&lt;h2 class="relative group">技术专长
&lt;div id="技术专长" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8a%80%e6%9c%af%e4%b8%93%e9%95%bf" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>领域&lt;/th>
&lt;th>技术栈&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>容器化&lt;/strong>&lt;/td>
&lt;td>Docker 部署、镜像构建、多容器编排&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Kubernetes&lt;/strong>&lt;/td>
&lt;td>集群搭建、应用部署、服务治理、监控告警&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>DevOps 工具链&lt;/strong>&lt;/td>
&lt;td>Git、Jenkins、GitLab CI/CD、ArgoCD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>系统运维&lt;/strong>&lt;/td>
&lt;td>Linux 管理、网络配置、性能优化&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>云原生生态&lt;/strong>&lt;/td>
&lt;td>微服务架构、服务网格、可观测性&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AI 工程化&lt;/strong>&lt;/td>
&lt;td>AI Agent、MCP 集成、Skills 系统&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 class="relative group">写作初衷
&lt;div id="写作初衷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%86%99%e4%bd%9c%e5%88%9d%e8%a1%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div
class="flex px-4 py-3 rounded-md" style="background-color: #f0fdf4"
>
&lt;span
class="ltr:pr-3 rtl:pl-3 flex items-center" style="color: #16a34a"
>
&lt;span class="relative block icon">
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
&lt;path fill="currentColor" d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/>&lt;/svg>
&lt;/span>
&lt;/span>
&lt;span
style="color: #166534"
>用简单的话把复杂的技术概念说清楚，分享能直接上手的操作步骤，帮大家避开我踩过的坑。&lt;/span>
&lt;/div>
&lt;h2 class="relative group">博客技术栈
&lt;div id="博客技术栈" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8d%9a%e5%ae%a2%e6%8a%80%e6%9c%af%e6%a0%88" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="mermaid" align="center">
&lt;pre>
graph LR
A["Hugo"] -->|静态生成| B["Blowfish 主题"]
B -->|Tailwind CSS| C["响应式设计"]
C --> D["GitLab CI/CD"]
D -->|自动部署| E["线上站点"]
&lt;/pre>
&lt;/div>
&lt;h2 class="relative group">联系方式
&lt;div id="联系方式" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%81%94%e7%b3%bb%e6%96%b9%e5%bc%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;a
class="!rounded-md bg-primary-600 px-4 py-2 !text-neutral !no-underline hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
href="mailto:yangzun@treesir.pub"
target="_blank"
role="button">
发送邮件
&lt;/a>
&lt;a
class="!rounded-md bg-primary-600 px-4 py-2 !text-neutral !no-underline hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
href="https://github.com/cdryzun"
target="_blank"
role="button">
GitHub 主页
&lt;/a></description></item></channel></rss>