<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>牧尘的NAS小站</title>
  
  <subtitle>最好用的NAS使用技巧</subtitle>
  <link href="https://www.dreamlyn.cn/atom.xml" rel="self"/>
  
  <link href="https://www.dreamlyn.cn/"/>
  <updated>2026-04-14T09:29:50.340Z</updated>
  <id>https://www.dreamlyn.cn/</id>
  
  <author>
    <name>牧尘</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>大模型到底在干嘛</title>
    <link href="https://www.dreamlyn.cn/2436918477.html"/>
    <id>https://www.dreamlyn.cn/2436918477.html</id>
    <published>2026-04-10T06:02:00.000Z</published>
    <updated>2026-04-14T09:29:50.340Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p><strong>本周，谷歌官方推出了一款苹果手机 App，为手机提供离线使用的 Gemma 4 模型。不需要上网，手机也能使用大模型了。</strong></p></blockquote><!-- 这是一张图片，ocr 内容为： --><img src="https://img.dreamlyn.cn:8443/i/2026/04/14/172937.webp"/><h2 id="大模型到底在干嘛"><a href="#大模型到底在干嘛" class="headerlink" title="大模型到底在干嘛"></a>大模型到底在干嘛</h2><p>大多数人已经在用 AI 了：写周报、改文案、查资料。</p><p>但用着用着，往往会冒出一个更实际的问题——</p><p>👉 <strong>这玩意儿到底在“干嘛”？它是真的在“思考”吗？</strong></p><h2 id="一、先说结论：它本质是在“猜下一个字”"><a href="#一、先说结论：它本质是在“猜下一个字”" class="headerlink" title="一、先说结论：它本质是在“猜下一个字”"></a>一、先说结论：它本质是在“猜下一个字”</h2><p>如果只用一句话总结：</p><p>👉 <strong>大模型做的事情，其实就是：根据前面的内容，预测接下来最可能出现的词。</strong></p><p>听起来很简单对吧？但关键在于——<br>它不是随便猜，而是基于<strong>海量数据训练出来的“高水平猜测”</strong>。</p><p>举个简单例子：</p><p>当看到一句话：</p><p>今天天气很好，我准备去_____</p><p>我么大概率会填：</p><ul><li>公园</li><li>散步</li><li>逛街</li></ul><p>而不会填：</p><ul><li>修火箭</li><li>挖隧道</li></ul><p>为什么？<br>因为我们“见得多”，知道正常人会怎么说。</p><p>👉 <strong>大模型干的就是同一件事，只不过它见过的是“全世界级别的数据”。</strong></p><h2 id="二、它为什么看起来“像懂了”？"><a href="#二、它为什么看起来“像懂了”？" class="headerlink" title="二、它为什么看起来“像懂了”？"></a>二、它为什么看起来“像懂了”？</h2><p>有时候可能会有一种感觉：</p><p>👉 AI有时候说话特别像人，甚至感觉它“理解了”。</p><p>但实际上，它并不是像人一样在理解，而是：</p><p>👉 <strong>它太会“模仿人类说话方式”了。</strong></p><p>可以把它想象成：</p><ul><li>一个看了无数书、无数对话的人</li><li>记住了各种表达方式、逻辑结构、回答套路</li></ul><p>当你问它问题时，它会：</p><p>👉 从“它见过的所有表达方式里”，拼出一个最像“正确答案”的回答</p><p>所以我们会觉得：</p><ul><li>有逻辑 ✔️</li><li>有结构 ✔️</li><li>甚至还有点“有见解” ✔️</li></ul><p>但本质上，它是在做一件事：</p><p>👉 <strong>把“像答案的话”组织出来</strong></p><h2 id="三、为什么它有时候很聪明，有时候很离谱？"><a href="#三、为什么它有时候很聪明，有时候很离谱？" class="headerlink" title="三、为什么它有时候很聪明，有时候很离谱？"></a>三、为什么它有时候很聪明，有时候很离谱？</h2><p>这个问题我们应该都遇到过：</p><ul><li>有时候特别好用 👍</li><li>有时候一本正经胡说八道 😅</li></ul><p>原因其实很简单：</p><p>👉 <strong>它不是在查事实，而是在“生成答案”。</strong></p><p>再说直白一点：</p><ul><li>它不会判断“这件事是真的假的”</li><li>它只会判断“这句话像不像一个合理的回答”</li></ul><p>举个典型情况：</p><p>当我们问一个很冷门的问题，或者信息不完整：</p><p>👉 它也不会说“我不知道”，而是会努力“编一个看起来合理的答案”</p><p>这就是为什么会出现所谓的“AI幻觉”。</p><h2 id="四、那它到底算不算“智能”？"><a href="#四、那它到底算不算“智能”？" class="headerlink" title="四、那它到底算不算“智能”？"></a>四、那它到底算不算“智能”？</h2><p>这个问题没有绝对答案，但可以这样理解：</p><p>👉 <strong>它不是人类那种“理解型智能”，而是一种“模式识别 + 表达生成”的能力。</strong></p><p>换个更接地气的比喻：</p><ul><li>人类：理解 → 思考 → 表达</li><li>大模型：匹配模式 → 生成表达</li></ul><p>但有意思的是：</p><p>👉 当“匹配能力”足够强的时候，看起来就很像“理解”</p><h2 id="五、那我们该怎么用它？"><a href="#五、那我们该怎么用它？" class="headerlink" title="五、那我们该怎么用它？"></a>五、那我们该怎么用它？</h2><p>理解它的工作方式，其实是为了更好地用它：</p><h3 id="✅-适合它做的事："><a href="#✅-适合它做的事：" class="headerlink" title="✅ 适合它做的事："></a>✅ 适合它做的事：</h3><ul><li>写东西（周报、方案、文案）</li><li>做总结</li><li>头脑风暴</li><li>帮我们“把话说清楚”</li></ul><h3 id="❌-不适合完全依赖的："><a href="#❌-不适合完全依赖的：" class="headerlink" title="❌ 不适合完全依赖的："></a>❌ 不适合完全依赖的：</h3><ul><li>100%准确的事实判断</li><li>非常专业、非常细节的决策</li><li>需要绝对正确的内容</li></ul><h2 id="六、最后一句话总结"><a href="#六、最后一句话总结" class="headerlink" title="六、最后一句话总结"></a>六、最后一句话总结</h2><p>👉 <strong>大模型不是在“思考答案”，而是在“生成一个最像答案的回答”，想要生成的答案最想回答，应该尽可能做好Prompt。</strong></p><p>理解这一点，就会发现：</p><ul><li>它为什么这么好用</li><li>也会明白它为什么有时候会“翻车”</li></ul><h1 id="附：AI-Prompt-技巧与实战案例"><a href="#附：AI-Prompt-技巧与实战案例" class="headerlink" title="附：AI Prompt 技巧与实战案例"></a>附：AI Prompt 技巧与实战案例</h1><blockquote><p>来源：《AI驱动商业公司办公提效》AI老师培训记录，2026年4月</p></blockquote><h2 id="一、什么是-Prompt"><a href="#一、什么是-Prompt" class="headerlink" title="一、什么是 Prompt"></a>一、什么是 Prompt</h2><p><strong>Prompt（提示词）</strong>：与 AI 大模型对话时，给出的清晰指令。通过清晰的指令，AI 能更好地理解你的需求。</p><h2 id="二、Prompt-的基本结构"><a href="#二、Prompt-的基本结构" class="headerlink" title="二、Prompt 的基本结构"></a>二、Prompt 的基本结构</h2><p>提示语由三个核心要素组成：</p><table><thead><tr><th>要素</th><th>说明</th></tr></thead><tbody><tr><td><strong>指令（Instruction）</strong></td><td>明确告诉 AI 执行什么任务</td></tr><tr><td><strong>上下文（Context）</strong></td><td>提供背景信息，帮助 AI 更准确理解</td></tr><tr><td><strong>期望（Expectation）</strong></td><td>明确对输出的要求和预期</td></tr></tbody></table><h2 id="三、Prompt-万能公式"><a href="#三、Prompt-万能公式" class="headerlink" title="三、Prompt 万能公式"></a>三、Prompt 万能公式</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">角色 → 任务 → 背景 → 输出格式 → 约束</span><br></pre></td></tr></table></figure><h2 id="四、核心-Prompt-技巧"><a href="#四、核心-Prompt-技巧" class="headerlink" title="四、核心 Prompt 技巧"></a>四、核心 Prompt 技巧</h2><h3 id="技巧-1：多轮对话——追问-澄清-引导"><a href="#技巧-1：多轮对话——追问-澄清-引导" class="headerlink" title="技巧 1：多轮对话——追问 + 澄清 + 引导"></a>技巧 1：多轮对话——追问 + 澄清 + 引导</h3><p>不要期望 AI 第一轮就完全理解需求，要学会追问和引导。</p><h3 id="技巧-2：善用模仿"><a href="#技巧-2：善用模仿" class="headerlink" title="技巧 2：善用模仿"></a>技巧 2：善用模仿</h3><p>给 AI 一个参考文档，让它模仿语气、风格。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">提示词结尾加入：&quot;请模仿上述文档的语气&quot;</span><br></pre></td></tr></table></figure><h3 id="技巧-3：激发深度思考"><a href="#技巧-3：激发深度思考" class="headerlink" title="技巧 3：激发深度思考"></a>技巧 3：激发深度思考</h3><p>在提示词结尾加入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&quot;在你的回答中，同时加入你的批判性思考&quot;</span><br><span class="line"></span><br><span class="line">&quot;在你回答之前，先自己复盘 100 遍&quot;</span><br></pre></td></tr></table></figure><h3 id="技巧-4：先问-AI-缺什么背景"><a href="#技巧-4：先问-AI-缺什么背景" class="headerlink" title="技巧 4：先问 AI 缺什么背景"></a>技巧 4：先问 AI 缺什么背景</h3><p>在提示词后加一句话：</p><blockquote><p><strong>“在你回答之前，先告诉我你还缺哪些背景信息，能让你回答得更好！”</strong></p></blockquote><p>本质是给 AI 提供更多上下文。</p><h3 id="技巧-5：从单一观点转向多维分析"><a href="#技巧-5：从单一观点转向多维分析" class="headerlink" title="技巧 5：从单一观点转向多维分析"></a>技巧 5：从单一观点转向多维分析</h3><ul><li><strong>无效问法</strong>：<code>&quot;你觉得这个方案怎么样？&quot;</code></li><li><strong>有效问法</strong>：<code>&quot;从产品经理、工程师、用户三角度看，各有什么优缺点？&quot;</code></li><li><strong>逆向挑战法</strong>：让 AI 说观点后，要求它”站在反对者角度狠狠批评你的观点”</li></ul><h3 id="技巧-6：迭代优化提示词"><a href="#技巧-6：迭代优化提示词" class="headerlink" title="技巧 6：迭代优化提示词"></a>技巧 6：迭代优化提示词</h3><p>让 AI 帮你完善提示词本身：</p><ol><li>“你是我的 AI 提示词创作高手，请用提问的方式反复与我头脑风暴”</li><li>“直到对我的需求理解程度到 90%”</li><li>“再生成一版高质量的提示词指令”</li><li>“然后继续问我是否满意，不满意就持续迭代”</li></ol><h3 id="技巧-7：配合参考文档使用"><a href="#技巧-7：配合参考文档使用" class="headerlink" title="技巧 7：配合参考文档使用"></a>技巧 7：配合参考文档使用</h3><p>把 AI 生成的专业提示词 + 对应的 PDF 文件一起给 AI（如 DeepSeek），效果更好。</p><h2 id="五、降低-AI-幻觉的-Prompt-方法"><a href="#五、降低-AI-幻觉的-Prompt-方法" class="headerlink" title="五、降低 AI 幻觉的 Prompt 方法"></a>五、降低 AI 幻觉的 Prompt 方法</h2><h3 id="方法-1：设定边界"><a href="#方法-1：设定边界" class="headerlink" title="方法 1：设定边界"></a>方法 1：设定边界</h3><table><thead><tr><th>错误示范</th><th>正确示范</th></tr></thead><tbody><tr><td><code>介绍 ChatGPT 的发展历程</code></td><td><code>请仅基于 OpenAI 官方 2022-2023 年的公开文档，介绍 ChatGPT 的发展历程</code></td></tr></tbody></table><h3 id="方法-2：标注不确定"><a href="#方法-2：标注不确定" class="headerlink" title="方法 2：标注不确定"></a>方法 2：标注不确定</h3><table><thead><tr><th>错误示范</th><th>正确示范</th></tr></thead><tbody><tr><td><code>分析特斯拉 2025 年的市场份额</code></td><td><code>分析特斯拉 2025 年的市场份额，对于非官方数据或预测性内容，请标注 [推测内容]</code></td></tr></tbody></table><h3 id="方法-3：步骤拆解"><a href="#方法-3：步骤拆解" class="headerlink" title="方法 3：步骤拆解"></a>方法 3：步骤拆解</h3><table><thead><tr><th>错误示范</th><th>正确示范</th></tr></thead><tbody><tr><td><code>评估人工智能对就业的影响</code></td><td><code>请分两步评估：1) 先列出目前已发生的具体影响案例；2) 基于这些案例进行未来趋势分析</code></td></tr></tbody></table><h3 id="方法-4：明确约束"><a href="#方法-4：明确约束" class="headerlink" title="方法 4：明确约束"></a>方法 4：明确约束</h3><p>告诉 AI <strong>只基于已有事实回答，不要推测</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">请仅基于 2023 年的实际房地产数据和已出台的相关政策进行分析，</span><br><span class="line">不要加入任何推测性内容</span><br></pre></td></tr></table></figure><h3 id="方法-5：分批输出"><a href="#方法-5：分批输出" class="headerlink" title="方法 5：分批输出"></a>方法 5：分批输出</h3><blockquote><p>“咱们一段一段来写，先把开头写好。等这部分满意了，再继续写下一段。”</p></blockquote><h3 id="方法-6：多-AI-互相评价挑刺"><a href="#方法-6：多-AI-互相评价挑刺" class="headerlink" title="方法 6：多 AI 互相评价挑刺"></a>方法 6：多 AI 互相评价挑刺</h3><p>向多个 AI（豆包 &#x2F; GPT &#x2F; Claude &#x2F; Gemini）同时提问，让它们<strong>互相评价挑刺</strong>，最后融合各方见解。</p><h2 id="六、实战案例"><a href="#六、实战案例" class="headerlink" title="六、实战案例"></a>六、实战案例</h2><h3 id="案例-1：写消防培训通知"><a href="#案例-1：写消防培训通知" class="headerlink" title="案例 1：写消防培训通知"></a>案例 1：写消防培训通知</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">请以公司综合管理部的口吻，起草一份关于&quot;开展消防培训&quot;的通知，内容包括：</span><br><span class="line">培训时间、地点、参训人员、培训要求、纪律要求。</span><br><span class="line">要求语言正式、条理清晰、适合公司内部发布。</span><br></pre></td></tr></table></figure><h3 id="案例-2：政策解读"><a href="#案例-2：政策解读" class="headerlink" title="案例 2：政策解读"></a>案例 2：政策解读</h3><blockquote><p>不是把长文缩成短文，而是把<strong>政策语言转成管理语言和行动语言</strong></p></blockquote><p><strong>Prompt 步骤：</strong></p><ol><li>先不让 AI 总结，先让它<strong>识别文件</strong></li><li><strong>提取</strong>“对企业最有用的信息”</li><li><strong>转成</strong>企业内部语言</li><li><strong>生成</strong>行动清单</li></ol><p><strong>提取对企业最有用的信息：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">请从以下政策文件中提取&quot;对企业最有用的信息&quot;，重点关注：</span><br><span class="line">- 企业需要做什么</span><br><span class="line">- 截止时间节点</span><br><span class="line">- 需要准备的材料</span><br><span class="line">- 可能的补贴或支持政策</span><br></pre></td></tr></table></figure><p><strong>转成企业内部语言：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">请将上述政策内容转化为企业内部可执行的管理语言和行动清单，</span><br><span class="line">去掉政策套话，保留执行要点。</span><br></pre></td></tr></table></figure><p><strong>生成行动清单：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">请基于上述分析，生成一份企业可执行的行动清单，</span><br><span class="line">包含：任务名称、负责部门、完成时限。</span><br></pre></td></tr></table></figure><h3 id="案例-3：数据分析报告"><a href="#案例-3：数据分析报告" class="headerlink" title="案例 3：数据分析报告"></a>案例 3：数据分析报告</h3><p>先给 AI <strong>业务背景</strong>（先不上传数据），再：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">先分析，不写报告。</span><br><span class="line">请把结论区分为&quot;基于数据可以确认&quot;和&quot;需要业务进一步验证&quot;两类。</span><br></pre></td></tr></table></figure><h3 id="案例-4：数据预处理"><a href="#案例-4：数据预处理" class="headerlink" title="案例 4：数据预处理"></a>案例 4：数据预处理</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">请检查给定的 excel 表中数据是否存在缺失值或异常值：</span><br><span class="line">（1）如满意度评分超出 1-5 分，按照 5 分计算；</span><br><span class="line">（2）如果&quot;职业&quot;列为空，则按照&quot;自由职业者&quot;处理</span><br></pre></td></tr></table></figure><h3 id="案例-5：生成图表"><a href="#案例-5：生成图表" class="headerlink" title="案例 5：生成图表"></a>案例 5：生成图表</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">生成老旧小区满意度的分布条形图，标注平均分和中位数，</span><br><span class="line">用红色标出低于 3 分的比例。</span><br></pre></td></tr></table></figure><p>（结合 HTML 代码或豆包等工具实现可视化）</p><h3 id="案例-6：词云分析"><a href="#案例-6：词云分析" class="headerlink" title="案例 6：词云分析"></a>案例 6：词云分析</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">从&quot;意见建议&quot;字段中提取前 10 个高频词及出现频次，</span><br><span class="line">排除&quot;的&quot;&quot;了&quot;等停用词，生成词云图。</span><br></pre></td></tr></table></figure><h3 id="案例-7：跨职业群体对比分析"><a href="#案例-7：跨职业群体对比分析" class="headerlink" title="案例 7：跨职业群体对比分析"></a>案例 7：跨职业群体对比分析</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">对比不同职业群体（公务员、企业职工、退休人员）的满意度均值，</span><br><span class="line">用表格展示，并分析显著性差异。</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;本周，谷歌官方推出了一款苹果手机 App，为手机提供离线使用的 Gemma 4 模型。不需要上网，手机也能使用大模型了。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- 这是一张图片，ocr 内容为： --&gt;
