<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Blog-Building on UU 技术站</title>
    <link>https://blog.uuworld.cn/columns/blog-building/</link>
    <description>Recent content in Blog-Building on UU 技术站</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 30 Apr 2026 20:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.uuworld.cn/columns/blog-building/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>博客首页排版修复：Hero 区域高度与快捷链接间距优化</title>
      <link>https://blog.uuworld.cn/posts/005-blog-homepage-fix/</link>
      <pubDate>Thu, 30 Apr 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.uuworld.cn/posts/005-blog-homepage-fix/</guid>
      <description>&lt;h2 id=&#34;问题现象&#34;&gt;问题现象&lt;/h2&gt;
&lt;p&gt;博客首页打开后，搜索框下方留出了大片空白，快捷链接卡片被推到了屏幕下半部分。用户需要滚动才能看到&amp;quot;专栏&amp;quot;入口，访问路径变长了。&lt;/p&gt;
&lt;p&gt;目标效果：搜索框 → 少量间距 → 快捷链接 → 专栏卡片，首页一屏内尽量展示所有核心入口。&lt;/p&gt;
&lt;h2 id=&#34;排查过程&#34;&gt;排查过程&lt;/h2&gt;
&lt;h3 id=&#34;第一层min-height-冲突&#34;&gt;第一层：min-height 冲突&lt;/h3&gt;
&lt;p&gt;打开浏览器开发者工具，定位到 &lt;code&gt;.home-hero&lt;/code&gt; 元素，发现 computed style 显示 &lt;code&gt;min-height: 80vh&lt;/code&gt;。这个规则来自主题源文件，但自定义 CSS 里已经加了一条覆盖规则：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;home-hero&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;min-height&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;!important&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.75&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;!important&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; 确认线上 CSS 已经包含这条规则，但刷新页面视觉上没有任何变化——说明有其他规则优先级更高，或者被注释掉的原始规则依然在解析。&lt;/p&gt;
&lt;h3 id=&#34;第二层多处冲突的-min-height&#34;&gt;第二层：多处冲突的 min-height&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;grep -n &amp;quot;min-height&amp;quot; /var/www/blog/static/css/tech.css&lt;/code&gt; 找到了三处相关规则：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Line 128 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;home-hero&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;min-height&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;vh&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Line 393-396 (media query) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;media&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;max-width&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;768px&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;home-hero&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;min-height&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;vh&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;!important&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;!important&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Line 614 (media query) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;media&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;min-width&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;769px&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .&lt;span style=&#34;color:#a6e22e&#34;&gt;home-hero&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;min-height&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;vh&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这三处都设置了具体的高度值，而且注释掉不等于删除——CSS 解析器依然会处理注释内的内容在某些构建流程中。更关键的是：自定义 CSS 的覆盖规则写在 line 128 之后，但主题的 media query 规则在 line 393 和 614，&lt;strong&gt;相同选择器的后来者优先级更高&lt;/strong&gt;，且 &lt;code&gt;!important&lt;/code&gt; 在 media query 内层会覆盖外层普通规则。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客手机端渲染优化：从 CSS 排查到 Hugo goat SVG 根因定位</title>
      <link>https://blog.uuworld.cn/posts/004-blog-mobile-fix/</link>
      <pubDate>Sun, 26 Apr 2026 06:30:00 +0800</pubDate>
      <guid>https://blog.uuworld.cn/posts/004-blog-mobile-fix/</guid>
      <description>&lt;h2 id=&#34;问题现象&#34;&gt;问题现象&lt;/h2&gt;
