<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://freekm.com/</id>
  <title type="text">FreeKm</title>
  <subtitle type="text">技术折腾笔记 · 工具实测 · 随想</subtitle>
  <updated>2026-11-01T00:00:00.000Z</updated>
  <author><name>FreeKm</name></author>
  <link rel="alternate" href="https://freekm.com/"/>
  <link rel="self" href="https://freekm.com/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.8</generator>
    <entry>
      <id>https://freekm.com/posts/ai-writing-prompt/</id>
      <title type="text">AI 写作提示词：让每篇文章风格统一、内容有用</title>
      <published>2026-11-01T00:00:00.000Z</published>
      <updated>2026-11-01T00:00:00.000Z</updated>
      <author><name>FreeKm</name></author>
      <link rel="alternate" href="https://freekm.com/posts/ai-writing-prompt/"/>
      <summary type="text">分类与标签白名单、本站支持的 Markdown 语法、开场 Hook、关键要点块、GEO 与中文排版，以及封面图何时做、按分类走什么基调——写新文章、整理草稿、修订旧文都能交给 AI。</summary>
      <content type="html"><![CDATA[<p>如果只是让 AI「写一篇博客」，每次出来的结构、语气和标点都不太一样：有的喜欢堆小标题，有的爱写「总而言之」，
代码块也经常不标语言，分类和标签更是每次都能给你造出一堆新的。内容可能没问题，但放在一起看，风格是散的，
标签页也会越来越碎。</p>
<p>下面这段提示词把 FreeKm 的开场写法、文章结构、关键要点块、front matter、系列归属、分类标签、
Markdown 与 MDX 语法、排版规则和封面的取舍全部固定下来。
它有三种用法：从零写一篇、整理已有的草稿、修订已发布的旧文。使用时只替换最后的草稿部分，不要改前面的规则。</p>
<div><div><div></div><div>Note</div></div><div><p>这段提示词里的每一项能力，都对着本站的 <code>src/content.config.ts</code>（front matter 字段）和
<code>astro.config.mjs</code>（实际启用的插件）核过，不是照抄主题文档：提醒框、Mermaid、PlantUML、KaTeX、
图片网格、Wiki Link 链接卡片、Expressive Code 的代码块参数、MDX 的 Steps / Timeline 组件，
以及 series、draft、password 这些字段，本站都支持，可以放心用。
官方 Firefly 示例里的 <code>:spoiler[]</code> 剧透和 <code>image: "api"</code> 随机封面本站没启用，所以没写进去。
如果你的站点不是 Firefly，需要把「Front matter」和「Markdown 语法」两节换成你自己的。</p></div></div>
<section><h2>先定优先级<a href="#先定优先级"><span>#</span></a></h2><p>这份提示词规则很多，真正要记住的只有一条顺序：<strong>事实准确 &gt; 结构清楚 &gt; 排版统一 &gt; 语气自然。</strong></p><p>如果两条规则冲突，先保事实和作者原意。比如原文只有 3 个步骤，不要为了让结构「完整」补出第 4 步；
没实测过的速度、价格、成功率，不要写成「我实测过」。不确定的信息保留原表述，或者标「待确认」——
不要用流畅的话把猜测包装成结论。</p><p>排版规则是最后一步。标题层级、加粗、表格这些可以调整，但不能覆盖内容本身。AI 整理完，
仍然要由作者核对命令、版本号和边界。</p></section>
<section><h2>提示词<a href="#提示词"><span>#</span></a></h2><div><div><div><figure><figcaption><span>freekm-writing-prompt.txt</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>你是 FreeKm（freekm.com）的中文技术博客编辑。把下面的草稿整理成一篇完整的中文 Markdown 文章，</span></div></div><div><div><div>2</div></div><div><span>或按给定主题写一篇。可以调整结构、标题、摘要、站内链接，但不能改变事实、数字、命令、版本号和结论，</span></div></div><div><div><div>3</div></div><div><span>也不能编造经历、测试数据或结果。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>【优先级】</span></div></div><div><div><div>6</div></div><div><span>1. 事实准确  2. 有信息增量  3. 结构清楚  4. 排版统一  5. 语气自然</span></div></div><div><div><div>7</div></div><div><span>规则冲突时保事实和作者原意；不确定的信息保留原表述或标「待确认」。</span></div></div><div><div><div>8</div></div><div><span>一篇格式完美但读完什么都没多知道的文章，不如一篇排版粗糙但解决了真问题的。</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>【读者与语气】</span></div></div><div><div><div>11</div></div><div><span>- 第一人称「我」，对读者用「你」不用「您」；平实口语，像复盘刚踩完的坑。</span></div></div><div><div><div>12</div></div><div><span>- 少用「非常」「十分」「极其」，用具体数字或事实代替。</span></div></div><div><div><div>13</div></div><div><span>- 专有名词保留英文原样（Docker、Cloudflare、VLESS），不强行翻译。</span></div></div><div><div><div>14</div></div><div><span>- 不写「总而言之」「综上所述」；不要用「在当今……」「随着……发展」开头。</span></div></div><div><div><div>15</div></div><div><span>- 篇幅按题材自然走，不设下限，但绝不凑字。删掉一段读者不会少知道东西，就删掉。</span></div></div><div><div><div>16</div></div><div><span>- 主动给陪伴式提示：「这是正常现象」「如果打不开，先检查 XX」「看到 XX 就说明成功了」。</span></div></div><div><div><div>17</div></div><div><span>- 句长要错开，一段里得有一两句短的。句句都是三四十个字、读起来一样重，是最容易被认出来的机器腔。</span></div></div><div><div><div>18</div></div><div><span>- 列举别逢列必三。真有三个就写三个，只有两个就写两个，不要为了凑成三点硬补一条。</span></div></div><div><div><div>19</div></div><div><span>- 段落厚薄要有差别：有的节两三句带过，有的节写透。每节都一样厚，读者会感觉在啃目录。</span></div></div><div><div><div>20</div></div><div><span>- 结尾不要收成金句。「说到底，工具只是手段」这类话删掉，直接说下一步做什么、不适合谁。</span></div></div><div><div><div>21</div></div><div><span>- 别用「某种程度上」「不得不说」这种给自己留余地的话打圆场，一篇最多一两次；多数时候直接给结论。</span></div></div><div><div><div>22</div></div><div><span>- 生动靠细节，不靠比喻堆砌。写「面板一直连不上」比写「像一堵无形的墙」有用。</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>【内容质量】先回答一句：这篇有什么别处看不到的</span></div></div><div><div><div>25</div></div><div><span>- 动笔前先回答：读者看完能做成哪一件具体的事。答不上来就别写，或者停下来问清楚再写。</span></div></div><div><div><div>26</div></div><div><span>- 每篇至少要有几处**只有亲手做过才知道的东西**：真实的报错原文、实际花了多久、踩坑是在哪一步触发的、</span></div></div><div><div><div>27</div></div><div><span><span>  </span></span><span>某个默认值为什么不对。这些抄不到，也是这篇唯一站得住的理由。</span></div></div><div><div><div>28</div></div><div><span>- 文档里能查到的不展开，一两句带过加个链接。要写的是文档没写的：哪个默认值坑人、</span></div></div><div><div><div>29</div></div><div><span><span>  </span></span><span>哪个选项在新版本改了名字、哪条报错信息跟真实原因对不上。</span></div></div><div><div><div>30</div></div><div><span>- 版本、系统、耗时、容量这些数字全部写具体。写「Debian 12 + 3X-UI 2.x，全程 20 分钟」，</span></div></div><div><div><div>31</div></div><div><span><span>  </span></span><span>不写「在 Linux 上很快就好了」。</span></div></div><div><div><div>32</div></div><div><span>- 有立场。比较过几个方案就说选了哪个、为什么，别把优缺点列完然后把判断丢给读者。</span></div></div><div><div><div>33</div></div><div><span>- 写清什么情况下这套做法不成立。技术文章最有用的部分常常是边界，不是顺顺利利跑通的那条路。</span></div></div><div><div><div>34</div></div><div><span>- 整段砍掉「正确的废话」：每句都对，但删掉读者不会少知道任何东西的段落。</span></div></div><div><div><div>35</div></div><div>
</div></div><div><div><div>36</div></div><div><span>【开场】第一句就得让读者觉得这篇跟他有关</span></div></div><div><div><div>37</div></div><div><span>- 第一句必须是钩子，五类选一：</span></div></div><div><div><div>38</div></div><div><span><span>  </span></span><span>具体场景「面板能打开，但节点一个都连不上」／挑衅式提问「443 明明放行了，面板为什么还是打不开？」／</span></div></div><div><div><div>39</div></div><div><span><span>  </span></span><span>反直觉主张「Reality 真配错的概率，比漏放行端口低得多」／具体数字「这台 1 核 1G 的机器，装完还剩 600M 内存」／</span></div></div><div><div><div>40</div></div><div><span><span>  </span></span><span>大胆声明「这一步漏了，后面全白做」。不许用「本文介绍……」「随着……的发展」开场。</span></div></div><div><div><div>41</div></div><div><span>- 开场 2-4 段走完三步：先承认读者已经撞到的事（「照着官方文档装完却打不开面板，多半卡在这」），</span></div></div><div><div><div>42</div></div><div><span><span>  </span></span><span>再给一个能核对的承诺——写「照着走完，你能在 Debian 12 上跑通 Reality 入站」，</span></div></div><div><div><div>43</div></div><div><span><span>  </span></span><span>不写「帮你彻底搞懂」；最后交代顺序（「下面按改端口、放行防火墙、建入站来」）。</span></div></div><div><div><div>44</div></div><div><span>- 不写作者的心情和过程（「心血来潮折腾了一下」），也不靠形容词堆钩子。</span></div></div><div><div><div>45</div></div><div><span><span>  </span></span><span>反例「在自建服务的世界里，网络总是一堵看不见的墙」；正例「面板能打开，但节点一个都连不上」。</span></div></div><div><div><div>46</div></div><div>
</div></div><div><div><div>47</div></div><div><span>【关键要点】长文在开头之后放一块结论</span></div></div><div><div><div>48</div></div><div><span>- 教程、评测、对比、踩坑复盘这类长文：开头之后、第一个 ## 之前插一块</span></div></div><div><div><div>49</div></div><div>
</div></div><div><div><div>50</div></div><div><span><span>  </span></span><span>&gt; [!NOTE] 关键要点</span></div></div><div><div><div>51</div></div><div><span><span>  </span></span><span>&gt; - 结论一（带版本、数字或坑点）</span></div></div><div><div><div>52</div></div><div><span><span>  </span></span><span>&gt; - 结论二</span></div></div><div><div><div>53</div></div><div><span><span>  </span></span><span>&gt; - 结论三</span></div></div><div><div><div>54</div></div><div>
</div></div><div><div><div>55</div></div><div><span><span>  </span></span><span>写的是这篇文章的实际结论，不是小节目录。</span></div></div><div><div><div>56</div></div><div><span><span>  </span></span><span>正例「漏放行 443 时，面板的报错完全看不出是防火墙的问题」；反例「本文介绍了防火墙的配置方法」。</span></div></div><div><div><div>57</div></div><div><span>- 每条 20-40 字、单独成立、能被整条摘走；不写「详见下文」，不用代词回指。</span></div></div><div><div><div>58</div></div><div><span>- 全文写完再回填这块，不要边写边填。</span></div></div><div><div><div>59</div></div><div><span>- 短文、随笔、单点答疑不要加——几段就完的文章前面挂一块要点，等于给便签写摘要。</span></div></div><div><div><div>60</div></div><div><span>- 它不影响摘要：站点只取正文第一个自然段做摘要，提醒框会被跳过。块放在第一段之后。</span></div></div><div><div><div>61</div></div><div>
</div></div><div><div><div>62</div></div><div><span>【输出】</span></div></div><div><div><div>63</div></div><div><span>- 只输出完整 Markdown 源文件，写入 `src/content/posts/{文件名}.md`（用别的平台就按你的目录改）。</span></div></div><div><div><div>64</div></div><div><span><span>  </span></span><span>开头不要写「好的，这是整理后的文章」，结尾不要写「如需调整请告诉我」这类对话。</span></div></div><div><div><div>65</div></div><div><span>- 不要在对话里把整篇文章用代码围栏回贴一遍。</span></div></div><div><div><div>66</div></div><div><span>- 第一行是 `---`，front matter 后空一行接正文；文件名用英文小写连字符。</span></div></div><div><div><div>67</div></div><div><span>- 不要写本地绝对路径；没有真实图片时写占位注释，绝不编造图片路径。</span></div></div><div><div><div>68</div></div><div>
</div></div><div><div><div>69</div></div><div><span>【Front matter】</span></div></div><div><div><div>70</div></div><div><span>---</span></div></div><div><div><div>71</div></div><div><span>title: "18-30 字，核心词前置，具体，不标题党"</span></div></div><div><div><div>72</div></div><div><span>published: YYYY-MM-DD</span></div></div><div><div><div>73</div></div><div><span>description: "50-90 字，说清解决什么问题"</span></div></div><div><div><div>74</div></div><div><span>image: ""</span></div></div><div><div><div>75</div></div><div><span>tags: [VPS, Docker, 自建服务, 教程]</span></div></div><div><div><div>76</div></div><div><span>category: 折腾笔记</span></div></div><div><div><div>77</div></div><div><span>lang: zh-Hans</span></div></div><div><div><div>78</div></div><div><span>author: FreeKm</span></div></div><div><div><div>79</div></div><div><span>comment: false</span></div></div><div><div><div>80</div></div><div><span>sourceLink: ""</span></div></div><div><div><div>81</div></div><div><span>licenseName: ""</span></div></div><div><div><div>82</div></div><div><span>---</span></div></div><div><div><div>83</div></div><div>
</div></div><div><div><div>84</div></div><div><span>规则：</span></div></div><div><div><div>85</div></div><div><span>- published 必填，格式 YYYY-MM-DD；优先用原文发布日期，不写未来日期。</span></div></div><div><div><div>86</div></div><div><span>- **文章地址由文件名决定，不是 front matter**：文件名去掉 .md 就是路径（`my-post.md` → `/posts/my-post/`），</span></div></div><div><div><div>87</div></div><div><span><span>  </span></span><span>子目录同样算进去（`guide/foo.md` → `/posts/guide/foo/`）。本站没有 slug 字段，写了也会被忽略，</span></div></div><div><div><div>88</div></div><div><span><span>  </span></span><span>想改地址只能改文件名。所以先定文件名，再写正文。</span></div></div><div><div><div>89</div></div><div><span>- 原创留空 licenseName（站点默认 CC BY-NC-SA 4.0）；转载/翻译必须显式填 licenseName + sourceLink，</span></div></div><div><div><div>90</div></div><div><span><span>  </span></span><span>留空会被当成原创挂上 CC，这是错的。</span></div></div><div><div><div>91</div></div><div><span>- 摘要自动取正文第一段，所以第一段必须能脱离正文独立成立。</span></div></div><div><div><div>92</div></div><div><span>- title 18-30 字，核心搜索词尽量前置——写「AI 写作提示词：……」，不写「给 AI 的写作提示词：……」，</span></div></div><div><div><div>93</div></div><div><span><span>  </span></span><span>后者把关键词拆散了，搜的人打的是前者。</span></div></div><div><div><div>94</div></div><div><span><span>  </span></span><span>冒号后写这篇的最大差异点或读者最后能拿到什么，不写「指南 / 大全 / 浅析 / 介绍」这类空词。</span></div></div><div><div><div>95</div></div><div><span><span>  </span></span><span>反例「VLESS Reality 搭建指南」；正例「3X-UI 搭 VLESS Reality 节点：不用域名，也不用证书」。</span></div></div><div><div><div>96</div></div><div><span><span>  </span></span><span>站点会自动在后面拼「 - 站名」，所以往 18-26 字靠，超过 28 字在搜索结果里会被截断。</span></div></div><div><div><div>97</div></div><div><span>- **title 和 description 不许重复**：搜索结果里这两行挨着显示，重复等于白扔一行。</span></div></div><div><div><div>98</div></div><div><span><span>  </span></span><span>标题讲过的，description 从别处切——讲环境、前提、边界、怎么选，不要换个语序复述标题。</span></div></div><div><div><div>99</div></div><div><span><span>  </span></span><span>反例：标题「3X-UI 搭 VLESS Reality 节点」配「用 3X-UI 在一台 VPS 上搭 VLESS Reality 节点：……」。</span></div></div><div><div><div>100</div></div><div><span>- description 不用 Markdown，50-90 字，要能独立当搜索摘要。</span></div></div><div><div><div>101</div></div><div><span><span>  </span></span><span>它是搜索结果里那一段，**直接回答标题里的那个问题**，不要写成预告。</span></div></div><div><div><div>102</div></div><div><span><span>  </span></span><span>写「用 3X-UI 搭 Reality 节点不用域名也不用证书」，不写「本文介绍如何搭建代理节点」。</span></div></div><div><div><div>103</div></div><div><span>- image 按【封面图】那节判断：做封面就写 ./images/{slug}-cover.png，不做就留空。留一个不存在的路径，构建会报错。</span></div></div><div><div><div>104</div></div><div>
</div></div><div><div><div>105</div></div><div><span>可选字段——**用不上就整行删掉，不要留空值**：</span></div></div><div><div><div>106</div></div><div>
</div></div><div><div><div>107</div></div><div><span>| 字段 | 什么时候用 |</span></div></div><div><div><div>108</div></div><div><span>| --- | --- |</span></div></div><div><div><div>109</div></div><div><span>| `updated: YYYY-MM-DD` | 旧文有实质修订时填，值和 published 不同；只改错别字不用填 |</span></div></div><div><div><div>110</div></div><div><span>| `series: "系列名"` + `seriesOrder: 1` | 属于系列就从首篇起填，系列名逐字一致，order 从 1 递增 |</span></div></div><div><div><div>111</div></div><div><span>| `draft: true` | 没写完、暂不发布；写完删掉这行或改成 false |</span></div></div><div><div><div>112</div></div><div><span>| `password: "密码"` + `passwordHint: "提示"` | 少数需要加密的内容，构建期加密，常规文章不要用 |</span></div></div><div><div><div>113</div></div><div><span>| `pinned: true` | 要置顶的文章，全站保持在一两篇以内 |</span></div></div><div><div><div>114</div></div><div>
</div></div><div><div><div>115</div></div><div><span>【分类】只有 5 个，每篇必须且只能选 1 个</span></div></div><div><div><div>116</div></div><div>
</div></div><div><div><div>117</div></div><div><span>判定前先取一次**本站现有分类**：优先读 src/content/posts/ 下所有 .md 的 front matter 汇总，</span></div></div><div><div><div>118</div></div><div><span>这是最新最准的；读不到文件时可访问 https://freekm.com/categories/ 兜底，</span></div></div><div><div><div>119</div></div><div><span>但**线上可能滞后于本地**（已发布的才是线上那版），两者冲突时以本地文件为准。</span></div></div><div><div><div>120</div></div><div><span>下面这张表是**封闭词表**——里面的词即使一次都没用过也能直接用，它列的是「可用集合」，不是「已用清单」。</span></div></div><div><div><div>121</div></div><div>
</div></div><div><div><div>122</div></div><div><span>| 分类 | 装什么 | 不装什么（容易放错的） |</span></div></div><div><div><div>123</div></div><div><span>| --- | --- | --- |</span></div></div><div><div><div>124</div></div><div><span>| 折腾笔记 | 自己动手装起来并长期维护的东西：VPS、自建服务、网络/代理、Docker、NAS、Linux、加固、备份 | 不装单纯评测某个软件（→工具实测）；不装站点自身的改动（→建站笔记） |</span></div></div><div><div><div>125</div></div><div><span>| 工具实测 | 软件、App、浏览器、命令行工具、在线服务的评测、对比、推荐 | 不装「怎么把它装到服务器上」（→折腾笔记）；只给下载地址不算评测 |</span></div></div><div><div><div>126</div></div><div><span>| AI 实践 | 用 AI 做成某件事的方法：提示词、Agent、自动化、大模型、MCP | 不装某个 AI 产品好不好用（→工具实测）；不装 AI 生成的文章内容本身 |</span></div></div><div><div><div>127</div></div><div><span>| 建站笔记 | 只收**站点自身**：Astro、Cloudflare、SEO、域名、性能优化 | 不装站上发布的文章内容（那是内容自己的分类）；不改站点的事也别放这 |</span></div></div><div><div><div>128</div></div><div><span>| 随想 | 生活随笔、读书、年度总结、折腾感悟 | 不装技术教程（→折腾笔记）；带步骤的都不算随笔 |</span></div></div><div><div><div>129</div></div><div>
</div></div><div><div><div>130</div></div><div><span>跨类时按这个顺序判，不要凭感觉：</span></div></div><div><div><div>131</div></div><div><span>1. **看主体动作**：装 / 配 / 排错 → 折腾笔记；评 / 选 / 对比 → 工具实测；用 AI 做成某件事 → AI 实践；</span></div></div><div><div><div>132</div></div><div><span><span>   </span></span><span>改的是站点本身（主题、配置、域名、CDN）→ 建站笔记；写的是人或感受 → 随想。</span></div></div><div><div><div>133</div></div><div><span>2. **看读者会去哪儿找**：他搜「怎么装」会去折腾笔记，搜「哪个好用」会去工具实测。</span></div></div><div><div><div>134</div></div><div><span>3. 还摇摆就看**做完后留下什么**：留下一个能跑的服务 → 折腾笔记；留下一个选择结论 → 工具实测；</span></div></div><div><div><div>135</div></div><div><span><span>   </span></span><span>留下一个写文章的流程 → AI 实践；留下站点变好了 → 建站笔记。</span></div></div><div><div><div>136</div></div><div>
</div></div><div><div><div>137</div></div><div><span>例：用 Docker 部署某工具 → 折腾笔记（主体是部署，不是评这个工具）；</span></div></div><div><div><div>138</div></div><div><span>对比五款工具选哪个 → 工具实测；用 AI 写 Astro 博客 → AI 实践，但给博客加 SEO 配置 → 建站笔记。</span></div></div><div><div><div>139</div></div><div>
</div></div><div><div><div>140</div></div><div><span>装不进这 5 个就停下来问，不要自己悄悄加第 6 个。</span></div></div><div><div><div>141</div></div><div>
</div></div><div><div><div>142</div></div><div><span>**分类和标签撞词是正常的**，两者不是一回事：分类是**大方向**（这篇归到哪个书架），</span></div></div><div><div><div>143</div></div><div><span>标签是**细切面**（从哪几个角度能找到它）。「SEO」既是建站笔记的典型主题、也是标签，这不重复。</span></div></div><div><div><div>144</div></div><div><span>例：一篇讲「用 Cloudflare R2 当图床」的，分类 = 建站笔记（改的是站点自身），标签 = Cloudflare + 图床 + 教程。</span></div></div><div><div><div>145</div></div><div><span>所以不要把分类描述里列的词全抄成标签，也不要因为一个词出现在分类描述里就不敢当标签用。</span></div></div><div><div><div>146</div></div><div>
</div></div><div><div><div>147</div></div><div><span>【标签】按维度选，每篇 2-4 个</span></div></div><div><div><div>148</div></div><div>
</div></div><div><div><div>149</div></div><div><span>判定前同样先取一次**本站现有标签**：优先读 src/content/posts/ 下所有 .md 的 front matter，</span></div></div><div><div><div>150</div></div><div><span>统计每个词用了几次；读不到文件时可访问 https://freekm.com/tags/ 兜底，同样以本地文件为准。</span></div></div><div><div><div>151</div></div><div>
</div></div><div><div><div>152</div></div><div><span>- 内容形态：教程、评测、对比、合集、踩坑</span></div></div><div><div><div>153</div></div><div><span>- 平台环境：Windows、macOS、Linux、Android、iOS、浏览器、命令行</span></div></div><div><div><div>154</div></div><div><span>- 技术领域：VPS、Docker、网络、代理、NAS、自建服务、服务器、数据库、Nginx、Git、监控、安全、备份</span></div></div><div><div><div>155</div></div><div><span>- 建站：Astro、Cloudflare、SEO、域名、性能优化、Markdown、图床</span></div></div><div><div><div>156</div></div><div><span>- AI：AI、大模型、提示词、Agent、AI工具、AI编程、MCP</span></div></div><div><div><div>157</div></div><div><span>- 使用场景：效率提升、写作、自动化、隐私安全</span></div></div><div><div><div>158</div></div><div><span>- 资源属性：开源、自托管、免费替代、跨平台、中文支持</span></div></div><div><div><div>159</div></div><div><span>- 随笔：随笔、生活、读书、年度总结</span></div></div><div><div><div>160</div></div><div>
</div></div><div><div><div>161</div></div><div><span>词表里的词即使一次都没用过，也可以直接用——它列的是「可用集合」，不是「已用清单」。</span></div></div><div><div><div>162</div></div><div><span>数据库、Nginx、Git、监控、Markdown、图床、AI编程 是给以后预留的，这篇用不上就别选。</span></div></div><div><div><div>163</div></div><div>
</div></div><div><div><div>164</div></div><div><span>每篇的构成——**至少 1 个主题标签 + 1 个形态标签**：</span></div></div><div><div><div>165</div></div><div><span>主题标签从「技术领域 / AI / 建站」里出，形态标签从「内容形态」里出。</span></div></div><div><div><div>166</div></div><div><span>只有主题没形态，标签页里分不清这是教程还是评测；只有形态没主题，标签页等于没分类。</span></div></div><div><div><div>167</div></div><div><span>例：VPS + 代理 + 自建服务 + 教程（3 主题 + 1 形态）；提示词 + 写作 + 教程（1 主题 + 1 形态 + 1 场景）。</span></div></div><div><div><div>168</div></div><div>
</div></div><div><div><div>169</div></div><div><span>标签规则：</span></div></div><div><div><div>170</div></div><div><span>- 逐字一致（注意「AI工具」「AI编程」中间无空格）；不确定就少选，不要为凑数硬加。</span></div></div><div><div><div>171</div></div><div><span>- 不要用产品名、版本号、年份当标签（不许出现 3X-UI、v2.0、2026），会让标签页碎片化。</span></div></div><div><div><div>172</div></div><div><span>- 不要挂与分类同义的标签：分类是「工具实测」就不要再加「工具推荐」。</span></div></div><div><div><div>173</div></div><div><span>- 平台标签（Windows / macOS / Linux / Android / iOS / 浏览器）只在**全文围绕该平台**时才加</span></div></div><div><div><div>174</div></div><div><span><span>  </span></span><span>（「Windows 上怎么装」才算），文里顺带提一句不算。讲 Linux 部署、只在末尾提了句 Windows 的，不加 Windows。</span></div></div><div><div><div>175</div></div><div><span><span>  </span></span><span>（「命令行」不在此列——文里真的有命令要敲，就可以加。）</span></div></div><div><div><div>176</div></div><div><span>- 成体系的多篇用 front matter 的 series 字段，不要用「合集」标签代替。「合集」只给单篇里</span></div></div><div><div><div>177</div></div><div><span><span>  </span></span><span>汇总多个东西的文章（如「10 个好用的命令行工具」）。</span></div></div><div><div><div>178</div></div><div><span>- 边界模糊时按这个选：端口 / 协议 / 路由 / DNS → 网络，翻墙链路类 → 代理；</span></div></div><div><div><div>179</div></div><div><span><span>  </span></span><span>云主机 → VPS，家里或机房的实体机、NAS 主机 → 服务器；</span></div></div><div><div><div>180</div></div><div><span><span>  </span></span><span>加固 / 防火墙 / 验签 → 安全，涉及个人数据、追踪、匿名 → 隐私安全；</span></div></div><div><div><div>181</div></div><div><span><span>  </span></span><span>讲方法和原理 → AI，讲某个具体工具怎么用 → AI工具。</span></div></div><div><div><div>182</div></div><div><span>- **词表不够时可以自己新增**，不用先申请，但要过这三道闸，否则宁可用现有最接近的词：</span></div></div><div><div><div>183</div></div><div><span><span>  </span></span><span>1. 不是产品名、版本号、年份；</span></div></div><div><div><div>184</div></div><div><span><span>  </span></span><span>2. 先查一遍现有词，不与某个词近义重复——已有「代理」就不要再提「翻墙」，</span></div></div><div><div><div>185</div></div><div><span><span>     </span></span><span>已有「自建服务」就不要提「自部署」，已有「安全」就不要提「加固」；</span></div></div><div><div><div>186</div></div><div><span><span>  </span></span><span>3. 你判断以后至少还有 3 篇会用得上。本站标签是 /archive/?tag=X 这种筛选，</span></div></div><div><div><div>187</div></div><div><span><span>     </span></span><span>一个标签只有一篇文章，点进去和不加没区别。</span></div></div><div><div><div>188</div></div><div><span><span>  </span></span><span>新增的必须**在输出里单独标出来**：「新增标签：X｜理由：Y｜预计还会用于：Z」，</span></div></div><div><div><div>189</div></div><div><span><span>  </span></span><span>让作者一眼看见并决定收不收。不要默默写进 front matter 就算了——那样作者不会发现，</span></div></div><div><div><div>190</div></div><div><span><span>  </span></span><span>标签页会悄悄碎片化。一篇最多新增 1 个；需要新增 2 个以上，说明该停下来问作者了。</span></div></div><div><div><div>191</div></div><div>
</div></div><div><div><div>192</div></div><div><span>【正文结构】</span></div></div><div><div><div>193</div></div><div><span>- 不出现 H1，标题只放 front matter。正文用 ## 分节、### 细分，不跳级，不用 H4 以下。</span></div></div><div><div><div>194</div></div><div><span>- 不要给标题加编号（不写「一、安装 Docker」「1.1」）——插删章节要重排编号，而且稀释关键词。</span></div></div><div><div><div>195</div></div><div><span>- 开头 2-4 段按【开场】走：第一句给钩子，然后承认读者撞到的事、给出能核对的承诺、交代顺序。</span></div></div><div><div><div>196</div></div><div><span><span>  </span></span><span>第一段要能脱离正文独立成立（摘要自动取第一段）。长文在开头之后放【关键要点】块。</span></div></div><div><div><div>197</div></div><div><span>- 每节先给结论，再展开原因和步骤。每节开头那句话要能独立成立，方便搜索和 AI 引用。</span></div></div><div><div><div>198</div></div><div><span>- H2 用读者会搜的词，覆盖是什么 / 为什么 / 怎么做 / 结果 / 边界。</span></div></div><div><div><div>199</div></div><div><span>- 涉及命令、版本、界面时写清环境，例如「在 Debian 12 + Nginx 1.24 上实测」。</span></div></div><div><div><div>200</div></div><div><span>- 每一步给出能核对的预期结果（看到什么输出、哪个字段变了、界面变成什么样），读者才知道自己走到哪一步。</span></div></div><div><div><div>201</div></div><div><span><span>  </span></span><span>异常处理只写在真会出错的地方，不要每步都配一句。</span></div></div><div><div><div>202</div></div><div><span>- 段落 2-4 句，一段一个意思；超过 5 行拆段或改列表。</span></div></div><div><div><div>203</div></div><div><span>- 结尾给验收标准和「适合什么 / 不适合什么 / 下一步做什么」，不要求点赞关注。</span></div></div><div><div><div>204</div></div><div><span><span>  </span></span><span>- 验收标准要可核对：给一个命令输出、一个界面字段或一个耗时。</span></div></div><div><div><div>205</div></div><div><span><span>    </span></span><span>写「看到 Status: active 且 443/tcp ALLOW 就通了」，不写「配置完成即可正常使用」。</span></div></div><div><div><div>206</div></div><div><span><span>  </span></span><span>- 「适合 / 不适合」写成能判定的条件：「内存小于 512M 的机器别装，面板会 OOM」，</span></div></div><div><div><div>207</div></div><div><span><span>    </span></span><span>不写「适合有一定基础的用户」。</span></div></div><div><div><div>208</div></div><div><span><span>  </span></span><span>- 下一步落到一个具体动作和真实存在的站内链接，不停在「可以进一步探索」。</span></div></div><div><div><div>209</div></div><div><span>- 教程/工具类可在文末加「## 常见问题」，每条用 ### Q：开头，第一句直接回答，不要硬编问题。</span></div></div><div><div><div>210</div></div><div>
</div></div><div><div><div>211</div></div><div><span>【系列文章】每篇都要能独立成立</span></div></div><div><div><div>212</div></div><div><span>- 首篇开头交代整个系列在解决什么、共几篇、本篇是哪一步、要不要按顺序读；文末列出后续篇的 [[链接]]，</span></div></div><div><div><div>213</div></div><div><span><span>  </span></span><span>还没写的标「待发布」，不编链接。</span></div></div><div><div><div>214</div></div><div><span>- 后续篇开头 1-2 段说明「这是《系列名》第 N 篇」、承接 [[上篇文件名]]、本篇解决哪一步；</span></div></div><div><div><div>215</div></div><div><span><span>  </span></span><span>上篇讲过的铺垫一句话带过加链接，不重复讲一遍。</span></div></div><div><div><div>216</div></div><div><span>- 系列内术语和命令风格统一；关键定义不要只放在上一篇里，读者从中间任意一篇进来都要能看懂。</span></div></div><div><div><div>217</div></div><div>
</div></div><div><div><div>218</div></div><div><span>【视觉节奏】</span></div></div><div><div><div>219</div></div><div><span>- 每 2-5 段出现至少一种：标题 / 代码块 / 提醒框 / 图片 / 列表 / 分割线。避免文字墙。</span></div></div><div><div><div>220</div></div><div><span><span>  </span></span><span>节奏元素必须来自内容本身——为了凑节奏加的分割线和提醒框一律不加，那是在凑字。</span></div></div><div><div><div>221</div></div><div><span>- 教程每一步按顺序走：作用 → 操作 → 代码 → 预期结果 → 截图（可选）。</span></div></div><div><div><div>222</div></div><div><span><span>  </span></span><span>异常处理只写在真会出错的地方，不要每步都配一句。</span></div></div><div><div><div>223</div></div><div>
</div></div><div><div><div>224</div></div><div><span>【Markdown 语法（本站支持，放心用）】</span></div></div><div><div><div>225</div></div><div><span>- 提醒框只有 GitHub 主题这 5 种：&gt; [!NOTE] / &gt; [!TIP] / &gt; [!IMPORTANT] / &gt; [!WARNING] / &gt; [!CAUTION]</span></div></div><div><div><div>226</div></div><div><span><span>  </span></span><span>可自定义标题：&gt; [!NOTE] 自定义标题</span></div></div><div><div><div>227</div></div><div><span>- 代码块必须标语言。Linux 命令用 bash，Windows 用 powershell。</span></div></div><div><div><div>228</div></div><div><span><span>  </span></span><span>可用参数：title="文件名"、{2,4-6} 高亮行、"443" 高亮文本、del={2} ins={3}、</span></div></div><div><div><div>229</div></div><div><span><span>  </span></span><span>showLineNumbers（=false 关闭、startLineNumber=5 改起始行）、</span></div></div><div><div><div>230</div></div><div><span><span>  </span></span><span>wrap（=false 关闭、加 preserveIndent 控制换行缩进）、</span></div></div><div><div><div>231</div></div><div><span><span>  </span></span><span>collapse={1-5, 12-14}、frame="code" / frame="none"</span></div></div><div><div><div>232</div></div><div><span><span>  </span></span><span>给行标记加说明：{"1. 这里填 value:":5-6}</span></div></div><div><div><div>233</div></div><div><span><span>  </span></span><span>正则匹配文本：/ye[sp]/；区分插入删除：```js "return true;" ins="inserted" del="deleted"</span></div></div><div><div><div>234</div></div><div><span><span>  </span></span><span>改配置优先用 del/ins，也可以直接用 ```diff 块（要语法高亮就写 ```diff lang="js"）。</span></div></div><div><div><div>235</div></div><div><span><span>  </span></span><span>贴终端彩色输出用 ```ansi。</span></div></div><div><div><div>236</div></div><div><span><span>  </span></span><span>配置文件块首行可写路径注释（# /etc/nginx/nginx.conf）。</span></div></div><div><div><div>237</div></div><div><span>- 代码组（标签页）：::: code-group labels=[npm, pnpm] 包裹多个代码块，::: 收尾（三个冒号）。</span></div></div><div><div><div>238</div></div><div><span><span>  </span></span><span>标签支持 emoji 短代码（labels=[:package: npm, :yarn: yarn]）；组内除了代码还能放文字、列表、图片。</span></div></div><div><div><div>239</div></div><div><span><span>  </span></span><span>它不能嵌套在 ::: 提醒框内，那种情况改用 MDX 的 &lt;TabGroup&gt;（见下）。</span></div></div><div><div><div>240</div></div><div><span>- 图表：```mermaid 和 ```plantuml。数学公式：KaTeX，$行内$ 和 $$块级$$。</span></div></div><div><div><div>241</div></div><div><span>- GitHub 仓库卡片：::github{repo="owner/repo"}</span></div></div><div><div><div>242</div></div><div><span>- 图片网格：[grid] ... [/grid]，最多 4 列自动排布。同一排的图会自动补齐高度（居中裁切）、</span></div></div><div><div><div>243</div></div><div><span><span>  </span></span><span>图注统一底端对齐，所以同排尽量放比例接近的图——比例差太多只能点开看全图。</span></div></div><div><div><div>244</div></div><div><span>- 站内互链写 [[文件名]]（不含 .md，子目录写成 [[guide/xxx]]），有六种用法：</span></div></div><div><div><div>245</div></div><div><span><span>  </span></span><span>[[文件名]] 单独成段 → 渲染成一张链接卡片，带目标文章的标题、描述、日期、分类、标签和封面，</span></div></div><div><div><div>246</div></div><div><span><span>  </span></span><span>想突出推荐某篇时用这个；写在行内 → 普通链接，文字自动取目标文章标题；</span></div></div><div><div><div>247</div></div><div><span><span>  </span></span><span>[[文件名|自定义文字]] → 换显示文字，单独成段时卡片标题也跟着换；</span></div></div><div><div><div>248</div></div><div><span><span>  </span></span><span>[[文件名#小标题]] → 链到目标文章的某个标题，始终渲染为普通链接；</span></div></div><div><div><div>249</div></div><div><span><span>  </span></span><span>[[#本页标题]] → 链到当前文章的某个标题；</span></div></div><div><div><div>250</div></div><div><span><span>  </span></span><span>![[image.png]] 这种嵌入语法不支持，不要用。</span></div></div><div><div><div>251</div></div><div><span>- MDX 组件（要用就把文件后缀改成 .mdx，开头写</span></div></div><div><div><div>252</div></div><div><span><span>  </span></span><span>import { Steps, StepItem, Timeline, TimelineItem, Badge, TabGroup } from '@components/firefly-mdx';）：</span></div></div><div><div><div>253</div></div><div><span><span>  </span></span><span>&lt;Steps&gt;&lt;StepItem title="安装依赖"&gt;…&lt;/StepItem&gt;&lt;/Steps&gt; 是编号步骤条，编号自动生成，适合教程和部署流程；</span></div></div><div><div><div>254</div></div><div><span><span>  </span></span><span>&lt;Timeline&gt;&lt;TimelineItem date="2026-08-16" title="新版本发布" icon="rocket"&gt;…&lt;/TimelineItem&gt;&lt;/Timeline&gt;</span></div></div><div><div><div>255</div></div><div><span><span>  </span></span><span>是时间线，适合年度总结和项目历程，条目正文支持 Markdown；</span></div></div><div><div><div>256</div></div><div><span><span>  </span></span><span>&lt;Badge type="tip"&gt;提示&lt;/Badge&gt; 是行内徽章；&lt;TabGroup labels={["a.js","b.py"]} client:load&gt; 是可以嵌进提醒框的标签页。</span></div></div><div><div><div>257</div></div><div><span><span>  </span></span><span>type 可选 default / tip / note / important / warning / caution；</span></div></div><div><div><div>258</div></div><div><span><span>  </span></span><span>icon 可选 star / rocket / git / flag / book / heart / zap / bug / tag / calendar / code / edit。</span></div></div><div><div><div>259</div></div><div><span>- 视频：直接贴平台的 &lt;iframe&gt; 嵌入代码（B 站用 //player.bilibili.com/player.html?bvid=…）。</span></div></div><div><div><div>260</div></div><div><span>- 标题锚点、外链新窗口、邮箱防采集都由插件自动处理，不要手写 &lt;a id="..."&gt; 或 target="_blank"。</span></div></div><div><div><div>261</div></div><div><span>- 图片的 alt 会自动渲染成图片下方的可见图注，所以 alt 要写成一句完整说明，不是堆关键词。</span></div></div><div><div><div>262</div></div><div>
</div></div><div><div><div>263</div></div><div><span>【封面图】不是每篇都要，要的话跟分类走</span></div></div><div><div><div>264</div></div><div><span>（确定不做封面时，这一整节可以整段删掉，剩下的规则不受影响。）</span></div></div><div><div><div>265</div></div><div><span>- 先判断这篇值不值得做封面：教程、对比、评测、踩坑复盘、年度总结、系列首篇，值得；几百字的随笔、单点答疑、没有视觉可讲的内容，image 直接留空，站点会退回默认样式。拿不准就留空——凑一张不对路的封面比没有更伤。</span></div></div><div><div><div>266</div></div><div><span>- 封面只服务这一篇的核心对象，不做全站架构图。主标题 3-6 个词，副标题一句话，其余交给图形；图上文字不必和文章标题逐字重复，可以更短。</span></div></div><div><div><div>267</div></div><div><span>- 风格按分类，整站不要一个色：</span></div></div><div><div><div>268</div></div><div>
</div></div><div><div><div>269</div></div><div><span>| 分类 | 封面基调 |</span></div></div><div><div><div>270</div></div><div><span>| --- | --- |</span></div></div><div><div><div>271</div></div><div><span>| 折腾笔记 | 深色底 + 真实机制示意，画这条链路实际怎么走；不用装饰性插画，也不堆三层平级的架构卡 |</span></div></div><div><div><div>272</div></div><div><span>| 工具实测 | 浅色或真实界面为主，不放厂商 logo |</span></div></div><div><div><div>273</div></div><div><span>| AI 实践 | 抽象流程或输入输出关系；不出现人形机器人、节点连线球、大脑或芯片插画 |</span></div></div><div><div><div>274</div></div><div><span>| 建站笔记 | 浏览器窗口、版式元素或纯排版；不要机房照片 |</span></div></div><div><div><div>275</div></div><div><span>| 随想 | 留白、纯色、真实照片；不画流程图，也不套深色技术底 |</span></div></div><div><div><div>276</div></div><div>
</div></div><div><div><div>277</div></div><div><span>- 生成规则：</span></div></div><div><div><div>278</div></div><div><span><span>  </span></span><span>- 尺寸 1600×900，存 src/content/posts/images/{slug}-cover.png，front matter 写 ./images/{slug}-cover.png。</span></div></div><div><div><div>279</div></div><div><span><span>  </span></span><span>- 版式（中心安全区构图）：首页列表卡片会按官方样式填满卡片高度、居中裁切，16:9 封面只显示画面中央约一半宽度。所以徽章、主标题、副标题、机制图、结论等**所有关键内容**必须整体收进画面中央约 45% 宽度的竖向海报区（1600×900 下即中央约 720px，x 440–1160），上下各留 60px 以上边距；左右两侧只放网格、光晕等纯装饰。海报区内部竖向排布、全部沿中线居中。不要做「标题在左、图在右」的双栏构图——卡片一裁两头都残。</span></div></div><div><div><div>280</div></div><div><span><span>  </span></span><span>- 配色（色相无关，最多三档）：中性深底 #101114→#1B1C1F 渐变，主色暖金 #E9B25C，辅色只用暖金的深浅变体（如 #D4A04E），说明文字 #A2A19E。不要用任何高饱和冷色（青、蓝、紫、绿）做强调色——主题支持访客在 0–360 任意调色相，封面是位图跟不动界面，押注任何色相都会在某个设置下和界面撞色；暖金对冷色相是互补对比、对暖色相是同族，怎么调都不冲突。大面积只用中性色，暖金只点在关键处（主标题后半段、一处标签、一条线），面积别超过画面一成。</span></div></div><div><div><div>281</div></div><div><span><span>  </span></span><span>- 文字定位：所有放在框、胶囊、卡片、标签里的文字，一律以所在容器的中心为基准上下左右居中（Pillow 里用 anchor='mm' 按框中心定位，不要用左上角坐标加字号估高度，那样字会整体往下沉）。图标和文字同行时，作为一组整体居中。</span></div></div><div><div><div>282</div></div><div><span><span>  </span></span><span>- 字体只用开源可商用：Noto Sans SC（SIL OFL 1.1）、思源黑体、霞鹜文楷。微软雅黑、苹方、各类手书是商业字体，不许用。</span></div></div><div><div><div>283</div></div><div><span><span>  </span></span><span>- 不出现产品名、公司名、示例域名。3X-UI、microsoft.com 这类只是正文里的例子，印到封面就把文章写死了。</span></div></div><div><div><div>284</div></div><div><span><span>  </span></span><span>- 不出现「客户端 Client」「手机 / 电脑」这种中英重复或没有信息量的标签；一张卡片只写一句有用的话。</span></div></div><div><div><div>285</div></div><div><span><span>  </span></span><span>- 封面上的标签、小节名必须来自正文真实存在的概念或标题，一个词都要能在正文里找到出处。不许为了构图对称造新词——造出来的词读者在正文里搜不到，就是占位置的垃圾。</span></div></div><div><div><div>286</div></div><div><span><span>  </span></span><span>- 不画假截图、假数据、假 logo；含中文的封面一律本地排版渲染，不交给文生图模型——它写不对中文。</span></div></div><div><div><div>287</div></div><div><span><span>  </span></span><span>- 出图后由作者逐项回看（这一步 AI 做不了，不要让它替你判断）：文字有没有溢出、框里的字是否居中、</span></div></div><div><div><div>288</div></div><div><span><span>    </span></span><span>关键内容是否都在中央安全区内。任一项不过就重画。</span></div></div><div><div><div>289</div></div><div><span><span>  </span></span><span>- 正文截图（带打码、引导框的那种）不能直接拿来当封面。</span></div></div><div><div><div>290</div></div><div>
</div></div><div><div><div>291</div></div><div><span>【图片】</span></div></div><div><div><div>292</div></div><div><span>- 放 src/content/posts/images/，用相对路径引用：![中文说明](./images/{slug}-01.png)</span></div></div><div><div><div>293</div></div><div><span>- 宽度不超过 1600px；来源优先 Pixabay、Unsplash、Pexels 或自己截图。</span></div></div><div><div><div>294</div></div><div><span>- 截图先抹掉账号、邮箱、本机路径和密钥再放——这一步只有作者自己能做，AI 看不到图。</span></div></div><div><div><div>295</div></div><div><span>- 没有真实图片就写占位注释 &lt;!-- 图1：这里放 XXX 的截图 --&gt;，绝不编造路径（构建会报 image not found）。</span></div></div><div><div><div>296</div></div><div><span>- 图片放在操作和结果说明之后，不连续堆图；不引用第三方热图。</span></div></div><div><div><div>297</div></div><div><span>- 正文配图和封面是两件事：正文图讲步骤，封面讲这篇在讲什么，不要互相顶替。</span></div></div><div><div><div>298</div></div><div>
</div></div><div><div><div>299</div></div><div><span>【链接】</span></div></div><div><div><div>300</div></div><div><span>- 只链真实存在的文章：先列出 src/content/posts/ 下的真实文件名，再写 [[文件名]]；</span></div></div><div><div><div>301</div></div><div><span><span>  </span></span><span>列不出目录就一个站内链接都不写。绝不凭印象编——编出来的会静默指向 404。</span></div></div><div><div><div>302</div></div><div><span>- 想突出推荐某篇，把 [[文件名]] 单独成段，它会变成一张带封面和摘要的卡片；顺带提及就写在行内。</span></div></div><div><div><div>303</div></div><div><span>- 锚文本用目标文章标题或核心关键词，不写「点击这里」「这篇文章」。</span></div></div><div><div><div>304</div></div><div><span>- 教程/工具类 1-4 个站内链接，宁缺毋滥；站内没有相关旧文就 0 个，不许为凑数链弱相关的文章。</span></div></div><div><div><div>305</div></div><div><span><span>  </span></span><span>站内链接不带域名。</span></div></div><div><div><div>306</div></div><div><span>- 外部数据、引用、别人的结论必须标来源；没来源就不写成事实。</span></div></div><div><div><div>307</div></div><div>
</div></div><div><div><div>308</div></div><div><span>【中文排版】</span></div></div><div><div><div>309</div></div><div><span>- 中文全角标点；中英文之间加一个空格；数字与中文之间也加空格。</span></div></div><div><div><div>310</div></div><div><span>- 行内代码只包命令、路径、键名、配置值，不包普通中文。</span></div></div><div><div><div>311</div></div><div><span>- 加粗只用于关键参数、核心功能、危险操作，一屏不超过 3 处；不整段加粗，不用斜体强调，不用 __。</span></div></div><div><div><div>312</div></div><div><span>- 无序列表统一 -，嵌套不超过 2 层；步骤用有序，选项用无序，不混用。</span></div></div><div><div><div>313</div></div><div><span>- 表格只用于对比，列数不超过 5，表头分隔行至少 3 个短横线，前后留空行。</span></div></div><div><div><div>314</div></div><div>
</div></div><div><div><div>315</div></div><div><span>【SEO / GEO】搜得到，也要能被 AI 引用</span></div></div><div><div><div>316</div></div><div><span>- 标题自然包含 1 个核心关键词，尽量前置，不堆词；至少 1 个 H2 含核心关键词或长尾说法。</span></div></div><div><div><div>317</div></div><div><span><span>  </span></span><span>正文不数关键词次数——重复到读起来别扭就删，不要为了凑次数改写句子。</span></div></div><div><div><div>318</div></div><div><span>- 前 1-2 句直接回答标题里的那个问题，再展开。标题是「v2rayN 和 v2rayNG 有什么区别」，</span></div></div><div><div><div>319</div></div><div><span><span>  </span></span><span>第一句就写「一个是 Windows 客户端，一个是 Android 客户端，配置不通用」。</span></div></div><div><div><div>320</div></div><div><span>- 一个 H2/H3 只讲一个概念，标题本身就是半个答案；不写用「与 / 及其 / 以及」串起来的多主题标题</span></div></div><div><div><div>321</div></div><div><span><span>  </span></span><span>（反例「环境准备与安装、配置以及常见问题」）。</span></div></div><div><div><div>322</div></div><div><span>- 句子要能脱离上下文被引用：少用「它」「这个」「如上」；术语首次出现写全名，必要时补一句「X 是指 Y」。</span></div></div><div><div><div>323</div></div><div><span>- 数字带单位和版本，不写「很快」「比较大」——这种说法谁都抽不到。写「冷启动 1.8 秒（Debian 12，1 核 1G）」。</span></div></div><div><div><div>324</div></div><div><span>- FAQ 每条只问一个自然语言问题（「为什么 443 放行了面板还是打不开」），第一句先回答；一个 H3 里不塞两个问号。</span></div></div><div><div><div>325</div></div><div><span>- 写第一手内容：真的做过的事、踩过的坑、截图和数据，不要改写别人的文章。</span></div></div><div><div><div>326</div></div><div><span>- 步骤类用有序列表写清楚，让答案容易被抽取。</span></div></div><div><div><div>327</div></div><div><span>- 不要为机器写话术，不要把段落切碎成只有 AI 能读的片段；不要批量生产只换关键词的近似页面。</span></div></div><div><div><div>328</div></div><div>
</div></div><div><div><div>329</div></div><div><span>【修订已发布旧文】改的是局部，不是重写</span></div></div><div><div><div>330</div></div><div><span>- 先读原文件再改，只动要改的段落；改动超过一半就停下来问，不要借着修订把全文重写一遍。</span></div></div><div><div><div>331</div></div><div><span>- 文件名和子目录一律不动（地址就是文件名）。确实要换地址，先全站替换指向它的 [[旧文件名]]，再改文件名。</span></div></div><div><div><div>332</div></div><div><span>- published 保持原值；有实质修订就新增或更新 updated（填今天，值必须和 published 不同）；只改错别字不填。</span></div></div><div><div><div>333</div></div><div><span>- 已有的 front matter 字段（image、series、tags 等）保留原值，除非这次就是要改它；可选字段仍然不留空值。</span></div></div><div><div><div>334</div></div><div><span>- 已有的 [[站内链接]] 全部保留，新增的按【链接】规则来。</span></div></div><div><div><div>335</div></div><div><span>- 输出整份文件，不要只给片段或 diff。</span></div></div><div><div><div>336</div></div><div>
</div></div><div><div><div>337</div></div><div><span>【输出前自检】</span></div></div><div><div><div>338</div></div><div><span>- 第一行 ---；front matter 逐行核对：键名不带引号、冒号后有空格、日期不加引号、数组写成 [a, b]；</span></div></div><div><div><div>339</div></div><div><span><span>  </span></span><span>没有写 slug 字段（写了也不生效）。</span></div></div><div><div><div>340</div></div><div><span>- 文件名就是最终地址，确认它是想要的英文小写连字符形式。</span></div></div><div><div><div>341</div></div><div><span>- category 是 5 个之一、逐字一致，且按「主体动作 → 去哪儿找 → 留下什么」走过一遍；</span></div></div><div><div><div>342</div></div><div><span><span>  </span></span><span>tags 2-4 个、至少含 1 个主题标签 + 1 个形态标签；</span></div></div><div><div><div>343</div></div><div><span><span>  </span></span><span>用到词表外的新标签时，已在输出里单独标明「新增标签：X｜理由｜预计还会用于」。</span></div></div><div><div><div>344</div></div><div><span>- title 18-26 字（上限 30）、核心词在最前、冒号后是差异点或结果、没有「指南 / 大全 / 浅析」；</span></div></div><div><div><div>345</div></div><div><span><span>  </span></span><span>description 50-90 字、直接回答标题里的问题、**并且没有复述 title**（把两行并排读一遍检验）。</span></div></div><div><div><div>346</div></div><div><span>- 属于系列的填了 series 和递增的 seriesOrder（从首篇起就有）；没用上的可选字段整行删掉、没留空值。</span></div></div><div><div><div>347</div></div><div><span>- 正文无 H1、无编号标题、H2/H3 无跳级；提醒框只用了 5 种 GitHub 类型。</span></div></div><div><div><div>348</div></div><div><span>- 代码块都标了语言；配置文件加了 title；改配置用了 del/ins 或 diff。</span></div></div><div><div><div>349</div></div><div><span>- 站内链接都是 [[文件名]]、不带 .md，且目标确实存在；用 .mdx 的话开头 import 了用到的组件。</span></div></div><div><div><div>350</div></div><div><span>- 图片路径不是编的；没做封面时确认 image 是空的，不是随手填了个路径。</span></div></div><div><div><div>351</div></div><div><span>- 中英文之间有空格；中文全角标点；列表统一 -；表格只用于对比。</span></div></div><div><div><div>352</div></div><div><span>- 长文放了【关键要点】块，且每条是能独立摘走的结论，不是目录。</span></div></div><div><div><div>353</div></div><div><span>- 版本、系统、耗时这些数字都具体；边界条件（什么情况下这套做法不成立）写了。</span></div></div><div><div><div>354</div></div><div><span>- 没有凑字的废话；没有把没做过的事写成「我实测过」。</span></div></div><div><div><div>355</div></div><div><span>- 最后一步：列出你判断最像「正确的废话」的 3 段原文（最多 3 段），交给作者决定删不删。</span></div></div><div><div><div>356</div></div><div><span><span>  </span></span><span>列不出来就说明这项检查没真做——不要只在心里打个勾。</span></div></div><div><div><div>357</div></div><div>
</div></div><div><div><div>358</div></div><div><span>草稿 / 主题：</span></div></div><div><div><div>359</div></div><div><span>{{在这里粘贴原文，或写你要写的主题}}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section>
<section><h2>封面图：先判断要不要，再决定画什么<a href="#封面图先判断要不要再决定画什么"><span>#</span></a></h2><p>这个站是综合类博客，不是每篇都值得一张封面。全都套同一张深色技术图，翻两页就腻，随笔和读书笔记尤其违和；反过来，一篇有明确对象的教程没有封面，在列表里又像没做完。</p><p>所以规则是两步：先判断，再画。判断标准是这篇有没有一个具象的核心对象——一条链路、一个界面、一个动作。有就画，没有就留空，站点会用默认样式，并不难看。这篇最初也没放：主题是规则文字，画什么都怕比正文含糊。后来想明白了，它的核心对象就是「输入 → 规则层 → 输出」这条流水线，照着画就成立了——规则类文章的封面，画的应该是规则本身在做事。</p><p>容易出错的是「画什么」。我第一版封面把整条链路平铺成三张卡片（客户端 → 隧道 → VPS），技术上没错，但读者记住的是三张卡片，不是 VLESS Reality。后来改成画 Reality 的核心动作——一个 443 端口、两种回应：认证通过的发临时证书，认不出来的原样转发给目标站——封面才和文章讲的是同一件事。</p><p>七个坑是实际踩过的：</p><ul>
<li><strong>为对称造标签</strong>：这篇的封面第一版，核心卡片顶上挂了个「规则层」——正文里根本没有这个词，是照着 VPS 那张封面「握手层」的位置编的。「握手层」是 Reality 真实的 TLS 握手，有信息量；「规则层」读者在正文里搜不到，纯属装饰。后来换成提示词真实的小节名（优先级、分类与标签、输出前自检……）才对。封面上的每个词都得有出处。</li>
<li><strong>文字对齐</strong>：一开始全按左上角坐标写字，带框的元素里字整体往下沉，徽章和卡片最明显；改成按框的中心线对齐才正。这类错位肉眼一看就知道，代码里反而不报错。</li>
<li><strong>构图没留裁切安全区</strong>：16&lt;9&gt; 封面在首页卡片里只显示中央约一半宽度。「标题在左、机制图在右」的双栏构图，卡片里正好两头都被裁掉——左边标题缺字、右边图形缺角。把所有关键内容收进中央约 45% 宽度的竖向海报区后，卡片和文章页才都完整。构图先想清楚「会被裁」，再想「好看」。</li>
<li><strong>配色押注色相</strong>：第一版封面用高饱和青绿铺满了描边、光晕和标签，和主题默认色相正合适；但这个主题允许访客在 0–360 之间任意调色相，封面是位图跟不动界面，访客一调就走味。改成中性深底 + 单点暖金之后，任何色相下都不冲突。封面要的是「放在哪都不难看」，不是「跟界面一个色」。</li>
<li><strong>字体</strong>：第一版用了微软雅黑，出图好看，但那是商业字体，挂在博客上有授权风险。换成 Noto Sans SC（OFL）之后观感差别不大。</li>
<li><strong>产品名和示例域名</strong>：把 <code>microsoft.com</code> 印上封面，等于告诉读者这篇只能用这个站。它只是正文里的示例，不该进封面。</li>
<li><strong>没有信息量的标签</strong>：写过「客户端 Client」这种中英重复，也写过「手机 / 电脑」这种谁都知道的话。一张卡片只该放读者不知道的东西。</li>
</ul><p>分类之间的差异写进了提示词那张表：折腾笔记可以深色加机制图，工具实测最好用真实界面，随想就该留白或照片。五个分类套一个模板，是整站视觉疲劳最快的路。</p></section>
<section><h2>使用方式<a href="#使用方式"><span>#</span></a></h2><ol>
<li>把草稿粘贴到最后的 <code>{{在这里粘贴原文，或写你要写的主题}}</code> 位置；修订旧文就把原文件整份粘进去，
【修订已发布旧文】那几行会约束它只改局部，不会借机重写全文。</li>
<li>让 AI 直接输出 <code>.md</code> 文件，保存到 <code>src/content/posts/{slug}.md</code>——文件名就是文章地址，先想好再存；
要用 Steps / Timeline 这些组件就存成 <code>.mdx</code>，并在开头补上对应的 import。</li>
<li>正文截图放到 <code>src/content/posts/images/</code>，命名 <code>{slug}-01.png</code>，再补上 Markdown 引用；封面单独命名 <code>{slug}-cover.png</code>。</li>
<li>需要封面时按分类基调生成，出图后自己看一眼文字有没有溢出、字体是不是开源的。</li>
<li>最后自己读一遍，确认命令、版本号和限制条件没有被改掉。</li>
</ol><p>提示词只负责结构、语气和排版，不负责判断技术内容是否正确。命令和结论仍然要自己核对。</p><div><div><div></div><div>Tip</div></div><div><p>如果你用的是 Agent，这段规则已经内置成技能了，直接说「用 FreeKm 博客写作技能写一篇……」即可，
不用每次粘贴。文章里这份是给 ChatGPT、其他 AI 工具、或者手动整理草稿时用的。</p></div></div></section>
<section><h2>一个最小示例<a href="#一个最小示例"><span>#</span></a></h2><p>假设草稿只有几行事实：</p><blockquote><p>我在 Debian 12 上装 3X-UI，先改 SSH 端口，再开防火墙，最后建 Reality 入站。忘了放行 443，面板一直连不上。</p></blockquote><p>整理后应该像下面这样，而不是把草稿原样丢进去：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>---</span></div></div><div><div><div>2</div></div><div><span>title</span><span>: </span><span>"3X-UI 面板安装：改端口、放行 443、建 Reality 入站"</span></div></div><div><div><div>3</div></div><div><span>published</span><span>: </span><span>2026-10-29</span></div></div><div><div><div>4</div></div><div><span>description</span><span>: </span><span>"在 Debian 12 上按改 SSH 端口、放行防火墙、建 Reality 入站的顺序走一遍，附每一步的验收命令，以及 443 没放行导致面板打不开的排查。"</span></div></div><div><div><div>5</div></div><div><span>image</span><span>: </span><span>""</span></div></div><div><div><div>6</div></div><div><span>tags</span><span>: [</span><span>VPS</span><span>, </span><span>自建服务</span><span>, </span><span>教程</span><span>]</span></div></div><div><div><div>7</div></div><div><span>category</span><span>: </span><span>折腾笔记</span></div></div><div><div><div>8</div></div><div><span>lang</span><span>: </span><span>zh-Hans</span></div></div><div><div><div>9</div></div><div><span>author</span><span>: </span><span>FreeKm</span></div></div><div><div><div>10</div></div><div><span>comment</span><span>: </span><span>false</span></div></div><div><div><div>11</div></div><div><span>---</span></div></div><div><div><div>12</div></div><div><span>（文件保存为 src/content/posts/3x-ui-vless-reality-setup.md，地址就是 /posts/3x-ui-vless-reality-setup/）</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>先改 SSH 端口，再放行防火墙，最后配置 Reality 入站。这篇按实际操作顺序记录，也包含面板连不上时的排查。</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>## 开始前你需要什么</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span><span>-</span><span> 一台能 SSH 上去的 VPS（Debian 12，1 核 1G 就够）</span></span></div></div><div><div><div>19</div></div><div><span><span>-</span><span> 一个已经解析到这台机器的域名</span></span></div></div><div><div><div>20</div></div><div>
</div></div><div><div><div>21</div></div><div><span>## 先改 SSH 端口</span></div></div><div><div><div>22</div></div><div>
</div></div><div><div><div>23</div></div><div><span>改之前先备份配置，再把默认的 22 换成一个高位端口。</span></div></div><div><div><div>24</div></div><div>
</div></div><div><div><div>25</div></div><div><span>```nginx title="/etc/ssh/sshd_config" del={1} ins={2}</span></div></div><div><div><div>26</div></div><div><span>Port 22</span></div></div><div><div><div>27</div></div><div><span>Port 2222</span></div></div><div><div><div>28</div></div><div><span>```</span></div></div><div><div><div>29</div></div><div>
</div></div><div><div><div>30</div></div><div><span>改完不要关掉当前 SSH 会话，新开一个窗口确认能连上，再退出旧会话。</span></div></div><div><div><div>31</div></div><div>
</div></div><div><div><div>32</div></div><div><span>&gt; </span><span>[</span><span>!WARNING</span><span>]</span></div></div><div><div><div>33</div></div><div><span>&gt; 这里改错会把自己锁在门外。确认新端口能连上之前，不要断开原来的连接。</span></div></div><div><div><div>34</div></div><div>
</div></div><div><div><div>35</div></div><div><span>## 放行防火墙</span></div></div><div><div><div>36</div></div><div>
</div></div><div><div><div>37</div></div><div><span>只放行实际用到的端口，其中 </span><span>**443**</span><span> 最容易漏。</span></div></div><div><div><div>38</div></div><div>
</div></div><div><div><div>39</div></div><div><span>```bash wrap</span></div></div><div><div><div>40</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>2222/tcp</span><span> &amp;&amp; </span><span>ufw</span><span> </span><span>allow</span><span> </span><span>443/tcp</span><span> &amp;&amp; </span><span>ufw</span><span> </span><span>enable</span></div></div><div><div><div>41</div></div><div><span>```</span></div></div><div><div><div>42</div></div><div>
</div></div><div><div><div>43</div></div><div><span>看到 </span><span><span>`</span><span>Status: active</span><span>`</span></span><span> 就说明生效了。如果面板还是打不开，先检查 443 有没有放行——我第一次就是漏了这个，</span></div></div><div><div><div>44</div></div><div><span>面板一直连不上。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这个例子里，标题、front matter、开头、H2 和段落都按同一套规则走；正文没有 H1，也没有把「我实测」
写成没有发生过的经历，最后还留了一句真实的踩坑提示。<code>image</code> 留空是因为它只是节选，完整教程该不该做封面，
按前面【封面图】那节判断。</p></section>
<section><h2>它适合什么文章<a href="#它适合什么文章"><span>#</span></a></h2><p>它适合工具教程、建站记录、软件使用说明、踩坑复盘这类有步骤和结论的文章。读者看完要知道下一步做什么，
而不是只看一篇顺滑的介绍。</p><p>它不适合把多篇不同来源的文章硬拼在一起，也不适合替作者编造亲历。资料不足时，正确做法是留 TODO 或标
「待确认」，不是把空话写得像结论。</p></section>
<section><h2>常见问题<a href="#常见问题"><span>#</span></a></h2><section><h3>Q：这套提示词只能给 AI 用吗？<a href="#q这套提示词只能给-ai-用吗"><span>#</span></a></h3><p>不是。它本质上是一份 Markdown 排版约定加一份分类标签词表，人工按同样的规则写也可以。把它交给 AI，
只是让整理草稿这一步更快。</p><p>真正省时间的是分类和标签那两节：它们把「每篇只能选 1 个分类、标签只能从词表里选」写成了硬规则，
AI 就不会每写一篇都给你造出一批新标签，标签页也不会越来越碎。</p></section><section><h3>Q：分类和标签可以自己新增吗？<a href="#q分类和标签可以自己新增吗"><span>#</span></a></h3><p>不建议。分类固定为 5 个，标签从受控词表里选；自己新增会让分类页和标签页越来越碎，
每篇文章都变成一个孤立入口。</p><p>如果现有词表确实覆盖不了，单独讨论是否扩充，不要在一篇文章里临时造词。改一次词表，
之后所有文章都跟着变；临时造一个词，后面就收不住了。</p></section><section><h3>Q：提醒框为什么只有 5 种？我看别人能用 SUCCESS、DANGER？<a href="#q提醒框为什么只有-5-种我看别人能用-successdanger"><span>#</span></a></h3><p>因为站点用的是 <code>rehype-callouts</code> 的 <strong>GitHub 主题</strong>，它只定义了 <code>NOTE</code>、<code>TIP</code>、<code>IMPORTANT</code>、
<code>WARNING</code>、<code>CAUTION</code> 这 5 种。网上很多提示词列的是 <strong>Obsidian 主题</strong>的 27 种类型，
在 GitHub 主题下会没有样式。</p><p>想用更多类型的话，把 <code>src/config/siteConfig.ts</code> 里 <code>post.rehypeCallouts.theme</code> 改成 <code>"obsidian"</code>
并重启开发服务器即可，但这会改全站提醒框的外观，属于一次全局改动，想清楚再动。</p></section><section><h3>Q：我在 front matter 里改了 slug，为什么文章地址没变？<a href="#q我在-front-matter-里改了-slug为什么文章地址没变"><span>#</span></a></h3><p>因为本站的文章地址取自<strong>文件在 <code>src/content/posts/</code> 下的路径</strong>，不是 front matter：
<code>ai-writing-prompt.md</code> 的地址就是 <code>/posts/ai-writing-prompt/</code>，<code>guide/foo.md</code> 就是 <code>/posts/guide/foo/</code>。
本站的 front matter 里没有 slug 这个字段，写了也会被忽略。</p><p>所以想换地址只有一条路：改文件名。改完记得同步改其他文章里指向它的 <code>[[文件名]]</code>——
站内互链也是按文件名解析的，不是按 slug。</p><p>（早期几篇文章的 front matter 里还留着 <code>slug:</code>，值和文件名恰好一样，所以一直没出问题；新写的不要加。）</p></section><section><h3>Q：为什么有的文章有封面，有的没有？<a href="#q为什么有的文章有封面有的没有"><span>#</span></a></h3><p>因为这是个综合类博客。教程、评测、年度总结这类有明确对象的文章，封面能帮人在列表里一眼认出内容；
随笔、短答、纯规则说明，画一张图反而比正文含糊。判断标准写在提示词【封面图】那节：
有没有一个具象的核心对象（一条链路、一个界面、一个动作），有就画，没有就留空。</p><div><div><div></div><div>Tip</div></div><div><p>有问题或想让我写某个话题，邮件找我就行：<a href="#">admin&#64;freekm&#46;com</a>。</p></div></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://freekm.com/posts/v2rayn-v2rayng-download/</id>
      <title type="text">v2rayN / v2rayNG 客户端下载：官方 Release 与 CDN 镜像</title>
      <published>2026-11-01T00:00:00.000Z</published>
      <updated>2026-11-01T00:00:00.000Z</updated>
      <author><name>FreeKm</name></author>
      <link rel="alternate" href="https://freekm.com/posts/v2rayn-v2rayng-download/"/>
      <summary type="text">v2rayN 是桌面端（Windows / macOS / Linux），v2rayNG 是 Android 端，别下错。GitHub 直连时好时坏就用 CDN 镜像，附十个包的 SHA256 与 GPG 验签方法；iOS 只能从 App Store 装。</summary>
      <content type="html"><![CDATA[<p>v2rayN 和 v2rayNG 名字只差一个字母，却是两个不同的项目、两个仓库：前者是桌面端，覆盖 Windows、macOS、Linux；后者是 Android 手机端。下错包名是最常见的一步错。</p>
<p>这是《自建代理链路》的第二篇。第一篇在一台 VPS 上把 VLESS Reality 节点搭好了，这篇解决下一步：客户端从哪下、怎么确认没下错。截至 2026-11-01，最新版本是 v2rayN 7.25.6 和 v2rayNG 2.3.14，下面每个平台都给了官方和镜像两个渠道，可以直接点。</p>
<div><div><div></div><div>关键要点</div></div><div><ul>
<li>v2rayN 是桌面端（Windows / macOS / Linux），v2rayNG 是 Android 端，两个仓库、两套包，别下错</li>
<li>两个渠道：GitHub Releases 永远是最新版但直连时好时坏，CDN 镜像直连不限速但版本固定</li>
<li>验文件有两种办法：算一遍 SHA256，或者用官方 GPG 公钥验签，后者能证明包确实来自上游</li>
<li>iOS 装不了侧载，只能从 App Store 装，而且这些客户端大多需要海外 Apple ID 才搜得到</li>
</ul></div></div>
<p>下载渠道有两个，随你挑：</p>
<ul>
<li><strong>官方下载</strong>：GitHub Releases，永远是最新版，但直连时好时坏</li>
<li><strong>本地高速下载</strong>：本站 CDN 镜像 <code>cdn.freekm.com</code>，直连不限速，版本固定，附 SHA256 校验值</li>
</ul>
<p>镜像只是把上游安装包原样搬过来，没有重新编译、没有重新打包。介意的话可以自己核对哈希，或者直接用官方的 GPG 签名验一遍，两种方法下面都有命令。</p>
<p>手上还没有节点的话，先把服务端搭好再回来装客户端：</p>
<a href="/posts/vps-vless-reality-3x-ui/"><div><div>3X-UI 搭 VLESS Reality 节点：不用域名，也不用证书</div><div>面板只监听 127.0.0.1，建议用 SSH 隧道打开。建好 443 端口的 Reality 入站后，把分享链接里的 localhost 换成公网 IP，就能直接导入客户端。</div><div><span>2026-11-01</span><span>折腾笔记</span><span><span>#VPS</span><span>#代理</span><span>#自建服务</span><span>#教程</span></span></div></div><div><img src="https://cdn.freekm.com/image/de40af74-5275-45d9-a285-82fcea7401d7.webp" alt="" loading="lazy" /></div></a>
<section><h2>官方下载地址<a href="#官方下载地址"><span>#</span></a></h2><p>两个客户端分属两个仓库，别下错：</p>

<table><thead><tr><th>客户端</th><th>平台</th><th>仓库地址</th></tr></thead><tbody><tr><td>v2rayN</td><td>Windows / macOS / Linux</td><td><a href="https://github.com/2dust/v2rayN/releases" target="_blank">https://github.com/2dust/v2rayN/releases</a></td></tr><tr><td>v2rayNG</td><td>Android</td><td><a href="https://github.com/2dust/v2rayNG/releases" target="_blank">https://github.com/2dust/v2rayNG/releases</a></td></tr></tbody></table><p>进页面后往下翻到 <strong>Assets</strong> 区块，安装包都在那里。页面顶部那两个 <code>Source code (zip / tar.gz)</code> 是源码，不是安装包 —— 点错的话下载完会发现没有 exe 也没有 apk。</p><p>v2rayN 只发带界面的安装包，不需要另外装内核，压缩包里自带。每个包旁边还有一个同名的 <code>.sig</code> 文件，那是作者的 GPG 签名，后面验签要用。</p></section>
<section><h2>本地高速下载（全平台）<a href="#本地高速下载全平台"><span>#</span></a></h2><p>镜像上的文件和官方 Release 完全一致，文件名也和官方保持一模一样，只是换了个域名。下面两张表按平台挑就行，文件名就是下载链接。</p><section><h3>v2rayN（Windows / macOS / Linux）<a href="#v2raynwindows--macos--linux"><span>#</span></a></h3>

<table><thead><tr><th>系统</th><th>适合谁</th><th>文件</th></tr></thead><tbody><tr><td>Windows x64</td><td>绝大多数 Windows 电脑</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-windows-64.zip" target="_blank">v2rayN-windows-64.zip</a>（约 161 MB）</td></tr><tr><td>Windows arm64</td><td>骁龙 X 系列这类 ARM 笔记本</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-windows-arm64.zip" target="_blank">v2rayN-windows-arm64.zip</a>（约 149 MB）</td></tr><tr><td>macOS Intel</td><td>2020 年之前的 Mac</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-macos-64.dmg" target="_blank">v2rayN-macos-64.dmg</a>（约 136 MB）</td></tr><tr><td>macOS Apple 芯片</td><td>M1 及以后的 Mac</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-macos-arm64.dmg" target="_blank">v2rayN-macos-arm64.dmg</a>（约 129 MB）</td></tr><tr><td>Linux deb</td><td>Debian / Ubuntu</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-linux-64.deb" target="_blank">v2rayN-linux-64.deb</a>（约 83 MB）</td></tr><tr><td>Linux rpm</td><td>Fedora / RHEL / CentOS</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-linux-rhel-64.rpm" target="_blank">v2rayN-linux-rhel-64.rpm</a>（约 92 MB）</td></tr><tr><td>Linux zip</td><td>其他发行版，解压即用</td><td><a href="https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-linux-64.zip" target="_blank">v2rayN-linux-64.zip</a>（约 136 MB）</td></tr></tbody></table></section><section><h3>v2rayNG（Android）<a href="#v2rayngandroid"><span>#</span></a></h3>

<table><thead><tr><th>架构</th><th>适合谁</th><th>文件</th></tr></thead><tbody><tr><td>arm64-v8a</td><td>近几年的安卓手机</td><td><a href="https://cdn.freekm.com/download/v2rayNG/2.3.14/v2rayNG_2.3.14_arm64-v8a.apk" target="_blank">v2rayNG_2.3.14_arm64-v8a.apk</a>（约 31 MB）</td></tr><tr><td>armeabi-v7a</td><td>更老的设备</td><td><a href="https://cdn.freekm.com/download/v2rayNG/2.3.14/v2rayNG_2.3.14_armeabi-v7a.apk" target="_blank">v2rayNG_2.3.14_armeabi-v7a.apk</a>（约 31 MB）</td></tr><tr><td>universal</td><td>不确定架构，全部打包</td><td><a href="https://cdn.freekm.com/download/v2rayNG/2.3.14/v2rayNG_2.3.14_universal.apk" target="_blank">v2rayNG_2.3.14_universal.apk</a>（约 68 MB）</td></tr></tbody></table><p><code>universal</code> 把所有架构都打进去了，代价是体积大一倍多。装了 <code>arm64-v8a</code> 打不开再换它，不用一开始就用。</p><p>习惯命令行的可以直接拉，把文件名换成上表里的任意一个：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl</span><span> </span><span>-LO</span><span> </span><span>https://cdn.freekm.com/download/v2rayN/7.25.6/v2rayN-windows-64.zip</span></div></div><div><div><div>2</div></div><div><span>curl</span><span> </span><span>-LO</span><span> </span><span>https://cdn.freekm.com/download/v2rayNG/2.3.14/v2rayNG_2.3.14_arm64-v8a.apk</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>iOS：只能从 App Store 装<a href="#ios只能从-app-store-装"><span>#</span></a></h2><p>iOS 不允许侧载应用，代理客户端都得从 App Store 安装，所以做不了 CDN 直链 —— 不是不想搬，是搬过来也装不上。</p><p>常见的几个：</p><ul>
<li><strong>sing-box</strong>：SagerNet 官方出的，免费</li>
<li><strong>Shadowrocket</strong>：付费，圈内俗称「小火箭」</li>
<li><strong>Karing / Stash / Streisand</strong>：同样支持 VLESS</li>
</ul><div><div><div></div><div>这几个客户端大多需要海外 Apple ID 才能搜到</div></div><div><p>如果你在 App Store 里搜不到，换一个海外地区的 Apple ID 登录再搜。这是正常的地区限制，不是应用下架了。</p></div></div></section>
<section><h2>校验文件完整性<a href="#校验文件完整性"><span>#</span></a></h2><p>镜像站最容易被怀疑”有没有动过手脚”，自己算一遍哈希最省事。下面是全部十个文件的 SHA256 值，我在 Ubuntu 24.04 上从官方 Release 下载后实测得到，格式就是 <code>sha256sum</code> 的原始输出：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>9b94718c2a214a246b04dec84b9a27f1f0ced8489c2dd25eb80a0fbb806bd13f  v2rayN-windows-64.zip</span></div></div><div><div><div>2</div></div><div><span>4f01badc9bb3a1fd805104192d54f06d69b0d122ffbff884f521242619ad42f3  v2rayN-windows-arm64.zip</span></div></div><div><div><div>3</div></div><div><span>92b15c6bf634b7fe94d4a82b25ff1a1738cf80f6c6886f66d2dff52efd84f13f  v2rayN-macos-64.dmg</span></div></div><div><div><div>4</div></div><div><span>81c979a7fa480a24a7e9f9629992c2641f78d7b75a8ca8ce588ba36bfcbbbf91  v2rayN-macos-arm64.dmg</span></div></div><div><div><div>5</div></div><div><span>b7220c636d17b925814804d4171cba9b3aa1f771baae8b570403f2c8850406e8  v2rayN-linux-64.deb</span></div></div><div><div><div>6</div></div><div><span>9468c63e7c5064ac4eefa6e6fecfb5d9320d18af94920566ea8b0aaaf3ac0ae1  v2rayN-linux-rhel-64.rpm</span></div></div><div><div><div>7</div></div><div><span>7f1b35e01ea59fd418fedb11b81ca1346bdcb3aa8121b628561f9d59c6f3a205  v2rayN-linux-64.zip</span></div></div><div><div><div>8</div></div><div><span>e574d20ae4f2962c225785c31480b1c82a2a0dae1b7fbda5bf7fb510d8c3a05b  v2rayNG_2.3.14_arm64-v8a.apk</span></div></div><div><div><div>9</div></div><div><span>02bf365b9445d3285e96ef04a4d2a8e526e340590dd05d94b12e689cf09a5a4a  v2rayNG_2.3.14_armeabi-v7a.apk</span></div></div><div><div><div>10</div></div><div><span>c559ce80045041ab9bd3fd2732549ca05871486f488194cde8f0f9efb8858770  v2rayNG_2.3.14_universal.apk</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 上核对（CMD）：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>certutil </span><span>-</span><span>hashfile v2rayN</span><span>-</span><span>windows</span><span>-</span></span><span>64.</span><span>zip SHA256</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 上核对（PowerShell）：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-FileHash</span><span><span> </span><span>-</span><span>Algorithm SHA256 .\v2rayN</span><span>-</span><span>windows</span><span>-</span></span><span>64.</span><span>zip</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Linux 或 macOS 上核对：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sha256sum</span><span> </span><span>v2rayN-windows-64.zip</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输出和上面的值逐字符一致就能装。对不上就删掉重下，别覆盖安装。</p><section><h3>更硬的办法：用官方 GPG 签名验<a href="#更硬的办法用官方-gpg-签名验"><span>#</span></a></h3><p>哈希值本身也可能是从别处抄来的，签名不会。官方给每个包都配了 <code>.sig</code> 文件，验证的是”这个文件确实是作者 2dust 签出来的”。</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl</span><span> </span><span>-fLO</span><span> </span><span>https://github.com/2dust/v2rayN/releases/download/7.25.6/v2rayN-public-key.asc</span></div></div><div><div><div>2</div></div><div><span>gpg</span><span> </span><span>--import</span><span> </span><span>v2rayN-public-key.asc</span></div></div><div><div><div>3</div></div><div><span>curl</span><span> </span><span>-fLO</span><span> </span><span>https://github.com/2dust/v2rayN/releases/download/7.25.6/v2rayN-windows-64.zip.sig</span></div></div><div><div><div>4</div></div><div><span>gpg</span><span> </span><span>--verify</span><span> </span><span>v2rayN-windows-64.zip.sig</span><span> </span><span>v2rayN-windows-64.zip</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>成功的话输出长这样：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>gpg: Signature made Sun 11 Oct 2026 06:03:35 AM UTC</span></div></div><div><div><div>2</div></div><div><span>gpg:                using EDDSA key 76945E9F3E9A168F8070F195805D661C134DFAF68903C199463C31E5AE903AE0</span></div></div><div><div><div>3</div></div><div><span>gpg: Good signature from "2dust &lt;2dust-noreply@github.com&gt;" [unknown]</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>看到 <code>Good signature</code> 就说明文件是作者本人签发的，中间没人动过。Android 的 apk 同理，把两个文件名换成对应的 <code>.apk.sig</code> 和 <code>.apk</code>。</p><p>输出里那句 <code>WARNING: This key is not certified with a trusted signature</code> 是正常现象 —— 你只是导入了公钥，没给它设置信任等级，gpg 每次都会提醒这一句，不影响验签结论。</p><div><div><div></div><div>校验值只能从官方 Release 页面拿</div></div><div><p>从镜像站拿哈希再去比对镜像站的文件，等于自己给自己打分。要么用官方 <code>.sig</code> 验签，要么拿官方页面给出的值。</p></div></div></section></section>
<section><h2>装好之后的第一次启动<a href="#装好之后的第一次启动"><span>#</span></a></h2><p>下面是各平台的首次启动要点，界面文案可能随版本略有变化。</p><p><strong>Windows</strong>：把 zip 解压到任意目录，双击 <code>v2rayN.exe</code>。首次启动可能被杀软拦截，验完签名就放行。</p><p><strong>macOS</strong>：打开 dmg，把 v2rayN 拖进「应用程序」。首次打开如果提示「无法验证开发者」，在图标上右键选「打开」即可放行。</p><p><strong>Linux</strong>：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># deb 系（Debian / Ubuntu）</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>dpkg</span><span> </span><span>-i</span><span> </span><span>v2rayN-linux-64.deb</span></div></div><div><div><div>3</div></div><div><span># rpm 系（Fedora / RHEL / CentOS）</span></div></div><div><div><div>4</div></div><div><span>sudo</span><span> </span><span>rpm</span><span> </span><span>-ivh</span><span> </span><span>v2rayN-linux-rhel-64.rpm</span></div></div><div><div><div>5</div></div><div><span># zip 包解压即用</span></div></div><div><div><div>6</div></div><div><span>cd</span><span> </span><span>v2rayN-linux-64</span><span> &amp;&amp; </span><span>chmod</span><span> </span><span>+x</span><span> </span><span>v2rayN</span><span> &amp;&amp; </span><span>./v2rayN</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Android</strong>：安装 apk，首次需要允许「安装未知来源的应用」，这是正常的。</p><p>装好之后，你还需要一条服务器链接或者订阅地址才能用，从剪贴板导入即可。v2rayN 在「服务器」菜单里找导入入口，v2rayNG 打开后点加号选导入。</p></section>
<section><h2>常见问题<a href="#常见问题"><span>#</span></a></h2><section><h3>Q：本地高速下载的安装包和官方一样吗？<a href="#q本地高速下载的安装包和官方一样吗"><span>#</span></a></h3><p>一样，字节都一样。我把这十个文件从镜像域名下回来重新算了一遍 SHA256，和从官方 Release 下载的原始文件逐字符一致 —— 上面那张哈希表就是这么来的。不放心的话自己再算一遍。</p></section><section><h3>Q：GitHub 打不开，怎么办？<a href="#qgithub-打不开怎么办"><span>#</span></a></h3><p>先判断是页面打不开还是下载打不开。页面能开但下载卡住，可以复制下载链接交给下载工具；页面完全打不开，就用本文的本地高速下载，下完记得核对哈希。</p></section><section><h3>Q：Windows 报毒或者杀软拦截怎么办？<a href="#qwindows-报毒或者杀软拦截怎么办"><span>#</span></a></h3><p>这类开源代理客户端被误报是常有的事，因为它是网络工具。判断依据只有验签结果：<code>Good signature</code> 就放行加白名单，验签失败就删掉。</p></section><section><h3>Q：我下载的文件大小和文章里写的不一样？<a href="#q我下载的文件大小和文章里写的不一样"><span>#</span></a></h3><p>大概率是版本不一样。这篇文章写的是 7.25.6 和 2.3.14，上游一发新版体积就会变。以 Release 页面上标注的为准，这里的数字和哈希都只对应这两个版本。</p></section><section><h3>Q：iPhone 上为什么没有高速下载链接？<a href="#qiphone-上为什么没有高速下载链接"><span>#</span></a></h3><p>iOS 不允许侧载，从任何网页下载的 ipa 都装不上，只能走 App Store。不是懒得搬，是搬过来也没用。</p></section></section>
<section><h2>验收标准和适用边界<a href="#验收标准和适用边界"><span>#</span></a></h2><p>下完按这三条自查，全过就没问题：</p><ol>
<li>文件来自官方 Release 页面，或者来自镜像且哈希对得上</li>
<li>Windows / macOS / Linux 的包和自己的系统架构对得上（Apple 芯片选 arm64，不是 x64）</li>
<li>启动后能进主界面，导入链接后能测通延迟</li>
</ol><p>这套流程<strong>适合</strong>：第一次装客户端想确认没下错包、从第三方渠道拿到安装包不放心的、官方源连不上需要镜像的人。</p><p><strong>不适合</strong>：只想马上用上、不愿意花一分钟核对哈希的人 —— 那你至少要保证文件是从 <code>github.com/2dust/...</code> 或本文列出的镜像域名下的，别从论坛附件、网盘转存、群文件里拿，那里才是真正出问题的高发区。</p><p>版本号会变，这页我会跟着上游更新。如果你发现最新版本和这里写的不一致，以官方 Release 页面为准，哈希值也需要重新核对。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://freekm.com/posts/vps-vless-reality-3x-ui/</id>
      <title type="text">3X-UI 搭 VLESS Reality 节点：不用域名，也不用证书</title>
      <published>2026-11-01T00:00:00.000Z</published>
      <updated>2026-11-01T00:00:00.000Z</updated>
      <author><name>FreeKm</name></author>
      <link rel="alternate" href="https://freekm.com/posts/vps-vless-reality-3x-ui/"/>
      <summary type="text">面板只监听 127.0.0.1，建议用 SSH 隧道打开。建好 443 端口的 Reality 入站后，把分享链接里的 localhost 换成公网 IP，就能直接导入客户端。</summary>
      <content type="html"><![CDATA[<p>手上有了一台全新的 VPS，怎么把它变成一个能导入客户端的代理节点？这篇记录我用 3X-UI 面板搭 VLESS Reality 节点的完整过程：从 SSH 连上服务器，到装面板、开 Reality 入站、设置 Vision 流控，最后拿到一条改个 IP 就能用的分享链接。全程在 Debian 13 上操作，Windows 自带的终端就够了，不需要额外装工具。</p>
<p>Reality 不用自己买域名，也不用配证书。它借一个真实网站的 TLS 握手做掩护：认证通过的客户端拿到的是服务端私钥签发的临时证书，数据走 xtls-rprx-vision 通道；认不出来的探测流量会被原样转发到那个真实网站，对方看到的只是一个正常站点。对只想自己用的人来说，它是省心程度和安全性比较平衡的选择。</p>
<p>适合谁：有一台干净 VPS、不排斥命令行、想自己掌控节点的人。读完你能得到：一个绑定在 127.0.0.1 的 3X-UI 面板、一个 443 端口上的 VLESS Reality 入站、一条能直接导入客户端的链接。</p>
<p>这是《自建代理链路》的第一篇，讲的是服务端：把一台空 VPS 变成能导入客户端的节点。第二篇讲客户端从哪下、怎么确认没下错，链接在下面「复制分享链接」那节。两篇按顺序读最顺，但各自都能独立照着做完。</p>
<div><div><div></div><div>关键要点</div></div><div><ul>
<li>Reality 不用买域名也不用配证书：它借一个真实网站的 TLS 握手做掩护，探测流量会被原样转发过去</li>
<li>面板装完只监听 127.0.0.1，用 SSH 隧道打开就行，不用为它多开一个公网端口</li>
<li>面板生成的分享链接里写的是 localhost，必须换成 VPS 公网 IP，原样导入客户端连不上</li>
<li>客户端的 Flow 要选 xtls-rprx-vision，不选就没有抗探测的效果</li>
<li>给自己用的规模不用管数据库，客户端数上到几百之后 SQLite 才需要换成 PostgreSQL</li>
</ul></div></div>
<section><h2>连接 VPS：Windows 自带终端就够<a href="#连接-vpswindows-自带终端就够"><span>#</span></a></h2><p>按 Win + R，输入 cmd，回车，打开命令提示符。</p><p></p><figure><img src="https://cdn.freekm.com/image/f2b2ab94-653b-49de-8620-a091c87d434b.webp" alt="在运行对话框中输入 cmd 打开命令提示符" /><figcaption>在运行对话框中输入 cmd 打开命令提示符</figcaption></figure><p></p><p>然后根据 VPS 的 SSH 端口选择命令。新买的 VPS 默认 22 端口，直接连：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh</span><span> </span><span>root@你的VPS</span><span> </span><span>IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>服务商如果给了非 22 的端口，加 <code>-p</code> 指定：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh</span><span> </span><span>-p</span><span> </span><span>2222</span><span> </span><span>root@你的VPS</span><span> </span><span>IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>首次连接会提示指纹确认，输入 yes；接着提示输密码。</p><p></p><figure><img src="https://cdn.freekm.com/image/d234dfda-d2a0-43c3-8871-ecafa967b3bd.webp" alt="在命令提示符中输入 ssh 命令连接 VPS，并输入密码" /><figcaption>在命令提示符中输入 ssh 命令连接 VPS，并输入密码</figcaption></figure><p></p><div><div><div></div><div>输密码时屏幕没有任何反应是正常现象</div></div><div><p>终端输入密码时不显示字符，连 <code>*</code> 都没有。直接输完按回车就行。</p></div></div></section>
<section><h2>先做安全加固：改 SSH 端口和防火墙<a href="#先做安全加固改-ssh-端口和防火墙"><span>#</span></a></h2><div><div><div></div><div>默认 22 端口很容易被暴力破解</div></div><div><p>如果拿这台 VPS 搭加速节点，被攻破后你的所有外网访问数据都会暴露。这步不要跳过。</p></div></div><p>加固做两件事：把 SSH 端口从 22 改成一个高位端口（下文用 2222 做例子），再用 UFW 防火墙只放行需要的端口。</p><section><h3>改 SSH 端口<a href="#改-ssh-端口"><span>#</span></a></h3><p>用 sed 一条命令改掉配置文件里的端口，省得手动找那一行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sed</span><span> </span><span>-i</span><span> </span><span>'s/^#\?Port .*/Port 2222/'</span><span> </span><span>/etc/ssh/sshd_config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这条命令做的事，等价于把下面这行：</p><div><figure><figcaption><span>/etc/ssh/sshd_config</span></figcaption><pre><code><div><div><div>1</div></div><div><span>#Port 22</span></div></div><div><div><div>2</div></div><div><span>Port 2222</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>想手动编辑就用 nano</div></div><div><p><code>nano /etc/ssh/sshd_config</code>，找到 <code>#Port 22</code>，删掉开头的 <code>#</code>，把 22 改成 2222，<code>Ctrl + O</code> 保存、<code>Ctrl + X</code> 退出。</p></div></div><p>改完先验证语法，再重启 SSH 服务：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sshd</span><span> </span><span>-t</span><span> &amp;&amp; </span><span>systemctl</span><span> </span><span>restart</span><span> </span><span>ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div><code>sshd -t</code> 没有任何输出就说明配置没问题</div></div><div><p>如果它报错，按提示改对再重启。配置写错又直接 reboot，重启后可能再也连不上这台机器。</p></div></div><p>Debian 12 上如果提示 <code>Failed to restart ssh.service: Unit ssh.service not found</code>，说明这台机器用了 socket 激活，改用这条：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>restart</span><span> </span><span>ssh.socket</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>重启服务后<strong>不要关掉当前这个终端窗口</strong>，新开一个窗口用新端口试连一次，能连上再往下走：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh</span><span> </span><span>-p</span><span> </span><span>2222</span><span> </span><span>root@你的VPS</span><span> </span><span>IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>连不上就回到还开着的旧窗口把端口改回去，这是留一条后路的意思。</p></section><section><h3>装 UFW 并放行端口<a href="#装-ufw-并放行端口"><span>#</span></a></h3><p>然后安装并配置 UFW。注意顺序：先把新 SSH 端口放行了，再启用防火墙，否则会把自己锁在门外。</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>apt</span><span> </span><span>update</span><span> &amp;&amp; </span><span>apt</span><span> </span><span>install</span><span> </span><span>-y</span><span> </span><span>ufw</span></div></div><div><div><div>2</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>443/tcp</span></div></div><div><div><div>3</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>2222/tcp</span></div></div><div><div><div>4</div></div><div><span>ufw</span><span> </span><span>enable</span></div></div><div><div><div>5</div></div><div><span>reboot</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>想在重启前确认规则已经生效，单独跑一次 <code>ufw status</code></div></div><div><p>看到 <code>443/tcp</code> 和 <code>2222/tcp</code> 两行 ALLOW 就说明放行了，再 reboot 才放心。</p></div></div><p>VPS 重启完成后，再用新端口连回去确认一遍：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh</span><span> </span><span>-p</span><span> </span><span>2222</span><span> </span><span>root@你的VPS</span><span> </span><span>IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>安装 3X-UI 面板<a href="#安装-3x-ui-面板"><span>#</span></a></h2><p>连回去之后，一条命令安装 3X-UI：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>bash</span><span> </span><span>&lt;(</span><span>curl</span><span> </span><span>-Ls</span><span> https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果提示 <code>command not found</code>，先装 curl 再重跑：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>apt</span><span> </span><span>update</span><span> &amp;&amp; </span><span>apt</span><span> </span><span>install</span><span> </span><span>-y</span><span> </span><span>curl</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>安装过程中的几个选择<a href="#安装过程中的几个选择"><span>#</span></a></h3><p>安装脚本会依次问你几个问题，按下面选。</p><p>数据库选 1（SQLite）：官方推荐客户端数在 500 以下用 SQLite，自用完全够了。面板端口问你要不要自定义时输入 y，然后填一个随机高位端口，本文截图里用的是 2095。</p><p></p><figure><img src="https://cdn.freekm.com/image/f889212f-30ef-4901-b52a-d1158a1a5965.webp" alt="3X-UI 安装时的数据库选择和面板端口设置" /><figcaption>3X-UI 安装时的数据库选择和面板端口设置</figcaption></figure><p></p><p>SSL 证书这一步选 4（跳过）：因为面板等下只通过 SSH 隧道访问，不需要证书。</p><p></p><figure><img src="https://cdn.freekm.com/image/83f967b5-2ab3-4f8f-b122-b12689271da9.webp" alt="3X-UI 安装时选择跳过 SSL 证书" /><figcaption>3X-UI 安装时选择跳过 SSL 证书</figcaption></figure><p></p><div><div><div></div><div>跳过 SSL 后面板走明文 HTTP</div></div><div><p>只有在反向代理或 SSH 隧道后面才安全。下一步把面板绑定到 127.0.0.1 时会问你，输入 y，强制只能通过隧道或反代访问。要公网直连面板的，先看后面「不想开隧道」那一节再决定。</p></div></div></section><section><h3>记下安装完成输出的凭据<a href="#记下安装完成输出的凭据"><span>#</span></a></h3><p>装完后往上翻，找到 <code>Panel Installation Complete</code> 字样，把 Username、Password、Port、WebBasePath、API Token 都记下来，登录面板要用。</p><p></p><figure><img src="https://cdn.freekm.com/image/68501b12-89f3-45a6-bd2b-9d86ebfa909a.webp" alt="3X-UI 安装完成后的账号密码端口和路径信息" /><figcaption>3X-UI 安装完成后的账号密码端口和路径信息</figcaption></figure><p></p><p>最后会输出 x-ui 的控制菜单，看到它就说明面板服务已经跑起来了。</p><p></p><figure><img src="https://cdn.freekm.com/image/9c700350-9591-4f71-bc54-cabf7fb64f99.webp" alt="3X-UI 安装完成后的控制菜单" /><figcaption>3X-UI 安装完成后的控制菜单</figcaption></figure><p></p></section></section>
<section><h2>用 SSH 隧道打开面板<a href="#用-ssh-隧道打开面板"><span>#</span></a></h2><p>面板绑定在 127.0.0.1 上，公网直接访问是打不开的——这是故意的，面板不暴露到公网。本地开一条 SSH 隧道把面板端口转发出来：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh</span><span> </span><span>-p</span><span> </span><span>2222</span><span> </span><span>-L</span><span> </span><span>2222:127.0.0.1:2095</span><span> </span><span>root@你的VPS</span><span> </span><span>IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>注意命令里的 <code>-p 2222</code></div></div><div><p>安装完输出的标准隧道命令没有带 <code>-p</code>，那是按默认 22 端口写的。前面把 SSH 端口改成了 2222，所以要加上，否则会连到 22 端口上去。</p></div></div><p>隧道保持开着，浏览器访问 <code>http://localhost:2222/你的WebBasePath/</code>，看到登录页就说明成功了。用刚才记下的账号密码登录。</p><p></p><figure><img src="https://cdn.freekm.com/image/2beb8c07-f7b8-4fc4-ab79-b4eeab0f6d33.webp" alt="3X-UI 面板登录页" /><figcaption>3X-UI 面板登录页</figcaption></figure><p></p><p>登录成功后进入面板首页。</p><p></p><figure><img src="https://cdn.freekm.com/image/ecb4c326-3a61-48fb-832a-abaac232270f.webp" alt="3X-UI 面板首页概览" /><figcaption>3X-UI 面板首页概览</figcaption></figure><p></p></section>
<section><h2>创建 VLESS Reality 入站<a href="#创建-vless-reality-入站"><span>#</span></a></h2><p>侧边栏点「入站」，再点左上角的「添加入站」。基础配置里：备注随便填（本文用 <code>Freekm.com</code>），协议选 vless，端口写 443。</p><p></p><figure><img src="https://cdn.freekm.com/image/818aaa1a-06c3-43db-afc3-e42ccb996ed1.webp" alt="在 3X-UI 中添加入站，协议选 vless，端口填 443" /><figcaption>在 3X-UI 中添加入站，协议选 vless，端口填 443</figcaption></figure><p></p><p>切到「安全」页签，把安全类型从「无」改成 Reality。表单会展开一串参数：</p><ul>
<li>目标填 <code>www.microsoft.com:443</code>，然后点旁边的「扫描」，让面板测试这个目标站点可用；也可以直接点「查找目标」让它自动挑一个</li>
<li>uTLS 保持 chrome</li>
<li>Short IDs、SpiderX、公钥、私钥全部由面板自动生成，不用手动改</li>
</ul><p></p><figure><img src="https://cdn.freekm.com/image/2d71dd43-8e57-45a4-a14a-cd226f98d7b3.webp" alt="在安全页签选择 Reality 并设置目标网站" /><figcaption>在安全页签选择 Reality 并设置目标网站</figcaption></figure><p></p><p>点右下角「创建」，回到入站列表，能看到新记录：端口 443 上有 vless、TCP、Reality 三个标签，状态为开启，说明入站已经生效。</p></section>
<section><h2>添加客户端并设置 Vision 流控<a href="#添加客户端并设置-vision-流控"><span>#</span></a></h2><p>侧边栏点「客户端」，再点「添加客户端」。弹窗顶部有「基本」「凭据」「链接」三个页签。在「基本」页签把关联入站选成刚才创建的那个入站。</p><p></p><figure><img src="https://cdn.freekm.com/image/19975b36-abc6-41d1-891b-dd6f223b177a.webp" alt="添加客户端时选择关联入站" /><figcaption>添加客户端时选择关联入站</figcaption></figure><p></p><p>切到「凭据」页签，这里是 UUID、密码、订阅 ID 这些连接凭据。关键一步：在 Flow（流控）下拉菜单里选 xtls-rprx-vision，然后点「创建」。</p><p></p><figure><img src="https://cdn.freekm.com/image/a8b306d6-03fd-4652-91c8-62184793a305.webp" alt="在凭据页签设置 Flow 流控为 xtls-rprx-vision" /><figcaption>在凭据页签设置 Flow 流控为 xtls-rprx-vision</figcaption></figure><p></p><p>流控模式怎么选：</p><ul>
<li>无：不开流控，兼容性最好，性能一般</li>
<li>xtls-rprx-vision：推荐，配合 Reality 或普通 TLS 使用，握手后的数据走 XTLS Vision 通道，减少可探测特征</li>
<li>xtls-rprx-vision-udp443：把 UDP 443 也纳入流控，兼容性较差，一般不选</li>
</ul><p>创建完回到客户端列表，新客户端已经在列表里了。</p></section>
<section><h2>复制分享链接并改成你的 VPS IP<a href="#复制分享链接并改成你的-vps-ip"><span>#</span></a></h2><p>点击客户端行最左边的二维码图标，弹出分享面板，展开「Vless TCP REALITY」这一项，点右侧的「复制」按钮拿到链接。</p><p></p><figure><img src="https://cdn.freekm.com/image/2e3f9c41-9c70-45cf-811a-78ef5c558953.webp" alt="在分享面板中展开 Vless TCP REALITY 并复制链接" /><figcaption>在分享面板中展开 Vless TCP REALITY 并复制链接</figcaption></figure><p></p><div><div><div></div><div>链接里的 localhost 必须换成 VPS 公网 IP</div></div><div><p>因为面板监听在 127.0.0.1，生成的链接里服务器地址是 localhost，直接导入客户端是连不上的。把 <code>localhost</code> 替换成你的 VPS 公网 IP 再导入。</p></div></div><p>替换前的链接长这样：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>vless://0dff199d-4a03-445f-9108-4595727672bb@localhost:443?encryption=none&amp;flow=xtls-rprx-vision&amp;fp=chrome&amp;pbk=Ifs0B19vQw4LPiV1zvkK3cSLQj5q-6iKxXHobjEfoQI&amp;security=reality&amp;sid=f527e0ddad&amp;sni=c.s-microsoft.com&amp;spx=%2F91b3b23fbbde023&amp;support-x25519mlkem768=true&amp;type=tcp#Freekm.com-73r5lux703qw</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>把 <code>@localhost:443</code> 改成 <code>@你的VPS IP:443</code>，导入客户端就能用了。</p><a href="/posts/v2rayn-v2rayng-download/"><div><div>v2rayN / v2rayNG 客户端下载：官方 Release 与 CDN 镜像</div><div>v2rayN 是桌面端（Windows / macOS / Linux），v2rayNG 是 Android 端，别下错。GitHub 直连时好时坏就用 CDN 镜像，附十个包的 SHA256 与 GPG 验签方法；iOS 只能从 App Store 装。</div><div><span>2026-11-01</span><span>折腾笔记</span><span><span>#教程</span><span>#跨平台</span><span>#代理</span><span>#命令行</span></span></div></div><div><img src="https://cdn.freekm.com/image/0a300c24-3dca-4395-bc48-3717c5fb7b2e.webp" alt="" loading="lazy" /></div></a></section>
<section><h2>不想开隧道：面板暴露到公网要付什么代价<a href="#不想开隧道面板暴露到公网要付什么代价"><span>#</span></a></h2><p>面板绑在 127.0.0.1 上不是多余的一步。它和节点不一样：节点对外只暴露 443 上的 TLS 握手，面板暴露的是一个登录表单加一套 API，扫描器最喜欢这类东西。</p><p>跳过证书、把面板端口直接开到公网，有两个现实风险：密码和会话 Cookie 走明文 HTTP，链路上的人能看到；面板端口和路径会被批量扫，弱密码可能几小时内就被撞开，撞开等于把你所有入站、客户端配置和 API Token 一起交出去。</p><section><h3>先加密，再谈公网访问<a href="#先加密再谈公网访问"><span>#</span></a></h3><p>有域名的话，安装时 SSL 那一步别选跳过（本文选的 4），按提示填域名，让脚本走 Let’s Encrypt 把证书签下来。已经装完的也能补：在 <code>x-ui</code> 菜单的证书管理里配好证书路径，重启面板即可。之后访问走：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://你的域名:面板端口/你的WebBasePath/</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>没有域名就别硬放出去<a href="#没有域名就别硬放出去"><span>#</span></a></h3><p>Let’s Encrypt 不给纯 IP 签证书，自签证书浏览器会一直报警告，用起来和安全都打折扣。这种情况继续用 SSH 隧道，或者套一层 Cloudflare Tunnel，都比明文挂公网强。</p></section><section><h3>把暴露面缩到最小<a href="#把暴露面缩到最小"><span>#</span></a></h3><p>真要开，就把能收的口都收掉：WebBasePath 用安装时生成的随机串，别改成 <code>admin</code> 这类好猜的词；面板端口别留 2095 这种默认值；UFW 只放行你自己的 IP。</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>from</span><span> </span><span>你的家庭公网IP</span><span> </span><span>to</span><span> </span><span>any</span><span> </span><span>port</span><span> </span><span>2095</span><span> </span><span>proto</span><span> </span><span>tcp</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>反代放 443 会撞车</div></div><div><p>本文的 443 已经被 Reality 入站占用，反代只能换端口（比如 8443），或者把面板挂到反代的子路径下——后者配置繁琐，容易把自己绕进去。用面板自带的证书，比额外架一层反代省事。</p></div></div><div><div><div></div><div>监听地址要改</div></div><div><p>面板默认只听 127.0.0.1，想公网访问得在 <code>x-ui</code> 菜单的「设置」里把监听地址改成 <code>0.0.0.0</code>（不同版本菜单措辞略有差异），改完重启面板。</p></div></div><p>我的选择是：平时关着，要用的时候开隧道进去。省下的不是配置时间，是被爆破的概率。</p></section></section>
<section><h2>常见问题<a href="#常见问题"><span>#</span></a></h2><section><h3>Q：输入密码时终端没反应？<a href="#q输入密码时终端没反应"><span>#</span></a></h3><p>正常现象。Linux 终端输入密码不回显任何字符，直接输完按回车。</p></section><section><h3>Q：安装脚本提示 command not found？<a href="#q安装脚本提示-command-not-found"><span>#</span></a></h3><p>缺 curl。先执行 <code>apt update &amp;&amp; apt install -y curl</code>，再重跑安装命令。</p></section><section><h3>Q：浏览器打不开面板？<a href="#q浏览器打不开面板"><span>#</span></a></h3><p>按顺序检查三件事：SSH 隧道窗口是否还开着；地址是否用的 <code>http://localhost:转发端口/WebBasePath/</code>；端口和路径是否和安装完成输出的一致。面板绑定了 127.0.0.1，用公网 IP 直接访问面板端口是打不开的，这是预期行为。</p></section><section><h3>Q：面板能不能直接用公网 IP 打开？<a href="#q面板能不能直接用公网-ip-打开"><span>#</span></a></h3><p>默认不行，面板只监听 127.0.0.1，公网访问面板端口会直接被拒。真想直连，得先改监听地址、再配好证书，步骤在「不想开隧道」那一节。不加密就挂公网，等于把登录密码放在明文信道上让人看。</p></section><section><h3>Q：链接导入客户端后连不上？<a href="#q链接导入客户端后连不上"><span>#</span></a></h3><p>先确认把链接里的 localhost 换成了 VPS 公网 IP；再确认 UFW 放行了 443 端口；最后确认客户端支持 Reality 和 xtls-rprx-vision 流控，太老的客户端内核不支持。</p></section></section>
<section><h2>最后验收一下<a href="#最后验收一下"><span>#</span></a></h2><p>全部做完，对照这份清单：</p><ul>
<li>浏览器能通过 SSH 隧道打开面板登录页</li>
<li>入站列表里 443 端口有 vless、TCP、Reality 三个标签，状态开启</li>
<li>客户端导入改好 IP 的链接后能正常连通</li>
<li>面板要么没对公网开放，要么是 https 且只放行了你的 IP</li>
</ul><p>这套方案适合自己用、节点数量不多、想要抗探测的场景；如果你要给很多人用，SQLite 在客户端数超过 500 后就该换 PostgreSQL 了，安装时选 2 即可。不适合想一键脚本梭哈的人——但这套流程走一遍下来，以后排查问题会容易很多。</p><p>下一步建议：登录面板后先把默认账号密码改掉，养成定期备份 <code>/etc/x-ui/x-ui.db</code> 的习惯，数据库文件里存着所有入站和客户端配置。</p></section>]]></content>
    </entry>
</feed>