&lt;im</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>Claude 内部提示词手册公开（精选10条）</title>
    <link href="https://www.dreamlyn.cn/1051968573.html"/>
    <id>https://www.dreamlyn.cn/1051968573.html</id>
    <published>2026-04-03T05:02:00.000Z</published>
    <updated>2026-04-14T09:31:24.841Z</updated>
    
    <content type="html"><![CDATA[<h3 id="在ClaudeCode中输入提示词后发生了什么"><a href="#在ClaudeCode中输入提示词后发生了什么" class="headerlink" title="在ClaudeCode中输入提示词后发生了什么"></a>在ClaudeCode中输入提示词后发生了什么</h3><p>有人根据 Claude Code 泄漏的源码制作了网站，能一步步图解演示输入提示词后软件内部如何处理。</p><p>网站地址：<a href="https://ccunpacked.dev/#agent-loop">https://ccunpacked.dev/#agent-loop</a></p><!-- 这是一张图片，ocr 内容为： --><img src="https://img.dreamlyn.cn:8443/i/2026/04/14/173100.webp"/><h3 id="Claude-内部提示词手册公开"><a href="#Claude-内部提示词手册公开" class="headerlink" title="Claude 内部提示词手册公开"></a>Claude 内部提示词手册公开</h3><p><strong>文档来源</strong>：@meijiangAI（Anthropic 前研究员公开的内部提示词） </p><h3 id="提示词1：情境简报"><a href="#提示词1：情境简报" class="headerlink" title="提示词1：情境简报"></a>提示词1：情境简报</h3><p><strong>核心理念</strong>：永远不要直接提问，先给 Claude “地图”。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">我的背景是：[你的角色、公司、具体问题]。  </span><br><span class="line">已尝试过：[X、Y 等方法]。  </span><br><span class="line">目前卡在：[Z 具体难点]。  </span><br><span class="line">帮我理清思路。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：内部测试显示，此做法可提升 <strong>41%</strong> 的输出质量。 Claude 需要清晰的情境才能进行高质量导航。</p><h3 id="提示词2：推理要求"><a href="#提示词2：推理要求" class="headerlink" title="提示词2：推理要求"></a>提示词2：推理要求</h3><p><strong>核心理念</strong>：不要只问答案，要问思考过程。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">给出方案前，逐步展示你的推理。  </span><br><span class="line">指出所有不确定之处。  </span><br><span class="line">标记所有假设。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：让 Claude 的内部推理层完全浮现。你不仅得到答案，还能得到可验证、可质疑的思考过程。</p><h3 id="提示词3：诚实约束"><a href="#提示词3：诚实约束" class="headerlink" title="提示词3：诚实约束"></a>提示词3：诚实约束</h3><p><strong>核心理念</strong>：Claude 天性过于“乐于助人”，有时会说你想听的话。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">即使难受也要完全诚实。  </span><br><span class="line">如果我的计划有致命缺陷，请直说。  </span><br><span class="line">不要软化语气。  </span><br><span class="line">我宁愿现在听到硬话，也不想以后失败。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：解锁 Claude 的“宪法级”诚实模式，是提升决策质量的关键提示词。</p><h3 id="提示词4：角色设定"><a href="#提示词4：角色设定" class="headerlink" title="提示词4：角色设定"></a>提示词4：角色设定</h3><p><strong>核心理念</strong>： “充当专家”是最弱的角色提示，尽量设定具体的角色。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">你是拥有[具体经验]的[特定角色]，见过大量[具体失败模式]。  </span><br><span class="line">请用[特定框架]思考问题。  </span><br><span class="line">直言不讳，跳过常规建议。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：角色设定越具体，Claude 的推理就越精准、越有针对性。模糊角色 &#x3D; 模糊输出。</p><h3 id="提示词5：魔鬼代言人"><a href="#提示词5：魔鬼代言人" class="headerlink" title="提示词5：魔鬼代言人"></a>提示词5：魔鬼代言人</h3><p><strong>核心理念</strong>：打破 Claude 温顺的默认模式，让它主动挑战你。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">我要分享一个计划。你的工作是彻底摧毁它。  </span><br><span class="line">找出所有错误假设、被忽视的风险、以及可能的失败原因。  </span><br><span class="line">请不要手软。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：这是 Anthropic 团队内部检验重要想法的常用方法。 一次高质量的挑战，价值远超十次单纯的同意。</p><h3 id="提示词7：格式命令"><a href="#提示词7：格式命令" class="headerlink" title="提示词7：格式命令"></a>提示词7：格式命令</h3><p><strong>核心理念</strong>：当你需要简洁结构化输出时使用。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">结构为：1）一句总结。2）三个要点。3）一个下一步建议。除非我问，其他都不要。</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：Claude 是所有模型中<strong>最严格遵守格式指令</strong>的。提前设定格式可大幅提升输出可用性。</p><h3 id="提示词8：假设审计"><a href="#提示词8：假设审计" class="headerlink" title="提示词8：假设审计"></a>提示词8：假设审计</h3><p><strong>核心理念</strong>：揭示答案背后的隐藏假设。</p><p><strong>推荐提示词</strong>（复杂答案后使用）：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你做了什么假设我应该验证？如果这些假设错了，答案会怎样改变？</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：大多数计划在基础假设处崩溃。此提示词能有效暴露风险。</p><h3 id="提示词9：压缩循环"><a href="#提示词9：压缩循环" class="headerlink" title="提示词9：压缩循环"></a>提示词9：压缩循环</h3><p><strong>核心理念</strong>：长对话中防止上下文漂移。</p><p><strong>推荐提示词</strong>（每5-6次交互使用一次）：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">总结进展。目前解决了什么问题？决定了什么？最重要的未决问题是什么？</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：保持对话聚焦，防止 Claude 自信地解决错误的问题。</p><h3 id="提示词10：前期验尸（Pre-Mortem）"><a href="#提示词10：前期验尸（Pre-Mortem）" class="headerlink" title="提示词10：前期验尸（Pre-Mortem）"></a>提示词10：前期验尸（Pre-Mortem）</h3><p><strong>核心理念</strong>：在方案上线或重大决策前主动找风险。</p><p><strong>推荐提示词</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">假设6个月后这个方案/项目失败了。  </span><br><span class="line">列出3个最可能的原因，并具体说明。  </span><br><span class="line">失败实际的样子是如何的？</span><br></pre></td></tr></table></figure><p><strong>效果</strong>：Anthropic 产品团队在每项重大决定前都会使用类似方法，能抓住其他审查容易遗漏的致命风险。</p><h3 id="推荐使用建议"><a href="#推荐使用建议" class="headerlink" title="推荐使用建议"></a>推荐使用建议</h3><ol><li><strong>新手优先掌握</strong>：提示词1 + 提示词3 + 提示词5</li><li><strong>重要决策必用</strong>：提示词3（诚实约束） + 提示词5（魔鬼代言人） + 提示词10（前期验尸）</li><li><strong>日常长对话</strong>：定期使用提示词9</li><li><strong>输出需要简洁时</strong>：使用提示词7</li><li><strong>复杂方案后</strong>：立刻跟上提示词8</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;在ClaudeCode中输入提示词后发生了什么&quot;&gt;&lt;a href=&quot;#在ClaudeCode中输入提示词后发生了什么&quot; class=&quot;headerlink&quot; title=&quot;在ClaudeCode中输入提示词后发生了什么&quot;&gt;&lt;/a&gt;在ClaudeCode中输入提示词</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>AI现阶段常见新词汇出现背景（二）</title>
    <link href="https://www.dreamlyn.cn/3000095216.html"/>
    <id>https://www.dreamlyn.cn/3000095216.html</id>
    <published>2026-03-27T05:16:00.000Z</published>
    <updated>2026-04-14T09:27:46.239Z</updated>
    
    <content type="html"><![CDATA[<h1 id="微信已开放龙虾接口"><a href="#微信已开放龙虾接口" class="headerlink" title="微信已开放龙虾接口"></a>微信已开放龙虾接口</h1><p>微信官方本周发布了龙虾接口，意味着我们可以通过微信来操控龙虾了。</p><p>很多项目利用这个接口做二次开发，便于各种 Bot 和 Agent 网关的接入。</p><ul><li><a href="https://github.com/tianrking/weixin-agent-rs"><font style="color:rgb(34, 52, 114);background-color:rgb(245, 245, 213);">wechat-rs-sdk</font></a></li><li><a href="https://github.com/corespeed-io/wechatbot"><font style="color:rgb(34, 52, 114);background-color:rgb(245, 245, 213);">WeChatBot</font></a></li><li><a href="https://github.com/fastclaw-ai/weclaw"><font style="color:rgb(34, 52, 114);background-color:rgb(245, 245, 213);">WeClaw</font></a></li><li><a href="https://github.com/nanbingxyz/wechat-channel"><font style="color:rgb(34, 52, 114);background-color:rgb(245, 245, 213);">WeChat-Channel</font></a></li></ul><h1 id="AI应用常见新词汇"><a href="#AI应用常见新词汇" class="headerlink" title="AI应用常见新词汇"></a>AI应用常见新词汇</h1><p>本篇进一步探讨那些支撑复杂AI系统的新技术和术语，例如MCP、Function Calling、Multi-Agent等。</p><p>这些技术的出现有一个共同原因：<strong>大模型本身只是提供“一问一答”的能力</strong>。在实际应用中，我们需要让AI能够处理多步骤任务、跨系统协作、长文档理解，以及复杂业务逻辑。于是便以大模型为基石，开发了各类辅助技术，使AI不仅能说话，还能“做事”。</p><p>就像几十年前，当<strong>电力技术</strong>出现后，人们不仅点亮了灯泡，还基于电力发明了电视、电冰箱、电梯、计算机网络等一系列应用。大模型同样是AI的“电力”，为衍生技术提供了基础，让整个AI生态迅速丰富并得以发展。</p><h1 id="一、Function-Calling（函数调用）"><a href="#一、Function-Calling（函数调用）" class="headerlink" title="一、Function Calling（函数调用）"></a>一、Function Calling（函数调用）</h1><h3 id="出现背景"><a href="#出现背景" class="headerlink" title="出现背景"></a>出现背景</h3><p>大模型本身只能生成文本，但在实际应用中，我们希望AI能够：</p><ul><li>查询数据库</li><li>调用接口</li><li>执行业务逻辑</li></ul><p>因此引入了Function Calling机制，让模型可以“调用程序”。</p><h3 id="核心含义"><a href="#核心含义" class="headerlink" title="核心含义"></a>核心含义</h3><p>Function Calling是指模型在生成回答时，可以触发预定义函数，由系统执行具体操作，并将结果返回给模型。</p><h3 id="实际作用"><a href="#实际作用" class="headerlink" title="实际作用"></a>实际作用</h3><p>Function Calling常用于：</p><ul><li>查询业务数据</li><li>调用系统接口</li><li>执行自动化流程</li></ul><p>这是AI从“聊天工具”走向“业务系统”的关键能力。</p><h1 id="二、MCP（Model-Context-Protocol，模型上下文协议）"><a href="#二、MCP（Model-Context-Protocol，模型上下文协议）" class="headerlink" title="二、MCP（Model Context Protocol，模型上下文协议）"></a>二、MCP（Model Context Protocol，模型上下文协议）</h1><h3 id="出现背景-1"><a href="#出现背景-1" class="headerlink" title="出现背景"></a>出现背景</h3><p>随着大语言模型（LLM）在企业应用中普及，人们发现：</p><ul><li>不同模型版本、不同服务之间的上下文数据无法统一管理 </li><li>企业在多系统、多模型协作时，容易出现上下文信息丢失或不一致 </li><li>长上下文、多轮对话场景下，模型无法自动理解跨会话或跨模块的语义</li></ul><p>为了规范模型与上下文数据的交互，并保证不同模型或服务之间上下文信息一致性，<strong>Model Context Protocol（MCP）应运而生。它定义了一套标准方法，使模型能够安全、可靠地读取、更新和传递上下文数据</strong>。</p><h3 id="核心含义-1"><a href="#核心含义-1" class="headerlink" title="核心含义"></a>核心含义</h3><p>MCP是一种协议或标准，用于<strong>管理和传递模型的上下文信息</strong>。其特点包括：</p><ul><li>定义上下文数据的结构和格式 </li><li>规范不同模型或服务之间上下文传递方式 </li><li>支持跨多轮对话和多系统的数据共享 </li><li>保证模型在多任务和多场景下理解一致性</li></ul><p>简单来说，MCP就是“模型和上下文之间的通信语言”，让AI系统能够在复杂场景中保持语义连续性。</p><h3 id="实际作用-1"><a href="#实际作用-1" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li><strong>多轮对话管理</strong>：保证模型在连续对话中理解上下文一致 </li><li><strong>跨系统协作</strong>：企业AI系统中不同服务共享上下文数据 </li><li><strong>长文档处理</strong>：模型能够分片处理长文本并保持全局语义 </li><li><strong>知识库和RAG系统</strong>：统一上下文数据接口，提高检索和生成质量 </li><li><strong>增强稳定性与可靠性</strong>：避免信息丢失或语义错乱</li></ul><h3 id="理解MCP"><a href="#理解MCP" class="headerlink" title="理解MCP"></a><font style="color:rgb(32, 33, 36);">理解MCP</font></h3><p>Model Context Protocol 的核心功能是允许 LLM 请求外部工具协助回答查询或完成任务。假设我们向 AI 助理发出以下指令：“在我们的数据库中查找最新的销售报告，并将其通过电子邮件发送给我的经理。”</p><p>以下简要说明 MCP 将如何处理这种情况：</p><ol><li><strong>请求与工具发现：</strong>LLM 明白其本身无法访问数据库或发送电子邮件。它使用 MCP 客户端搜索可用工具，并在 MCP 服务器上找到了两个相关工具：database_query 工具和 email_sender 工具。</li><li><strong>工具调用：</strong>LLM 生成结构化请求来使用这些工具。首先，它会调用 database_query 工具，并指定报告的名称。然后，MCP 客户端会将此请求发送到相应的 MCP 服务器。</li><li><strong>外部操作与数据返回：</strong>MCP 服务器接收请求，将其转换为面向公司数据库的安全 SQL 查询，并检索销售报告。然后，它会将这些数据格式化后发送回 LLM。</li><li><strong>第二个操作与响应生成：</strong>现在已获得报告数据，LLM 调用 email_sender 工具，提供经理的邮箱地址和报告内容。邮件发送后，MCP 服务器会确认操作已完成。</li><li><strong>最终确认：</strong>LLM 向您提供最终回应：“我已找到最新的销售报告，并通过邮件发送给您的经理。”</li></ol><h1 id="三、Workflow（工作流）"><a href="#三、Workflow（工作流）" class="headerlink" title="三、Workflow（工作流）"></a>三、Workflow（工作流）</h1><h3 id="出现背景-2"><a href="#出现背景-2" class="headerlink" title="出现背景"></a>出现背景</h3><p>单次AI调用往往无法完成复杂任务，因此需要将多个步骤串联起来，形成完整流程。</p><p>于是AI工作流（Workflow）逐渐成为主流设计方式。</p><h3 id="核心含义-2"><a href="#核心含义-2" class="headerlink" title="核心含义"></a>核心含义</h3><p>Workflow是指将多个AI步骤（如输入、处理、调用工具、输出）组合成一个完整流程。</p><h3 id="实际作用-2"><a href="#实际作用-2" class="headerlink" title="实际作用"></a>实际作用</h3><p>常见应用：</p><ul><li>自动生成报告</li><li>自动审批流程</li><li>数据处理流水线</li><li>客服对话流程</li></ul><p>目前很多AI平台都提供可视化Workflow能力。</p><h1 id="四、Fine-tuning（模型微调）"><a href="#四、Fine-tuning（模型微调）" class="headerlink" title="四、Fine-tuning（模型微调）"></a>四、Fine-tuning（模型微调）</h1><h3 id="出现背景-3"><a href="#出现背景-3" class="headerlink" title="出现背景"></a>出现背景</h3><p>通用大模型虽然能力强，但在特定行业（如医疗、医药、金融）中，往往不够专业。</p><p>因此需要用行业数据对模型进行进一步训练，使其更符合业务需求。</p><h3 id="核心含义-3"><a href="#核心含义-3" class="headerlink" title="核心含义"></a>核心含义</h3><p>Fine-tuning是指在已有大模型基础上，使用特定领域数据进行再训练的过程。</p><h3 id="实际作用-3"><a href="#实际作用-3" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li>提升模型在专业领域的表现</li><li>适配企业业务场景</li><li>构建行业专用模型</li></ul><h1 id="五、LoRA（低秩适配）"><a href="#五、LoRA（低秩适配）" class="headerlink" title="五、LoRA（低秩适配）"></a>五、LoRA（低秩适配）</h1><h3 id="出现背景-4"><a href="#出现背景-4" class="headerlink" title="出现背景"></a>出现背景</h3><p>传统微调成本很高，需要大量计算资源。</p><p>为了降低成本，研究人员提出了LoRA方法，只调整模型的一小部分参数。</p><h3 id="核心含义-4"><a href="#核心含义-4" class="headerlink" title="核心含义"></a>核心含义</h3><p>LoRA是一种高效的模型微调技术，通过少量参数训练，实现模型能力调整。</p><h3 id="实际作用-4"><a href="#实际作用-4" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li>降低训练成本</li><li>提高训练效率</li><li>便于企业部署私有模型</li></ul><h1 id="六、Multi-Agent（多智能体）"><a href="#六、Multi-Agent（多智能体）" class="headerlink" title="六、Multi-Agent（多智能体）"></a>六、Multi-Agent（多智能体）</h1><h3 id="出现背景-5"><a href="#出现背景-5" class="headerlink" title="出现背景"></a>出现背景</h3><p>单个Agent在处理复杂任务时能力有限，因此引入多个Agent协同工作。</p><h3 id="核心含义-5"><a href="#核心含义-5" class="headerlink" title="核心含义"></a>核心含义</h3><p>Multi-Agent是指多个AI Agent分工协作，共同完成任务。</p><p>例如：</p><ul><li>一个负责数据收集</li><li>一个负责分析</li><li>一个负责生成报告</li></ul><h3 id="实际作用-5"><a href="#实际作用-5" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li>处理复杂业务流程</li><li>提高任务完成质量</li><li>模拟团队协作模式</li></ul><h1 id="七、Long-Context（长上下文）"><a href="#七、Long-Context（长上下文）" class="headerlink" title="七、Long Context（长上下文）"></a>七、Long Context（长上下文）</h1><h3 id="出现背景-6"><a href="#出现背景-6" class="headerlink" title="出现背景"></a>出现背景</h3><p>随着应用需求增长，传统上下文长度已经无法满足处理长文档、长对话的需求。</p><p>因此模型开始支持更长的上下文能力。</p><h3 id="核心含义-6"><a href="#核心含义-6" class="headerlink" title="核心含义"></a>核心含义</h3><p>Long Context指模型可以处理更长的输入内容（更多Token）。</p><h3 id="实际作用-6"><a href="#实际作用-6" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li>分析长文档</li><li>处理复杂对话</li><li>提升RAG系统效果</li></ul><h1 id="八、Temperature（温度参数）"><a href="#八、Temperature（温度参数）" class="headerlink" title="八、Temperature（温度参数）"></a>八、Temperature（温度参数）</h1><h3 id="出现背景-7"><a href="#出现背景-7" class="headerlink" title="出现背景"></a>出现背景</h3><p>模型生成内容本质是概率选择，不同场景需要不同“随机性”。</p><p>因此引入Temperature参数控制输出风格。</p><h3 id="核心含义-7"><a href="#核心含义-7" class="headerlink" title="核心含义"></a>核心含义</h3><p>Temperature用于控制模型输出的随机性：</p><ul><li>低值：更稳定、确定性强</li><li>高值：更随机、更有创造性</li></ul><h3 id="实际作用-7"><a href="#实际作用-7" class="headerlink" title="实际作用"></a>实际作用</h3><ul><li>写报告：低温度</li><li>创意写作：高温度</li><li>数据分析：低温度</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;微信已开放龙虾接口&quot;&gt;&lt;a href=&quot;#微信已开放龙虾接口&quot; class=&quot;headerlink&quot; title=&quot;微信已开放龙虾接口&quot;&gt;&lt;/a&gt;微信已开放龙虾接口&lt;/h1&gt;&lt;p&gt;微信官方本周发布了龙虾接口，意味着我们可以通过微信来操控龙虾了。&lt;/p&gt;
&lt;p&gt;很多</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>AI现阶段常见新词汇出现背景（一）</title>
    <link href="https://www.dreamlyn.cn/2436918478.html"/>
    <id>https://www.dreamlyn.cn/2436918478.html</id>
    <published>2026-03-20T05:10:00.000Z</published>
    <updated>2026-04-14T09:32:43.910Z</updated>
    
    <content type="html"><![CDATA[<h1 id="全球AI使用现状"><a href="#全球AI使用现状" class="headerlink" title="全球AI使用现状"></a>全球AI使用现状</h1><p>世界总人口现在是81亿，如果画成一个<a href="https://www.reddit.com/r/vibecoding/comments/1rbqldk/youre_early/">方块图</a>，每个方块代表320万人。</p><!-- 这是一张图片，ocr 内容为： --><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/173240.webp"/><p>68.8亿人还从没用过 AI（灰色方块），占84%。</p><p>13.8亿人跟 AI 有过对话（绿色方块），占16%。</p><p>1500万～2500万人付费订阅了 AI 服务（黄色方块），占0.3%。</p><p>200万～500万人使用 AI 生成了自己的编程项目（红色方块），占0.04%。</p><p>图片数据截至2026-03-06前有效</p><h1 id="AI应用常见新词汇"><a href="#AI应用常见新词汇" class="headerlink" title="AI应用常见新词汇"></a>AI应用常见新词汇</h1><p>随着大模型技术的发展，AI领域在近两年出现了大量新的技术词汇，例如：LLM、Prompt、RAG、Agent等。<br>这些概念不仅出现在技术文章中，也逐渐进入企业应用场景。</p><p>理解这些核心术语的出现原因，有助于更好地理解当前AI系统的工作方式以及未来的应用方向。</p><h1 id="一、LLM（Large-Language-Model，大语言模型）"><a href="#一、LLM（Large-Language-Model，大语言模型）" class="headerlink" title="一、LLM（Large Language Model，大语言模型）"></a>一、LLM（Large Language Model，大语言模型）</h1><h3 id="出现背景"><a href="#出现背景" class="headerlink" title="出现背景"></a>出现背景</h3><p>在早期的自然语言处理（NLP）领域，模型通常只能完成单一任务，例如：</p><ul><li>情感分析</li><li>文本分类</li><li>机器翻译</li></ul><p>每个任务都需要单独训练一个模型，开发成本较高，通用性也较差。</p><p>随着深度学习的发展，研究人员开始训练参数规模更大的通用语言模型，通过海量文本数据进行训练，使模型能够同时具备多种语言理解和生成能力，这类模型被称为 <strong>大语言模型（LLM）</strong>。</p><h3 id="核心含义"><a href="#核心含义" class="headerlink" title="核心含义"></a>核心含义</h3><p>LLM是一种通过大量文本数据训练得到的人工智能模型，能够理解和生成自然语言。</p><h3 id="实际作用"><a href="#实际作用" class="headerlink" title="实际作用"></a>实际作用</h3><p>大语言模型是当前AI应用的核心基础能力，可以用于：</p><ul><li>智能对话</li><li>自动写作</li><li>代码生成</li><li>文档总结</li><li>数据分析辅助</li></ul><p>目前大部分AI应用平台，本质上都是围绕LLM构建的。</p><h1 id="二、Prompt（提示词）"><a href="#二、Prompt（提示词）" class="headerlink" title="二、Prompt（提示词）"></a>二、Prompt（提示词）</h1><h3 id="出现背景-1"><a href="#出现背景-1" class="headerlink" title="出现背景"></a>出现背景</h3><p>大语言模型并不是传统意义上的“程序”，它不会严格按照固定逻辑执行任务，而是根据用户输入内容进行语言生成。</p><p>因此，用户输入的 <strong>指令质量</strong> 会直接影响AI输出结果，这就催生了“Prompt”这个概念。</p><h3 id="核心含义-1"><a href="#核心含义-1" class="headerlink" title="核心含义"></a>核心含义</h3><p>Prompt是用户输入给AI模型的指令或文本内容，用来引导模型生成期望的回答。</p><p>简单来说：</p><p>Prompt &#x3D; 用户给AI的任务说明。</p><p>例如：</p><p>“请总结以下文章的核心观点。”</p><p>这就是一个Prompt。</p><h3 id="实际作用-1"><a href="#实际作用-1" class="headerlink" title="实际作用"></a>实际作用</h3><p>Prompt决定了AI输出内容的方向和质量。<br>通过优化Prompt，可以显著提升AI回答的准确性和可读性。</p><h1 id="三、Prompt-Engineering（提示词工程）"><a href="#三、Prompt-Engineering（提示词工程）" class="headerlink" title="三、Prompt Engineering（提示词工程）"></a>三、Prompt Engineering（提示词工程）</h1><h3 id="出现背景-2"><a href="#出现背景-2" class="headerlink" title="出现背景"></a>出现背景</h3><p>在AI应用过程中，人们逐渐发现：</p><p>同一个模型，在不同Prompt下，输出质量差异非常大。</p><p>因此开始研究 <strong>如何设计更好的Prompt</strong>，从而让AI更稳定地完成任务，这一方法逐渐形成了一个新的领域——提示词工程。</p><h3 id="核心含义-2"><a href="#核心含义-2" class="headerlink" title="核心含义"></a>核心含义</h3><p>Prompt Engineering是指通过设计结构化提示词，提高AI输出质量的一种方法。</p><p>常见方式包括：</p><ul><li>明确任务描述</li><li>设定角色</li><li>提供示例</li><li>分步骤思考</li></ul><h3 id="实际作用-2"><a href="#实际作用-2" class="headerlink" title="实际作用"></a>实际作用</h3><p>提示词工程在以下场景中非常重要：</p><ul><li>AI写作</li><li>AI数据分析</li><li>AI客服系统</li><li>AI编程助手</li></ul><p>在很多企业AI应用中，<strong>Prompt设计本身就是核心能力之一</strong>。</p><h1 id="四、RAG（Retrieval-Augmented-Generation）"><a href="#四、RAG（Retrieval-Augmented-Generation）" class="headerlink" title="四、RAG（Retrieval-Augmented Generation）"></a>四、RAG（Retrieval-Augmented Generation）</h1><h3 id="出现背景-3"><a href="#出现背景-3" class="headerlink" title="出现背景"></a>出现背景</h3><p>大语言模型虽然能力很强，但存在两个明显问题：</p><ol><li>模型知识来源于训练数据，无法获取企业内部数据</li><li>模型有时会生成看似合理但实际错误的信息（AI幻觉）</li><li>与模型的交互记忆上也受限于模型的上下文长度</li></ol><p>为了让AI能够结合外部知识回答问题，研究人员提出了 <strong>RAG技术架构</strong>。</p><h3 id="核心含义-3"><a href="#核心含义-3" class="headerlink" title="核心含义"></a>核心含义</h3><p>RAG是一种将 <strong>信息检索技术</strong> 与 <strong>大语言模型生成能力</strong> 结合的技术方案。</p><p>基本流程如下：</p><p>1 用户提出问题<br>2 系统在知识库中检索相关资料<br>3 将检索到的内容提供给大模型<br>4 大模型结合资料生成回答</p><h3 id="实际作用-3"><a href="#实际作用-3" class="headerlink" title="实际作用"></a>实际作用</h3><p>RAG广泛用于企业AI应用，例如：</p><ul><li>企业知识库问答</li><li>智能客服系统</li><li>文档检索助手</li><li>技术支持机器人</li></ul><p>目前大多数企业AI知识库系统，都是基于RAG技术实现的。</p><h1 id="五、Agent（智能体）"><a href="#五、Agent（智能体）" class="headerlink" title="五、Agent（智能体）"></a>五、Agent（智能体）</h1><h3 id="出现背景-4"><a href="#出现背景-4" class="headerlink" title="出现背景"></a>出现背景</h3><p>传统AI模型只能完成单一任务，例如回答问题或生成文本。</p><p>但在实际应用中，人们希望AI能够：</p><ul><li>自动完成复杂任务</li><li>调用不同工具</li><li>执行多步骤操作</li></ul><p>因此提出了 <strong>AI Agent（智能体）</strong> 的概念。</p><h3 id="核心含义-4"><a href="#核心含义-4" class="headerlink" title="核心含义"></a>核心含义</h3><p>Agent是一种能够自主规划任务，并调用不同工具完成目标的AI系统。</p><p>与普通AI模型不同，Agent具有以下特点：</p><ul><li>能拆解任务</li><li>能调用工具</li><li>能执行多步骤流程</li></ul><h3 id="实际作用-4"><a href="#实际作用-4" class="headerlink" title="实际作用"></a>实际作用</h3><p>AI Agent通常用于：</p><ul><li>自动数据分析</li><li>自动生成报告</li></ul><p>近年来许多AI平台都开始支持Agent能力。</p><h1 id="六、Embedding（向量化）"><a href="#六、Embedding（向量化）" class="headerlink" title="六、Embedding（向量化）"></a>六、Embedding（向量化）</h1><h3 id="出现背景-5"><a href="#出现背景-5" class="headerlink" title="出现背景"></a>出现背景</h3><p>计算机并不能直接理解自然语言，因此需要把文本的语义转换成可以计算的数学形式。</p><p>为了解决这个问题，研究人员提出了 <strong>Embedding（向量化）技术</strong>。</p><h3 id="核心含义-5"><a href="#核心含义-5" class="headerlink" title="核心含义"></a>核心含义</h3><p>Embedding是把文本转换为一组数字向量的技术。</p><p>例如：</p><p>一句话可能会被表示为：</p><p>[0.12, -0.33, 0.58, …]</p><p>通过这些向量，可以计算不同文本之间的语义相似度。</p><h3 id="实际作用-5"><a href="#实际作用-5" class="headerlink" title="实际作用"></a>实际作用</h3><p>Embedding是很多AI应用的重要基础能力，例如：</p><ul><li>语义搜索</li><li>文档相似度计算</li><li>RAG知识库检索</li></ul><h1 id="七、Token（标记）"><a href="#七、Token（标记）" class="headerlink" title="七、Token（标记）"></a>七、Token（标记）</h1><h3 id="出现背景-6"><a href="#出现背景-6" class="headerlink" title="出现背景"></a>出现背景</h3><p>大语言模型在处理文本时，并不是按“字”或“词”直接理解，而是将文本拆分成更小的单位进行计算，这种单位就是Token。</p><p>这样做的原因是：</p><ul><li>统一不同语言的处理方式</li><li>提高模型计算效率</li><li>便于模型进行概率预测</li></ul><h3 id="核心含义-6"><a href="#核心含义-6" class="headerlink" title="核心含义"></a>核心含义</h3><p>Token是模型处理文本的最小单位，可以是：</p><ul><li>一个字</li><li>一个词</li><li>或一个字词片段</li></ul><p>例如：</p><p>一句话可能会被拆分为多个Token后再输入模型。</p><h3 id="实际作用-6"><a href="#实际作用-6" class="headerlink" title="实际作用"></a>实际作用</h3><p>Token在AI应用中非常关键：</p><ul><li>影响模型输入长度限制</li><li>影响调用成本（很多模型按Token计费）</li><li>影响回答完整性</li></ul><h1 id="八、Context-Window（上下文窗口）"><a href="#八、Context-Window（上下文窗口）" class="headerlink" title="八、Context Window（上下文窗口）"></a>八、Context Window（上下文窗口）</h1><h3 id="出现背景-7"><a href="#出现背景-7" class="headerlink" title="出现背景"></a>出现背景</h3><p>大模型在处理文本时，并不能无限读取内容，而是有一个“记忆范围”的限制，这个限制就是上下文窗口。</p><p>随着应用复杂度提升，人们越来越需要模型处理更长内容（例如合同、报告），因此Context Window成为重要指标。</p><h3 id="核心含义-7"><a href="#核心含义-7" class="headerlink" title="核心含义"></a>核心含义</h3><p>Context Window指模型一次可以处理的最大Token数量。</p><p>例如：</p><ul><li>8K上下文</li><li>32K上下文</li><li>128K上下文</li></ul><h3 id="实际作用-7"><a href="#实际作用-7" class="headerlink" title="实际作用"></a>实际作用</h3><p>上下文窗口直接影响：</p><ul><li>能否处理长文档</li><li>多轮对话的连续性</li><li>RAG系统中可注入的知识量</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;全球AI使用现状&quot;&gt;&lt;a href=&quot;#全球AI使用现状&quot; class=&quot;headerlink&quot; title=&quot;全球AI使用现状&quot;&gt;&lt;/a&gt;全球AI使用现状&lt;/h1&gt;&lt;p&gt;世界总人口现在是81亿，如果画成一个&lt;a href=&quot;https://www.reddit.</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>Windows 下 OpenCV 编译与 GoCV 安装实战</title>
    <link href="https://www.dreamlyn.cn/2.html"/>
    <id>https://www.dreamlyn.cn/2.html</id>
    <published>2025-11-13T05:05:16.347Z</published>
    <updated>2025-11-13T05:09:38.570Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>在 Windows 平台上，如果你想从源码编译 OpenCV 并在 Go 语言中通过 GoCV 使用它，这篇文章会带你一步步完成：准备工具、编译 OpenCV、安装 GoCV 到运行验证，流程亲测可用，并附常见坑与排错建议。</p><h2 id="一、准备工具：安装-MinGW-与-CMake"><a href="#一、准备工具：安装-MinGW-与-CMake" class="headerlink" title="一、准备工具：安装 MinGW 与 CMake"></a>一、准备工具：安装 MinGW 与 CMake</h2><p>在正式编译之前，需要准备两个工具：</p><ul><li>MinGW‑w64（GCC 编译器）</li><li>CMake（生成构建系统）</li></ul><p>在命令提示符中创建目录：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function">c:</span></span><br><span class="line"><span class="function"><span class="title">md</span> <span class="title">mingw64</span></span></span><br><span class="line"><span class="function"><span class="title">md</span> <span class="title">cmake</span></span></span><br></pre></td></tr></table></figure><p>下载并解压：</p><ul><li>MinGW‑w64：选择 “GCC-8.1.0” 的 “x86_64-posix-seh” 版本，解压到 <code>C:\mingw64</code></li><li>CMake：下载 “Windows x64 ZIP” 版本，解压到 <code>C:\cmake</code></li></ul><p>将以下路径加入系统 <code>PATH</code>，并重启命令行：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setx <span class="built_in">PATH</span> &quot;<span class="variable">%PATH%</span>;C:\mingw64\bin;C:\cmake\bin&quot;</span><br></pre></td></tr></table></figure><p>验证安装：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gcc --version</span><br><span class="line">cmake --version</span><br></pre></td></tr></table></figure><p>如果看到 “gcc version 8.1.0 …” 与 “cmake version …” 输出即成功。</p><p>提醒：务必确认 MinGW 带有 “8.1 &#x2F; posix &#x2F; seh”，否则可能导致编译失败。</p><h2 id="二、编译安装-OpenCV（含-opencv-contrib）"><a href="#二、编译安装-OpenCV（含-opencv-contrib）" class="headerlink" title="二、编译安装 OpenCV（含 opencv_contrib）"></a>二、编译安装 OpenCV（含 opencv_contrib）</h2><p>步骤：</p><ol><li><p>下载源码包：</p><ul><li>OpenCV 主源码（例如 <code>opencv-4.7.0.zip</code>）</li><li>OpenCV 扩展模块 <code>opencv_contrib-4.7.0.zip</code></li></ul></li><li><p>创建目录结构：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">C:</span><br><span class="line">  └─ opencv</span><br><span class="line">      ├─ build</span><br><span class="line">      ├─ opencv-4.7.0</span><br><span class="line">      └─ opencv_contrib-4.7.0</span><br></pre></td></tr></table></figure></li><li><p>配置构建（在 <code>C:\opencv\build</code>）：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cmake C:\opencv\opencv-<span class="number">4</span>.<span class="number">7</span>.<span class="number">0</span> -G &quot;MinGW Makefiles&quot; -B C:\opencv\build ^</span><br><span class="line">  -DOPENCV_EXTRA_MODULES_PATH=C:\opencv\opencv_contrib-<span class="number">4</span>.<span class="number">7</span>.<span class="number">0</span>\modules ^</span><br><span class="line">  -DWITH_MSMF=OFF -DWITH_OBSENSOR=OFF</span><br></pre></td></tr></table></figure><p>说明：这里使用 MinGW Makefiles 生成方式。</p></li><li><p>编译（建议使用全部核心）：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mingw32-make -j<span class="variable">%NUMBER_OF_PROCESSORS%</span></span><br></pre></td></tr></table></figure></li><li><p>安装：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mingw32-make install</span><br></pre></td></tr></table></figure><p>完成后，将安装目录下的 <code>bin</code>（例如 <code>C:\opencv\build\bin</code>）加入系统 <code>PATH</code>。</p></li></ol><p>常见检查项：</p><ul><li>MinGW 版本是否为 “8.1 x86_64-posix-seh”</li><li><code>PATH</code> 中是否包含 <code>C:\mingw64\bin</code> 与 <code>C:\cmake\bin</code></li><li>若之前编译失败，删除 <code>build</code> 目录后重试</li></ul><h2 id="三、Go-语言下的-GoCV-使用"><a href="#三、Go-语言下的-GoCV-使用" class="headerlink" title="三、Go 语言下的 GoCV 使用"></a>三、Go 语言下的 GoCV 使用</h2><ol><li><p>获取 GoCV 源码：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -d gocv.io/x/gocv</span><br></pre></td></tr></table></figure></li><li><p>确认 <code>GOPATH</code>：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="variable">%GOPATH%</span></span><br></pre></td></tr></table></figure></li><li><p>进入 GoCV 示例目录并运行版本测试：</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /D <span class="variable">%GOPATH%</span>\pkg\mod\gocv.io\x\gocv@v*\</span><br><span class="line">go run <span class="built_in">cmd</span>\version\main.go</span><br></pre></td></tr></table></figure><p>若输出类似：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gocv version: 0.33.0</span><br><span class="line">opencv lib version: 4.7.0</span><br></pre></td></tr></table></figure><p>则表示 GoCV 与 OpenCV 已成功集成。</p></li></ol><h2 id="四、常见问题与排错"><a href="#四、常见问题与排错" class="headerlink" title="四、常见问题与排错"></a>四、常见问题与排错</h2><ul><li>编译卡在某步或失败：检查 MinGW 版本与 PATH；清空 <code>build</code> 目录重试。</li><li>运行时报找不到 DLL：确保 <code>C:\opencv\build\bin</code> 在系统 PATH 的前部位置。</li><li>Go 运行找不到包：确认 <code>GOPATH</code> 正确、Go 版本兼容，并使用 <code>go env</code> 检查环境。</li><li>MSMF&#x2F;OBSENSOR 等可选组件：如未使用可关闭，减少外部依赖（文中已示例 <code>-DWITH_MSMF=OFF -DWITH_OBSENSOR=OFF</code>）。</li></ul><h2 id="五、快速总结表格"><a href="#五、快速总结表格" class="headerlink" title="五、快速总结表格"></a>五、快速总结表格</h2><table><thead><tr><th>阶段</th><th>操作</th><th>关键点</th></tr></thead><tbody><tr><td>安装 MinGW 与 CMake</td><td>下载并配置环境变量</td><td>MinGW 需为 8.1-posix-seh；添加 bin 到 PATH</td></tr><tr><td>编译 OpenCV</td><td>下载源码 + opencv_contrib → CMake → make → install</td><td>使用 MinGW Makefiles；失败时清理 build 重来</td></tr><tr><td>安装 GoCV</td><td><code>go get -u -d gocv.io/x/gocv</code> → 版本测试</td><td>确保 OpenCV bin 在 PATH，Go 环境正常</td></tr><tr><td>测试</td><td><code>go run cmd\version\main.go</code></td><td>输出 GoCV 与 OpenCV 版本即成功</td></tr></tbody></table>]]></content>
    
    
    <summary type="html">手把手在 Windows 平台用 MinGW 与 CMake 从源码编译安装 OpenCV，并在 Go 语言中集成 GoCV 的完整流程，含常见坑与排错建议。</summary>
    
    
    
    <category term="Java" scheme="https://www.dreamlyn.cn/categories/Java/"/>
    
    
    <category term="Java" scheme="https://www.dreamlyn.cn/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！</title>
    <link href="https://www.dreamlyn.cn/1975778823.html"/>
    <id>https://www.dreamlyn.cn/1975778823.html</id>
    <published>2025-09-13T07:08:09.000Z</published>
    <updated>2025-09-13T10:06:49.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="🍳-CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！"><a href="#🍳-CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！" class="headerlink" title="🍳 CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！"></a>🍳 CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！</h1><p>你是否曾在厨房中苦苦挣扎，想要重现那一份来自老乡鸡的美味？是不是在尝试几次后，依然对自己的厨艺感到无奈？别担心，今天我们要介绍的项目——<a href="https://github.com/Gar-b-age/CookLikeHOC">CookLikeHOC</a>，将会把你变成烹饪高手，让你轻松驾驭各种美味佳肴！🥢</p><h2 id="项目介绍"><a href="#项目介绍" class="headerlink" title="项目介绍"></a>项目介绍</h2><p><strong>CookLikeHOC</strong> 是一个非官方的老乡鸡菜品烹饪项目，致力于将《老乡鸡菜品溯源报告》的内容进行归纳、编辑与整理，使每一个热爱美食的人都能在家中轻松复刻出那些令人垂涎的菜肴。项目的主要部分预计于2024年完工，但已经吸引了近9517个星标和1300个新星标的热情关注，充分说明了它的受欢迎程度！🌟</p><h2 id="技术特点"><a href="#技术特点" class="headerlink" title="技术特点"></a>技术特点</h2><h3 id="1-基于JavaScript的易用性"><a href="#1-基于JavaScript的易用性" class="headerlink" title="1. 基于JavaScript的易用性"></a>1. 基于JavaScript的易用性</h3><p>CookLikeHOC采用了JavaScript语言，开发者们可以轻松地上手，结合各种现代前端技术，快速实现自己的烹饪应用！无论你是前端小白还是资深开发者，都能在这个项目中找到乐趣🏗️。</p><h3 id="2-数据驱动的烹饪体验"><a href="#2-数据驱动的烹饪体验" class="headerlink" title="2. 数据驱动的烹饪体验"></a>2. 数据驱动的烹饪体验</h3><p><img src="https://api.star-history.com/svg?repos=Gar-b-age/CookLikeHOC&type=Date" alt="Gar-b-age/CookLikeHOC Stars 趋势"></p><p>项目不仅仅是简单的菜谱展示，更是通过数据驱动的方式，让用户了解每道菜的来源、材料以及烹饪技巧。这种透明化的信息传递，让你在烹饪的同时，也能对食材有更深的理解，提升你的美食知识🍽️。</p><h3 id="3-社区支持与活跃度"><a href="#3-社区支持与活跃度" class="headerlink" title="3. 社区支持与活跃度"></a>3. 社区支持与活跃度</h3><p>CookLikeHOC背后有着一个活跃的开发者社区，随时欢迎你的加入与贡献！你不仅可以获取最新的烹饪灵感，还能与志同道合的朋友们分享你的烹饪成果和心得。</p><p><strong>要点小结</strong>：CookLikeHOC不仅是一个烹饪项目，更是一个充满互动与分享的社区，让你在烹饪的路上不再孤单。</p><h2 id="使用场景"><a href="#使用场景" class="headerlink" title="使用场景"></a>使用场景</h2><h3 id="1-家庭聚餐"><a href="#1-家庭聚餐" class="headerlink" title="1. 家庭聚餐"></a>1. 家庭聚餐</h3><p>想要为家庭聚餐准备一桌丰盛的菜肴？CookLikeHOC提供了丰富的菜谱和详细的步骤指导，让你在亲友面前大显身手，成为全场的焦点！🎉</p><h3 id="2-朋友聚会"><a href="#2-朋友聚会" class="headerlink" title="2. 朋友聚会"></a>2. 朋友聚会</h3><p>与朋友们分享美食的同时，也能展示你的厨艺！使用CookLikeHOC，轻松准备一道道美味佳肴，享受欢乐的聚会时光🍻。</p><h3 id="3-学习烹饪"><a href="#3-学习烹饪" class="headerlink" title="3. 学习烹饪"></a>3. 学习烹饪</h3><p>无论你是新手还是有一定基础的厨师，CookLikeHOC都能为你提供全面的烹饪指导，助你不断提升自己的厨艺水平📚。</p><h2 id="快速上手指南"><a href="#快速上手指南" class="headerlink" title="快速上手指南"></a>快速上手指南</h2><p>想要立即体验CookLikeHOC带来的美味之旅？以下是简单的快速上手步骤：</p><h3 id="1-克隆项目"><a href="#1-克隆项目" class="headerlink" title="1. 克隆项目"></a>1. 克隆项目</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/Gar-b-age/CookLikeHOC.git</span><br></pre></td></tr></table></figure><h3 id="2-安装依赖"><a href="#2-安装依赖" class="headerlink" title="2. 安装依赖"></a>2. 安装依赖</h3><p>进入项目目录后，使用npm安装依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> CookLikeHOC</span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><h3 id="3-启动项目"><a href="#3-启动项目" class="headerlink" title="3. 启动项目"></a>3. 启动项目</h3><p>启动项目，开始你的烹饪之旅：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm start</span><br></pre></td></tr></table></figure><h3 id="4-浏览菜谱"><a href="#4-浏览菜谱" class="headerlink" title="4. 浏览菜谱"></a>4. 浏览菜谱</h3><p>打开浏览器，访问<code>http://localhost:3000</code>，你就能看到丰富多样的菜谱列表，选择你想要尝试的菜肴，跟随步骤，轻松烹饪！🔥</p><p><strong>要点小结</strong>：只需简单几步，即可快速上手CookLikeHOC，开启你的美味烹饪之旅。</p><h2 id="适合人群"><a href="#适合人群" class="headerlink" title="适合人群"></a>适合人群</h2><p>CookLikeHOC适合各种类型的美食爱好者，无论你是家庭主妇、职场白领，还是学生党，只要你热爱美食，想要在厨房中大展身手，这个项目都能为你提供帮助。</p><h2 id="可能的坑"><a href="#可能的坑" class="headerlink" title="可能的坑"></a>可能的坑</h2><ul><li><strong>资料来源</strong>：CookLikeHOC的内容来自《老乡鸡菜品溯源报告》，在使用时请注意资料的准确性和及时性。</li><li><strong>依赖环境</strong>：确保你的开发环境中已安装Node.js和npm，以避免启动项目时出现问题。</li></ul><h2 id="未来展望"><a href="#未来展望" class="headerlink" title="未来展望"></a>未来展望</h2><p>CookLikeHOC将在2024年完成主要功能的开发，届时将会推出更多精美的菜谱和实用的烹饪技巧，敬请期待！🚀</p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>今天的分享就到这里了！如果你对美食充满热情，想要在厨房中挑战自我，别忘了给<a href="https://github.com/Gar-b-age/CookLikeHOC">CookLikeHOC</a>一个星标，让我们一起在烹饪的世界中探索更多的可能性！✨</p><p>快来加入这个充满激情的烹饪社区，让我们一起Cook Like a Pro！</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;🍳-CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！&quot;&gt;&lt;a href=&quot;#🍳-CookLikeHOC：用老乡鸡的方式烹饪美味，轻松上手的JavaScript项目！&quot; class=&quot;headerlink&quot; title=&quot;🍳</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>SQLBot：问数新纪元的智能助手 🚀</title>
    <link href="https://www.dreamlyn.cn/1975778801.html"/>
    <id>https://www.dreamlyn.cn/1975778801.html</id>
    <published>2025-09-10T12:08:09.000Z</published>
    <updated>2025-09-10T12:08:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="SQLBot：问数新纪元的智能助手-🚀"><a href="#SQLBot：问数新纪元的智能助手-🚀" class="headerlink" title="SQLBot：问数新纪元的智能助手 🚀"></a>SQLBot：问数新纪元的智能助手 🚀</h1><p>在这个数据驱动的时代，如何高效地从海量数据中提取有价值的信息，成为了企业和个人的共同挑战。传统的SQL查询方式不仅复杂，而且对普通用户来说，有着不小的门槛。想象一下，如果你只需用自然语言提问，系统便能自动生成SQL查询语句，轻松获取所需的数据，这将是多么美好的事情！今天，我要向大家介绍一款极具潜力的开源项目——<strong>SQLBot</strong>，它正是为解决这一痛点而生！✨</p><h2 id="项目概述"><a href="#项目概述" class="headerlink" title="项目概述"></a>项目概述</h2><p><img src="https://img.shields.io/github/v/release/dataease/SQLBot" alt="dataease/SQLBot | 项目概述"></p><p><img src="https://resource-fit2cloud-com.oss-cn-hangzhou.aliyuncs.com/sqlbot/sqlbot.png" alt="dataease/SQLBot | 项目概述"></p><p><strong>SQLBot</strong> 是一个基于大模型和RAG（Retrieval-Augmented Generation）技术的智能问数系统。它能够将自然语言转换为SQL查询，帮助用户轻松获取数据，极大地提升了数据查询的便捷性和准确性。目前，该项目在GitHub上拥有超过2052个星标，并且今日新增了121个星标，显示出其越来越受到开发者和用户的欢迎。</p><p>项目地址：<a href="https://github.com/dataease/SQLBot">dataease&#x2F;SQLBot</a></p><h3 id="技术特点"><a href="#技术特点" class="headerlink" title="技术特点"></a>技术特点</h3><ol><li><p><strong>开箱即用</strong><br>SQLBot 只需进行简单的配置，即可与大模型和数据源连接，快速启动问数之旅。用户无需具备SQL知识，便可通过简单的自然语言与系统进行交互，轻松获取数据。 </p></li><li><p><strong>易于集成</strong><br>SQLBot 支持快速嵌入到各种第三方业务系统，同时也可以与 n8n、MaxKB、Dify、Coze 等 AI 应用开发平台进行集成，帮助各类应用快速实现智能问数能力。</p></li><li><p><strong>安全可控</strong><br>SQLBot 提供基于工作空间的资源隔离机制，能够实现细粒度的数据权限控制，确保用户数据的安全性与隐私性。</p></li></ol><h3 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h3><p>SQLBot 利用大模型和RAG技术，将用户的自然语言问题转化为SQL查询。通过对数据源的访问，SQLBot 能够实时获取数据并返回结果。其架构设计如图所示：</p><p><img src="https://github.com/user-attachments/assets/cde40783-369e-493e-bb59-44ce43c2e7c5" alt="系统架构"></p><p>要点小结：SQLBot通过大模型和RAG的结合，实现了自然语言到SQL的高效转换。</p><h2 id="快速上手指南"><a href="#快速上手指南" class="headerlink" title="快速上手指南"></a>快速上手指南</h2><p>想要体验 SQLBot 的强大功能？下面是一步步的快速安装指南，让你轻松上手！📊</p><h3 id="1-安装部署"><a href="#1-安装部署" class="headerlink" title="1. 安装部署"></a>1. 安装部署</h3><p><img src="https://api.star-history.com/svg?repos=dataease/sqlbot&type=Date" alt="dataease/SQLBot | 1. 安装部署"></p><p><img src="https://img.shields.io/docker/pulls/dataease/sqlbot?label=downloads" alt="dataease/SQLBot | 1. 安装部署"></p><p><img src="https://img.shields.io/github/stars/dataease/SQLBot?color=%231890FF&style=flat-square" alt="dataease/SQLBot | 1. 安装部署"></p><p>首先，你需要一台安装了Docker的Linux服务器。执行以下命令进行一键安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">  --name sqlbot \</span><br><span class="line">  --restart unless-stopped \</span><br><span class="line">  -p 8000:8000 \</span><br><span class="line">  -p 8001:8001 \</span><br><span class="line">  -v ./data/sqlbot/excel:/opt/sqlbot/data/excel \</span><br><span class="line">  -v ./data/sqlbot/images:/opt/sqlbot/images \</span><br><span class="line">  -v ./data/sqlbot/logs:/opt/sqlbot/logs \</span><br><span class="line">  -v ./data/postgresql:/var/lib/postgresql/data \</span><br><span class="line">  --privileged=<span class="literal">true</span> \</span><br><span class="line">  dataease/sqlbot</span><br></pre></td></tr></table></figure><p>你也可以通过 <a href="https://apps.fit2cloud.com/1panel">1Panel 应用商店</a> 快速部署 SQLBot，或在内网环境中选择离线安装包进行部署。</p><h3 id="2-访问-SQLBot"><a href="#2-访问-SQLBot" class="headerlink" title="2. 访问 SQLBot"></a>2. 访问 SQLBot</h3><p>安装完成后，你可以在浏览器中访问 SQLBot：</p><ul><li>地址: <code>http://&lt;你的服务器IP&gt;:8000/</code></li><li>默认用户名: <code>admin</code></li><li>默认密码: <code>SQLBot@123456</code></li></ul><p>要点小结：只需简单几步，即可将SQLBot部署到你的服务器上，开启问数之旅。</p><h2 id="UI-展示"><a href="#UI-展示" class="headerlink" title="UI 展示"></a>UI 展示</h2><p>SQLBot 的用户界面友好直观，用户可以通过自然语言输入问题，系统将自动生成对应的SQL查询，极大提升了用户体验。</p><p><img src="https://github.com/user-attachments/assets/55526514-52f3-4cfe-98ec-08a986259280" alt="SQLBot UI"></p><p>要点小结：SQLBot 提供了直观易用的界面，用户可以轻松进行自然语言问数。</p><h2 id="适用场景"><a href="#适用场景" class="headerlink" title="适用场景"></a>适用场景</h2><ul><li><strong>企业数据分析</strong>：帮助企业快速从数据库中提取所需数据，提升决策效率。</li><li><strong>教育培训</strong>：为学习SQL的学生提供一个轻松的学习工具，通过自然语言提问，提高学习兴趣。</li><li><strong>数据可视化</strong>：结合BI工具，快速获取数据用于可视化展示，帮助用户更好地理解数据。</li></ul><p>要点小结：SQLBot 在数据分析、教育培训和可视化等多种场景中都有广泛应用。</p><h2 id="社区与未来发展"><a href="#社区与未来发展" class="headerlink" title="社区与未来发展"></a>社区与未来发展</h2><p><img src="https://api.star-history.com/svg?repos=dataease/SQLBot&type=Date" alt="dataease/SQLBot Stars 趋势"></p><p>随着SQLBot的不断发展，社区也在逐渐壮大。如果你对技术有兴趣，欢迎加入我们的技术交流群，与我们一起交流与探讨！如需帮助或更多信息，随时联系 <a href="mailto:&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x66;&#105;&#x74;&#x32;&#99;&#108;&#x6f;&#x75;&#100;&#46;&#99;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x66;&#105;&#x74;&#x32;&#99;&#108;&#x6f;&#x75;&#100;&#46;&#99;&#111;&#x6d;</a>。</p><p>想了解更多项目动态，别忘了关注我们，相信SQLBot会在数据问答领域引领新的浪潮！🌊</p><hr><p>在这个信息爆炸的时代，SQLBot为我们提供了一种全新的与数据互动的方式。无论你是数据分析师，还是普通用户，SQLBot都能帮助你轻松获取所需信息。赶快动手体验吧！💡</p><p>关注我们，获取更多技术干货，助力你的技术成长之路！📈</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;SQLBot：问数新纪元的智能助手-🚀&quot;&gt;&lt;a href=&quot;#SQLBot：问数新纪元的智能助手-🚀&quot; class=&quot;headerlink&quot; title=&quot;SQLBot：问数新纪元的智能助手 🚀&quot;&gt;&lt;/a&gt;SQLBot：问数新纪元的智能助手 🚀&lt;/h1&gt;&lt;</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>什么是NAT？NAS远程访问绕不开的网络魔法</title>
    <link href="https://www.dreamlyn.cn/27425.html"/>
    <id>https://www.dreamlyn.cn/27425.html</id>
    <published>2025-05-13T03:02:22.000Z</published>
    <updated>2025-08-28T06:29:42.883Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、前言"><a href="#一、前言" class="headerlink" title="一、前言"></a>一、前言</h1><p>你是否曾经困惑过：家里的NAS明明连上了网，为何我在外地却访问不到？为什么别人能通过公网IP访问他们的设备，而我却只能在局域网里摸鱼？</p><p>这一切的答案，都指向了一个看似神秘却无处不在的网络技术：<strong>NAT（网络地址转换）</strong>。</p><p>本文将为你揭开NAT的面纱，从原理到实际应用，帮助你理解它在家庭网络、NAS远程访问中的关键作用。</p><h1 id="二、什么是NAT？"><a href="#二、什么是NAT？" class="headerlink" title="二、什么是NAT？"></a>二、什么是NAT？</h1><p>NAT，全称是 Network Address Translation（网络地址转换），顾名思义，是一种IP地址转换的技术。</p><p>通常用于私有网络（局域网）和公网（互联网）之间的地址转换，其使命是解决IPv4地址不够用的问题。</p><h2 id="举个例子："><a href="#举个例子：" class="headerlink" title="举个例子："></a>举个例子：</h2><p>我们家的路由器获取到了一个公网IP，例如 123.123.123.123，而家中所有设备（NAS、手机、电脑）使用的都是内网地址，比如 192.168.1.2、192.168.1.10 等。</p><p>这些内网IP无法直接在互联网中通信，于是由<strong>路由器扮演翻译官</strong>的角色：通过NAT机制，把所有设备的访问请求“伪装”成来自 123.123.123.123，再转发到公网。</p><h1 id="三、NAT的工作原理"><a href="#三、NAT的工作原理" class="headerlink" title="三、NAT的工作原理"></a>三、NAT的工作原理</h1><h2 id="1-出站请求流程（从内网访问公网）"><a href="#1-出站请求流程（从内网访问公网）" class="headerlink" title="1. 出站请求流程（从内网访问公网）"></a>1. 出站请求流程（从内网访问公网）</h2><p>以 NAS 下载更新为例：</p><p>NAS 使用 192.168.1.100:56243 向外发送请求；</p><ul><li>路由器将其“翻译”为 123.123.123.123:62001（随机端口）发送出去；</li><li>服务器返回响应给 123.123.123.123:62001；</li><li>路由器根据记录，找到是 192.168.1.100:56243 发出的，转发回去。</li></ul><p>这种 NAT 模式称为：源地址转换（SNAT）。</p><h2 id="2-入站请求流程（从公网访问内网）"><a href="#2-入站请求流程（从公网访问内网）" class="headerlink" title="2. 入站请求流程（从公网访问内网）"></a>2. 入站请求流程（从公网访问内网）</h2><p>公网用户想访问你家里的NAS，就必须通过 NAT 转换请求目标地址，否则路由器不知道该转发给谁。</p><p>这时就需要我们手动配置端口映射（Port Forwarding），让路由器把来自公网某端口的请求，转发给指定的内网设备。</p><h1 id="四、NAT的三种常见类型"><a href="#四、NAT的三种常见类型" class="headerlink" title="四、NAT的三种常见类型"></a>四、NAT的三种常见类型</h1><table><thead><tr><th>类型</th><th>说明</th><th>是否支持多个公网连接</th></tr></thead><tbody><tr><td>静态NAT</td><td>固定一个公网IP映射一个内网IP</td><td>否</td></tr><tr><td>动态NAT</td><td>一组公网IP动态映射内网IP</td><td>是</td></tr><tr><td>PAT（端口地址转换）&#x2F;NAPT</td><td>使用同一个公网IP + 不同端口映射多个内网设备</td><td>是，家用最常见</td></tr></tbody></table><p>我们的家庭路由器基本使用的就是第三种：NAPT（Port Address Translation），又称“端口复用”。</p><h1 id="五、NAT对NAS远程访问的影响"><a href="#五、NAT对NAS远程访问的影响" class="headerlink" title="五、NAT对NAS远程访问的影响"></a>五、NAT对NAS远程访问的影响</h1><p>默认情况下，NAT阻断了从外部访问内网设备的路径。这就是：</p><ul><li>为什么你在家可以访问NAS，而在公司却不行；</li><li>为什么公网IP查得到，但访问页面打不开；</li><li>为什么明明NAS开着服务，别人却连接失败。</li></ul><h2 id="解决方式："><a href="#解决方式：" class="headerlink" title="解决方式："></a>解决方式：</h2><ol><li><p>端口映射（手动设置）<br>在路由器中配置，将 公网IP:5001 映射到 192.168.1.100:5001（NAS的管理页面）；</p></li><li><p>UPnP 自动映射（不建议开启，风险高）<br>某些NAS支持自动向路由器申请端口映射；</p></li><li><p>使用DDNS + NAT穿透工具<br>如：ZeroTier、Tailscale、Frp、Cloudflare Tunnel 等，绕过NAT限制。</p></li></ol><h1 id="六、NAT的优势与局限"><a href="#六、NAT的优势与局限" class="headerlink" title="六、NAT的优势与局限"></a>六、NAT的优势与局限</h1><h2 id="✅-优势："><a href="#✅-优势：" class="headerlink" title="✅ 优势："></a>✅ 优势：</h2><ul><li>解决IP地址不足；</li><li>增加一定的安全性（外网无法直接访问内网）；</li><li>管理简单，设备无需公网IP即可上网。</li></ul><h2 id="❌-局限："><a href="#❌-局限：" class="headerlink" title="❌ 局限："></a>❌ 局限：</h2><ul><li>不支持外部直接访问（需要额外配置）；</li><li>某些P2P服务（如BT、游戏）受限；</li><li>穿透复杂的NAT类型较困难（对等连接困难）；</li></ul><h1 id="七、总结：NAT是一座隐形的桥梁"><a href="#七、总结：NAT是一座隐形的桥梁" class="headerlink" title="七、总结：NAT是一座隐形的桥梁"></a>七、总结：NAT是一座隐形的桥梁</h1><p>NAT让我们用一个公网IP连接无数设备，它像一座隐形的桥梁，在我们访问网页、看视频、下载软件时悄无声息地工作。</p><p>但当你想从公网访问内网的NAS时，这座桥却成了障碍。理解它、驾驭它，便是每一个NAS玩家走向进阶的第一课。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;一、前言&quot;&gt;&lt;a href=&quot;#一、前言&quot; class=&quot;headerlink&quot; title=&quot;一、前言&quot;&gt;&lt;/a&gt;一、前言&lt;/h1&gt;&lt;p&gt;你是否曾经困惑过：家里的NAS明明连上了网，为何我在外地却访问不到？为什么别人能通过公网IP访问他们的设备，而我却只能在局域</summary>
      
    
    
    
    <category term="网络基础" scheme="https://www.dreamlyn.cn/categories/network/"/>
    
    
    <category term="网络" scheme="https://www.dreamlyn.cn/tags/network/"/>
    
  </entry>
  
  <entry>
    <title>MySQL慢SQL处理</title>
    <link href="https://www.dreamlyn.cn/1129065587.html"/>
    <id>https://www.dreamlyn.cn/1129065587.html</id>
    <published>2025-05-05T02:05:59.000Z</published>
    <updated>2025-11-13T05:06:00.242Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>Docker 环境下使用 pt-query-digest 分析 MySQL 慢查询。</p><p>在生产或测试环境中，MySQL 查询变慢往往是性能问题的信号。要精准定位问题，分析慢查询日志是最直接有效的方式。本文介绍如何在 Docker 环境中启用慢查询日志，并使用 pt-query-digest 进行深入分析与优化。</p><h2 id="一、前提条件"><a href="#一、前提条件" class="headerlink" title="一、前提条件"></a>一、前提条件</h2><ul><li>MySQL 运行在 Docker 容器中。</li><li>能进入容器或通过挂载访问日志文件。</li><li>主机或容器中可使用 pt-query-digest 工具（Percona Toolkit 提供）。</li></ul><p>如果 pt-query-digest 尚未安装，可在常见发行版中安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># CentOS / RHEL</span></span><br><span class="line">yum install -y percona-toolkit</span><br><span class="line"></span><br><span class="line"><span class="comment"># Debian / Ubuntu</span></span><br><span class="line">apt install -y percona-toolkit</span><br></pre></td></tr></table></figure><p>若系统源中没有，可通过 Percona 官方源安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm</span><br><span class="line">rpm -ivh percona-release-latest.noarch.rpm</span><br><span class="line">yum install -y percona-toolkit</span><br></pre></td></tr></table></figure><h2 id="二、开启-MySQL-慢查询日志"><a href="#二、开启-MySQL-慢查询日志" class="headerlink" title="二、开启 MySQL 慢查询日志"></a>二、开启 MySQL 慢查询日志</h2><p>首先确保 MySQL 已启用慢查询日志。</p><p>进入容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="built_in">exec</span> -it mysql-container-name bash</span><br></pre></td></tr></table></figure><p>登录 MySQL：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql -uroot -p</span><br></pre></td></tr></table></figure><p>查看慢查询日志状态：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SHOW</span> VARIABLES <span class="keyword">LIKE</span> <span class="string">&#x27;slow_query_log&#x27;</span>;</span><br><span class="line"><span class="keyword">SHOW</span> VARIABLES <span class="keyword">LIKE</span> <span class="string">&#x27;slow_query_log_file&#x27;</span>;</span><br><span class="line"><span class="keyword">SHOW</span> VARIABLES <span class="keyword">LIKE</span> <span class="string">&#x27;long_query_time&#x27;</span>;</span><br></pre></td></tr></table></figure><p>如果 <code>slow_query_log</code> 为 OFF，可执行以下命令开启：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SET</span> <span class="keyword">GLOBAL</span> slow_query_log <span class="operator">=</span> <span class="string">&#x27;ON&#x27;</span>;</span><br><span class="line"><span class="keyword">SET</span> <span class="keyword">GLOBAL</span> slow_query_log_file <span class="operator">=</span> <span class="string">&#x27;/var/lib/mysql/mysql-slow.log&#x27;</span>;</span><br><span class="line"><span class="keyword">SET</span> <span class="keyword">GLOBAL</span> long_query_time <span class="operator">=</span> <span class="number">1</span>;  <span class="comment">-- 超过 1 秒的查询将记录</span></span><br></pre></td></tr></table></figure><p>建议将这些配置写入 MySQL 配置文件（my.cnf 或 mysqld.cnf），避免容器重启后丢失：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mysqld]</span></span><br><span class="line"><span class="attr">slow_query_log</span> = <span class="number">1</span></span><br><span class="line"><span class="attr">slow_query_log_file</span> = /var/lib/mysql/mysql-slow.log</span><br><span class="line"><span class="attr">long_query_time</span> = <span class="number">1</span></span><br><span class="line"><span class="attr">log_output</span> = FILE</span><br><span class="line"><span class="comment"># 可选：记录未使用索引的查询</span></span><br><span class="line"><span class="comment"># log_queries_not_using_indexes = 1</span></span><br></pre></td></tr></table></figure><h2 id="三、拷贝慢查询日志文件"><a href="#三、拷贝慢查询日志文件" class="headerlink" title="三、拷贝慢查询日志文件"></a>三、拷贝慢查询日志文件</h2><p>MySQL 的慢查询日志默认保存在容器内 <code>/var/lib/mysql/mysql-slow.log</code>。<br>可以通过以下方式拷贝出来：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="built_in">cp</span> mysql-container-name:/var/lib/mysql/mysql-slow.log ./mysql-slow.log</span><br></pre></td></tr></table></figure><p>执行后，会在当前目录生成一个 <code>mysql-slow.log</code> 文件，供后续分析使用。</p><h2 id="四、使用-pt-query-digest-分析日志"><a href="#四、使用-pt-query-digest-分析日志" class="headerlink" title="四、使用 pt-query-digest 分析日志"></a>四、使用 pt-query-digest 分析日志</h2><p>pt-query-digest 是 Percona Toolkit 中非常强大的 SQL 分析工具，它可以对慢查询日志进行统计、聚合和排序，帮助我们快速定位性能瓶颈。</p><p>基本用法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pt-query-digest mysql-slow.log &gt; slow-report.txt</span><br></pre></td></tr></table></figure><p>执行后，<code>slow-report.txt</code> 中会生成一份详细报告。</p><h2 id="五、报告结构解读"><a href="#五、报告结构解读" class="headerlink" title="五、报告结构解读"></a>五、报告结构解读</h2><p>典型输出结构如下：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"># 123ms user time, 5 system time, 0.45s elapsed</span><br><span class="line"># Time range: 2025-11-13 09:00:00 to 2025-11-13 10:00:00</span><br><span class="line"># Attribute          total     min     max     avg     95%  stddev  median</span><br><span class="line"># Exec time          1.23s   0.001s  0.350s  0.045s  0.200s  0.050s  0.020s</span><br><span class="line"># Rows examine       1.2M       10   50000   3000</span><br><span class="line"></span><br><span class="line"># Query 1: 50% of total query time (0.61s)</span><br><span class="line"># ...</span><br><span class="line">SELECT * FROM user_log WHERE user_id = ? AND create_time &gt; ?;</span><br></pre></td></tr></table></figure><p>常见关注点：</p><ul><li>Exec time：执行时间分布，查找最耗时的 SQL。</li><li>Rows examine：扫描的行数，尽量通过索引减少全表扫描。</li><li>Query ID：查询的聚合编号，用于快速定位具体 SQL。</li><li>Count：出现次数，频繁且慢的 SQL 优先优化。</li></ul><h2 id="六、优化方向建议"><a href="#六、优化方向建议" class="headerlink" title="六、优化方向建议"></a>六、优化方向建议</h2><ul><li>添加合适的索引：重点关注 <code>WHERE</code>、<code>ORDER BY</code>、<code>GROUP BY</code> 涉及字段。</li><li>使用 EXPLAIN 分析执行计划：定位全表扫描、回表、Using filesort 等问题。</li><li>避免使用 <code>SELECT *</code>：仅查询必要字段，减少数据传输量与行宽。</li><li>优化分页与子查询：大分页可改为基于索引的条件翻页或游标。</li><li>缓存热点数据：对频繁访问但更新较少的数据，可放入 Redis。</li><li>合理设置 <code>long_query_time</code>：建议从 1s 起步，逐步降低以捕获更多慢 SQL。</li></ul><p>可搭配示例执行计划查看：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">EXPLAIN ANALYZE <span class="keyword">SELECT</span> id, user_id, create_time</span><br><span class="line"><span class="keyword">FROM</span> user_log</span><br><span class="line"><span class="keyword">WHERE</span> user_id <span class="operator">=</span> ? <span class="keyword">AND</span> create_time <span class="operator">&gt;</span> ?</span><br><span class="line"><span class="keyword">ORDER</span> <span class="keyword">BY</span> create_time <span class="keyword">DESC</span></span><br><span class="line">LIMIT <span class="number">50</span>;</span><br></pre></td></tr></table></figure><h2 id="七、自动化分析脚本（可选）"><a href="#七、自动化分析脚本（可选）" class="headerlink" title="七、自动化分析脚本（可选）"></a>七、自动化分析脚本（可选）</h2><p>可以编写简单脚本定期执行分析：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line">DATE=$(<span class="built_in">date</span> +<span class="string">&quot;%Y%m%d_%H%M%S&quot;</span>)</span><br><span class="line">LOGFILE=<span class="string">&quot;/var/lib/mysql/mysql-slow.log&quot;</span></span><br><span class="line">REPORT=<span class="string">&quot;/opt/reports/slow_report_<span class="variable">$DATE</span>.txt&quot;</span></span><br><span class="line"></span><br><span class="line">docker <span class="built_in">cp</span> mysql-container-name:<span class="variable">$LOGFILE</span> /tmp/mysql-slow.log</span><br><span class="line">pt-query-digest /tmp/mysql-slow.log &gt; <span class="variable">$REPORT</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;Slow query report generated: <span class="variable">$REPORT</span>&quot;</span></span><br></pre></td></tr></table></figure><hr><p>通过以上步骤即可在容器环境中系统性地捕获和分析慢 SQL，并结合索引、执行计划与缓存策略进行迭代优化。</p>]]></content>
    
    
    <summary type="html">在 Docker 环境中启用 MySQL 慢查询日志，并使用 pt-query-digest 进行分析与优化，定位瓶颈 SQL 的实战指南。</summary>
    
    
    
    <category term="Java" scheme="https://www.dreamlyn.cn/categories/Java/"/>
    
    
    <category term="MySQL, 性能优化, Docker" scheme="https://www.dreamlyn.cn/tags/MySQL-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-Docker/"/>
    
  </entry>
  
  <entry>
    <title>向量数据库介绍</title>
    <link href="https://www.dreamlyn.cn/1129065187.html"/>
    <id>https://www.dreamlyn.cn/1129065187.html</id>
    <published>2025-05-05T02:05:59.000Z</published>
    <updated>2025-08-28T06:29:42.882Z</updated>
    
    <content type="html"><![CDATA[<p>向量数据库（Vector Database）是近年来随着大语言模型（LLM）和语义搜索发展而火起来的一种新型数据库。它的目标是支持<strong>基于“语义相似度”的高效搜索</strong>，与传统数据库按关键字精确匹配不同。</p><hr><h2 id="🧠-一、什么是“向量”？"><a href="#🧠-一、什么是“向量”？" class="headerlink" title="🧠 一、什么是“向量”？"></a>🧠 一、什么是“向量”？</h2><ul><li>在 AI&#x2F;NLP 中，一段文本、图像、音频都可以被编码为一个高维的浮点数数组，比如：</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;Java 是一种面向对象的编程语言&quot; → [0.12, -0.33, 0.88, ..., 0.03]  // 1536维</span><br></pre></td></tr></table></figure><ul><li>这个过程叫做 <strong>Embedding（嵌入）</strong></li><li>转换之后的向量<strong>保留了原始内容的语义信息</strong></li></ul><p>两个意思相近的句子，它们的向量会在高维空间中非常接近</p><hr><h2 id="📚-二、向量数据库-VS-传统数据库"><a href="#📚-二、向量数据库-VS-传统数据库" class="headerlink" title="📚 二、向量数据库 VS 传统数据库"></a>📚 二、向量数据库 VS 传统数据库</h2><table><thead><tr><th>特点</th><th>传统数据库 (MySQL)</th><th>向量数据库 (Weaviate&#x2F;Pinecone)</th></tr></thead><tbody><tr><td>存储的数据</td><td>字符串、数字等</td><td>高维向量（float 数组）</td></tr><tr><td>支持的搜索方式</td><td>精确匹配、模糊匹配</td><td>向量相似度搜索（余弦&#x2F;欧几里得）</td></tr><tr><td>应用场景</td><td>业务数据管理</td><td>语义搜索、图像检索、文档问答</td></tr></tbody></table><hr><h2 id="🔍-三、向量数据库的核心功能"><a href="#🔍-三、向量数据库的核心功能" class="headerlink" title="🔍 三、向量数据库的核心功能"></a>🔍 三、向量数据库的核心功能</h2><h3 id="✅-1-向量存储（Insert）"><a href="#✅-1-向量存储（Insert）" class="headerlink" title="✅ 1. 向量存储（Insert）"></a>✅ 1. 向量存储（Insert）</h3><p>你把文本转成向量后连同文本一起存进去：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;doc123&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;text&quot;</span><span class="punctuation">:</span> <span class="string">&quot;如何退货？&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;vector&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="number">0.12</span><span class="punctuation">,</span> <span class="number">-0.33</span><span class="punctuation">,</span> <span class="number">0.88</span><span class="punctuation">,</span> ...<span class="punctuation">,</span> <span class="number">0.03</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><hr><h3 id="✅-2-相似度搜索（Similarity-Search）"><a href="#✅-2-相似度搜索（Similarity-Search）" class="headerlink" title="✅ 2. 相似度搜索（Similarity Search）"></a>✅ 2. 相似度搜索（Similarity Search）</h3><p>用户问“退货政策是什么”，你：</p><ol><li>把这个问题也转成向量（用 embedding 模型）</li><li>在数据库中找“和这个向量最近的几个向量”（比如余弦相似度 topK）</li></ol><p>结果就是“语义最相关”的内容。</p><hr><h3 id="✅-3-元数据过滤（可选）"><a href="#✅-3-元数据过滤（可选）" class="headerlink" title="✅ 3. 元数据过滤（可选）"></a>✅ 3. 元数据过滤（可选）</h3><p>除了向量，也可以存 metadata，比如：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;category&quot;</span><span class="punctuation">:</span> <span class="string">&quot;退货&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;用户手册&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;date&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2024-05-01&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>查询时可以加条件：</p><ul><li>搜“和 X 最像的内容”，但 <strong>必须是‘用户手册’中的内容</strong></li></ul><hr><h2 id="🏗️-四、内部结构简图"><a href="#🏗️-四、内部结构简图" class="headerlink" title="🏗️ 四、内部结构简图"></a>🏗️ 四、内部结构简图</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">┌──────────────────────────────┐</span><br><span class="line">│         向量数据库            │</span><br><span class="line">├────────────┬─────────────────┤</span><br><span class="line">│ ID         │ 向量            │</span><br><span class="line">│ &quot;doc001&quot;   │ [0.12, 0.8, ...]│</span><br><span class="line">│ &quot;doc002&quot;   │ [0.55, 0.2, ...]│</span><br><span class="line">└────────────┴─────────────────┘</span><br><span class="line"></span><br><span class="line">       ↓（用户输入问题 → embedding）</span><br><span class="line"></span><br><span class="line">查询向量：[0.13, 0.81, ...]</span><br><span class="line"></span><br><span class="line">       ↓（向量相似度 TopK）</span><br><span class="line"></span><br><span class="line">→ 返回最相似的几条内容</span><br></pre></td></tr></table></figure><hr><h2 id="🔧-五、常用术语解释"><a href="#🔧-五、常用术语解释" class="headerlink" title="🔧 五、常用术语解释"></a>🔧 五、常用术语解释</h2><table><thead><tr><th>术语</th><th>含义</th></tr></thead><tbody><tr><td>Embedding</td><td>把文本&#x2F;图片转成向量的过程（用模型，比如 OpenAI Embedding API）</td></tr><tr><td>向量检索</td><td>基于向量间的距离做查找，找最相近的内容</td></tr><tr><td>Top-K 检索</td><td>找出与给定向量最近的前 K 条记录</td></tr><tr><td>余弦相似度</td><td>常见的向量相似度计算方法，衡量两个向量的角度差异</td></tr><tr><td>向量维度</td><td>向量的“长度”，比如 1536 维、768 维</td></tr></tbody></table><hr><h2 id="🧰-六、常见向量数据库（对-Java-友好度）"><a href="#🧰-六、常见向量数据库（对-Java-友好度）" class="headerlink" title="🧰 六、常见向量数据库（对 Java 友好度）"></a>🧰 六、常见向量数据库（对 Java 友好度）</h2><table><thead><tr><th>名称</th><th>是否开源</th><th>优点</th><th>Java 支持</th></tr></thead><tbody><tr><td><strong>Weaviate</strong></td><td>✅ 开源</td><td>REST&#x2F;gRPC 接口、开箱即用、文档全</td><td>✅（Spring AI 支持）</td></tr><tr><td><strong>Pinecone</strong></td><td>❌ 商业SaaS</td><td>稳定可靠、按量付费</td><td>✅（REST API）</td></tr><tr><td><strong>Milvus</strong></td><td>✅ 开源</td><td>国内支持好、性能强</td><td>✅（Java SDK）</td></tr><tr><td><strong>FAISS</strong></td><td>✅ 开源</td><td>本地部署快，适合小项目</td><td>❌ 需 Python&#x2F;封装服务</td></tr></tbody></table><hr><h2 id="📦-七、Java-使用"><a href="#📦-七、Java-使用" class="headerlink" title="📦 七、Java 使用"></a>📦 七、Java 使用</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 步骤 1：文本转向量（用 OpenAI embedding）</span></span><br><span class="line"><span class="type">float</span>[] vector = embeddingClient.embed(<span class="string">&quot;如何退货？&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 步骤 2：存入向量数据库</span></span><br><span class="line">weaviate.insert(<span class="keyword">new</span> <span class="title class_">VectorDocument</span>(<span class="string">&quot;id123&quot;</span>, <span class="string">&quot;退货流程是...&quot;</span>, vector));</span><br><span class="line"></span><br><span class="line"><span class="comment">// 步骤 3：用户提问，转向量，搜索 TopK</span></span><br><span class="line">List&lt;VectorDocument&gt; result = weaviate.search(vector, <span class="number">5</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 步骤 4：拼 Prompt，给 AI 生成答案</span></span><br><span class="line"><span class="type">String</span> <span class="variable">context</span> <span class="operator">=</span> result.stream().map(VectorDocument::getText).collect(Collectors.joining(<span class="string">&quot;\n&quot;</span>));</span><br></pre></td></tr></table></figure><hr><h2 id="✅-总结一句话："><a href="#✅-总结一句话：" class="headerlink" title="✅ 总结一句话："></a>✅ 总结一句话：</h2><p>向量数据库是为了解决“语义检索”问题的，它通过存储向量和计算相似度，让 AI 能在你自己的知识库里“找到最相关的内容”，是 RAG（检索增强生成）必备的技术基础。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;向量数据库（Vector Database）是近年来随着大语言模型（LLM）和语义搜索发展而火起来的一种新型数据库。它的目标是支持&lt;strong&gt;基于“语义相似度”的高效搜索&lt;/strong&gt;，与传统数据库按关键字精确匹配不同。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;🧠-一、</summary>
      
    
    
    
    <category term="Java" scheme="https://www.dreamlyn.cn/categories/Java/"/>
    
    
    <category term="Java" scheme="https://www.dreamlyn.cn/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>NAS使用SnappyMail搭建个人WebMail</title>
    <link href="https://www.dreamlyn.cn/1781251812.html"/>
    <id>https://www.dreamlyn.cn/1781251812.html</id>
    <published>2025-02-22T03:02:22.000Z</published>
    <updated>2025-08-28T06:29:42.882Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>在 NAS 上搭建个人的 WebMail 服务可以让我们通过浏览器随时随地管理邮件。本文将介绍如何使用 docker-compose 来搭建 SnappyMail 服务，SnappyMail相对于其他的 WebMail 客户端，对于多账号的支持更加友好。如图是配置好的snappymail截面。</p></blockquote><img src="https://img.dreamlyn.cn:8443/i/2025/03/06/144213.webp"><h1 id="什么是-SnappyMail"><a href="#什么是-SnappyMail" class="headerlink" title="什么是 SnappyMail"></a>什么是 SnappyMail</h1><p>SnappyMail 是一个开源的 WebMail 客户端，它是 RainLoop 的一个分支。它提供了现代化的界面和丰富的功能，支持多种邮件协议（IMAP&#x2F;SMTP），并且可以轻松地通过 Docker 部署。</p><h1 id="部署-SnappyMail"><a href="#部署-SnappyMail" class="headerlink" title="部署 SnappyMail"></a>部署 SnappyMail</h1><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p>首先创建项目目录并进入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p ~/docker/snappymail/snappymail</span><br><span class="line"><span class="built_in">cd</span> ~/docker/snappymail</span><br></pre></td></tr></table></figure><h2 id="创建配置文件"><a href="#创建配置文件" class="headerlink" title="创建配置文件"></a>创建配置文件</h2><p>创建 docker-compose.yml 文件：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">version:</span> <span class="string">&quot;2.1&quot;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">email:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">djmaze/snappymail</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">email</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PUID=1000</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PGID=1000</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">DEBUG=true</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./snappymail:/var/lib/snappymail</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;8888:8888&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">  <span class="attr">php-fpm-exporter:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">hipages/php-fpm_exporter:2.2.0</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">9253</span><span class="string">:9253</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PHP_FPM_SCRAPE_URI=tcp://email:9000/status</span></span><br><span class="line"><span class="attr">networks:</span></span><br><span class="line">  <span class="attr">default:</span></span><br><span class="line">    <span class="attr">external:</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">docker_default</span></span><br></pre></td></tr></table></figure><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><p>执行以下命令启动服务：</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建docker网络,如果已经有docker_default网络，则不需要。</span></span><br><span class="line">docker<span class="built_in"> network </span>create -d<span class="built_in"> bridge </span><span class="attribute">--attachable</span>=<span class="literal">true</span> docker_default</span><br><span class="line"><span class="comment"># 启动npm</span></span><br><span class="line">docker-compose up -d</span><br><span class="line"><span class="comment"># 查看启动日志</span></span><br><span class="line">docker-compose logs -f</span><br></pre></td></tr></table></figure><h1 id="配置-SnappyMail"><a href="#配置-SnappyMail" class="headerlink" title="配置 SnappyMail"></a>配置 SnappyMail</h1><ol><li>在~&#x2F;docker&#x2F;snappymail&#x2F;snappymail&#x2F;<em>data</em>&#x2F;admin_password.txt文件，文件中的内容就是默认的admin密码。</li><li>访问管理界面： http:&#x2F;&#x2F;你的IP:8888&#x2F;?admin（注意后面有个?admin）</li><li>默认管理员账号密码：admin&#x2F;（步骤1获取的密码）</li><li>首次登录后请修改管理员密码</li></ol><h2 id="添加邮件域名"><a href="#添加邮件域名" class="headerlink" title="添加邮件域名"></a>添加邮件域名</h2><ol><li>在管理界面中，点击 “域名” 菜单</li><li>点击 “添加域名” 按钮</li><li>填写你的邮件服务器信息：<ul><li>IMAP 服务器地址和端口</li><li>SMTP 服务器地址和端口</li><li>是否启用 SSL&#x2F;TLS</li></ul></li></ol><p>如图是我的配置：<br><img src="https://img.dreamlyn.cn:8443/i/2025/03/06/144448.webp"></p><h2 id="访问-WebMail"><a href="#访问-WebMail" class="headerlink" title="访问 WebMail"></a>访问 WebMail</h2><p>配置完成后，用户可以通过 http:&#x2F;&#x2F;你的IP:8888 访问 WebMail 界面，使用自己的邮箱账号和密码登录。</p><blockquote><p>注意url后面不带?admin，登录时使用的是自己邮箱的账号密码，不是刚才admin的密码。</p></blockquote><h1 id="安全建议"><a href="#安全建议" class="headerlink" title="安全建议"></a>安全建议</h1><ol><li>建议使用反向代理（如 Traefik）并配置 SSL 证书</li><li>修改默认管理员密码</li><li>限制管理界面的访问IP</li></ol><h1 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h1><h2 id="无法连接邮件服务器"><a href="#无法连接邮件服务器" class="headerlink" title="无法连接邮件服务器"></a>无法连接邮件服务器</h2><ul><li>检查邮件服务器地址和端口是否正确</li><li>确认服务器是否支持 SSL&#x2F;TLS</li><li>检查账号密码是否正确</li><li>某些邮件服务可能需要设置应用专用密码</li><li>配置过程中遇到问题的可以在评论区讨论</li></ul>]]></content>
    
    
    <summary type="html">使用 docker-compose 搭建 SnappyMail 个人 WebMail 服务</summary>
    
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/categories/nas/"/>
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/tags/nas/"/>
    
    <category term="网络" scheme="https://www.dreamlyn.cn/tags/network/"/>
    
    <category term="自建服务" scheme="https://www.dreamlyn.cn/tags/%E8%87%AA%E5%BB%BA%E6%9C%8D%E5%8A%A1/"/>
    
  </entry>
  
  <entry>
    <title>使用VirtualBox虚拟机安装群晖7.1系统</title>
    <link href="https://www.dreamlyn.cn/1751037144.html"/>
    <id>https://www.dreamlyn.cn/1751037144.html</id>
    <published>2024-04-03T03:10:00.000Z</published>
    <updated>2024-04-15T09:06:11.247Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>VirtualBox为开源软件，较Vmware更加轻量，在此推荐使用VirtualBox来安装群晖系统。<br>本文主要介绍群晖（DS920+）在VirtualBox虚拟机上的详细安装教程。 </p></blockquote><h1 id="下载并安装VirtualBox"><a href="#下载并安装VirtualBox" class="headerlink" title="下载并安装VirtualBox"></a>下载并安装VirtualBox</h1><p>到<a href="https://www.virtualbox.org/wiki/Downloads">VirtualBox官网</a>下载最新版的VirtualBox，安装时如图一路下一步即可。<br>看到如下界面表示安装完成。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/140039.webp"/><h1 id="下载群晖引导"><a href="#下载群晖引导" class="headerlink" title="下载群晖引导"></a>下载群晖引导</h1><p>在此给出目前最新版群晖引导的<a href="https://oss.dreamlyn.cn/nas/%E9%BB%91%E7%BE%A4%E6%99%96/arpl-zh_CN-1.1-beta2a.vmdk-flat.zip">下载地址</a>。</p><h1 id="添加虚拟机"><a href="#添加虚拟机" class="headerlink" title="添加虚拟机"></a>添加虚拟机</h1><p>如图在系统中找打合适的位置创建NAS目录，解压刚才下载的群晖引导，并将里面的内容拷贝到创建的目录。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/145132.webp"/><p>打开VirtualBox，点击<code>新建</code>创建虚拟机。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/145519.webp"/><p>如图，名字随便起，文件夹选择刚才创建的文件夹，类型选Linux，版本选Other Linux(64-bit)</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/150006.webp"/><p>硬件部分按需选择，这里我内存设置4G，cpu4核。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/150315.webp"/><p>虚拟硬盘处选择使用已有的虚拟硬盘文件。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/150742.webp"/><p>在弹出的框中点击注册</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/151415.webp"/><p>随后找到先前创建的目录并选择<code>arpl.vmdk</code></p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/151120.webp"/><p>点击完成</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/151515.webp"/><p>随后再对虚拟机进行配置，点击设置。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/152313.webp"/><p>选择存储后，点击添加虚拟硬盘，这块新加的虚拟硬盘是真正安装存储群晖系统的地方，应适当大一些。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/153746.webp"/><p>点击创建，选择VDI(VirtualBox磁盘映像)并点击下一步。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/152701.webp"/><p>点击下一步</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/152838.webp"/><p>设置磁盘大小并点击完成。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/152924.webp"/><p>选中刚才创建的磁盘并点击选择。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/153109.webp"/><p>点击网络，将网络连接设置成桥接模式。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/154720.webp"/><p>随后点击确定并在主界面点击启动</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/153324.webp"/><h1 id="配置并启动引导"><a href="#配置并启动引导" class="headerlink" title="配置并启动引导"></a>配置并启动引导</h1><p>点击启动后，稍等片刻，在如下界面按下回车键开始对引导进行配置。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/155113.webp"/><p>看到如下配置后，说明引导已正常启动。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/155426.webp"/><p>我们在浏览器中输入红框框出来的地址，<code>192.168.31.119:7681</code>进入如下界面。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/155643.webp"/><p>选中选择型号并回车，在转到的界面中选择DS920+</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/155737.webp"/><p>随后选择版本，这里选择42661</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/163532.webp"/><p>选择SN码，直接选择生成随机SN。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/160435.webp"/><p>在插件中选择添加插件并添加<code>cpuinfo</code>插件</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/160047.webp"/><p>插件的加载参数为空，确认</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/160126.webp"/><p>随后直接选中编译引导并回车，待编译完成后选中启动并回车。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/163703.webp"/><h1 id="安装群晖系统"><a href="#安装群晖系统" class="headerlink" title="安装群晖系统"></a>安装群晖系统</h1><p>下载群晖助手并安装启动，<a href="https://template-mine.oss-cn-beijing.aliyuncs.com/nas/blog/synology-assistant-7.0.3-50049.exe">下载地址</a></p><p>如图，扫描群晖系统（期间可能需要关闭防火墙）。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/164132.webp"/><p>找到DSM未安装的那个就是刚才用虚拟机安装的NAS，我们用浏览器访问对应的IP地址<code>http://192.168.31.119:5000/</code>进入如下界面,点击安装。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/164336.webp"/><p>从以下链接下载DSM系统</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://global.synologydownload.com/download/DSM/release/<span class="number">7</span>.<span class="number">1</span>/<span class="number">42661</span>-<span class="number">1</span>/DSM_DS920%<span class="number">2</span>B_42661.pat</span><br></pre></td></tr></table></figure><p>点击浏览，并选择刚才下载的DSM系统，点击下一步。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/164819.webp"/><p>点继续。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/164847.webp"/><p>随后进入安装界面，待进度走到100％后，我们就完成了虚拟机中群晖系统的安装。</p><img src="https://img.dreamlyn.cn:8443/i/2024/04/15/164954.webp"/>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;VirtualBox为开源软件，较Vmware更加轻量，在此推荐使用VirtualBox来安装群晖系统。&lt;br&gt;本文主要介绍群晖（DS920+）在VirtualBox虚拟机上的详细安装教程。 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;下</summary>
      
    
    
    
    <category term="NAS从零开始" scheme="https://www.dreamlyn.cn/categories/fromzero/"/>
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/tags/nas/"/>
    
  </entry>
  
  <entry>
    <title>网络文件夹目前是以其他用户名和密码进行映射的</title>
    <link href="https://www.dreamlyn.cn/2453996968.html"/>
    <id>https://www.dreamlyn.cn/2453996968.html</id>
    <published>2024-03-12T08:39:26.000Z</published>
    <updated>2024-04-03T02:58:17.607Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>在使用局域网内的映射盘来访问NAS的共享文件夹时，发现无法映射成功，提示指定的网络文件夹目前是以其他用户名和密码进行映射的。在查找相关资料后找到问题的解决办法，在此做下记录。</p></blockquote><img src="https://img.dreamlyn.cn:8443/i/2024/03/12/164219.webp"><p>只需要以下两条命令即可解决。</p><h1 id="查看windows现有的映射"><a href="#查看windows现有的映射" class="headerlink" title="查看windows现有的映射"></a>查看windows现有的映射</h1><p>打开windows的命令提示符，输入<code>net use</code>命令</p><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">C:\Users\lyn\Desktop</span><br><span class="line">$ net <span class="keyword">use</span></span><br><span class="line"><span class="keyword">New</span> connections will be remembered.</span><br><span class="line">Status       Local     Remote                    Network</span><br><span class="line"></span><br><span class="line"><span class="comment">-------------------------------------------------------------------------------</span></span><br><span class="line">OK           O:        \\<span class="number">192.168</span>.<span class="number">31.206</span>\视频存储     Microsoft Windows Network</span><br><span class="line">The command completed successfully.</span><br></pre></td></tr></table></figure><h1 id="删除现有的映射"><a href="#删除现有的映射" class="headerlink" title="删除现有的映射"></a>删除现有的映射</h1><figure class="highlight livescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">C:<span class="string">\Users\lyn\Desktop</span></span><br><span class="line">$ net use * /<span class="keyword">delete</span></span><br><span class="line">You have these remote connections:</span><br><span class="line"></span><br><span class="line">    O:              <span class="string">\\192.168.31.206\视频存储</span></span><br><span class="line">Continuing will cancel the connections.</span><br><span class="line"></span><br><span class="line">Do you want <span class="keyword">to</span> <span class="keyword">continue</span> this operation? (Y/N) [N]:</span><br></pre></td></tr></table></figure><p>然后输入<code>y</code>回车就可以了</p>]]></content>
    
    
    <summary type="html">在使用局域网内的映射盘来访问NAS的共享文件夹时，发现无法映射成功，提示指定的网络文件夹目前是以其他用户名和密码进行映射的。在查找相关资料后找到问题的解决办法，在此做下记录。</summary>
    
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/categories/nas/"/>
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/tags/nas/"/>
    
    <category term="网络" scheme="https://www.dreamlyn.cn/tags/network/"/>
    
  </entry>
  
  <entry>
    <title>Nastool中IYUU插件修复</title>
    <link href="https://www.dreamlyn.cn/4049218886.html"/>
    <id>https://www.dreamlyn.cn/4049218886.html</id>
    <published>2024-03-08T03:02:22.000Z</published>
    <updated>2024-04-03T02:58:31.916Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>nastool中的IYUU插件因为域名问题无法正常使用，在此给出最新版的nastool中修复IYUU插件的方法。</p></blockquote><p>不说废话，直接上代码</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"># 宿主机</span></span><br><span class="line">docker exec -it <span class="params">&lt;container_id&gt;</span> <span class="keyword">/bin/</span>bash</span><br><span class="line"><span class="meta"># 容器内</span></span><br><span class="line">sudo vi <span class="keyword">/nas-tools/</span>app<span class="keyword">/plugins/</span>modules<span class="keyword">/iyuu/</span>iyuu_helper.py</span><br><span class="line"><span class="meta"># 修改 _api_base 为 http:<span class="comment">//ufhy.top/%s  后保存即可</span></span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;nastool中的IYUU插件因为域名问题无法正常使用，在此给出最新版的nastool中修复IYUU插件的方法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不说废话，直接上代码&lt;/p&gt;
&lt;figure class=&quot;highlight dts&quot;&gt;&lt;</summary>
      
    
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/categories/nas/"/>
    
    
    <category term="NAS技术" scheme="https://www.dreamlyn.cn/tags/nas/"/>
    
    <category term="docker" scheme="https://www.dreamlyn.cn/tags/docker/"/>
    
    <category term="影音系统" scheme="https://www.dreamlyn.cn/tags/video/"/>
    
    <category term="PT" scheme="https://www.dreamlyn.cn/tags/PT/"/>
    
  </entry>
  
  <entry>
    <title>linux文件的特殊权限</title>
    <link href="https://www.dreamlyn.cn/1129065927.html"/>
    <id>https://www.dreamlyn.cn/1129065927.html</id>
    <published>2024-03-05T02:05:59.000Z</published>
    <updated>2024-03-05T04:36:34.528Z</updated>
    
    <content type="html"><![CDATA[<p>在此贴出Linux文件的特殊权限的相关资料</p><h1 id="Set-UID"><a href="#Set-UID" class="headerlink" title="Set UID"></a>Set UID</h1><p>当 s 这个标志出现在文件拥有者的 x 权限上时，例如刚刚提到的 &#x2F;usr&#x2F;bin&#x2F;passwd 这个文件的权限状态：“-rwsr-xr-x”，此时就被称为 Set UID，简称为 SUID 的特殊权限。 那么SUID的权限对于一个文件的特殊功能是什么呢？基本上SUID有这样的限制与功能：</p><ul><li>SUID 权限仅对二进制程序（binary program）有效；</li><li>执行者对于该程序需要具有 x 的可执行权限；</li><li>本权限仅在执行该程序的过程中有效 （run-time）；</li><li>执行者将具有该程序拥有者 （owner） 的权限。</li></ul><blockquote><p>举个例子，我们的 Linux 系统中，所有帐号的密码都记录在 &#x2F;etc&#x2F;shadow 这个文件里面，这个文件的权限为：“———- 1 root root”，意思是这个文件仅有root可读且仅有root可以强制写入而已。<br>但是我们的普通用户在修改密码是也需要对这个文件进行写入，那么具体是如何做到的呢？</p></blockquote><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">我们给passwd明明添加SUID权限，并且给普通用户执行权限，那么普通用户在执行这条指令时，就拥有了命令所有者（也就是root）的权限，那么自然而然就可以修改<span class="regexp">/usr/</span>bin/passwd这个文件了。</span><br></pre></td></tr></table></figure><h1 id="Set-GID"><a href="#Set-GID" class="headerlink" title="Set GID"></a>Set GID</h1><p>当 s 标志在文件拥有者的 x 项目为 SUID，那 s 在群组的 x 时则称为 Set GID</p><p>与 SUID 不同的是，SGID 可以针对文件或目录来设置！如果是对文件来说， SGID 有如下的功能：</p><ul><li>SGID 对二进制程序有用；</li><li>程序执行者对于该程序来说，需具备 x 的权限；</li><li>执行者在执行的过程中将会获得该程序群组的支持！</li></ul><p>举例来说.</p><figure class="highlight tap"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@study ~]<span class="comment"># ls -l /usr/bin/locate</span></span><br><span class="line">-rwx--s--x.<span class="number"> 1 </span>root slocate<span class="number"> 40496 </span>Jun<span class="number"> 10 </span><span class="number"> 2014 </span>/usr/bin/locate</span><br></pre></td></tr></table></figure><p>上面的 &#x2F;usr&#x2F;bin&#x2F;locate 这个程序可以去搜寻 &#x2F;var&#x2F;lib&#x2F;mlocate&#x2F;mlocate.db 这个文件的内容， 但是mlocate.db 的权限如下：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="meta">@study</span> <span class="operator">~</span>]# ll <span class="regexp">/usr/</span>bin<span class="regexp">/locate /</span><span class="keyword">var</span><span class="regexp">/lib/</span>mlocate<span class="operator">/</span>mlocate.db</span><br><span class="line"><span class="operator">-</span>rwx<span class="operator">--</span>s<span class="operator">--</span>x. <span class="number">1</span> root slocate   <span class="number">40496</span> <span class="type">Jun</span> <span class="number">10</span>  <span class="number">2014</span> <span class="regexp">/usr/</span>bin<span class="operator">/</span>locate</span><br><span class="line"><span class="operator">-</span>rw<span class="operator">-</span>r<span class="operator">-----</span>. <span class="number">1</span> root slocate <span class="number">2349055</span> <span class="type">Jun</span> <span class="number">15</span> <span class="number">03</span>:<span class="number">44</span> <span class="regexp">/var/</span>lib<span class="regexp">/mlocate/</span>mlocate.db</span><br></pre></td></tr></table></figure><p>与 SUID 非常的类似，若我使用普通帐号去执行<code>locate</code>时，那账号会取得<code>slocate</code>群组的支持， 因此就能够去读取<code>mlocate.db</code>了</p><p>除了可执行程序外，<code>SGID</code>也能用在目录上，这也是非常常见的一种用途！ 当一个目录设置了<code>SGID</code>权限后，他将具有如下的功能：</p><ul><li>使用者若对于此目录具有 r 与 x 的权限时，该使用者能够进入此目录；</li><li>使用者在此目录下的有效群组（effective group）将会变成该目录的群组；</li><li>用途：若使用者在此目录下具有 w 的权限（可以新建文件），则使用者所创建的新文件，该新文件的群组与此目录的群组相同。</li></ul><h1 id="Sticky-Bit"><a href="#Sticky-Bit" class="headerlink" title="Sticky Bit"></a>Sticky Bit</h1><p>Sticky Bit,也就是<code>SBIT</code>目前只针对目录有效，对于文件已经没有效果了。SBIT 对于目录的作用是：</p><ul><li>当使用者对于此目录具有 w, x 权限，亦即具有写入的权限时；</li><li>当使用者在该目录下创建文件或目录时，仅有自己与 root 才有权力删除该文件</li></ul><p>换句话说：当甲这个使用者于 A 目录是具有群组或其他人的身份，并且拥有该目录 w 的权限， 这表示“甲使用者对该目录内任何人创建的目录或文件均可进行 “删除&#x2F;更名&#x2F;搬移” 等动作。” 不过，如果将 A 目录加上了 SBIT 的权限项目时， 则甲只能够针对自己创建的文件或目录进行删除&#x2F;更名&#x2F;移动等动作，而无法删除他人的文件。</p><p>举例来说，我们的 &#x2F;tmp 本身的权限是“drwxrwxrwt”， 在这样的权限内容下，任何人都可以在 &#x2F;tmp 内新增、修改文件，但仅有该文件&#x2F;目录创建者与 root 能够删除自己的目录或文件。这个特性也是挺重要的啊！你可以这样做个简单的测试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">以 root 登陆系统，并且进入 /tmp 当中；</span><br><span class="line"><span class="built_in">touch</span> <span class="built_in">test</span>，并且更改 <span class="built_in">test</span> 权限成为 777 ；</span><br><span class="line">以一般使用者登陆，并进入 /tmp；</span><br><span class="line">尝试删除 <span class="built_in">test</span> 这个文件！</span><br></pre></td></tr></table></figure><h1 id="UID-SGID-SBIT-权限设置"><a href="#UID-SGID-SBIT-权限设置" class="headerlink" title="UID&#x2F;SGID&#x2F;SBIT 权限设置"></a>UID&#x2F;SGID&#x2F;SBIT 权限设置</h1><p>首先记住下面四个数字。</p><figure class="highlight basic"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">4 </span>为 SUID</span><br><span class="line"><span class="symbol">2 </span>为 SGID</span><br><span class="line"><span class="symbol">1 </span>为 SBIT</span><br></pre></td></tr></table></figure><p>假设要将一个文件权限改为“-rwsr-xr-x”时，由于 s 在使用者权限中，所以是 SUID ，因此， 在原先的 755 之前还要加上 4 ，也就是：“ chmod 4755 filename ”来设置！</p><blockquote><p>注意： SUID不是用在目录上，SBIT不是用在文件上的</p></blockquote><p>除了数字法之外，我们也可以通过符号法来处理！其中 SUID 为 u+s ，而 SGID 为 g+s ，SBIT 则是 o+t。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在此贴出Linux文件的特殊权限的相关资料&lt;/p&gt;
&lt;h1 id=&quot;Set-UID&quot;&gt;&lt;a href=&quot;#Set-UID&quot; class=&quot;headerlink&quot; title=&quot;Set UID&quot;&gt;&lt;/a&gt;Set UID&lt;/h1&gt;&lt;p&gt;当 s 这个标志出现在文件拥有者的 x 权</summary>
      
    
    
    
    <category term="Linux基础" scheme="https://www.dreamlyn.cn/categories/linux/"/>
    
    
    <category term="Linux基础" scheme="https://www.dreamlyn.cn/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>linux文件的隐藏属性</title>
    <link href="https://www.dreamlyn.cn/1129065926.html"/>
    <id>https://www.dreamlyn.cn/1129065926.html</id>
    <published>2024-03-05T02:05:59.000Z</published>
    <updated>2024-03-05T04:32:50.903Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>我们在使用NAS时，有时会遇到文件无法删除的情况(前提是已经获取了root权限)<br>遇到这种情况我们应该考虑linux隐藏属性的问题。</p></blockquote><p>尝试使用如下命令来删除隐藏属性，随后再删除文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chattr -ai 文件名</span><br><span class="line"><span class="built_in">rm</span> -rf 文件名</span><br></pre></td></tr></table></figure><p>同时贴出Linux隐藏属性的相关资料。</p><h1 id="chattr-（设置文件隐藏属性）"><a href="#chattr-（设置文件隐藏属性）" class="headerlink" title="chattr （设置文件隐藏属性）"></a>chattr （设置文件隐藏属性）</h1><figure class="highlight autoit"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="symbol">@study</span> ~]<span class="meta"># chattr [+-=][ASacdistu] 文件或目录名称</span></span><br><span class="line">选项与参数：</span><br><span class="line">+   ：增加某一个特殊参数，其他原本存在参数则不动。</span><br><span class="line">-   ：移除某一个特殊参数，其他原本存在参数则不动。</span><br><span class="line">=   ：设置一定，且仅有后面接的参数</span><br><span class="line"></span><br><span class="line">A  ：当设置了 A 这个属性时，若你有存取此文件（或目录）时，他的存取时间 atime 将不会被修改，</span><br><span class="line">     可避免 I/O 较慢的机器过度的存取磁盘。（目前建议使用文件系统挂载参数处理这个项目）</span><br><span class="line">S  ：一般文件是非同步写入磁盘的（原理请参考前一章sync的说明），如果加上 S 这个属性时，</span><br><span class="line">     当你进行任何文件的修改，该更动会“同步”写入磁盘中。</span><br><span class="line">a  ：当设置 a 之后，这个文件将只能增加数据，而不能删除也不能修改数据，只有root 才能设置这属性</span><br><span class="line">c  ：这个属性设置之后，将会自动的将此文件“压缩”，在读取的时候将会自动解压缩，</span><br><span class="line">     但是在储存的时候，将会先进行压缩后再储存（看来对于大文件似乎蛮有用的！）</span><br><span class="line">d  ：当 dump 程序被执行的时候，设置 d 属性将可使该文件（或目录）不会被 dump 备份</span><br><span class="line">i  ：这个 i 可就很厉害了！他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据！”</span><br><span class="line">     对于系统安全性有相当大的助益！只有 root 能设置此属性</span><br><span class="line">s  ：当文件设置了 s 属性时，如果这个文件被删除，他将会被完全的移除出这个硬盘空间，</span><br><span class="line">     所以如果误删了，完全无法救回来了喔！</span><br><span class="line">u  ：与 s 相反的，当使用 u 来设置文件时，如果该文件被删除了，则数据内容其实还存在磁盘中，</span><br><span class="line">     可以使用来救援该文件喔！</span><br><span class="line">注意<span class="number">1</span>：属性设置常见的是 a 与 i 的设置值，而且很多设置值必须要身为 root 才能设置</span><br><span class="line">注意<span class="number">2</span>：xfs 文件系统仅支持 AadiS 而已</span><br><span class="line"></span><br><span class="line">范例：请尝试到/tmp下面创建文件，并加入 i 的参数，尝试删除看看。</span><br><span class="line">[root<span class="symbol">@study</span> ~]<span class="meta"># cd /tmp</span></span><br><span class="line">[root<span class="symbol">@study</span> tmp]<span class="meta"># touch attrtest     &lt;==创建一个空文件</span></span><br><span class="line">[root<span class="symbol">@study</span> tmp]<span class="meta"># chattr +i attrtest &lt;==给予 i 的属性</span></span><br><span class="line">[root<span class="symbol">@study</span> tmp]<span class="meta"># rm attrtest        &lt;==尝试删除看看</span></span><br><span class="line">rm: remove regular empty file `attrtest<span class="string">&#x27;? y</span></span><br><span class="line"><span class="string">rm: cannot remove `attrtest&#x27;</span>: Operation <span class="literal">not</span> permitted</span><br><span class="line"><span class="meta"># 看到了吗？呼呼！连 root 也没有办法将这个文件删除呢！赶紧解除设置！</span></span><br><span class="line"></span><br><span class="line">范例：请将该文件的 i 属性取消！</span><br><span class="line">[root<span class="symbol">@study</span> tmp]<span class="meta"># chattr -i attrtest</span></span><br></pre></td></tr></table></figure><h1 id="lsattr-（显示文件隐藏属性）"><a href="#lsattr-（显示文件隐藏属性）" class="headerlink" title="lsattr （显示文件隐藏属性）"></a>lsattr （显示文件隐藏属性）</h1><figure class="highlight ldif"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[root@study ~]<span class="comment"># lsattr [-adR] 文件或目录</span></span><br><span class="line">选项与参数：</span><br><span class="line"><span class="literal">-</span>a ：将隐藏文件的属性也秀出来；</span><br><span class="line"><span class="literal">-</span>d ：如果接的是目录，仅列出目录本身的属性而非目录内的文件名；</span><br><span class="line"><span class="literal">-</span>R ：连同子目录的数据也一并列出来！ </span><br><span class="line"></span><br><span class="line">[root@study tmp]<span class="comment"># chattr +aiS attrtest</span></span><br><span class="line">[root@study tmp]<span class="comment"># lsattr attrtest</span></span><br><span class="line"><span class="literal">-</span>-S-ia---------- attrtest</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;我们在使用NAS时，有时会遇到文件无法删除的情况(前提是已经获取了root权限)&lt;br&gt;遇到这种情况我们应该考虑linux隐藏属性的问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;尝试使用如下命令来删除隐藏属性，随后再删除文件&lt;/p&gt;
&lt;figu</summary>
      
    
    
    
    <category term="Linux基础" scheme="https://www.dreamlyn.cn/categories/linux/"/>
    
    
    <category term="Linux基础" scheme="https://www.dreamlyn.cn/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>个人下载记录</title>
    <link href="https://www.dreamlyn.cn/1975775891.html"/>
    <id>https://www.dreamlyn.cn/1975775891.html</id>
    <published>2024-03-03T12:08:09.000Z</published>
    <updated>2024-03-06T00:47:12.408Z</updated>
    
    <content type="html"><![CDATA[<h1 id="安装常用"><a href="#安装常用" class="headerlink" title="安装常用"></a>安装常用</h1><h2 id="cmder"><a href="#cmder" class="headerlink" title="cmder"></a>cmder</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>blog/cmder.zip</span><br></pre></td></tr></table></figure><h2 id="all-in-one"><a href="#all-in-one" class="headerlink" title="all-in-one"></a>all-in-one</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>docker/all-<span class="keyword">in</span>-one.zip</span><br></pre></td></tr></table></figure><h2 id="media"><a href="#media" class="headerlink" title="media"></a>media</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>docker/media.zip</span><br></pre></td></tr></table></figure><h2 id="docker-compose"><a href="#docker-compose" class="headerlink" title="docker-compose"></a>docker-compose</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>blog/docker-compose</span><br></pre></td></tr></table></figure><h2 id="synology-assistant"><a href="#synology-assistant" class="headerlink" title="synology assistant"></a>synology assistant</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/blog/synology-assistant-<span class="number">7</span>.<span class="number">0</span>.<span class="number">3</span>-<span class="number">50049</span>.exe</span><br></pre></td></tr></table></figure><h2 id="Clash-For-Windows"><a href="#Clash-For-Windows" class="headerlink" title="Clash For Windows"></a>Clash For Windows</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/blog/Clash.for.Windows-<span class="number">0</span>.<span class="number">20</span>.<span class="number">39</span>-win.<span class="number">7</span>z</span><br></pre></td></tr></table></figure><h1 id="旁路由"><a href="#旁路由" class="headerlink" title="旁路由"></a>旁路由</h1><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleachwrt-plus-<span class="number">20240101</span>-x86-<span class="number">64</span>-generic-squashfs-combined-efi.img</span><br></pre></td></tr></table></figure><h2 id="群晖"><a href="#群晖" class="headerlink" title="群晖"></a>群晖</h2><p>精简版</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleach-mini-<span class="number">20230106</span>-openwrt-x86-<span class="number">64</span>-generic-squashfs-combined-efi.img.gz</span><br><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleachwrt-mini-<span class="number">20240101</span>-x86-<span class="number">64</span>-generic-squashfs-combined-efi.img.gz</span><br></pre></td></tr></table></figure><p>大而全版</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleach-plus-<span class="number">20230106</span>-openwrt-x86-<span class="number">64</span>-generic-squashfs-combined-efi.img.gz</span><br><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleachwrt-plus-<span class="number">20240101</span>-x86-<span class="number">64</span>-generic-squashfs-combined-efi.img.gz</span><br></pre></td></tr></table></figure><h2 id="威联通"><a href="#威联通" class="headerlink" title="威联通"></a>威联通</h2><p>精简版</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleach-mini-<span class="number">20230106</span>-openwrt-x86-<span class="number">64</span>-generic-squashfs-combined-efi.vmdk</span><br><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleachwrt-mini-<span class="number">20240101</span>-x86-<span class="number">64</span>-generic-squashfs-combined-efi.vmdk</span><br></pre></td></tr></table></figure><p>大而全版</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleach-plus-<span class="number">20230106</span>-openwrt-x86-<span class="number">64</span>-generic-squashfs-combined-efi.vmdk</span><br><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/openwrt/bleachwrt-plus-<span class="number">20240101</span>-x86-<span class="number">64</span>-generic-squashfs-combined-efi.vmdk</span><br></pre></td></tr></table></figure><h1 id="R2S"><a href="#R2S" class="headerlink" title="R2S"></a>R2S</h1><h2 id="烧录工具"><a href="#烧录工具" class="headerlink" title="烧录工具"></a>烧录工具</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/r2s/balenaEtcher-Portable-<span class="number">1</span>.<span class="number">18</span>.<span class="number">11</span>.exe</span><br></pre></td></tr></table></figure><h2 id="固件"><a href="#固件" class="headerlink" title="固件"></a>固件</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/r2s/r2s.img.gz</span><br><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/r2s/FriendlyWRT-<span class="number">2020</span>-<span class="number">07</span>-<span class="number">04</span>-<span class="number">935</span>c67b-ROM.zip</span><br></pre></td></tr></table></figure><h1 id="用户软件"><a href="#用户软件" class="headerlink" title="用户软件"></a>用户软件</h1><h2 id="DSFile"><a href="#DSFile" class="headerlink" title="DSFile"></a>DSFile</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>app/DSfile.apk</span><br></pre></td></tr></table></figure><h2 id="DSVideo"><a href="#DSVideo" class="headerlink" title="DSVideo"></a>DSVideo</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>app/DSVideo.apk</span><br></pre></td></tr></table></figure><h2 id="Jellyfin-Android"><a href="#Jellyfin-Android" class="headerlink" title="Jellyfin Android"></a>Jellyfin Android</h2><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https:<span class="regexp">//</span>oss.dreamlyn.cn<span class="regexp">/nas/</span>app/Jellyfin.apk</span><br></pre></td></tr></table></figure><h2 id="Jellyfin-TV"><a href="#Jellyfin-TV" class="headerlink" title="Jellyfin TV"></a>Jellyfin TV</h2><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">https</span>://oss.dreamlyn.cn/nas/app/jellyfin-androidtv-v0.<span class="number">16</span>.<span class="number">4</span>-release.apk</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;安装常用&quot;&gt;&lt;a href=&quot;#安装常用&quot; class=&quot;headerlink&quot; title=&quot;安装常用&quot;&gt;&lt;/a&gt;安装常用&lt;/h1&gt;&lt;h2 id=&quot;cmder&quot;&gt;&lt;a href=&quot;#cmder&quot; class=&quot;headerlink&quot; title=&quot;cmder&quot;&gt;</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>个人Docker镜像记录</title>
    <link href="https://www.dreamlyn.cn/703771860.html"/>
    <id>https://www.dreamlyn.cn/703771860.html</id>
    <published>2024-03-02T02:39:58.000Z</published>
    <updated>2024-03-02T02:44:30.969Z</updated>
    
    <content type="html"><![CDATA[<h1 id="登录"><a href="#登录" class="headerlink" title="登录"></a>登录</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker login --username=周易大师李亚楠 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span></span><br><span class="line">docker logout registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span></span><br><span class="line">docker image <span class="keyword">ls</span> | <span class="keyword">grep</span> phpmyadmin</span><br></pre></td></tr></table></figure><h1 id="DDSN-GO"><a href="#DDSN-GO" class="headerlink" title="DDSN-GO"></a>DDSN-GO</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> a5c5b90945d8 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/ddns-<span class="keyword">go</span>:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/ddns-<span class="keyword">go</span>:latest</span><br></pre></td></tr></table></figure><h1 id="Frp"><a href="#Frp" class="headerlink" title="Frp"></a>Frp</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">846</span>bd5c0d1ef registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/frpc:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/frpc:latest</span><br></pre></td></tr></table></figure><h1 id="Zerotier"><a href="#Zerotier" class="headerlink" title="Zerotier"></a>Zerotier</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> fa4e316b03c7 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/zerotier:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/zerotier:latest</span><br></pre></td></tr></table></figure><h1 id="MySQL"><a href="#MySQL" class="headerlink" title="MySQL"></a>MySQL</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">7484689</span>f290f registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/mysq<span class="variable">l:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/mysq<span class="variable">l:latest</span></span><br></pre></td></tr></table></figure><h1 id="postgres"><a href="#postgres" class="headerlink" title="postgres"></a>postgres</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">664</span>ff9e724c9 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/postgre<span class="variable">s:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/postgre<span class="variable">s:latest</span></span><br></pre></td></tr></table></figure><h1 id="redis"><a href="#redis" class="headerlink" title="redis"></a>redis</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">1319</span>b1eaa0b7 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/<span class="keyword">redi</span><span class="variable">s:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/<span class="keyword">redi</span><span class="variable">s:latest</span></span><br></pre></td></tr></table></figure><h1 id="traefik"><a href="#traefik" class="headerlink" title="traefik"></a>traefik</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> d3cd2c35d32c registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/traefik:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/traefik:latest</span><br></pre></td></tr></table></figure><h1 id="npm"><a href="#npm" class="headerlink" title="npm"></a>npm</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">9</span>cb216c905cf registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/npm:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/npm:latest</span><br></pre></td></tr></table></figure><h1 id="portainer"><a href="#portainer" class="headerlink" title="portainer"></a>portainer</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> b9c565f94ccc registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/portainer:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/portainer:latest</span><br></pre></td></tr></table></figure><h1 id="webstack"><a href="#webstack" class="headerlink" title="webstack"></a>webstack</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">08</span>b152afcfae registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/webstack:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/webstack:latest</span><br></pre></td></tr></table></figure><h1 id="van-nav"><a href="#van-nav" class="headerlink" title="van-nav"></a>van-nav</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">804</span>f1e182b52 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/van-na<span class="variable">v:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/van-na<span class="variable">v:latest</span></span><br></pre></td></tr></table></figure><h1 id="wordpress"><a href="#wordpress" class="headerlink" title="wordpress"></a>wordpress</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">7484689</span>f290f registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/wordpres<span class="variable">s:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/wordpres<span class="variable">s:latest</span></span><br></pre></td></tr></table></figure><h1 id="siyuan"><a href="#siyuan" class="headerlink" title="siyuan"></a>siyuan</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">7484689</span>f290f registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/siyuan:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/siyuan:latest</span><br></pre></td></tr></table></figure><h1 id="memos"><a href="#memos" class="headerlink" title="memos"></a>memos</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> f930acc56434 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/memo<span class="variable">s:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/memo<span class="variable">s:latest</span></span><br></pre></td></tr></table></figure><h1 id="transmission"><a href="#transmission" class="headerlink" title="transmission"></a>transmission</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">1</span>c4f6d9ec771 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/transmission:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/transmission:latest</span><br></pre></td></tr></table></figure><h1 id="qbittorrent"><a href="#qbittorrent" class="headerlink" title="qbittorrent"></a>qbittorrent</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> ed2ca1763e44 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/qbittorren<span class="variable">t:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/qbittorren<span class="variable">t:latest</span></span><br></pre></td></tr></table></figure><h1 id="qbittorrentee"><a href="#qbittorrentee" class="headerlink" title="qbittorrentee"></a>qbittorrentee</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">826</span>cad93f881 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/qbittorrentee:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/qbittorrentee:latest</span><br></pre></td></tr></table></figure><h1 id="aria2"><a href="#aria2" class="headerlink" title="aria2"></a>aria2</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">997</span>da399fc5d registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/aria2:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/aria2:latest</span><br></pre></td></tr></table></figure><h1 id="ariang"><a href="#ariang" class="headerlink" title="ariang"></a>ariang</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">9</span>a4546808b79 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/arian<span class="variable">g:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/arian<span class="variable">g:latest</span></span><br></pre></td></tr></table></figure><h1 id="jackett"><a href="#jackett" class="headerlink" title="jackett"></a>jackett</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">3</span>ca4d5f70255 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/jacket<span class="variable">t:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/jacket<span class="variable">t:latest</span></span><br></pre></td></tr></table></figure><h1 id="chinesesubfinder"><a href="#chinesesubfinder" class="headerlink" title="chinesesubfinder"></a>chinesesubfinder</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> b9eac1620d63 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/chinesesubfinder:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/chinesesubfinder:latest</span><br></pre></td></tr></table></figure><h1 id="nas-tools"><a href="#nas-tools" class="headerlink" title="nas-tools"></a>nas-tools</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> cc67765e2de7 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/nas-tool<span class="variable">s:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/nas-tool<span class="variable">s:latest</span></span><br></pre></td></tr></table></figure><h1 id="flaresolverr"><a href="#flaresolverr" class="headerlink" title="flaresolverr"></a>flaresolverr</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">674</span>cc1916840 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/flaresolverr:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/flaresolverr:latest</span><br></pre></td></tr></table></figure><h1 id="jellyfin"><a href="#jellyfin" class="headerlink" title="jellyfin"></a>jellyfin</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">544</span>d674913bc registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/jellyfin:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/jellyfin:latest</span><br></pre></td></tr></table></figure><h1 id="emby"><a href="#emby" class="headerlink" title="emby"></a>emby</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">2552</span>cbe87d6d registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/emby:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/emby:latest</span><br></pre></td></tr></table></figure><h1 id="plex"><a href="#plex" class="headerlink" title="plex"></a>plex</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> d95211145e62 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/plex:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/plex:latest</span><br></pre></td></tr></table></figure><h1 id="gitea"><a href="#gitea" class="headerlink" title="gitea"></a>gitea</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">71</span>d4bdcd6398 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/gite<span class="variable">a:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/gite<span class="variable">a:latest</span></span><br></pre></td></tr></table></figure><h1 id="phpmyadmin"><a href="#phpmyadmin" class="headerlink" title="phpmyadmin"></a>phpmyadmin</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> a9695a48170e registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/phpmyadmin:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/phpmyadmin:latest</span><br></pre></td></tr></table></figure><h1 id="gpt"><a href="#gpt" class="headerlink" title="gpt"></a>gpt</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> a9695a48170e registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/phpmyadmin:latest</span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/phpmyadmin:latest</span><br></pre></td></tr></table></figure><h1 id="baota"><a href="#baota" class="headerlink" title="baota"></a>baota</h1><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">tag</span> <span class="number">621</span>e17613692 registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/baot<span class="variable">a:latest</span></span><br><span class="line">docker push registry.<span class="keyword">cn</span>-hangzhou.aliyuncs.<span class="keyword">com</span>/lyn_nas/baot<span class="variable">a:latest</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;登录&quot;&gt;&lt;a href=&quot;#登录&quot; class=&quot;headerlink&quot; title=&quot;登录&quot;&gt;&lt;/a&gt;登录&lt;/h1&gt;&lt;figure class=&quot;highlight vim&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span cl</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>Hexo配合Jenkins自动部署博客</title>
    <link href="https://www.dreamlyn.cn/3652362386.html"/>
    <id>https://www.dreamlyn.cn/3652362386.html</id>
    <published>2024-03-01T07:11:40.000Z</published>
    <updated>2024-03-02T02:41:59.667Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>上一篇文章我描述了怎么把写的文章自动推送到OSS，但是还存在一个问题，我的博客代码是托管在自己部署的gitea服务器上的，每次写完文章都需要自动部署，然后提交代码。还是不够方便，那么有没有一种方式能提交代码后自动推送oss呢？</p></blockquote><blockquote><p>本文就介绍一种利用Jenkins来自动拉取提交的代码，然后推送到OSS。实现每次写完文章只需要提交代码就可以了。下面介绍具体的步骤</p></blockquote><h1 id="Docker安装Jenkins"><a href="#Docker安装Jenkins" class="headerlink" title="Docker安装Jenkins"></a>Docker安装Jenkins</h1><p>找到合适的位置创建目录jenkins。<br>使用docker-compose的方式安装jenkins，下面给出docker-compose.yml文件内容</p><figure class="highlight nestedtext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">---</span></span><br><span class="line"><span class="attribute">version</span><span class="punctuation">:</span> <span class="string">&quot;3&quot;</span></span><br><span class="line"><span class="attribute">services</span><span class="punctuation">:</span></span><br><span class="line">  <span class="attribute">jenkins</span><span class="punctuation">:</span></span><br><span class="line">    <span class="attribute">image</span><span class="punctuation">:</span> <span class="string">jenkins/jenkins:latest</span></span><br><span class="line">    <span class="attribute">container_name</span><span class="punctuation">:</span> <span class="string">jenkins</span></span><br><span class="line">    <span class="attribute">environment</span><span class="punctuation">:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PUID=1000</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PGID=1000</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">    <span class="attribute">volumes</span><span class="punctuation">:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./home:/var/jenkins_home</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./data:/var/jenkins_data</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/etc/localtime:/etc/localtime</span></span><br><span class="line">    <span class="attribute">ports</span><span class="punctuation">:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">8080:8080</span></span><br><span class="line">    <span class="attribute">labels</span><span class="punctuation">:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.enable=true&quot;</span></span><br><span class="line">      <span class="comment">#设定端口号</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.services.jenkins.loadbalancer.server.port=8080&quot;</span></span><br><span class="line">      <span class="comment">#设置http</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins.entrypoints=web&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins.service=jenkins&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins.rule=Host(`jenkins.xxxxxx.cn`)&quot;</span></span><br><span class="line">      <span class="comment">#设置https</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins_https.entrypoints=websecure&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins_https.service=jenkins&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;traefik.http.routers.jenkins_https.rule=Host(`jenkins.xxxxxx.cn`)&quot;</span></span><br><span class="line">    <span class="attribute">restart</span><span class="punctuation">:</span> <span class="string">unless-stopped</span></span><br><span class="line"><span class="attribute">networks</span><span class="punctuation">:</span></span><br><span class="line">  <span class="attribute">default</span><span class="punctuation">:</span></span><br><span class="line">    <span class="attribute">external</span><span class="punctuation">:</span></span><br><span class="line">      <span class="attribute">name</span><span class="punctuation">:</span> <span class="string">docker_default</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>进入jenkins目录并执行命令</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建docker网络</span></span><br><span class="line">docker<span class="built_in"> network </span>create -d<span class="built_in"> bridge </span><span class="attribute">--attachable</span>=<span class="literal">true</span> docker_default</span><br><span class="line"><span class="comment"># 启动容器，分割acme.json</span></span><br><span class="line">docker-compose up -d</span><br><span class="line">docker-compose logs -f</span><br></pre></td></tr></table></figure><p>随后使用 ip:8080访问jenkins，在日志里找到jenkin的默认密码登录并初始化Jenkins，这一步不再介绍，正常初始化就行。</p><h1 id="下载nodejs"><a href="#下载nodejs" class="headerlink" title="下载nodejs"></a><a href="https://nodejs.org/en/download/">下载nodejs</a></h1><p>正常安装完jenkins后我们下载nodejs，如下图：</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/115009.webp"><p>进入jenkins目录下的data目录，把刚才下载的nodejs放在data目录并解压。</p><h1 id="配置jenkins"><a href="#配置jenkins" class="headerlink" title="配置jenkins"></a>配置jenkins</h1><p>在jenkins主页点击Manage Jenkins–&gt;Tools</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/120108.webp"><p>随后往下滑到nodejs安装，按下图所示进行配置。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/120228.webp"><p>其中安装目录里的<code>node-v18.12.1-linux-x64</code>按自己的实际版本修改，随后保存。</p><h1 id="新建构建"><a href="#新建构建" class="headerlink" title="新建构建"></a>新建构建</h1><p>在jellyfin主页点击新建Item来新建一个构建。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121020.webp"><p>随便命个名字并选择Freestyle project，点击确定</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121135.webp"><p>在源码管理处选择git仓库，这里我填写自己部署的gitea的blog仓库。<br>Credentials自行添加。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121240.webp"><p>构建触发器选则轮询，并15S查询一次。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121521.webp"><p>有精力的也可以下载generic webhook插件，使用webhook的方式，实时性更好，在此不再介绍，有需要的评论区留言。</p><p>构建环境需要选择Nodejs</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121650.webp"><p>Build Steps里面添加执行Shell，并添加如下命令。</p><figure class="highlight coffeescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">npm</span> config set registry https:<span class="regexp">//registry.npmmirror.com/</span></span><br><span class="line"><span class="built_in">npm</span> install hexo-cli -g <span class="comment">#这行命令首次构建需要，第二次构建时可以删除。</span></span><br><span class="line"><span class="built_in">npm</span> install</span><br><span class="line">hexo clean</span><br><span class="line">hexo g</span><br><span class="line">hexo d</span><br></pre></td></tr></table></figure><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/121903.webp"><p>随后点击保存就可以了。</p><p>我们可以点击立即构建查看配置是否有问题，没问题的话就可以实现提交代码自动部署静态博客了。。<br>当然，有问题的小伙伴可以在评论区留言。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;上一篇文章我描述了怎么把写的文章自动推送到OSS，但是还存在一个问题，我的博客代码是托管在自己部署的gitea服务器上的，每次写完文章都需要自动部署，然后提交代码。还是不够方便，那么有没有一种方式能提交代码后自动推送oss呢？&lt;/p&gt;
&lt;/bloc</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
  <entry>
    <title>Hexo博客放到OSS并自动更新</title>
    <link href="https://www.dreamlyn.cn/1255780786.html"/>
    <id>https://www.dreamlyn.cn/1255780786.html</id>
    <published>2024-02-29T09:25:47.000Z</published>
    <updated>2024-03-21T00:43:19.041Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>Github Pages服务国内访问巨慢，Gitee Pages服务使用自定义域名的话价格较贵，最终我采用了使用OSS来放置静态网页，配合阿里的CDN访问速度还算不错。</p></blockquote><blockquote><p>文章主要分两部分，分别介绍OSS放置静态网页的方法和博客更新后怎么自动推送到OSS</p></blockquote><h1 id="OSS放置静态网页"><a href="#OSS放置静态网页" class="headerlink" title="OSS放置静态网页"></a>OSS放置静态网页</h1><h2 id="创建Bucket"><a href="#创建Bucket" class="headerlink" title="创建Bucket"></a>创建Bucket</h2><p>如图创建Bucket</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/091512.webp"><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Bucket名称：没有要求，不重复就可以</span><br><span class="line">地域：阿里云的节点国内访问速度都可以，如果不打算使用CDN服务的话，可以选择华东节点。如果使用CDN服务的话，选哪都行。</span><br><span class="line">存储类型：一般选择标准存储就可以了。</span><br><span class="line">同城冗余存储：不需要</span><br><span class="line">版本控制：不需要</span><br><span class="line">读写权限：一定要选公共读</span><br><span class="line">服务端加密方式：无</span><br><span class="line">实时日志查询：看需求，有免费7天的实时日志查询，但有900GB/天的限制</span><br><span class="line">定时备份：不开通</span><br></pre></td></tr></table></figure><h2 id="开启静态页面功能"><a href="#开启静态页面功能" class="headerlink" title="开启静态页面功能"></a>开启静态页面功能</h2><p>我们尽如bucket页面，找到数据管理-&gt;静态页面。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/091741.webp"><p>随后如图所示进行配置：</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/091910.webp"><h2 id="自定义域名"><a href="#自定义域名" class="headerlink" title="自定义域名"></a>自定义域名</h2><p>做完上面的步骤，我们其实已经可以在OSS里存放我们的静态网站了，但是所使用的域名非常冗长，在此我们使用自定义域名（前提是自己的域名已经备案）</p><p>我们在Bucket配置中找到域名管理。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/092246.webp"><p>点击绑定域名，并输入自己需要绑定的域名。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/092438.webp"><p>下面需要验证域名所有权，我们点击域名所有权验证。</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/092835.webp"><p>随后根据提示添加TXT记录和CNAME记录即可</p><h2 id="设置CDN"><a href="#设置CDN" class="headerlink" title="设置CDN"></a>设置CDN</h2><p>设置CDN分两步，第一是申请HTTPS证书并托管；第二是修改域名的CNAME并指向CDN，其实在OSS的文档里说的已经很清楚了，这里我给出一张图便于理解：</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/093837.webp"><p>免费申请HTTPS整数的网站我这里推荐一个：<br><a href="https://freessl.cn/">https://freessl.cn/</a></p><h1 id="文章自动推送到OSS"><a href="#文章自动推送到OSS" class="headerlink" title="文章自动推送到OSS"></a>文章自动推送到OSS</h1><p>如果每次写完文章都需要<code>hexo g</code>生成，然后把生成的静态页面拷贝的OSS的bucket中，那将是一件非常痛苦的事儿。<br>所有有大佬帮忙写了插件，只需要<code>hexo d</code>，就可以自动把静态页面推送到bucket</p><h2 id="申请阿里云AccessKey"><a href="#申请阿里云AccessKey" class="headerlink" title="申请阿里云AccessKey"></a>申请阿里云AccessKey</h2><p>右上角点击个人头像，随后电AccessKey管理</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/104155.webp"><p>点击开始使用子用户AccessKey</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/104626.webp"><p>随后点创建用户</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/104718.webp"><p>填写相关信息</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/104811.webp"><p>其中登录名和显示名称按自己习惯写就行，OpenAPI调用访问必须勾选，随后点确定</p><p>之后点击添加权限</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/105000.webp"><p>搜索OSS，并选择AliyunOSSFullAccess</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/105134.webp"><p>点击确定并完成。</p><p>随后如图点击复制，获取AccessKey和AccessSecret</p><img src="https://img.dreamlyn.cn:8443/i/2024/03/01/105311.webp"><h2 id="安装一键部署脚本"><a href="#安装一键部署脚本" class="headerlink" title="安装一键部署脚本"></a>安装一键部署脚本</h2><p>首先安装插件</p><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-deployer-ali-oss <span class="comment">--save</span></span><br></pre></td></tr></table></figure><p>随后进入博客根目录，找到_config.yml配置文件添加如下配置。</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">deploy:</span></span><br><span class="line"><span class="symbol">  type:</span> ali-oss</span><br><span class="line"><span class="symbol">  region:</span> <span class="params">&lt;oss 区域代码&gt;</span>(比如：oss-cn-beijing)</span><br><span class="line"><span class="symbol">  accessKeyId:</span> <span class="params">&lt;oss  accessKeyId&gt;</span></span><br><span class="line"><span class="symbol">  accessKeySecret:</span> <span class="params">&lt;oss accessKeySecret&gt;</span></span><br><span class="line"><span class="symbol">  bucket:</span> <span class="params">&lt;您的bucket name&gt;</span>(例如：template-blog)</span><br></pre></td></tr></table></figure><p>随后，我们在使用<code>heox d</code>命令时，就可以自动将生成的静态网页推送到OSS了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;Github Pages服务国内访问巨慢，Gitee Pages服务使用自定义域名的话价格较贵，最终我采用了使用OSS来放置静态网页，配合阿里的CDN访问速度还算不错。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;文章主要分</summary>
      
    
    
    
    <category term="技术随笔" scheme="https://www.dreamlyn.cn/categories/other/"/>
    
    
  </entry>
  
</feed>