&lt;p&gt;博客在手机端打开 Day 5 这类文章时，中文文字出现了逐字分行的问题：&lt;/p&gt;
创
建
N
A
T
网
关&lt;p&gt;明明一行能显示的文字，被拆成了一个个单字，视觉上完全无法阅读。&lt;/p&gt;
&lt;h2 id=&#34;第一反应css-问题&#34;&gt;第一反应：CSS 问题&lt;/h2&gt;
&lt;p&gt;以为是 &lt;code&gt;word-break&lt;/code&gt; 或 &lt;code&gt;white-space&lt;/code&gt; 的锅。用 MobaXterm 连上服务器，先把 CSS 文件拉下来看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scp root@***.uuworld.cn:/var/www/blog/static/css/tech.css .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;找到好几处 &lt;code&gt;word-break: break-word&lt;/code&gt;，这个属性在手机端会让浏览器在任意字符之间断行——而中文没有空格，浏览器就把每个字都当成了合法断点，自然就逐字分行显示。&lt;/p&gt;
&lt;p&gt;修改方案：把涉及中文内容的 &lt;code&gt;word-break: break-word&lt;/code&gt; 全部改成 &lt;code&gt;word-break: normal&lt;/code&gt;，让中文按自然语意换行。&lt;/p&gt;
&lt;p&gt;同步回服务器，重建 Hugo：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scp tech.css root@***.uuworld.cn:/var/www/blog/static/css/tech.css
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh root@***.uuworld.cn &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cd /var/www/blog &amp;amp;&amp;amp; hugo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;验证 CSS 是否更新：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl https://***.uuworld.cn/css/tech.css | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;word-break&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果：CSS 已生效。但刷新手机端，问题依旧。&lt;/p&gt;
&lt;h2 id=&#34;深入html-里藏了什么&#34;&gt;深入：HTML 里藏了什么&lt;/h2&gt;
&lt;p&gt;CSS 修改了但没效果，怀疑 HTML 本身就有问题。用 curl 抓页面看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl http://***.uuworld.cn/acp/acp-day-05-acp-day-5-vpc-nat/ | grep -A5 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;典型实验流程&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出里发现了这个：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;goat svg-container &amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;svg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xmlns&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;font-family&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Menlo,Lucida Console,monospace&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewBox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0 0 192 201&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;g&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;transform&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;translate(8,16)&amp;#39;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text-anchor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;middle&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;4&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fill&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;currentColor&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;font-size:1em&amp;#39;&lt;/span&gt;&amp;gt;系&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text-anchor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;middle&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fill&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;currentColor&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;font-size:1em&amp;#39;&lt;/span&gt;&amp;gt;├&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text-anchor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;middle&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;36&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fill&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;currentColor&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;font-size:1em&amp;#39;&lt;/span&gt;&amp;gt;├&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;text&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;问题找到了！Hugo 生成的 HTML 里，代码块被转成了 SVG 图形，每个字符都是独立的 &lt;code&gt;&amp;lt;text&amp;gt;&lt;/code&gt; 元素。手机端 SVG 无法正确缩放，浏览器就把每个字符当成独立行来渲染。&lt;/p&gt;</description>
    </item>
    <item>
      <title>安装包落地自动化流程</title>
      <link>https://blog.uuworld.cn/posts/003-package-workflow/</link>
      <pubDate>Sun, 26 Apr 2026 02:10:00 +0800</pubDate>
      <guid>https://blog.uuworld.cn/posts/003-package-workflow/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;每次在服务器上下载、安装、配置软件后，安装包散落在 /tmp 或下载目录，没有统一管理。下次要用时找不到，或者重复下载。&lt;/p&gt;
&lt;p&gt;博客搭建完成后，决定把「安装包落地」这件事系统化。&lt;/p&gt;
&lt;h2 id=&#34;流程设计&#34;&gt;流程设计&lt;/h2&gt;
下载安装包（本地或代理）
    ↓
安装、配置、验证
    ↓
移动到 /var/www/blog/static/downloads/
    ↓
更新 tools/index.md 的下载链接
    ↓
Hugo 自动构建发布&lt;h2 id=&#34;实际操作&#34;&gt;实际操作&lt;/h2&gt;
&lt;h3 id=&#34;1-下载安装包&#34;&gt;1. 下载安装包&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;能直接从互联网下载&lt;/strong&gt;（代理/VPS 可达）：本地 curl/wget 后 scp 上传&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 本地下载 Hugo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -sL &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://github.com/gohugoio/hugo/releases/download/v0.146.0/...tar.gz&amp;#39;&lt;/span&gt; -o hugo.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# scp 到服务器 downloads 目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scp hugo.tar.gz root@***.uuworld.cn:/var/www/blog/static/downloads/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;服务器本地已有&lt;/strong&gt;：直接 cp 到 downloads&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp /root/go/bin/derper /var/www/blog/static/downloads/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /var/www/blog/static/downloads/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -czf derper_v1.96.5_linux_amd64.tar.gz derper
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-更新-tools-页面&#34;&gt;2. 更新 tools 页面&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;content/tools/index.md&lt;/code&gt; 添加下载链接：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;| [&lt;span style=&#34;color:#f92672&#34;&gt;derper_v1.96.5_linux_amd64.tar.gz&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;/downloads/derper_v1.96.5_linux_amd64.tar.gz&lt;/span&gt;) | 1.96.5 | 13 MB | Tailscale DERP relay 二进制 |
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-构建发布&#34;&gt;3. 构建发布&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /var/www/blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/local/bin/hugo --quiet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即可通过 &lt;code&gt;https://***.uuworld.cn/tools/&lt;/code&gt; 下载。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo &#43; PaperMod 博客搭建全记录</title>
      <link>https://blog.uuworld.cn/posts/002-blog-deploy/</link>
      <pubDate>Sun, 26 Apr 2026 00:30:00 +0800</pubDate>
      <guid>https://blog.uuworld.cn/posts/002-blog-deploy/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;想用一个简洁的技术博客记录折腾过的项目，选型要求：静态站点、主题好看、部署简单、定制灵活。&lt;/p&gt;
&lt;p&gt;最终技术栈：&lt;strong&gt;Hugo 0.146&lt;/strong&gt; + &lt;strong&gt;PaperMod&lt;/strong&gt; + &lt;strong&gt;nginx&lt;/strong&gt; + 自定义赛博朋克样式。&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;静态博客，Markdown 写文章&lt;/li&gt;
&lt;li&gt;PaperMod 主题，简洁好看&lt;/li&gt;
&lt;li&gt;自定义科技感 UI：粒子背景 + 霓虹光效&lt;/li&gt;
&lt;li&gt;通过 nginx 直接托管 /var/www/blog/public/&lt;/li&gt;
&lt;li&gt;支持 /about/ 和 /tools/ 页面&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;踩坑记录&#34;&gt;踩坑记录&lt;/h2&gt;
&lt;h3 id=&#34;hugo-版本与主题兼容&#34;&gt;Hugo 版本与主题兼容&lt;/h3&gt;
&lt;p&gt;下载 Hugo 0.139.0 配合 PaperMod 时报错：&lt;/p&gt;
ERROR 2026/04/25 错过了GaTracker的site.config.googleAnalytics&lt;p&gt;&lt;strong&gt;解决&lt;/strong&gt;：升级到 Hugo 0.146.0 extended 版本，问题消失。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/gohugoio/hugo/releases/download/v0.146.0/hugo_extended_0.146.0_linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzf hugo_extended_0.146.0_linux-amd64.tar.gz hugo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv hugo /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;安装包下载&#34;&gt;安装包下载&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;文件&lt;/th&gt;
          &lt;th&gt;下载&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://blog.uuworld.cn/downloads/hugo/hugo-0.146.0-extended-linux-amd64.tar.gz&#34;&gt;hugo-0.146.0-extended-linux-amd64.tar.gz&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Hugo 0.146.0 extended&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://blog.uuworld.cn/downloads/hugo/PaperMod-master.zip&#34;&gt;PaperMod-master.zip&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;PaperMod 主题最新源码&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;about-页面不渲染&#34;&gt;about 页面不渲染&lt;/h3&gt;
&lt;p&gt;content/about.md 放在根目录，访问 /about/ 始终 404。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ali-ecs DERP 部署全记录</title>
      <link>https://blog.uuworld.cn/posts/001-ali-ecs-derper-deploy/</link>
      <pubDate>Sat, 25 Apr 2026 22:59:00 +0800</pubDate>
      <guid>https://blog.uuworld.cn/posts/001-ali-ecs-derper-deploy/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;需要在阿里云 ECS 上部署 Tailscale DERP relay，让 Windows 客户端能通过 DERP 连接到节点。&lt;/p&gt;
&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;域名：derp.***.cn&lt;/li&gt;
&lt;li&gt;泛域名证书：&lt;em&gt;.&lt;/em&gt;**.cn&lt;/li&gt;
&lt;li&gt;derper 运行在 443 端口&lt;/li&gt;
&lt;li&gt;STUN 运行在 3478 UDP&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;踩坑记录&#34;&gt;踩坑记录&lt;/h2&gt;
&lt;h3 id=&#34;1-dnspod-token-格式&#34;&gt;1. DNSPod Token 格式&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：API 返回 401，原因是 SecretId 是腾讯云 CAM 的，不是 DNSPod 的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决&lt;/strong&gt;：DNSPod Token 格式是 ID,Token（两部分用逗号连接），腾讯云控制台生成的 SecretId/SecretKey 是 CAM 的，不通用。&lt;/p&gt;
&lt;h3 id=&#34;2-lucky-安装失败&#34;&gt;2. lucky 安装失败&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：jsdelivr CDN 在阿里云 ECS 上无法访问，导致 lucky 安装脚本无法下载二进制文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决&lt;/strong&gt;：从 GitHub 直接下载 release 包，传到 ECS 再解压安装。&lt;/p&gt;
&lt;h3 id=&#34;3-derper-证书参数&#34;&gt;3. derper 证书参数&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：新版 derper 参数变了，不再是 -c cert -k key，改为 -certmode manual -certdir。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
