<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://docs.lizili.online/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <atom:link href="https://docs.lizili.online/rss.xml" rel="self" type="application/rss+xml"/>
    <title>zll&amp;apos;s Blog</title>
    <link>https://docs.lizili.online/</link>
    <description>木一六的博客</description>
    <language>zh-CN</language>
    <pubDate>Wed, 27 May 2026 09:45:11 GMT</pubDate>
    <lastBuildDate>Wed, 27 May 2026 09:45:11 GMT</lastBuildDate>
    <generator>@vuepress/plugin-feed</generator>
    <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
    <category>兴趣</category>
    <category>效率</category>
    <category>网络</category>
    <category>VuePress</category>
    <category>数据库</category>
    <category>linux</category>
    <category>云原生</category>
    <category>git</category>
    <category>gitops</category>
    <category>docker</category>
    <category>工作分享</category>
    <category>自动化工具</category>
    <category>Markdown</category>
    <item>
      <title>色彩</title>
      <link>https://docs.lizili.online/hobby/%E6%91%84%E5%BD%B1/%E8%89%B2%E5%BD%A9.html</link>
      <guid>https://docs.lizili.online/hobby/%E6%91%84%E5%BD%B1/%E8%89%B2%E5%BD%A9.html</guid>
      <source url="https://docs.lizili.online/rss.xml">色彩</source>
      <category>兴趣</category>
      <pubDate>Sun, 28 Sep 2025 12:25:28 GMT</pubDate>
    </item>
    <item>
      <title>搭建你的本地AI编程助手</title>
      <link>https://docs.lizili.online/coder/ops/%E6%9C%AC%E5%9C%B0AI%E7%BC%96%E7%A8%8B%E5%8A%A9%E6%89%8B.html</link>
      <guid>https://docs.lizili.online/coder/ops/%E6%9C%AC%E5%9C%B0AI%E7%BC%96%E7%A8%8B%E5%8A%A9%E6%89%8B.html</guid>
      <source url="https://docs.lizili.online/rss.xml">搭建你的本地AI编程助手</source>
      <description>这篇文章用了本地AI格式化了一下 系统环境 macOS Sonoma VSCode Continue Ollama</description>
      <pubDate>Fri, 31 Jan 2025 09:21:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>这篇文章用了本地AI格式化了一下</p>
<h2>系统环境</h2>
<ul>
<li>macOS Sonoma</li>
<li>VSCode</li>
<li>Continue</li>
<li>Ollama</li>
</ul>
<!-- more -->
<h2>VSCode</h2>
<p>你可以从其官方网站下载 VS Code：<a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer">https://code.visualstudio.com/</a></p>
<h3>Continue 插件</h3>
<p>在 VS Code 的扩展商店中搜索并安装 "Continue" 插件。</p>
<figure><figcaption></figcaption></figure>
<p>Continue 将模型分为以下四种类型：</p>
<ul>
<li><a href="https://docs.continue.dev/customize/model-types/chat" target="_blank" rel="noopener noreferrer">Chat model（聊天模型）</a></li>
<li><a href="https://docs.continue.dev/customize/model-types/autocomplete" target="_blank" rel="noopener noreferrer">Autocomplete model（自动补全模型）</a></li>
<li><a href="https://docs.continue.dev/customize/model-types/embeddings" target="_blank" rel="noopener noreferrer">Embeddings model（嵌入模型）</a></li>
<li><a href="https://docs.continue.dev/customize/model-types/reranking" target="_blank" rel="noopener noreferrer">Reranking model（重排模型）</a></li>
</ul>
<figure><figcaption></figcaption></figure>
<h2>Ollama</h2>
<p>之前写过一篇关于 DeepSeek 离线使用的文章，可参考：<a href="/tools/deepseek.html" target="_blank">DeepSeek离线使用</a></p>
<h3>Chat 功能模型</h3>
<p><a href="https://qwenlm.github.io/zh/blog/qwen2.5-coder-family/" target="_blank" rel="noopener noreferrer">Qwen2.5-Coder 简介</a></p>
<p>通义千问2.5-Coder（Qwen2.5-Coder）是阿里云最新推出的专注于代码处理的 Qwen 大语言模型系列，亦称为 CodeQwen。该系列提供六种主流模型尺寸：0.5B、1.5B、3B、7B、14B 和 32B，以满足不同开发人员的多样化需求。通过对海量代码数据进行训练，Qwen2.5-Coder 在保持强大数学和推理能力的基础上，显著增强了在代码应用场景中的表现。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ollama</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> qwen2.5-coder:7b-instruct</span></span></code></pre>
</div><h3>Autocomplete 模型</h3>
<p>Continue 推荐使用开源模型 <a href="https://docs.continue.dev/customize/model-providers/ollama#autocomplete-model" target="_blank" rel="noopener noreferrer">StarCoder2-3B</a> 作为自动补全模型。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ollama</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> starcoder2:3b</span></span></code></pre>
</div><p>我还尝试了 <a href="https://ollama.com/library/deepseek-coder" target="_blank" rel="noopener noreferrer">DeepSeek Coder 6.7B</a></p>
<figure><figcaption></figcaption></figure>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ollama</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#98C379;--shiki-dark:#98C379"> deepseek-coder:6.7b</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<p>整体使用体验上来讲，StarCoder2-3B 快一些，当然这还是看个人环境配置。</p>
<h3>Embedding 模型</h3>
<p>官方推荐为 Nomic Embed Text 模型，这一模型很小。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ollama</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> nomic-embed-text</span></span></code></pre>
</div><h3>Reranking</h3>
<p><strong>Reranking</strong> 目前暂时不用。</p>
<h3>OpenWebUI</h3>
<p><a href="https://docs.openwebui.com/" target="_blank" rel="noopener noreferrer">OpenWebUI</a> 是一个 Ollama 官方支持的 Web 应用，通过它可实现一个类似 GPT 的页面。可以通过 Docker 方式安装：</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">docker</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -d</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> 3000:8080</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --add-host=host.docker.internal:host-gateway</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -v</span><span style="color:#98C379;--shiki-dark:#98C379"> open-webui:/app/backend/data</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --name</span><span style="color:#98C379;--shiki-dark:#98C379"> open-webui</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --restart</span><span style="color:#98C379;--shiki-dark:#98C379"> always</span><span style="color:#98C379;--shiki-dark:#98C379"> ghcr.io/open-webui/open-webui:main</span></span></code></pre>
</div><p>访问网页：<a href="http://localhost:3000/" target="_blank" rel="noopener noreferrer">http://localhost:3000/</a> 即可使用。</p>
<figure><figcaption></figcaption></figure>
<h2>Continue</h2>
<p>使用快捷键 Cmd+L 打开对话框：</p>
<figure><figcaption></figcaption></figure>
<h3>添加 Chat 模型</h3>
<figure><figcaption></figcaption></figure>
<p>Provider 选择为 <code>Ollama</code>，Model 选 <code>Autodetect</code>，会自动检测已经安装好的本地模型。</p>
<figure><figcaption></figcaption></figure>
<p>之后三个模型将会检测出来，并弹出 config.json 配置文件：</p>
<figure><figcaption></figcaption></figure>
<p>配置参考</p>
<div class="language-json line-numbers-mode" data-ext="json" data-title="json"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#98C379;--shiki-dark:#98C379">"models"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "title"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"Qwen2.5 Coder 7B Instruct"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "provider"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ollama"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "model"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"qwen2.5-coder:7b-instruct"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "completionOptions"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">       "maxTokens"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2048</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> // 根据情况调整，默认600, 太少可能被截断</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">     },</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "useLegacyCompletionsEndpoint"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "model"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"AUTODETECT"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "title"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"Autodetect"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     "provider"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ollama"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ],</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379"> "tabAutocompleteModel"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   "title"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"StarCode2 3B"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   "provider"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ollama"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   "model"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"starcoder2:3b"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379"> "embeddingsProvider"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   "provider"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ollama"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   "model"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"nomic-embed-text"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> }</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>使用</h3>
<p><strong>Chat 模型使用的两种方式</strong>：</p>
<ol>
<li>选择代码后，对 AI 进行提问。</li>
</ol>
<figure><figcaption></figcaption></figure>
<ol start="2">
<li>通过 @ 方法进行提问。</li>
</ol>
<p>@ 后，插件会检索目录文件，获取到对应的具体方法位置。</p>
<figure><figcaption></figcaption></figure>
<p><strong>Autocomplete 模型使用</strong></p>
<p>写代码的时候，AI 会生成代码。当出现建议时，按 Tab 键可以接受整个建议。不想使用当前的建议，按 Esc 键可以拒绝它。只想接受建议的一部分，可以使用更精细的控制，按 Cmd（Mac）或 Ctrl（Windows/Linux）+ 右箭头键 →。</p>
<figure><figcaption></figcaption></figure>
<p><strong>Edit</strong> 功能使用</p>
<p>选中一段代码，按下 Cmd（Mac）或 Ctrl（Windows/Linux） + I 来激活 Edit 输入框。简单明了地描述需求，即可。</p>
<ul>
<li>格式化代码</li>
<li>编写注释</li>
<li>生成单元测试</li>
<li>重构函数或方法</li>
</ul>
<p>如果又有更长的描述需求，建议使用 Chat。</p>
<figure><figcaption></figcaption></figure>
<p>Action 功能</p>
<p><a href="https://docs.continue.dev/customize/slash-commands" target="_blank" rel="noopener noreferrer">斜杠命令</a></p>
<p><a href="https://docs.continue.dev/actions/how-to-use-it" target="_blank" rel="noopener noreferrer">Action</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>打造一个易用的iTerm2</title>
      <link>https://docs.lizili.online/tools/iterm2/</link>
      <guid>https://docs.lizili.online/tools/iterm2/</guid>
      <source url="https://docs.lizili.online/rss.xml">打造一个易用的iTerm2</source>
      <description>iterm2 、Oh My Zsh、p10k、plugin 芜湖~🛫</description>
      <category>效率</category>
      <pubDate>Thu, 30 Jan 2025 12:33:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>iterm2 、Oh My Zsh、p10k、plugin 芜湖~🛫</p>
<figure><figcaption></figcaption></figure>
<!-- more -->
<h1></h1>
<h2>iTerm2安装</h2>
<p>直接前往 <a href="https://iterm2.com/downloads.html" target="_blank" rel="noopener noreferrer">iTerm2 官网</a> 下载, 解压并双击安装</p>
<figure><figcaption></figcaption></figure>
<h2>zsh安装</h2>
<p>Oh My Zsh 是一款命令行工具，它基于 zsh 命令行，提供了丰富的主题、插件</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># curl</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sh</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -c</span><span style="color:#98C379;--shiki-dark:#98C379"> "$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -fsSL</span><span style="color:#98C379;--shiki-dark:#98C379"> https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># wget</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sh</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -c</span><span style="color:#98C379;--shiki-dark:#98C379"> "$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -O-</span><span style="color:#98C379;--shiki-dark:#98C379"> https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</span></span></code></pre>
</div><h2>p10k安装</h2>
<p><a href="https://github.com/romkatv/powerlevel10k" target="_blank" rel="noopener noreferrer">powerlevel10k</a> 是一款 zsh 主题，快速、高效和开箱即用</p>
<p>安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">git</span><span style="color:#98C379;--shiki-dark:#98C379"> clone</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --depth=1</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/romkatv/powerlevel10k.git</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/powerlevel10k</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> 'source ~/powerlevel10k/powerlevel10k.zsh-theme'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;&gt;</span><span style="color:#98C379;--shiki-dark:#98C379">~/.zshrc</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">source</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/.zshrc</span></span></code></pre>
</div><p>配置</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">p10k</span><span style="color:#98C379;--shiki-dark:#98C379"> configure</span></span></code></pre>
</div><p>根据提示，选择即可</p>
<figure><figcaption></figcaption></figure>
<h2>插件安装</h2>
<p>支持的所有插件：<a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins" target="_blank" rel="noopener noreferrer">https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins</a></p>
<p>推荐几个插件：</p>
<ul>
<li>
<p><a href="https://github.com/zsh-users/zsh-syntax-highlighting" target="_blank" rel="noopener noreferrer">代码高亮</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># zsh-syntax-highlighting</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">git</span><span style="color:#98C379;--shiki-dark:#98C379"> clone</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/zsh-users/zsh-syntax-highlighting.git</span><span style="color:#98C379;--shiki-dark:#98C379">  ~/.</span><span style="color:#98C379;--shiki-dark:#98C379">   oh-my-zsh/plugins/zsh-syntax-highlighting</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">配置：</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> zsh-syntax-highlighting</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div></li>
<li>
<p><a href="https://github.com/zsh-users/zsh-autosuggestions" target="_blank" rel="noopener noreferrer">命令补全</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># zsh-autosuggestion</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">git</span><span style="color:#98C379;--shiki-dark:#98C379"> clone</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/zsh-users/zsh-autosuggestions.git</span><span style="color:#98C379;--shiki-dark:#98C379">  ~/.oh-my-zsh/plugins/zsh-autosuggestions</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">配置：</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> zsh-autosuggestions</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div></li>
<li>
<p><a href="https://github.com/agkozak/zsh-z" target="_blank" rel="noopener noreferrer">Z 目录跳转</a> : 通过<code>z</code>命令，直接跳转到访问最多的目录，要启用Z, 修改ZSHRC文件，plugin数组中添加z即可</p>
</li>
</ul>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> z</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><ul>
<li><a href="/tools/iterm2/kubectl.html" target="_blank">kubectl</a></li>
</ul>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> kubectl</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><ul>
<li><a href="/tools/iterm2/asdf.html" target="_blank">asdf</a></li>
</ul>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> asdf</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><ul>
<li><a href="/tools/iterm2/tig.html" target="_blank">tig</a></li>
</ul>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">plugins</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">...</span><span style="color:#98C379;--shiki-dark:#98C379"> tig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><h2><a class="header-anchor" href="#shell-integration"><span></span></a><a href="https://iterm2.com/documentation-shell-integration.html" target="_blank" rel="noopener noreferrer">Shell Integration</a></h2>
<p>当你SSH 到到远端服务器的时候，发现里面的 Host、User、Current Path 等信息不能和 Status bar同步，装它就对了。 当然，它功能不只如此，还可以文件上传下载、历史命令查看等.</p>
<p>安装</p>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<p>在安装完 iTerm2 的 shell integration 后会在终端界面中最左侧多出一个蓝色三角形的标记。如图：</p>
<figure><figcaption></figcaption></figure>
<p>标记说明当前 shell 支持 shell integration。如需关闭标记，可以在 <code>iTerm2 &gt; Preferences &gt; Profiles &gt; (your profile) &gt; Terminal</code> 最下面 &gt; <code>Shell Integration</code> 关闭 <code>Show mark indicators</code></p>
<figure><figcaption></figcaption></figure>
<p>服务端：</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -L</span><span style="color:#98C379;--shiki-dark:#98C379"> https://iterm2.com/shell_integration/bash</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">-o </span><span style="color:#98C379;--shiki-dark:#98C379">~/.iterm2_shell_integration.bash</span></span></code></pre>
</div><p>编辑<code> ~/.bash_profile</code> 或者 <code>~/.profile</code>增加下面一行</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">source</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/.iterm2_shell_integration.bash</span></span></code></pre>
</div><h3>下载文件</h3>
<p>注意 只有<code>ls</code>的才可以， <code>ls -al</code> 的可能会失败</p>
<figure><figcaption></figcaption></figure>
<h3>上传文件</h3>
<blockquote>
<p>如果在 ~/.ssh/config 中配置了远端服务器的认证信息，然后SSH 到远端服务器后，cd 到期望上传的目录中,按住 Option 键，将文件拖入 iTerm 2 的窗口中，就会调用 scp 进行上传。</p>
</blockquote>
<h3>剪切板历史</h3>
<p><code>ommand + Shift + h</code>可以呼出粘贴历史，支持模糊检索。</p>
]]></content:encoded>
    </item>
    <item>
      <title>DeepSeek 离线使用和提示词教程</title>
      <link>https://docs.lizili.online/tools/deepseek.html</link>
      <guid>https://docs.lizili.online/tools/deepseek.html</guid>
      <source url="https://docs.lizili.online/rss.xml">DeepSeek 离线使用和提示词教程</source>
      <description>国产大模型杀疯了快。 DeepSeek-R1 连连上榜，媲美o1，关键是开源、免费、成本还低，英伟达股价连夜📉。 既然是开源，那就可以本地部署 ，特别是B端企业，哈哈 Ollama 安装 直接去Ollama官方 安装完成后，去命令行测试下 运行模型 选择需要的模型，并复制命令即可。Ollama地址 为了测试，我这里选择了个1.5b 参数的小模型 命令...</description>
      <category>效率</category>
      <pubDate>Mon, 27 Jan 2025 10:48:38 GMT</pubDate>
      <content:encoded><![CDATA[<p>国产大模型杀疯了快。 DeepSeek-R1 连连上榜，媲美o1，关键是开源、免费、成本还低，英伟达股价连夜📉。</p>
<figure><figcaption></figcaption></figure>
<p>既然是开源，那就可以本地部署 ，特别是B端企业，哈哈</p>
<h2>Ollama 安装</h2>
<p>直接去<a href="https://ollama.com/" target="_blank" rel="noopener noreferrer">Ollama官方</a></p>
<figure><figcaption></figcaption></figure>
<p>安装完成后，去命令行测试下</p>
<figure><figcaption></figcaption></figure>
<h2>运行模型</h2>
<p>选择需要的模型，并复制命令即可。<a href="https://ollama.com/library/deepseek-r1" target="_blank" rel="noopener noreferrer">Ollama地址</a></p>
<figure><figcaption></figcaption></figure>
<p>为了测试，我这里选择了个1.5b 参数的小模型</p>
<figure><figcaption></figcaption></figure>
<p>命令行用起来还是不太方便的，推荐两个浏览器插件</p>
<ol>
<li><a href="https://chromewebstore.google.com/detail/page-assist-%E6%9C%AC%E5%9C%B0-ai-%E6%A8%A1%E5%9E%8B%E7%9A%84-web/jfgfiigpkhlkbnfnbobbkinehhfdhndo" target="_blank" rel="noopener noreferrer">Chrome: Page Assist</a></li>
<li><a href="https://microsoftedge.microsoft.com/addons/detail/ollama-chat/mfnfcfiodhdbgdnochopjaghfhofpbkb" target="_blank" rel="noopener noreferrer">Edge: OLLAMA Chat</a></li>
</ol>
<figure><figcaption></figcaption></figure>
<p>这样离线使用就方便多了。<br>
当然，如果用不惯插件，可以使用<a href="https://docs.openwebui.com/" target="_blank" rel="noopener noreferrer">Open-WebUI</a></p>
<h2>提示词</h2>
<blockquote>
<p>转自 <a href="https://mp.weixin.qq.com/s/JHgJQiFK_nE8edpb-bpRWg" target="_blank" rel="noopener noreferrer">https://mp.weixin.qq.com/s/JHgJQiFK_nE8edpb-bpRWg</a></p>
</blockquote>
<h3>第一，明确问题核心</h3>
<p>大家在使用GPT的时候，通常都是以“你是一个XXX，”作为开头，在使用DeepSeek时，你只需要直接讲出你的**“目标”和“场景”**，引擎会自行完成语义理解。</p>
<p><strong>举个例子</strong>：</p>
<p>❌ 不当提问：<br>
“我想学编程，但不知道怎么做，能告诉我吗？”</p>
<p>✅ 好的提问：<br>
“作为零基础学习者，如何快速入门Python编程？请推荐学习路径和资源。”</p>
<h3>第二，结构化描述</h3>
<p>尽量<strong>结构化你的提问</strong>，如果问题比较复杂，可以分点说明背景、需求以及具体问题。</p>
<p><strong>举例来说</strong>：</p>
<p>❌ 笼统的提问：<br>
“帮我写一个代码。”</p>
<p>✅ 结构化提问：</p>
<p>“我需要用Python写一个爬虫，要求：</p>
<ol>
<li>爬取某网站文章标题和发布时间；</li>
<li>数据保存为CSV文件；</li>
<li>避免触发反爬机制。请提供示例代码和关键步骤说明。”</li>
</ol>
<h3>第三，使用关键词</h3>
<p>尤其是在一些专业性比较强的领域，如金融、法律、计算机、生物等等，使用<strong>关键术语</strong>有助于AI识别和理解你想提问的领域。</p>
<p><strong>示例</strong>：</p>
<p>❌ 不好的提问：<br>
“如何提高阅读速度？”</p>
<p>✅ 关键词提问：<br>
“有哪些科学验证的 <strong>速读技巧</strong>（如视幅扩展、减少回视）？请提供训练方法。”</p>
<h3>第四，提供具体示例</h3>
<p>当你需要做数据分析、解题或者处理复杂问题的时候，可以<strong>给出输入/输出案例</strong>，帮助AI更好的理解场景。</p>
<p><strong>举例来说</strong>：<br>
❌ 抽象的提问：<br>
“怎么处理数据？”</p>
<p>✅ 示例化的提问：<br>
“我有一组销售数据，格式如下：</p>
<figure><figcaption></figcaption></figure>
<p>如何用Excel计算 <strong>7天移动平均销售额</strong>？请分步说明公式。”</p>
<h3>第五，限制范围</h3>
<p>尽可能提出<strong>明确范围的问题</strong>，避免过于开放的问题，这样AI的回答会更精准、更有指导性。记得加上一句“<strong>用通俗的语言</strong>”，这样输出的内容可读性更强。</p>
<p><strong>示例</strong>：<br>
❌ 开放提问：<br>
“什么是人工智能？”</p>
<p>✅ 限定范围提问：<br>
“用通俗语言解释人工智能的 <strong>核心技术分支</strong>（如机器学习、深度学习、NLP），并说明其实际应用场景。”</p>
<h3>第六，分步提问</h3>
<p>复杂问题<strong>拆解为多个小问题</strong>，不要问大而全的问题、不要笼统提问。</p>
<p><strong>举例</strong>：</p>
<p>❌ 大而全的提问：<br>
“如何开发一个电商App？”</p>
<p>✅ 分步提问：</p>
<ol>
<li>“开发一个电商App需要哪些核心技术栈？”</li>
<li>“请推荐适合新手的跨平台开发框架及学习资源。”</li>
<li>“设计用户登录功能时，如何确保安全性？”</li>
</ol>
<h3>第七，验证与追问</h3>
<p>DeepSeek <strong>支持追问、验证</strong>的多轮交互方式，根据回答进一步确认或补充信息，你会得到更有建设性的回答。</p>
<p><strong>举例说明</strong>：<br>
初始提问：<br>
“量子计算的基本原理是什么？”<br>
追问示例：<br>
“您提到的‘量子叠加’和传统二进制有何区别？能否举例说明？”</p>
<h3>总结</h3>
<p>以上，就是官方给出的7个提问技巧，如果你仍然觉得麻烦，那么最后给你一个 <strong>通用提问模板</strong>，只要记住这一个就够了。</p>
<p><strong>提问模板：</strong></p>
<figure><figcaption></figcaption></figure>
<p>使用示例：</p>
<figure><figcaption></figcaption></figure>
<p>祝贺你，击败了90%的人，现在已经是DeepSeek高手了！</p>
]]></content:encoded>
    </item>
    <item>
      <title>七层模型(图解)</title>
      <link>https://docs.lizili.online/network/7%E5%B1%82%E6%A8%A1%E5%9E%8B.html</link>
      <guid>https://docs.lizili.online/network/7%E5%B1%82%E6%A8%A1%E5%9E%8B.html</guid>
      <source url="https://docs.lizili.online/rss.xml">七层模型(图解)</source>
      <description>image-20250115215445301image-20250115215445301</description>
      <category>网络</category>
      <pubDate>Thu, 16 Jan 2025 02:00:20 GMT</pubDate>
      <content:encoded><![CDATA[<figure><figcaption>image-20250115215445301</figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>周易-基本概念</title>
      <link>https://docs.lizili.online/hobby/%E5%91%A8%E6%98%93/%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5.html</link>
      <guid>https://docs.lizili.online/hobby/%E5%91%A8%E6%98%93/%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5.html</guid>
      <source url="https://docs.lizili.online/rss.xml">周易-基本概念</source>
      <description>玩密室或去某些景点的时候，会看到八卦，但看不懂。能简单的看懂八卦就好了</description>
      <category>兴趣</category>
      <pubDate>Thu, 16 Jan 2025 01:59:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>玩密室或去某些景点的时候，会看到八卦，但看不懂。能简单的看懂八卦就好了</p>
<!-- more -->
<h1>基本概念</h1>
<h2>易的定义</h2>
<ol>
<li>变化</li>
<li>不易</li>
<li>易简</li>
</ol>
<p>易——乾卦：时间、创造力</p>
<p>简—一坤卦：空间、承受力</p>
<h2>八卦-两仪图</h2>
<figure><figcaption>img</figcaption></figure>
<h2>先天八卦图</h2>
<p>中间太极图，又称 <strong>阴阳鱼</strong></p>
<figure><figcaption>img</figcaption></figure>
<div class="language-plain" data-ext="plain" data-title="plain"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>乾 - 天 - 天</span></span>
<span class="line"><span>坤 - 地 - 地</span></span>
<span class="line"><span>离 - 火 - 日</span></span>
<span class="line"><span>水 - 坎 - 月</span></span>
<span class="line"><span>震 - 雷 - 长男</span></span>
<span class="line"><span>巽 - 风 - 长女</span></span>
<span class="line"><span>艮 - 山 - 山</span></span>
<span class="line"><span>兑 - 泽 - 沼泽</span></span></code></pre>
</div><figure><figcaption>img</figcaption></figure>
<p>乾坤生六子。（卦象变为家庭结构）</p>
<p>八卦歌</p>
<div class="language-plain" data-ext="plain" data-title="plain"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>乾三连（天），坤六断（地）；</span></span>
<span class="line"><span>震仰盂（雷），艮覆碗（山）；</span></span>
<span class="line"><span>离中虚（火），坎中满（水）；</span></span>
<span class="line"><span>兑上缺（泽），巽下断（风）。</span></span></code></pre>
</div><p>有兴趣可了解下<a href="https://baike.baidu.com/item/%E5%90%8E%E5%A4%A9%E5%85%AB%E5%8D%A6%E5%9B%BE/9464602" target="_blank" rel="noopener noreferrer">后天八卦</a></p>
<h2>八卦的象征</h2>
<ol>
<li>乾：为父 	为首 为马 为刚健</li>
<li>坤：为母 	为腹 为牛 为顺从</li>
<li>震：为长男 为足 为龙 为行动</li>
<li>巽：为长女 为股 为鸡 为顺利</li>
<li>坎：为中男 为耳 为猪 为坎陷（危险的意思）</li>
<li>离：为中女 为眼 为雉 为附丽（依靠、依附）</li>
<li>艮：为少男 为手 为狗 为阻止</li>
<li>兑：为少女 为口 为羊 为喜悦</li>
</ol>
<figure><figcaption>img</figcaption></figure>
<h2>经(卦爻辞)</h2>
<p>周文王，姓姬名昌，生年不详。《易经》六十四卦卦辞、 (384)爻辞为其所作。</p>
<p>七年牢狱，在里面研究八卦</p>
<p>易经里的卦，其实是答案。这个和上学是不一样的，上学是通过题目找到答案，易经是通过答案，找到理由。时间长就累计了自己的经验。</p>
<h3><a class="header-anchor" href="#卦序歌六十四卦卦序歌"><span>卦序歌</span></a><a href="https://baike.baidu.com/item/%E5%85%AD%E5%8D%81%E5%9B%9B%E5%8D%A6%E5%8D%A6%E5%BA%8F%E6%AD%8C/2397285" target="_blank" rel="noopener noreferrer">六十四卦卦序歌</a></h3>
<p>64  等于 上30 下34</p>
<h3>上下经卦名次序歌</h3>
<p>乾坤屯（zhǔn）蒙需讼师， 比<a href="https://baike.baidu.com/item/%E5%B0%8F%E7%95%9C/868535?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">小畜</a>（xù）兮履泰否，</p>
<p>同人大有谦豫随， 蛊临观兮噬嗑贲（bì），</p>
<p>剥复无妄<a href="https://baike.baidu.com/item/%E5%A4%A7%E7%95%9C/2308414?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">大畜</a>颐， 大过坎离三十备。</p>
<p>咸恒遁兮及大壮， 晋与明夷家人睽，</p>
<p>蹇（jiǎn）解损益夬（guài）姤（gòu）萃， 升困井革鼎震继，</p>
<p>艮渐归妹丰旅巽， 兑涣节兮<a href="https://baike.baidu.com/item/%E4%B8%AD%E5%AD%9A/8566576?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">中孚</a>至，</p>
<p>小过既济兼未济， 是为下经三十四。</p>
<h3>上下经卦变歌</h3>
<p>讼自遁变泰归妹，否从渐来随三位。</p>
<p>首困噬嗑未济兼，蛊三变贲井<a href="https://baike.baidu.com/item/%E6%97%A2%E6%B5%8E/10721381?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">既济</a>。</p>
<p><a href="https://baike.baidu.com/item/%E5%99%AC%E5%97%91/2308226?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">噬嗑</a>六五本益生，贲原于损既济会。</p>
<p>无妄讼来大畜需，咸旅恒丰皆疑似。</p>
<p>晋从观更睽有三，离与中孚家人系。</p>
<p>蹇利西南小过来，解升二卦相为赘。</p>
<p>鼎由巽变渐涣旅，涣自渐来终于是。</p>
<h2><a class="header-anchor" href="#易传注"><span>易传</span></a><a href="https://baike.baidu.com/item/%E6%98%93%E4%BC%A0/620238" target="_blank" rel="noopener noreferrer">注</a></h2>
<p>又称，十翼（辅助的意思，像10个翅膀）,是对卦爻辞的注释和解读，是后人对经典的阐发和解读，包括《彖传》、《象传》、《系辞传》、《文言传》等合称《十翼》。</p>
<h3><a class="header-anchor" href="#彖传-tuan-chuan-彖传"><span>彖传[tuàn chuán] </span></a><a href="https://baike.baidu.com/item/%E5%BD%96%E4%BC%A0/7091666" target="_blank" rel="noopener noreferrer">彖传</a></h3>
<p>《彖传》为《<a href="https://baike.baidu.com/item/%E6%98%93%E4%BC%A0/620238?fromModule=lemma_inlink" target="_blank" rel="noopener noreferrer">易传</a>》中的一部分，是解释六十四卦卦辞的</p>
<h3><a class="header-anchor" href="#象传-xiang-zhuan-象传"><span>象传[xiàng zhuàn] </span></a><a href="https://baike.baidu.com/item/%E8%B1%A1%E4%BC%A0/8846639" target="_blank" rel="noopener noreferrer">象传</a></h3>
<p>“天行健，君子以自强不息”（乾卦☰）<br>
“地势坤，君子以厚德载物”（坤卦☷）<br>
“随风巽，君子以申命行事”（巽卦☴）<br>
“渐雷震，君子以恐惧修省”（震卦☳）<br>
“善如水，君子以作事谋始”（坎卦☵）<br>
“火同人，君子以类族辨物”（离卦☲）<br>
“步泽履，君子以辨民安志”（兑卦☱）<br>
“艮山谦，君子以裒多益寡”（艮卦☶）</p>
<h2>爻</h2>
<p>卦中的一条条断开或者连接的横线 即为 爻</p>
<p>爻： 横为阳，断为阴，九为阳，六为阴</p>
<p>示例：</p>
<p>地山谦  （ 注意念法 ），最下面念<strong>初</strong>，最上面念<strong>上</strong></p>
<p></p>
<h3>当位（爻的位置）</h3>
<p>初、三、五属刚位适合阳爻</p>
<p>二、四、上属柔位适合阴爻</p>
<figure><figcaption>img</figcaption></figure>
<figure><figcaption>img</figcaption></figure>
<h1>自强不息-乾卦(上）</h1>
<figure><figcaption>img</figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>网络通讯扫盲(转)</title>
      <link>https://docs.lizili.online/network/%E7%BD%91%E7%BB%9C%E9%80%9A%E8%AE%AF%E6%89%AB%E7%9B%B2.html</link>
      <guid>https://docs.lizili.online/network/%E7%BD%91%E7%BB%9C%E9%80%9A%E8%AE%AF%E6%89%AB%E7%9B%B2.html</guid>
      <source url="https://docs.lizili.online/rss.xml">网络通讯扫盲(转)</source>
      <description>计算机网络通讯的【系统性】扫盲——从“基本概念”到“OSI 模型” 基本概念 为了足够通俗，俺先要介绍一些基本概念。 信道（channel） 这是通讯领域非常基本的概念，肯定要先聊聊它。 通俗地说，信道就是“传送信息的通道”。 信道的类型 首先，信道可以从广义上分为“物理信道 ＆ 逻辑信道”。 顾名思义，“物理信道”就是直接使用某种【物理介质】来传送信...</description>
      <category>网络</category>
      <pubDate>Wed, 15 Jan 2025 12:44:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>计算机网络通讯的【系统性】扫盲——从“基本概念”到“OSI 模型”</p>
<h2>基本概念</h2>
<p>为了足够通俗，俺先要介绍一些基本概念。</p>
<h3><a class="header-anchor" href="#信道-channel"><span>信道（</span></a><a href="https://en.wikipedia.org/wiki/Communication_channel" target="_blank" rel="noopener noreferrer">channel</a>）</h3>
<p>这是通讯领域非常基本的概念，肯定要先聊聊它。<br>
通俗地说，信道就是“传送信息的通道”。</p>
<h3>信道的类型</h3>
<p>首先，信道可以从广义上分为“物理信道 ＆ 逻辑信道”。<br>
顾名思义，“物理信道”就是直接使用某种【物理介质】来传送信息；至于“逻辑信道”——是基于“物理信道”之上抽象出来的玩意儿（待会儿讲到“协议栈”的时候再聊）。</p>
<h3>信道的带宽</h3>
<p>“带宽”指的是：某个信道在单位时间内最大能传输多少比特的信息。<br>
请注意：<br>
电气领域 ＆ 计算机领域都有“带宽”这个概念，但两者的定义不太一样。电气领域所说的“带宽”指的是“模拟带宽”，单位是“赫兹/Hz”；计算机领域所说的“带宽”指“数字带宽”，单位是“比特率”或“字节率”。<br>
后续章节提到“带宽”，都是指计算机领域的术语。</p>
<h3>带宽的单位——容易把外行绕晕</h3>
<p>“比特率”或“字节率”很容易搞混淆。用英文表示的话——大写字母 <code>B</code> 表示【字节】；小写字母 <code>b</code> 表示【比特】。</p>
<p>由于带宽的数字通常很大，要引入“K、M、G”之类的字母表示数量级，于是又引出一个很扯蛋的差异——“10进制”与“2进制”的差异。<br>
【10进制】的 <code>K</code> 表示 1000；<code>M</code> 表示 1000x1000（1百万）<br>
【2进制】的 <code>K</code> 表示 1024（2的10次方）；<code>M</code> 表示 1024x1024（2的20次方）<br>
为了避免扯皮，后来国际上约定了一个规矩：对【2进制】的数量级要加一个小写字母 <code>i</code>。比如说：<code>Ki</code> 表示 1024；<code>Mi</code> 表示 1024x1024 ...... 以此类推。<br>
举例：<br>
1Kbps 表示“1000比特每秒”<br>
1KiBps 表示“1024字节每秒”</p>
<h3>信道的工作模式：单工 VS 半双工 VS 全双工</h3>
<p>再来说说信道的工作模式。大致可以分为如下三种。为了让大伙儿比较好理解，俺对每一种都举相应的例子。</p>
<p><strong>单工（simplex）</strong><br>
比如“电台广播”就是典型的【单工】。“电台”可以发信号给“收音机”，但“收音机”【不能】发信号给“电台”。</p>
<p><strong>半双工（half-duplex）</strong><br>
比如“单条铁路轨道”，就是典型的【半双工】。火车在单条铁轨上，可以有两种运行方向；但对于同一个瞬间，只能选其中一个方向（否则就撞车了）。</p>
<p><strong>全双工（full-duplex）</strong><br>
比如“光纤”就是典型的【全双工】。在同一根光导纤维中，可以有多个光束【同时相向】传播，互相不会干扰对方。</p>
<h3>端点</h3>
<p>为了叙述方便，俺把参与通讯的对象（主体）称作“通讯端点”，简称“端点”。<br>
这里的“端点”是广义的，可以是硬件（比如某个网卡），也可以是软件（比如某个应用程序）。</p>
<h3>单播、组播/多播、广播、选播</h3>
<p>对于“网络通讯”，至少得有 N 个端点参与，并且【N ≥ 2】才有意义。<br>
当 N 个端点构成一个网络，这时候就会涉及到“单播、组播、广播”这几个概念。<br>
通俗地说：<br>
单播（unicast）——发送给网络中的指定的【单个】端点<br>
组播/多播（multicast）——发送给网络中的指定的【多个】端点<br>
广播（broadcast）——发送给网络中的【所有】端点<br>
选播（anycast）——发送给网络中随机选择的【单个】端点</p>
<h3>通讯协议（protocol）</h3>
<p>所谓的“通讯协议”就是：参与通讯的各方所采用的某种【约定】。只有大家都遵守这个约定，才有可能相互传递信息。<br>
打个比方：如果两个人要用自然语言交流，前提是：双方使用相同（或相互兼容）的自然语言。<br>
“通讯协议”就类似某种自然语言，参与通讯的多个端点，都必须能理解这个语言。</p>
<h2>从“分层”到“参考模型”</h2>
<h3>分层</h3>
<p>在聊“分层”之前，先说说“分工”。比如在一个公司中，通常设有不同的工种/岗位，这就【分工】。<br>
对于网络通讯也是如此，不太可能用一种通讯协议完成所有的信息传递任务（注：对于特别简单的网络，或许有可能只用单一协议；但如今的网络通讯已经很复杂，用【单个】通讯协议包办所有事情，已经不太可能）<br>
一旦采用了多种通讯协议，这几种协议之间，该如何配合捏？<br>
在网络通讯领域，采用的是【分层】的设计思路。多个层次的协议在一起协同工作，技术上称作“协议栈”（洋文叫做“protocol stack”）。</p>
<h3>协议栈的原理</h3>
<p>对于多层次的协议栈。每个层次都有各自的“端点”（进行通讯的主体）。处于【同一层次】的两个端点会使用该层次的协议进行通讯（注：同一个层次的协议，可能只有一个，也可能有多个）。<br>
除了最顶层，每个层次的端点会向其【直接】上层提供“服务”；除了最底层，每个层次的端点会调用【直接】下层提供的“服务”（这里所说的“服务”指某种“编程接口”，技术行话叫 API）。</p>
<p><br>
（“协议栈”的示意图)</p>
<p><br>
（“服务”与“协议”之间的关系)</p>
<h3>逻辑信道</h3>
<p>（前一个小节说了）每个层次会向上一个层次提供服务（API 调用）。对上层而言，调用下层提供的 API 发送信息，其效果相当于在使用某种【信道】进行通讯，这也就是俺在 基本概念 那个章节所说的“逻辑信道”。</p>
<p><br>
（“逻辑信道”示意图)</p>
<h3>数据格式的原理</h3>
<p>大部分协议会把要传送的数据切割为 N 份，每一份就是一个数据包。<br>
通常来说，数据包的格式有如下三部分：</p>
<p>头部<br>
身体（也称作“有效载荷”）<br>
尾部（注：很多协议没有尾部）</p>
<p>如果你收过快递，可以把“网络数据包”与“快递包裹”作一个对照——<br>
数据包的“头/尾”，就类似于快递包裹的【包装袋】。数据包的“身体”，就类似于快递包裹里面的东西。</p>
<p>对于【相邻】两层的协议，【下】层包含【上】层。也就是说：下层协议的【载荷】就是上层协议的【整体】。<br>
还是以快递举例：<br>
假设你从网上买了一台笔记本电脑。电脑出厂时，电脑厂商肯定会提供一个包装盒。快递公司在寄送这台笔记本的时候，又会在笔记本的盒子外面再加一个包装袋。对应到网络协议——“快递公司的包装袋”相当于【下层】协议；“电脑厂商的包装盒”，相当于【上层】协议。</p>
<p><br>
（上下层协议的格式及包含关系)</p>
<h3>网络分层的参考模型</h3>
<p>上述所说的“分层 ＆ 协议栈”只是一个抽象的（笼统的）思路。具体要分几层？每一层要干啥事儿？这些都是很有讲究滴！网络技术发展了几十年，已经有很多牛人提出了各种不同的划分方案，称之为“网络分层的参考模型”（为了打字省力，以下简称“模型”）。<br>
在各种模型中，名气最大的当然是“OSI 模型”（洋文称作“<a href="https://en.wikipedia.org/wiki/OSI_model" target="_blank" rel="noopener noreferrer">OSI model</a>”）。在后续的章节中，俺会以这个模型为主体，进行介绍。<br>
除了“OSI 模型”还有一个很出名的模型是“TCP/IP 模型”（因为互联网很成功，它才跟着出名）。<br>
对“TCP/IP 模型”的分层，不同的文章或书籍，说法不太一样（“3层、4层、5层”皆有），这就引发了一些争议。包括几位热心读者也在博客留言，表达不同意见。为了避免一家之言，贴出维基百科的“<a href="https://en.wikipedia.org/wiki/Internet_protocol_suite#Layer_names_and_number_of_layers_in_the_literature" target="_blank" rel="noopener noreferrer">这个链接</a>”，其中给出了几种比较有名的说法。<br>
另外，俺想提醒一下：<br>
由于本文是基于【OSI 模型】进行展开。对于 TCP/IP 模型到底算几层，这方面的争论【不】影响本文后续的内容。</p>
<h2>OSI 概述</h2>
<h3>OSI 的历史</h3>
<p>“OSI”的全称是“Open System Interconnection”。先说说它的历史。<br>
上世纪70年代，“国际电信联盟”（ITU）想对各国的电信系统（电话/电报）建立标准化的规格；与此同时，“国际标准化组织”（ISO）想要建立某种统一的标准，使得不同公司制造的大型主机可以相互联网。<br>
后来，这两个国际组织意识到：“电信系统互联”与“电脑主机互联”的性质差不多。于是 ISO 与 ITU 就决定合作，两家一起干。这2个组织的2套班子，从上世纪70年代开始搞，搞来搞去，搞了很多年，一直到1984年才终于正式发布 OSI 标准。</p>
<h3>OSI 标准的两个组成部分</h3>
<p>严格来讲，OSI 包括两大部分——<br>
其一，抽象的概念模型，也就是前面提到的【OSI model】；<br>
其二，针对这个概念模型的具体实现（具体的通讯协议），洋文叫做【OSI protocols】。</p>
<p>（前面说了）OSI 是由 ISO ＆ ITU 联手搞出来滴。这两个国际组织里面的人，要么是来自各国的电信部门，要么是来自各国的高校学者。总而言之，既有严重的官僚风气，又有明显的学究风气。（正是因为这两种风气叠加，所以搞了很多年，才搞出 OSI）<br>
OSI 的协议实现（OSI protocols），不客气地说，就是一堆垃圾——据说把 OSI protocols 所有的协议文档，全部打印成 A4 纸，摞起来得有一米多高！是不是很吓人？协议搞得如此复杂，严重违背了 IT 设计领域的 <a href="https://en.wikipedia.org/wiki/KISS_principle" target="_blank" rel="noopener noreferrer">KISS 原则</a>。<br>
由于 OSI protocols 实在太复杂，后来基本没人用。但 OSI model 反而广为流传，并且成为“网络分层模型”中名气最大，影响力最广的一个。<br>
因此，本文后续章节中，凡是提到 OSI，指的是【OSI model】。</p>
<h3>OSI 模型的7层</h3>
<p>OSI 模型总共分7层，示意图参见如下表格：</p>
<p>| 层次  | 中文名     | 洋文名             |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>装车配件规格指南</title>
      <link>https://docs.lizili.online/hobby/bicycle/%E8%AE%A4%E8%AF%86%E8%87%AA%E8%A1%8C%E8%BD%A6-%E8%A3%85%E8%BD%A6.html</link>
      <guid>https://docs.lizili.online/hobby/bicycle/%E8%AE%A4%E8%AF%86%E8%87%AA%E8%A1%8C%E8%BD%A6-%E8%A3%85%E8%BD%A6.html</guid>
      <source url="https://docs.lizili.online/rss.xml">装车配件规格指南</source>
      <description>山地车装车配件规格指南 认识车架各个部位名称 确认碗组类型 头管内部是这个样子 没有卡轴承的地方 需要装外置碗组 此图为头管的横截面 上下一样大是叫直管的头管 上小下大为椎管 PS：直管的头管不代表只能装直管前叉 头管 椎管头管也不代表只能装椎管前叉 注意安装转换碗组后 头管下部分会突出一块大概1cm 如果对车架几何非常挑剔的人要注意 还有很老的1英寸...</description>
      <category>兴趣</category>
      <pubDate>Mon, 09 Dec 2024 08:45:24 GMT</pubDate>
      <content:encoded><![CDATA[<h2>山地车装车配件规格指南</h2>
<h3>认识车架各个部位名称</h3>
<!-- 头管 上管 下管 后上叉 座管（立管） 尾叉 后下叉 五通  -->
<figure><figcaption></figcaption></figure>
<!-- 头管 上管 座管（立管） 下管 后上叉 后胆 尾叉 后下叉 SIATUS 五通  -->
<figure><figcaption></figcaption></figure>
<h3>确认碗组类型</h3>
<h3>头管内部是这个样子</h3>
<p>没有卡轴承的地方</p>
<p>需要装外置碗组</p>
<figure><figcaption></figcaption></figure>
<!-- 头管内部是这个样子 有卡轴承的斜面 需要装内置碗组  -->
<figure><figcaption></figcaption></figure>
<p>此图为头管的横截面</p>
<p>上下一样大是叫直管的头管</p>
<figure><figcaption></figcaption></figure>
<p>上小下大为椎管</p>
<p>PS：直管的头管不代表只能装直管前叉</p>
<p>头管</p>
<!-- 头管  -->

<p>椎管头管也不代表只能装椎管前叉</p>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<!-- 直管 锥管 前叉舵管  -->
<figure><figcaption></figcaption></figure>
<!-- 常见外置碗组规格 bopo HOPE :1 HOPE HOPE:2 S.H.I.S.: EC34/28.6 S.H.I.S.: 最左边的是小直管 4120. S.H.I.S.:ZS44/28.6 11/8"Traditional 1 1/8 上下都是34mm的口径 1 1/8"Integral 44.10 Φ44.10 Φ34.10 这种只能装直管前叉 @43.95 33.90 43.95 COI 管G．6 中间的是大直管 更常见一些·上下44 UE9S6 들uo [G6 这种可选椎管的碗组 들Eol 可装椎管前叉 34.10 Φ55.90 HOPE:A 44.10 HOPE . S.H.I.S.: EC34/30 S.H.I.S.: 右边是椎管的头管 56.05 HOPE : E hopo 1 1/8"Traditional 1 1/8"Integral 上44下56 S.H.I.S.:ZS56/40 1.5"Integral hope 可以装转换座子装直管前叉 5"Traditionar  -->
<figure><figcaption></figcaption></figure>
<h3>注意安装转换碗组后</h3>
<h3>头管下部分会突出一块大概1cm</h3>
<p>如果对车架几何非常挑剔的人要注意</p>
<!-- 头管 前叉舵管 椎管碗组  -->
<figure><figcaption></figcaption></figure>
<!-- 最简单找到自己碗组规格的方式就是测量 如果是34毫米的头管，直接搜索34mm碗组即可 上下不一样可以搜索 例：44 56碗组 一定一定要测量后再买 一些比较阴间的车架 3404. 喜欢用特殊规格 要注意 很多车的介绍页上也会写规格  -->
<figure><figcaption></figcaption></figure>
<!-- 内置碗组的车架一 般都会配 适配的碗组 如果没有也可以测 量外径购买碗组  -->
<figure><figcaption></figcaption></figure>
<!-- 前叉舵管 直管 前叉舵管的规格 锥管 最常见的 直管：上下1 1／8英寸 （28.6mm） 椎管：上11／8英寸 下1.5英寸（38.1）  -->
<figure><figcaption></figcaption></figure>
<p>还有很老的1英寸的前叉现在都没了，淘汰了</p>
<p>以及还有很阴间的捷安特od2规格</p>
<p>市面上绝大多数的前叉尺寸都是上面这俩规格</p>
<p>所以只要碗组跟车架能适配就行了</p>
<p>·还有一些车架自带的有可调碗组</p>
<p>·这种车肯定会给你配好你需要的所有的东西</p>
<p>·例如stumpjumper evo的车架</p>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<p>·直管转椎管转换座</p>
<p>·想把老的牛逼前叉装现代车很好的方案例如：rockshox的图腾</p>
<figure><figcaption></figcaption></figure>
<p>把立盖螺丝</p>
<p>把立盖（碗组盖）</p>
<p>花心 碗组安装顺序</p>
<p>防水盖 外置碗组要先把轴承碗</p>
<p>装到车架上</p>
<p>束紧环（铝斜管）</p>
<figure><figcaption></figcaption></figure>
<p>上下轴承</p>
<p>前叉底挡（直管，椎管）</p>
<h3>碳纤维舵管花心</h3>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<!-- JIU 前叉规格 ROCK SHOH Pee0Ω PIKS ULTIMATE  -->
<figure><figcaption></figcaption></figure>
<p>舵管规格讲过了就不过多赘述</p>
<p>前叉行程</p>
<!-- 舵管规格  -->
<figure><figcaption></figcaption></figure>
<p>轮径</p>
<p>偏移量，花鼓开裆，碟片尺寸</p>
<p>前叉行程决定了你这根前叉的总长度</p>
<p>几乎所有的车架在出厂的时候就设定好了长度</p>
<p>前叉行程</p>
<h3>如果没经验的话不要私自更改</h3>
<figure><figcaption></figcaption></figure>
<p>前叉长了你的车头会高，整个车的几何都会有影响最关键的是会增大头管的压力，有断头管的风险私自更改几何之后有质保的车架一般也都会拒保查找你车架的详情页，看前叉的行程是多少就ok</p>
<!-- 黑色阴影：原厂长度 红色：加长前叉  -->
<figure><figcaption></figcaption></figure>
<p>轮径一般就是26,27.5,29</p>
<p>按照车架规定好的就行</p>
<p>加大轮径变相的也是加长了前叉行程</p>
<p>如果要大一号，例如27.5改到29的前轮</p>
<p>前叉行程短20mm的话影响不大</p>
<!-- 轮径  -->
<figure><figcaption></figcaption></figure>
<blockquote>
<p>来自B站：叫我小姜咯</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>同步PostgreSQL数据到mysql</title>
      <link>https://docs.lizili.online/coder/script/%E5%90%8C%E6%AD%A5pgsql%E6%95%B0%E6%8D%AE%E5%88%B0mysql.html</link>
      <guid>https://docs.lizili.online/coder/script/%E5%90%8C%E6%AD%A5pgsql%E6%95%B0%E6%8D%AE%E5%88%B0mysql.html</guid>
      <source url="https://docs.lizili.online/rss.xml">同步PostgreSQL数据到mysql</source>
      <description>由于之前的分析系统和大屏的展示数据是基于MySQL进行开发和设置的，不支持其他的数据库，就导致最新的Zabbix数据无法进入到系统中，所以需要定时刷一下数据到MySQL中。 这里主要用 pymysql 和threading。 pymysql 用来做CRUD threading 用来处理并发</description>
      <pubDate>Fri, 15 Nov 2024 09:05:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>由于之前的分析系统和大屏的展示数据是基于MySQL进行开发和设置的，不支持其他的数据库，就导致最新的Zabbix数据无法进入到系统中，所以需要定时刷一下数据到MySQL中。</p>
<p>这里主要用 pymysql 和threading。</p>
<ul>
<li>pymysql 用来做CRUD</li>
<li>threading 用来处理并发</li>
</ul>
<!-- more -->
<div class="language-python line-numbers-mode" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#!/usr/bin/python3</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># -*- coding: utf-8 -*-</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> requests</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> logging</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> pymysql</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> threading </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> Thread</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">DBHOST</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> "192.168.1.32"</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">DBUSRE</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> "root"</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">DBPASSWORD</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> "xxxxxx"</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">DBPORT</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 3306</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">PROMETHEUS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> "http://192.168.3.130:9090/"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># db: jkprometheus</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># table: alert_history_data</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">logging.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">basicConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">format</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'</span><span style="color:#D19A66;--shiki-dark:#D19A66">%(asctime)s</span><span style="color:#98C379;--shiki-dark:#98C379"> - </span><span style="color:#D19A66;--shiki-dark:#D19A66">%(pathname)s</span><span style="color:#98C379;--shiki-dark:#98C379">[line:</span><span style="color:#D19A66;--shiki-dark:#D19A66">%(lineno)d</span><span style="color:#98C379;--shiki-dark:#98C379">] - </span><span style="color:#D19A66;--shiki-dark:#D19A66">%(levelname)s</span><span style="color:#98C379;--shiki-dark:#98C379">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">%(message)s</span><span style="color:#98C379;--shiki-dark:#98C379">'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">                    level</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">logging.</span><span style="color:#D19A66;--shiki-dark:#D19A66">INFO</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">class</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> DBConnect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">object</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> __init__</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">host</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">user</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">password</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">port</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.host </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> host</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.user </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> user</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.password </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> password</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.port </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> port</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> db_init</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        create_db </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> "CREATE DATABASE "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                    "IF NOT EXISTS jkprometheus  "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                    "DEFAULT CHARSET utf8 "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                    "COLLATE utf8_general_ci"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> pymysql.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">connect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.host, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.user, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.password, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.port)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cursor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">execute</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(create_db)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">close</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> table_init</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        use_db </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> "USE jkprometheus"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        alert_history_data </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> "CREATE TABLE "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "IF NOT EXISTS alert_history_data"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "( "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "id int primary key auto_increment, "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "project varchar(30) not null default '河南县域', "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "instance varchar(30), "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "job varchar(100), "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "created datetime not null default CURRENT_TIMESTAMP, "</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "description varchar(2222),"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "summary varchar(2222),"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "alert_state varchar(2222),"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "severity varchar(11),"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       "active_at varchar(100)"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                       ")"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> pymysql.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">connect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.host, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.user, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.password, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.port)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cursor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">execute</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(use_db)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">execute</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(alert_history_data)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">close</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> run_sql</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">sql</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        use_db </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> "USE jkprometheus"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> pymysql.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">connect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.host, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.user, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.password, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.port)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cursor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        cursor.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">execute</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(use_db)</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        try</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            result </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> cursor.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">execute</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(sql)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">commit</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">            return</span><span style="color:#D19A66;--shiki-dark:#D19A66"> True</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, result</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        except</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> Exception </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> e:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            logging.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">error</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">repr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(e))</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">            return</span><span style="color:#D19A66;--shiki-dark:#D19A66"> True</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">repr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(e)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        conn.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">close</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">class</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> JkPrometheus</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">object</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> __init__</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">username</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">None</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">password</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">None</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">server</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">None</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">verify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">False</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.username </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> username</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.password </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> password</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.server </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> server</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">._login </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> False</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">._token </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> None</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">._header </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> None</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    @</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">staticmethod</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> set_header</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">k</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">v</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">._header[k] </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> v</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> login</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">set_header</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'Content-Type'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'application/json'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        return</span><span style="color:#D19A66;--shiki-dark:#D19A66"> True</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> _is_login</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # get_token_url = '{}/oauth/token'.format(self._server)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">        self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">._login </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> True</span><span style="color:#C678DD;--shiki-dark:#C678DD"> if</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">login</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() </span><span style="color:#C678DD;--shiki-dark:#C678DD">else</span><span style="color:#D19A66;--shiki-dark:#D19A66"> False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> alert_data</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        url </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> "</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#98C379;--shiki-dark:#98C379">/api/v1/alerts"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.server)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        response </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> requests.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(url).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">json</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # logging.info(response)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> response[</span><span style="color:#98C379;--shiki-dark:#98C379">'data'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">][</span><span style="color:#98C379;--shiki-dark:#98C379">'alerts'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            alerts </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> response[</span><span style="color:#98C379;--shiki-dark:#98C379">'data'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">][</span><span style="color:#98C379;--shiki-dark:#98C379">'alerts'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">            return</span><span style="color:#D19A66;--shiki-dark:#D19A66"> True</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, alerts</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        else</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">            return</span><span style="color:#D19A66;--shiki-dark:#D19A66"> False</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;--shiki-dark:#D19A66">None</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> alert_history_insert</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E5C07B;font-style:italic;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">instance</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">job</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">summary</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">active_at</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">alert_state</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">severity</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        sql </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> 'select id from alert_history_data where active_at=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379"> and alert_state=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(active_at,alert_state)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        success, data </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">  DBConnect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBUSRE</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPASSWORD</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBHOST</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPORT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">run_sql</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">sql</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">sql)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        if</span><span style="color:#C678DD;--shiki-dark:#C678DD"> not</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> data:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            sql </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> 'INSERT INTO alert_history_data(instance, job, description, summary,active_at,alert_state,severity) '</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                  'VALUES (</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">,</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">                  ');'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        instance,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        job,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        description,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        summary,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        active_at,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        alert_state,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                        severity</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                )</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">        else</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            sql </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379"> 'UPDATE alert_history_data SET  severity=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379"> WHERE active_at=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379"> and alert_state=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#D19A66;--shiki-dark:#D19A66">{}</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(severity,active_at,alert_state)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        DBConnect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBUSRE</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPASSWORD</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBHOST</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPORT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">run_sql</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">sql</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">sql)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#E06C75;--shiki-dark:#E06C75"> __name__</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> ==</span><span style="color:#98C379;--shiki-dark:#98C379"> '__main__'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    logging.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">info</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'alert_data - start'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    threads </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> list</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    DBConnect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBUSRE</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPASSWORD</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBHOST</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPORT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">db_init</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    DBConnect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">user</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBUSRE</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">password</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPASSWORD</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBHOST</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">DBPORT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">table_init</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    prom </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> JkPrometheus</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">server</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#D19A66;--shiki-dark:#D19A66">PROMETHEUS</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    success, alerts </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> prom.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">alert_data</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> prom_to_mysql</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">instance</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">job</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">summary</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">active_at</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">alert_state</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">severity</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        prom.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">alert_history_insert</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            instance</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">instance,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            job</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">job,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            description</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">description,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            summary</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">summary,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            active_at</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">active_at,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            alert_state</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">alert_state,</span></span>
<span class="line"><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">            severity</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">severity</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        )</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    for</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert </span><span style="color:#C678DD;--shiki-dark:#C678DD">in</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alerts:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        instance </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'labels'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'instance'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        severity </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'labels'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'severity'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        job </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'labels'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'job'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        description </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'annotations'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'description'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        summary </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'annotations'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">).</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'summary'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        active_at </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'activeAt'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        alert_state </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> alert.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">get</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'state'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        threads.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">append</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Thread</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">target</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">prom_to_mysql, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">args</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(instance, job, description, summary,active_at, alert_state,severity )))</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        threads[</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">-</span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">].</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">start</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    for</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> thread </span><span style="color:#C678DD;--shiki-dark:#C678DD">in</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> threads:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        thread.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">join</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    logging.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">info</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'alert_data - done'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>耗材介绍</title>
      <link>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/%E6%89%93%E5%8D%B0%E8%80%97%E6%9D%90.html</link>
      <guid>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/%E6%89%93%E5%8D%B0%E8%80%97%E6%9D%90.html</guid>
      <source url="https://docs.lizili.online/rss.xml">耗材介绍</source>
      <description>以下是3D打印耗材的分类</description>
      <category>兴趣</category>
      <pubDate>Wed, 23 Oct 2024 13:59:52 GMT</pubDate>
      <content:encoded><![CDATA[<p>以下是3D打印耗材的分类</p>
<!-- more -->
<p>| 耗材类型                          | 优点                                                         | 缺点                                                 | 适用场景                                                    |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blender</title>
      <link>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/blender.html</link>
      <guid>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/blender.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Blender</source>
      <description>Blender 是一款免费开源的3D创作套件。 可以创建3D可视化效果，例如静态图像、3D动画、VFX（视觉特效）快照和视频编辑。非常适合那些受益于其统一解决方案和响应式开发过程的独立和小型工作室 详情 参考中文社区 手册 Bilibili 笔记 常用操作 场景的编辑 位移：shift+鼠标中键 旋转：长按鼠标中键 缩放：滚动鼠标中键 位移：G 旋转:...</description>
      <category>兴趣</category>
      <pubDate>Tue, 22 Oct 2024 09:38:20 GMT</pubDate>
      <content:encoded><![CDATA[
<p>Blender 是一款免费开源的3D创作套件。</p>
<p>可以创建3D可视化效果，例如静态图像、3D动画、VFX（视觉特效）快照和视频编辑。非常适合那些受益于其统一解决方案和响应式开发过程的独立和小型工作室</p>
<p><a href="https://docs.blender.org/manual/zh-hans/latest/getting_started/installing/macos.html" target="_blank" rel="noopener noreferrer">详情 参考中文社区 手册</a></p>
<h2>Bilibili 笔记</h2>
<h3>常用操作</h3>
<h4>场景的编辑</h4>
<p>位移：shift+鼠标中键</p>
<p>旋转：长按鼠标中键</p>
<p>缩放：滚动鼠标中键</p>
<p>位移：G</p>
<p>旋转: R</p>
<p>缩放 :S</p>
<p>再点击xyz，会沿着对应的轴向进行编辑</p>
<p>1：正面，3：侧面，5：透视图，7:顶图</p>
<p>实心点：最大化显示</p>
<p>/：独显</p>
<p>插件——node——勾选即可</p>
<p>键盘映射——可以设置相对应的快捷键</p>
<p>倒角：ctrl+<strong>B</strong></p>
<p>透显：alt+<strong>z</strong></p>
<p>循环切割：Ctrl +Ｒ</p>
<p>插入：　Ｉ</p>
<p>挤压：　Ｅ</p>
<p>选面 按I 插入，按E挤压</p>
]]></content:encoded>
    </item>
    <item>
      <title>简单介绍</title>
      <link>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D.html</link>
      <guid>https://docs.lizili.online/hobby/3D%E6%89%93%E5%8D%B0/%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D.html</guid>
      <source url="https://docs.lizili.online/rss.xml">简单介绍</source>
      <description>3D打印背景知识 3D打印三个阶段，包括等材制造、减材制造和增材制造。 等材制造： 例如打铁 铁锅等 减材制造：例如机床切割等 增材制造：3D打印 建模常见的两种方式。3D设计，3D扫描 四种常见的3D打印技术：光固化成型（SLA）、激光选区烧结、三维印刷（3DP）和熔融堆积（FDM）。</description>
      <category>兴趣</category>
      <pubDate>Tue, 22 Oct 2024 09:38:20 GMT</pubDate>
      <content:encoded><![CDATA[<h2>3D打印背景知识</h2>
<ul>
<li>3D打印三个阶段，包括等材制造、减材制造和增材制造。
<ul>
<li>等材制造： 例如打铁  铁锅等</li>
<li>减材制造：例如机床切割等</li>
<li>增材制造：3D打印</li>
</ul>
</li>
<li>建模常见的两种方式。3D设计，3D扫描</li>
<li>四种常见的3D打印技术：光固化成型（SLA）、激光选区烧结、三维印刷（3DP）和熔融堆积（FDM）。</li>
</ul>
<!-- more -->
<h2>使用场景</h2>
<h3>当前的</h3>
<ol>
<li>建筑行业</li>
<li>玩具</li>
<li>航空 航天 （未来的月球基地）</li>
<li>影视制作（道具）</li>
<li>汽车制作（特别是设计和概念车）</li>
<li>医疗行业 （比如牙齿等定制器械</li>
<li>文物（博物馆 复刻等</li>
<li>食品行业（巧克力、蛋糕等等）</li>
</ol>
<h3>未来的</h3>
<ol>
<li>机器普及且成熟，大家可以导出买原料打印自己想要的东西/事物</li>
<li>打印器官等</li>
<li>太空基地构建</li>
<li>打印衣服（目前已经可以打印，比如鞋）</li>
<li>4D打印，添加了时间维度，再特定的时间/场景 又不同的形态</li>
</ol>
<h2>软件</h2>
<ul>
<li>123D design  （ 上手快，停更很久了，不推荐）</li>
<li>DX （ 新手上手难度太高）</li>
<li>Blender （开源的，个人喜欢这个，小白从这里开始入门了）</li>
<li>Rhino（犀牛，专业）</li>
<li>Fusion 360 （据说整合了123D的功能）</li>
</ul>
<h2>工具准备</h2>
<h3>测量</h3>
<ul>
<li>游标卡尺</li>
<li>卷尺</li>
</ul>
<h3>拆支撑</h3>
<ul>
<li>
<p>尖嘴钳</p>
</li>
<li>
<p>木工凿</p>
</li>
</ul>
<p>用到其他工具如水口钳那代表耗材问题，或者机器出问题，拓竹的支撑就没难拆过）</p>
<h3>防翘边</h3>
<p>纹理板刚开始不建议使用，如果平台不粘了将板子洗一洗。（拓竹要是防翘边，那一定是有问题，换耗材，清理热床）</p>

<h3>粘合</h3>
<ul>
<li>慢干型：AB胶（哥俩好）、木工胶</li>
<li>速干型：502、亚克力胶水（推荐）</li>
</ul>

<h3>表面处理</h3>
<ul>
<li>细节处理：刻刀、美工刀、打火机（防风/喷枪)</li>
<li>表面打磨：砂纸、锉刀</li>
<li>层纹覆盖：（拓竹没啥必要，还是老样子，要外观上光固化）</li>
</ul>

<h3>上色</h3>
<ul>
<li>普通：丙烯颜料、画笔、</li>
<li>进阶：喷漆，自喷漆、喷笔+水性漆</li>
</ul>
<p>拓竹的AMS系统直接多色打印够用</p>
<h3>保养</h3>
<ul>
<li>六角扳手</li>
<li>螺丝刀套装</li>
<li>润滑剂</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>A1 mini 打造</title>
      <link>https://docs.lizili.online/hobby/bambuLab/A1mini/</link>
      <guid>https://docs.lizili.online/hobby/bambuLab/A1mini/</guid>
      <source url="https://docs.lizili.online/rss.xml">A1 mini 打造</source>
      <description>机身封箱 尺寸：45 x 45 x 45 设计： mayCAD （专业铝型材设计软件，可直接导出所需物料） 本想参考B站 UP 阿碰碰碰碰碰 的封装视频 将铁架换成铝型材进行封装的，经过一番折腾，最终选择使用网络机柜做封箱了，主要基于两点，一是成本低，二是承重多，AMS lite 和物料可以放在机柜上面。 image-20241021154013471...</description>
      <category>兴趣</category>
      <pubDate>Tue, 22 Oct 2024 09:38:20 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>机身封箱</h2>
<p>尺寸：45 x 45 x 45</p>
<p>设计： mayCAD  （专业铝型材设计软件，可直接导出所需物料）</p>
<p>本想参考<a href="https://www.bilibili.com/video/BV1cC4y1K7CK/?vd_source=d1a1ee86067795f2152423a64ff8b11e" target="_blank" rel="noopener noreferrer">B站 UP 阿碰碰碰碰碰 的封装视频</a> 将铁架换成铝型材进行封装的，经过一番折腾，最终选择使用网络机柜做封箱了，主要基于两点，一是成本低，二是承重多，AMS lite 和物料可以放在机柜上面。</p>

<p>| 名称           | 数量     | 参考价（元） |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>百度收录 GitHub Pages 博客</title>
      <link>https://docs.lizili.online/guide/vuepress/baidu_seo.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/baidu_seo.html</guid>
      <source url="https://docs.lizili.online/rss.xml">百度收录 GitHub Pages 博客</source>
      <description>相关信息 由于本博客部署在 GitHub Pages 上，而 Github 禁止了百度爬取。故将博客添加到百度收录 SEO 中，增强网站的访问 查看网站是否收录 在百度中输入 site:&amp;lt;域名&amp;gt; 查看网站是否收录。 例如：site:sankgao.github.io 添加网站 登陆 百度资源搜索平台 点击 用户中心 -&amp;gt; 站点管理 添加网站 添加网站添...</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>由于本博客部署在 GitHub Pages 上，而 Github 禁止了百度爬取。故将博客添加到百度收录 SEO 中，增强网站的访问</p>
</div>
<h2>查看网站是否收录</h2>
<p>在百度中输入 <code>site:&lt;域名&gt;</code> 查看网站是否收录。</p>
<p>例如：<code>site:sankgao.github.io</code></p>
<h2>添加网站</h2>
<ol>
<li>
<p>登陆 <a href="https://ziyuan.baidu.com/" target="_blank" rel="noopener noreferrer">百度资源搜索平台</a></p>
</li>
<li>
<p>点击 <strong>用户中心 -&gt; 站点管理</strong> 添加网站</p>
<figure><figcaption>添加网站</figcaption></figure>
</li>
<li>
<p>选择站点属性</p>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>站点验证成功后，站点领域信息 30 天内只能修改一次，请谨慎设置！</p>
</div>
</li>
<li>
<p>验证网站</p>
<p>验证网站有两种方式，选择一个验证方式，根据提示完成验证。</p>
<ul>
<li>
<p><strong>文件验证</strong></p>
<figure><figcaption>文件验证</figcaption></figure>
</li>
<li>
<p><strong>HTML 标签验证</strong></p>
<figure><figcaption>HTML 标签验证</figcaption></figure>
</li>
</ul>
</li>
</ol>
<h2>博客中添加验证代码</h2>
<p>本人选择的是 HTML 标签验证，在博客中添加上述代码。</p>
<p><a href="https://theme-hope.vuejs.press/zh/guide/advanced/seo.html#%E7%9B%B4%E6%8E%A5%E6%B7%BB%E5%8A%A0-head-%E6%A0%87%E7%AD%BE" target="_blank" rel="noopener noreferrer">博客主题</a> 提供了在页面的 <code>frontmatter</code> 中配置 <code>head</code> 选项，自主添加特定标签到页面 <code>&lt;head&gt;</code>，会自动注入 <code>&lt;meta name="keywords" content="SEO plugin" /&gt;</code>。</p>
<p>所以将下面代码添加到网站根目录下的 <code>README</code> 文件中（docs/README.md）：</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">head:</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">  -</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> -</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> meta</span></span>
<span class="line"><span style="color:#E5C07B;--shiki-dark:#E5C07B">    -</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> name: baidu-site-verification</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      content: codeva-jJHuz4vkzL</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>VuePress 搭建</title>
      <link>https://docs.lizili.online/guide/vuepress/build.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/build.html</guid>
      <source url="https://docs.lizili.online/rss.xml">VuePress 搭建</source>
      <description>相关信息 本博客使用的是 VuePress-v2 版本加 vuepress-theme-hope 主题 搭建</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>本博客使用的是 <a href="https://v2.vuepress.vuejs.org/zh/" target="_blank" rel="noopener noreferrer">VuePress-v2</a> 版本加 <a href="https://theme-hope.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-theme-hope 主题</a> 搭建</p>
</div>
<!-- more -->
<h2>VuePress 介绍</h2>
<p><a href="https://v2.vuepress.vuejs.org/zh/" target="_blank" rel="noopener noreferrer">VuePress-v2 官网</a></p>
<h3>什么是 VuePress</h3>
<p><code>VuePress</code> 是一个以 <code>Markdown</code> 为中心的静态网站生成器。您可以使用 Markdown 来书写内容（如：<strong>文档</strong>、<strong>博客</strong>等），然后 VuePress 会帮助您生成一个静态网站来展示它们。</p>
<p><code>VuePress</code> 诞生的初衷是为了支持 <code>Vue.js</code> 及其子项目的文档需求，但是现在它已经在帮助大量用户构建他们的文档、博客和其他静态网站。</p>
<h3>它是如何工作的</h3>
<p>一个 <code>VuePress</code> 站点本质上是一个由 <a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer">Vue</a> 和 <a href="https://router.vuejs.org/" target="_blank" rel="noopener noreferrer">Vue Router</a> 驱动组成的单页面应用（SPA）。</p>
<p><strong>路由</strong> 会根据您的 Markdown 文件的相对路径来自动生成。每个 Markdown 文件都通过 <a href="https://github.com/markdown-it/markdown-it" target="_blank" rel="noopener noreferrer">markdown-it</a> 编译为 <code>HTML</code>，然后将其作为 Vue 组件的模板。因此，您可以在 Markdown 文件中直接使用 Vue 语法，便于您嵌入一些动态内容。</p>
<p>在开发过程中，我们启动一个常规的开发服务器（dev-server），并将 VuePress 站点作为一个常规的 <code>SPA</code>。如果您以前使用过 Vue 的话，您在使用时会感受到非常熟悉的开发体验。</p>
<p>在构建过程中，我们会为 VuePress 站点创建一个 <strong>服务端渲染（SSR）</strong> 的版本，然后通过虚拟访问每一条路径来渲染对应的 <code>HTML</code>。这种做法的灵感来源于 <a href="https://nuxtjs.org/" target="_blank" rel="noopener noreferrer">Nuxt</a> 的 <code>nuxt generate</code> 命令，以及其他的一些项目，比如 <a href="https://www.gatsbyjs.com/" target="_blank" rel="noopener noreferrer">Gatsby</a>。</p>
<h3>VuePress 优点</h3>
<p>VuePress 是以 Vue 为驱动的 <strong>静态网站生成器</strong>，具有以下优点：</p>
<ul>
<li>简洁至上
<ul>
<li>以 Markdown 为中心的项目结构，以最少的配置帮助您专注于写作</li>
</ul>
</li>
<li>Vue 驱动
<ul>
<li>享受 Vue 的开发体验，可以在 Markdown 中使用 Vue 组件，又可以使用 Vue 来开发自定义主题</li>
</ul>
</li>
<li>高性能
<ul>
<li>VuePress 会为每个页面预渲染生成静态的 HTML，同时，每个页面被加载的时候，将作为 SPA 运行</li>
</ul>
</li>
<li>主题
<ul>
<li>提供了一个开箱即用的默认主题。您也可以挑选一个社区主题，或者创建一个您自己的主题</li>
</ul>
</li>
<li>插件
<ul>
<li>灵活的插件API，使得插件可以为您的站点提供许多即插即用的功能</li>
</ul>
</li>
<li>打包工具
<ul>
<li>默认的打包工具是 Vite，也同样支持 Webpack</li>
</ul>
</li>
</ul>
<h2>快速搭建</h2>
<h3>依赖环境</h3>
<ul>
<li><code>Node.js v14.18.0+</code></li>
<li><code>Yarn v1 classic</code>（可选）</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>使用 <a href="https://pnpm.io/zh/" target="_blank" rel="noopener noreferrer">pnpm</a> 时，您可能需要安装 <code>vue</code> 和 <code>@vuepress/client</code> 作为 <code>peer-dependencies</code>（对等依赖关系），即 <code>pnpm add -D vue @vuepress/client@next</code></li>
<li>使用 <code>yarn 2</code> 时，您需要在 <code>.yarnrc.yml</code> 文件中设置 <code>nodeLinker: 'node-modules' </code></li>
</ul>
</div>
<h3>手动安装</h3>
<ol>
<li>
<p>创建并进入一个新目录</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mkdir</span><span style="color:#98C379;--shiki-dark:#98C379"> vuepress-starter</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">cd</span><span style="color:#98C379;--shiki-dark:#98C379"> vuepress-starter</span></span></code></pre>
</div></li>
<li>
<p>初始化项目</p>

</li>
<li>
<p>将 VuePress 安装为本地依赖</p>

</li>
<li>
<p>在 <code>package.json</code> 中添加一些 <a href="https://classic.yarnpkg.com/zh-Hans/" target="_blank" rel="noopener noreferrer">scripts</a></p>
<div class="language-json" data-ext="json" data-title="json"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "scripts"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "docs:dev"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress dev docs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "docs:build"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress build docs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
<li>
<p>将默认的临时目录和缓存目录添加到 <code>.gitignore</code> 文件中</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> 'node_modules'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">.gitignore</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> '.temp'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">.gitignore</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> '.cache'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">.gitignore</span></span></code></pre>
</div></li>
<li>
<p>创建您的第一篇文档</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mkdir</span><span style="color:#98C379;--shiki-dark:#98C379"> docs</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> '# Hello VuePress'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">docs/README.md</span></span></code></pre>
</div></li>
<li>
<p>在本地启动服务器来开发您的文档网站</p>

</li>
</ol>
<p>VuePress 会在 <code>http://localhost:8080</code> 启动一个热重载的开发服务器。当您修改您的 Markdown 文件时，浏览器中的内容也会自动更新。</p>
<p><strong>效果：</strong></p>
<figure><figcaption>build</figcaption></figure>
<h2>配置</h2>
<h3>配置文件</h3>
<p>如果没有任何配置，您的 VuePress 站点仅有一些 <strong>最基础</strong> 的功能。为了更好地自定义您的网站，让我们首先在您的文档目录下创建一个 <code>.vuepress</code> 目录，所有 VuePress 相关的文件都将会被放在这里。您的项目结构可能是这样：</p>
<div class="language-text" data-ext="text" data-title="text"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>├─ docs</span></span>
<span class="line"><span>│  ├─ .vuepress</span></span>
<span class="line"><span>│  │  └─ config.ts</span></span>
<span class="line"><span>│  └─ README.md</span></span>
<span class="line"><span>├─ .gitignore</span></span>
<span class="line"><span>└─ package.json</span></span></code></pre>
</div><p>VuePress 站点的基本配置文件是 <code>.vuepress/config.js</code>，但也同样支持 <code>TypeScript</code> 配置文件。您可以使用 <code>.vuepress/config.ts</code> 来得到更好的类型提示。</p>
<p>具体而言，我们对于配置文件的路径有着约定（按照 <strong>优先顺序</strong>）：</p>
<p>当前工作目录 <code>cwd</code> 下：</p>
<ul>
<li><code>vuepress.config.ts</code></li>
<li><code>vuepress.config.js</code></li>
<li><code>vuepress.config.mjs</code></li>
</ul>
<p>源文件目录 <code>sourceDir</code> 下：</p>
<ul>
<li><code>.vuepress/config.ts</code></li>
<li><code>.vuepress/config.js</code></li>
<li><code>.vuepress/config.mjs</code></li>
</ul>
<p>您也可以通过 <a href="https://v2.vuepress.vuejs.org/zh/reference/cli.html" target="_blank" rel="noopener noreferrer">命令行接口</a> 的 <code>--config</code> 选项来指定配置文件：</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">vuepress</span><span style="color:#98C379;--shiki-dark:#98C379"> dev</span><span style="color:#98C379;--shiki-dark:#98C379"> docs</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --config</span><span style="color:#98C379;--shiki-dark:#98C379"> my-config.js</span></span></code></pre>
</div><p>一个基础的配置文件是这样的：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defineUserConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> defineUserConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  lang</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'zh-CN'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'您好， VuePress ！'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'这是我的第一个 VuePress 站点'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">})</span></span></code></pre>
</div><div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>前往官网 <a href="https://v2.vuepress.vuejs.org/zh/reference/config.html" target="_blank" rel="noopener noreferrer">配置参考</a> 查看所有 VuePress 配置</p>
</div>
<h2>页面</h2>
<p>VuePress 是以 Markdown 为中心的。您项目中的每一个 Markdown 文件都是一个单独的页面。</p>
<h3>路由</h3>
<p>默认情况下，页面的路由路径是根据您的 Markdown 文件的 <strong>相对路径</strong> 决定的。</p>
<p>假设这是您的 Markdown 文件所处的目录结构：</p>
<div class="language-text" data-ext="text" data-title="text"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>└─ docs</span></span>
<span class="line"><span>   ├─ guide</span></span>
<span class="line"><span>   │  ├─ getting-started.md</span></span>
<span class="line"><span>   │  └─ README.md</span></span>
<span class="line"><span>   ├─ contributing.md</span></span>
<span class="line"><span>   └─ README.md</span></span></code></pre>
</div><p>将 <code>docs</code> 目录作为您的 <code>sourceDir</code>，例如您在运行 <code>vuepress dev docs</code> 命令。此时，您的 Markdown 文件对应的路由路径为：</p>
<p>|  相对路径  |  路由路径  |<br>
|  :</p>
]]></content:encoded>
    </item>
    <item>
      <title>VuePress 默认配置</title>
      <link>https://docs.lizili.online/guide/vuepress/config.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/config.html</guid>
      <source url="https://docs.lizili.online/rss.xml">VuePress 默认配置</source>
      <description>VuePress 官网配置 package.json 文件 packag.json 是项目的配置文件，常见的配置有配置项目启动、打包命令，声明依赖包等 在项目根目录下的 package.json 中添加 scripts 完整的 package.json 文件： name：指定项目包的名称 version：指定版本号。遵循 semver 版本规范 1：代...</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://v2.vuepress.vuejs.org/zh/reference/default-theme/config.html" target="_blank" rel="noopener noreferrer">VuePress 官网配置</a></p>
<h2>package.json 文件</h2>
<p><code>packag.json</code> 是项目的配置文件，常见的配置有配置项目启动、打包命令，声明依赖包等</p>
<p>在项目根目录下的 <code>package.json</code> 中添加 <code>scripts</code></p>
<div class="language-json" data-ext="json" data-title="json"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "scripts"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "dev"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress dev docs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "build"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress build docs"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div><p>完整的 <code>package.json</code> 文件：</p>
<div class="language-json line-numbers-mode" data-ext="json" data-title="json"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "name"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress-starter"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "version"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"1.0.0"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "description"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "main"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"index.js"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "scripts"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "dev"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress dev docs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "build"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"vuepress build docs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "test"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"echo </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379">Error: no test specified</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\"</span><span style="color:#98C379;--shiki-dark:#98C379"> &amp;&amp; exit 1"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "keywords"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [],</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "author"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "license"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"MIT"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  "devDependencies"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "@vuepress/client"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"2.0.0-beta.61"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "vue"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"^3.2.47"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    "vuepress"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"2.0.0-beta.61"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li><code>name</code>：指定项目包的名称</li>
<li><code>version</code>：指定版本号。遵循 semver 版本规范
<ul>
<li><code>1</code>：代表主版本号，表示有破坏性的更新</li>
<li><code>0</code>：代表次版本号，表示有功能的新增</li>
<li><code>0</code>：代表修订号，表示有 bug 的修复</li>
</ul>
</li>
<li><code>description</code>：项目的描述信息</li>
<li><code>main</code>：main 字段是一个模块的 id，它是您程序的主要入口</li>
<li><code>scripts</code>：指定项目的一些内置脚本命令
<ul>
<li><code>dev</code>：启动程序</li>
<li><code>build</code>：给本地环境打包</li>
<li><code>test</code>：一般用于执行测试，单元测试、*-lint……</li>
</ul>
</li>
<li><code>keywords</code>：一组项目的技术关键词</li>
<li><code>author</code>：项目作者</li>
<li><code>license</code>：项目的 <a href="https://www.51cto.com/article/749585.html" target="_blank" rel="noopener noreferrer">开源许可证</a>
<ul>
<li><code>MIT</code>：MIT 许可证是一种非常宽松的开源许可证，允许将软件用于商业和非商业用途，并且允许修改、分发和私有化软件</li>
<li><code>ISC</code>：ISC 许可证它的全称是 Internet Systems Consortium 许可证。ISC 许可证的主要特点是非常灵活和简洁，没有对用户和使用者的限制，同时也不对软件的衍生产品做限制</li>
</ul>
</li>
<li><code>devDependencies</code>：开发依赖，项目开发环境需要用到而运行时不需要的依赖，用于辅助开发</li>
</ul>
<h2>站点配置</h2>
<h3>base</h3>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>/</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>部署站点的基础路径</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  base</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>lang</h3>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>en-US</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>站点的语言</li>
<li>它将会在最终渲染出的 <code>HTML</code> 中作为 <code>&lt;html&gt;</code> 标签的 <code>lang</code> 属性</li>
<li>它可以设置在不同语言的 <code>locales</code> 中</li>
<li>如果在不同语言中设置则这里的设置 <strong>不生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  lang</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'zh-CN'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>title</h3>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>''</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>站点的标题</li>
<li>它将会作为所有页面标题的后缀，并且在默认主题的导航栏中显示</li>
<li>它可以设置在不同语言的 <code>locales</code> 中</li>
<li>如果在不同语言中设置则这里的设置 <strong>不生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'VuePress'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>description</h3>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>''</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>站点的描述</li>
<li>它将会在最终渲染出的 HTML 中作为 <code>&lt;meta name="description" /&gt;</code> 标签的 <code>content</code> 属性。它会被每个页面的 <code>Frontmatter</code> 中的 <code>description</code> 字段覆盖</li>
<li>它可以设置在不同语言的 <code>locales</code> 中</li>
<li>如果在不同语言中设置则这里的设置 <strong>不生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'使用 VuePress-v2 搭建的个人博客'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>head</h3>
<ul>
<li>
<p>类型：<code>HeadConfig[]</code></p>
</li>
<li>
<p>默认值：<code>[]</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>在最终渲染出的 HTML 的 <code>&lt;head&gt;</code> 标签内加入的额外标签</li>
<li>您可以通过 <code>[tagName, { attrName: attrValue }, innerHTML?]</code> 的格式来添加标签</li>
<li>它可以设置在不同语言的 <code>locales</code> 中</li>
<li>如果在不同语言中设置则这里的设置 <strong>不生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  head</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    [</span><span style="color:#98C379;--shiki-dark:#98C379">'link'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, { </span><span style="color:#E06C75;--shiki-dark:#E06C75">rel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'icon'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">href</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/logo.png'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> }]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>locales</h3>
<ul>
<li>
<p>类型：<code>{ [path: string]: Partial&lt;SiteLocaleData&gt; }</code></p>
</li>
<li>
<p>默认值：<code>{}</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>多语言支持的各个语言 <code>locales</code></li>
<li>可以使用的字段有：<code>lang</code>、<code>title</code>、<code>description</code>、<code>head</code></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 键名是该语言所属的子路径</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 作为特例，默认语言可以使用 '/' 作为其路径。</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      lang</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'en-US'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'VuePress'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Vue-powered Static Site Generator'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      lang</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'zh-CN'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'VuePress'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Vue 驱动的静态网站生成器'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
</ul>
<h3>主题配置</h3>
<ul>
<li>
<p>类型：<code>Theme</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>设置站点要使用的主题</li>
<li>如果不设置该选项，将会使用默认主题</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'English'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'简体中文'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>dest</h3>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>${sourceDir}/.vuepress/dist</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>指定 <code>vuepress build</code> 命令的输出目录</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    dest</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"docs/.vuepress/dist"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>temp</h3>
<ul>
<li>类型：<code>string</code></li>
<li>默认值：<code>${sourceDir}/.vuepress/.temp</code></li>
<li>详情：
<ul>
<li>指定临时文件目录</li>
</ul>
</li>
</ul>
<div class="hint-container warning">
<p class="hint-container-title">注意</p>
<p>VuePress 在开发和构建时会加载临时文件，因此临时文件目录应位于项目根目录内部，以便可以正确地解析到依赖</p>
</div>
<h3>cache</h3>
<ul>
<li>类型：<code>string</code></li>
<li>默认值：<code>${sourceDir}/.vuepress/.cache</code></li>
<li>详情：
<ul>
<li>指定缓存文件目录</li>
</ul>
</li>
</ul>
<h3>public</h3>
<ul>
<li>类型：<code>string</code></li>
<li>默认值：<code>${sourceDir}/.vuepress/public</code></li>
<li>详情：
<ul>
<li>指定 Public 文件目录</li>
</ul>
</li>
</ul>
<h3>pagePatterns</h3>
<ul>
<li>类型：<code>string[]</code></li>
<li>默认值：<code>['**/*.md', '!.vuepress', '!node_modules']</code></li>
<li>详情：
<ul>
<li>指定页面文件的 Patterns。这些 Patterns 是相对于 Source 目录的</li>
</ul>
</li>
</ul>
<h3>plugins 插件配置</h3>
<ul>
<li>
<p>类型：<code>PluginConfig[]</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>要使用的插件</li>
<li>该配置项接收一个数组，其中的每一个数组项是一个或一组插件</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">googleAnalyticsPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> '@vuepress/plugin-google-analytics'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    googleAnalyticsPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      id</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'G-XXXXXXXXXX'</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h2>主题配置</h2>
<h3>locales</h3>
<ul>
<li>
<p>类型：<code>{ [path: string]: Partial&lt;DefaultThemeLocaleData&gt; }</code></p>
</li>
<li>
<p>默认值：<code>{}</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>多语言支持的各个语言 <code>locales</code></li>
<li>所有在 <a href="#locale-%E9%85%8D%E7%BD%AE">Locale 配置</a> 内的配置项都可以在 <code>locales</code> 中使用</li>
<li>该配置项仅能在 <strong>默认主题</strong> 内生效，注意不要和 <strong>站点配置</strong> 中的 <code>locales</code> 混淆</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'English'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'简体中文'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h3>Locale 配置</h3>
<p>该 Locale 内的配置项可以作为一般配置使用，也可以使用在 <a href="#locales-1">locales</a> 内。</p>
<h4>colorMode</h4>
<ul>
<li>
<p>类型：<code>'auto' | 'light' | 'dark'</code></p>
</li>
<li>
<p>默认值：<code>'auto'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>默认颜色模式</li>
<li>如果设置为 <code>'auto'</code> ，则会根据 <a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media/prefers-color-scheme" target="_blank" rel="noopener noreferrer">prefers-color-scheme</a> 自动设置初始颜色模式</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    colorMode</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'auto'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>colorModeSwitch</h4>
<ul>
<li>
<p>类型：<code>boolean</code></p>
</li>
<li>
<p>默认值：<code>true</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>是否启用切换颜色模式的功能</li>
<li>如果设置为 <code>true</code>，将会在导航栏展示一个切换颜色模式的按钮</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    colorModeSwitch</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>home</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>/</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>首页的路径</li>
<li>它将被用于：导航栏中 <strong>Logo</strong> 的链接或 404 页面的 <strong>返回首页</strong> 链接</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>navbar</h4>
<ul>
<li>
<p>类型： <code>false | (NavbarItem | NavbarGroup | string)[]</code></p>
</li>
<li>
<p>默认值： <code>[]</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>导航栏配置</li>
<li>设置为 <code>false</code> 可以禁用导航栏</li>
<li>为了配置导航栏元素，您可以将其设置为 <strong>导航栏数组</strong>，其中的每个元素是 <strong>NavbarItem 对象</strong>、<strong>NavbarGroup 对象</strong>、或者 <strong>字符串</strong>
<ul>
<li><strong>NavbarItem 对象</strong> 应该有一个 <code>text</code> 字段和一个 <code>link</code> 字段，还有一个可选的 <code>activeMatch</code> 字段</li>
<li><strong>NavbarGroup 对象</strong> 应该有一个 <code>text</code> 字段和一个 <code>children</code> 字段。 <code>children</code> 字段同样是一个 <strong>导航栏数组</strong></li>
<li><strong>字符串</strong> 应为目标页面文件的路径。它将会被转换为 <strong>NavbarItem 对象</strong>，将页面标题作为 <code>text</code>，将页面路由路径作为 <code>link</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    navbar</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // NavbarItem</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Foo'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        link</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/foo/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // NavbarGroup</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Group'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'/group/foo.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'/group/bar.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 字符串 - 页面文件路径</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/bar/README.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 嵌套 Group - 最大深度为 2</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Group'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'SubGroup'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'/group/sub/foo.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'/group/sub/bar.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 控制元素何时被激活</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Group 2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Always active'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            link</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">            // 该元素将一直处于激活状态</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            activeMatch</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Active on /foo/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            link</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/not-foo/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">            // 该元素在当前路由路径是 /foo/ 开头时激活</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">            // 支持正则表达式</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            activeMatch</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'^/foo/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
</ul>
<h4>logo</h4>
<ul>
<li>
<p>类型：<code>null | string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>Logo 图片的 <code>URL</code></li>
<li>Logo 图片将会显示在导航栏的左端</li>
<li>设置为 <code>null</code> 可以禁用 Logo</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // Public 文件路径</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    logo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/images/hero.png'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // URL</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    logo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'https://vuejs.org/images/logo.png'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>logoDark</h4>
<ul>
<li>
<p>类型：<code>null | string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>在夜间模式中使用的 Logo 图片的 <code>URL</code></li>
<li>如果您想在夜间模式中使用不同的 Logo 图片，就可以使用该配置</li>
<li>设置为 <code>null</code> 可以在夜间模式下禁用 Logo。忽略该配置项将会在夜间模式中使用 logo 配置</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // Public 文件路径</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    logoDark</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/images/hero.png'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // URL</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    logoDark</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'https://vuejs.org/images/logo.png'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>repo</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>项目仓库的 <code>URL</code></li>
<li>它将被用作 <strong>仓库链接</strong> 的链接。仓库链接将会显示为导航栏的最后一个元素</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 如果您按照 `organization/repository` 的格式设置它</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 我们会将它作为一个 GitHub 仓库</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    repo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'vuejs/vuepress'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 您也可以直接将它设置为一个 URL</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    repo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'https://gitlab.com/foo/bar'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>selectLanguageText</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>选择语言菜单的文字</li>
<li>如果您在站点配置中设置了多个 <code>locales</code>，那么 <strong>选择语言菜单</strong> 就会显示在导航栏中仓库按钮的旁边</li>
<li>该配置项 <strong>仅能在主题配置的 <code>locales</code> 的内部生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageText</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Languages'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageText</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'选择语言'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>selectLanguageAriaLabel</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>选择语言菜单的 <code>aria-label</code> 属性</li>
<li>它主要是为了站点的可访问性（a11y）</li>
<li>该配置项 <strong>仅能在主题配置的 <code>locales</code> 的内部生效</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageAriaLabel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Languages'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageAriaLabel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'选择语言'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>selectLanguageName</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li><code>Locale</code> 的语言名称</li>
<li>该配置项 <strong>仅能在主题配置的 locales 的内部生效</strong>。它将被用作 <code>locale</code> 的语言名称，展示在 <strong>选择语言菜单</strong> 内</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    locales</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'English'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/zh/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        selectLanguageName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'简体中文'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>sidebar</h4>
<ul>
<li>
<p>类型：<code>false | 'auto' | SidebarConfigArray | SidebarConfigObject</code></p>
</li>
<li>
<p>默认值：<code>'auto'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>侧边栏配置</li>
<li>您可以通过页面的 <code>sidebar frontmatter</code> 来覆盖这个全局配置</li>
<li>设置为 <code>false</code> 可以禁用侧边栏</li>
<li>如果您设置为 <code>'auto'</code>，侧边栏会根据页面标题自动生成</li>
<li>为了手动配置侧边栏元素，您可以将其设置为 <strong>侧边栏数组</strong>，其中的每个元素是一个 <strong>SidebarItem 对象</strong> 或者一个 <strong>字符串</strong>
<ul>
<li><strong>SidebarItem 对象</strong> 应该有一个 <code>text</code> 字段，有一个可选的 <code>link</code> 字段、一个可选的 <code>children</code> 字段和一个可选的 <code>collapsible</code> 字段。 <code>children</code> 字段同样是一个 <strong>侧边栏数组</strong>。<code>collapsible</code> 字段来控制它是否可折叠</li>
<li><strong>字符串</strong> 应为目标页面文件的路径。它将会被转换为 <strong>SidebarItem 对象</strong>，将页面标题作为 <code>text</code>，将页面路由路径作为 <code>link</code>，并根据页面小标题自动生成 <code>children</code></li>
</ul>
</li>
<li>如果您想在不同子路径中使用不同的侧边栏，您可以将该配置项设置为 <strong>侧边栏对象</strong>
<ul>
<li>Key 为路径前缀</li>
<li>Value 为 <strong>侧边栏数组</strong></li>
</ul>
</li>
</ul>
</li>
<li>
<p>示例1：</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 侧边栏数组</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 所有页面会使用相同的侧边栏</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    sidebar</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // SidebarItem</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Foo'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        link</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'/foo/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          // SidebarItem</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'github'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            link</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'https://github.com'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          // 字符串 - 页面文件路径</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          '/foo/bar.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 字符串 - 页面文件路径</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/bar/README.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
<li>
<p>示例2：</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 侧边栏对象</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 不同子路径下的页面会使用不同的侧边栏</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    sidebar</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/guide/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Guide'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'/guide/README.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'/guide/getting-started.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      ],</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '/reference/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          text</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'Reference'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          // 可折叠的侧边栏</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          collapsible</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          children</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'/reference/cli.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'/reference/config.md'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
</ul>
<h4>sidebarDepth</h4>
<ul>
<li>
<p>类型：<code>number</code></p>
</li>
<li>
<p>默认值：<code>2</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>设置根据页面标题自动生成的侧边栏的最大深度
<ul>
<li>设为 <code>0</code> 来禁用所有级别的页面标题</li>
<li>设为 <code>1</code> 来包含 <code>&lt;h2&gt;</code> 标题</li>
<li>设为 <code>2</code> 来包含 <code>&lt;h2&gt;</code> 和 <code>&lt;h3&gt;</code> 标题</li>
<li>...</li>
</ul>
</li>
<li>最大值取决于您通过 <a href="https://v2.vuepress.vuejs.org/zh/reference/config.html#markdown-headers" target="_blank" rel="noopener noreferrer">markdown.headers.level</a> 提取了哪些级别的标题</li>
<li>由于 <code>markdown.headers.level</code> 的默认值是 <code>[2, 3]</code>，因此 <code>sidebarDepth</code> 的默认最大值是 <code>2</code></li>
<li>您可以通过页面的 <code>sidebarDepth frontmatter</code> 来覆盖这个全局配置</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    sidebarDepth</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>editLink</h4>
<ul>
<li>
<p>类型：<code>boolean</code></p>
</li>
<li>
<p>默认值：<code>true</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>是否启用 <strong>编辑此页</strong> 链接</li>
<li>您可以通过页面的 <code>editLink frontmatter</code> 来覆盖这个全局配置</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    editLinks</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>editLinkText</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'Edit this page'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li><strong>编辑此页</strong> 链接的文字</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    editLinkText</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'编辑此页'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>docsDir</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>''</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>文档源文件存放在仓库中的目录名</li>
<li>它将会用于生成 <strong>编辑此页</strong> 的链接</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    docsDir</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'docs'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>lastUpdated</h4>
<ul>
<li>
<p>类型：<code>boolean</code></p>
</li>
<li>
<p>默认值：<code>true</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>是否启用 <strong>最近更新时间戳</strong></li>
<li>您可以通过页面的 <code>lastUpdated frontmatter</code> 来覆盖这个全局配置。要注意的是，如果您已经将该选项设为了 <code>false</code>，那么这个功能会被完全禁用，并且无法在 <code>locales</code> 或页面 <code>frontmatter</code> 中启用</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    lastUpdated</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>lastUpdatedText</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'Last Updated'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>最近更新时间戳 <strong>标签的文字</strong></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    lastUpdatedText</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'上次更新'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>notFound</h4>
<ul>
<li>
<p>类型：<code>string[]</code></p>
</li>
<li>
<p>默认值：<code>['Not Found']</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li><strong>404 页面</strong> 的提示信息</li>
<li>当用户进入 404 页面时，会从数组中随机选取一条信息进行展示</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    notFound</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '这里什么都没有'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '我们怎么到这来了？'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '这是一个 404 页面'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      '看起来我们进入了错误的链接'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>backToHome</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'Back to home'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>404 页面中 <strong>返回首页</strong> 链接的文字</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    backToHome</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'返回首页'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>openInNewWindow</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'open in new window'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li><a href="https://v2.vuepress.vuejs.org/zh/reference/plugin/external-link-icon.html#externallinkicon" target="_blank" rel="noopener noreferrer">ExternalLinkIcon.</a> 链接内的 <code>sr-only</code> 文字</li>
<li>它主要是为了站点的可访问性（a11y）</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    openInNewWindow</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'在新窗口打开'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>toggleColorMode</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'toggle color mode'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>切换颜色模式按钮的标题文字</li>
<li>它主要是为了站点的可访问性（a11y）</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    toggleColorMode</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'切换颜色模式'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h4>toggleSidebar</h4>
<ul>
<li>
<p>类型：<code>string</code></p>
</li>
<li>
<p>默认值：<code>'toggle sidebar'</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>切换侧边栏按钮的标题文字</li>
<li>它主要是为了站点的可访问性（a11y）</li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-ts" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  theme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">defaultTheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    toggleSidebar</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'切换侧边栏'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></li>
</ul>
<h2>Frontmater 站点首页</h2>
<p>默认的主题提供了一个首页（Homepage）的布局（用于这个网站的主页）。</p>
<p>想要使用它，需要在您的根级 <code>README.md</code> 或 <code>index.md</code> 的 <a href="https://jekyllrb.com/" target="_blank" rel="noopener noreferrer">YAML front matter</a> 指定 <code>home: true</code>。</p>
<h3>首页</h3>
<p>本节的 <code>Frontmatter</code> 只会在首页中生效。</p>
<h4>home</h4>
<ul>
<li>
<p>类型：<code>boolean</code></p>
</li>
<li>
<p>详情：</p>
<ul>
<li>设定该页面是 <strong>首页</strong> 还是 <strong>普通页面</strong></li>
<li>如果您不设置该 <code>Frontmatter</code> 或将其设为 <code>false</code>，则该页面会是一个 <a href="#%E6%99%AE%E9%80%9A%E9%A1%B5%E9%9D%A2">普通页面</a></li>
</ul>
</li>
<li>
<p>示例：</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"></span></code></pre>
</div></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>VuePress 问题</title>
      <link>https://docs.lizili.online/guide/vuepress/problem.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/problem.html</guid>
      <source url="https://docs.lizili.online/rss.xml">VuePress 问题</source>
      <description>使用 VuePress 遇到的一些问题。</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>使用 VuePress 遇到的一些问题。</p>
<!-- more -->
<h2>Node 内存泄漏耗尽</h2>
<div class="hint-container caution">
<p class="hint-container-title">警告</p>
<p>致命错误：使用任何 “NPM” 命令时 JavaScript 堆将耗尽内存</p>
</div>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>vuepress-theme-hope 主题</title>
      <link>https://docs.lizili.online/guide/vuepress/theme_config.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/theme_config.html</guid>
      <source url="https://docs.lizili.online/rss.xml">vuepress-theme-hope 主题</source>
      <description>vuepress-theme-hope 主题
在 VuePress 中，有三种配置概念：

站点配置：这是您在配置文件中直接导出的对象
主题配置：传递给 hopeTheme 的第一个对象
页面配置：由在页面顶部基于 YAML 语法的 Frontmatter 提供

使用主题

多语言
设置语言
您需要为每个语言设置 lang 选项。即使您只在使用单个语...</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<p><a href="https://theme-hope.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-theme-hope 主题</a></p>
<p>在 VuePress 中，有三种配置概念：</p>
<ul>
<li><strong>站点配置</strong>：这是您在配置文件中直接导出的对象</li>
<li><strong>主题配置</strong>：传递给 <code>hopeTheme</code> 的第一个对象</li>
<li><strong>页面配置</strong>：由在页面顶部基于 <code>YAML</code> 语法的 <code>Frontmatter</code> 提供</li>
</ul>
<h2>使用主题</h2>

<h2>多语言</h2>
<h3>设置语言</h3>
<p>您需要为每个语言设置 <code>lang</code> 选项。即使您只在使用单个语言，您也必须在 <code>.vuepress/config.{js,ts}</code> 中设置 <code>lang</code>。</p>
<div class="hint-container tip">
<p class="hint-container-title">为什么要这样做</p>
<p>要提供正确的语言环境文本，主题需要知道根文件夹以及每个多语言文件夹正在使用哪种语言</p>
</div>

<h3>多语言配置</h3>
<p><code>locales</code> 是一个对象，其键为每个语言的路径前缀，值为该语言的配置，可以包含 <code>title</code>、<code>description</code>、<code>lang</code> 等。</p>
<p>您应当为每个语言设置 <code>lang</code> 选项，以便主题和插件能够正确的处理它们。</p>
<p>如果站点和主题配置中的 <code>locales</code> 对象只包含 <code>"/"</code> 一个键，则主题不会显示语言切换菜单。当您通过 <code>locales</code> 设置多个键，即存在多个语言的时候，我们会在导航栏显示语言切换菜单。</p>
<h3>为每个语言设置主题选项</h3>
<p>与站点配置和 <code>@vuepress/theme-default</code> 的主题配置相同，<code>vuepress-theme-hope</code> 也支持您在主题选项中设置 <code>locale</code> 选项，并为每种语言设置不同的配置。</p>

<h2>主题配置</h2>
<h3>主题基本选项</h3>
<ul>
<li><strong>hostname</strong>：当前网站部署到的域名</li>
<li><strong>auther</strong>：文章显示的默认作者</li>
<li><strong>favicon</strong>：站点图标</li>
<li><strong>navbar</strong>：导航栏配置</li>
<li><strong>sidebar</strong>：侧边栏配置</li>
<li><strong>locales</strong>：主题的多语言配置，您可以在这里分别为每个语言设置单独的选项</li>
<li><strong>extraLocales</strong>：站点的额外语言环境，其中键名是语言名称，值是站点路径，<code>:route</code> 将替换为当前路由路径</li>
<li><strong>hotReload</strong>：是否需要在开发服务器启用完整功能与热更新。是否在开发服务器中启用热重载</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>通常，您会希望：</p>
<ul>
<li>开发服务器可以被尽快启动</li>
<li>对项目的修改可以在开发服务器上快速生效，并避免重新启动整个 VuePress 应用程序</li>
</ul>
<p>为了达到这个预期，主题需要在开发服务器上的跳过一些耗时操作，并且需要在开发服务器上禁用一些由页面修改触发的耗时功能，以提高项目启动和热更新的速度。同时，由于一些修改会改变 VuePress 的底层原始数据，这些修改会导致网页刷新并重新加载整个 VuePress 应用程序。为了避免在修改 Markdown 时频繁的页面重新加载 (即：触发页面刷新并且获得几秒钟的白屏)，该主题禁用了开发服务器上的某些功能</p>
<p>默认情况下，开发服务器拥有以下限制：</p>
<ul>
<li>不启用基于 Git 的功能，包括贡献者、自动创建日期和最后更新时间（调用 Git 程序以及文件 IO 会导致高耗时）</li>
<li>结构化侧边栏只会在应用启动时生成，后续不会更新（侧边栏排序和索引取决于每个页面 frontmatter，Markdown 内容的任何变化都会触发重新计算，因此大量页面会导致高耗时）</li>
<li>博客文章、标签、分类和每个分类中的文章列表不会随着开发服务器更新（Markdown 内容的任何变化都会触发重新计算，所以大量的页面会导致高耗时）</li>
<li>博客文章信息不含阅读时间和字数信息（Markdown 内容的任何更改都会更改页面字数信息，并因更新了 VuePress 底层原始数据导致页面刷新）</li>
</ul>
<p>启用它意味着您接受每次修改都会触发一些高耗时计算并且整个应用程序将重新启动，这通常会导致页面刷新，并在在性能较弱的环境中获得数秒白屏</p>
</div>
<h3>主题功能选项</h3>
<h4>博客选项</h4>
<p>主题通过使用 <a href="https://plugin-blog2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-blog2</a> 提供博客功能，且该功能默认 <strong>禁用。</strong></p>
<p>要启用博客插件并使用默认选项，您可以在主题选项中设置 <code>plugins.blog: true</code>。</p>
<ul>
<li>
<p><strong><a href="http://blog.name" target="_blank" rel="noopener noreferrer">blog.name</a></strong>：博主姓名</p>
</li>
<li>
<p><strong>blog.avatar</strong>：博主头像</p>
</li>
<li>
<p><strong>blog.description</strong>：口号、座右铭或介绍语</p>
</li>
<li>
<p><strong>blog.intro</strong>：博主的个人介绍地址</p>
<div class="hint-container note">
<p class="hint-container-title">注</p>
<p>填写后将可以点击 <strong>博主信息</strong> 中的头像或姓名进入个人介绍页</p>
</div>
</li>
<li>
<p><strong>blog.medias</strong>：博主的媒体链接配置</p>
<ul>
<li>
<p>如果社交媒体已在下方列表中，您可以直接设置 <strong>社交媒体名称: 社交媒体地址</strong></p>
</li>
<li>
<p>否则，您应该传入一个元组 <strong>社交媒体名称: [社交媒体地址, 社交媒体 SVG 图标字符串或路径]</strong></p>
</li>
<li>
<p>元组的第二个元素应该是一个合法的 SVG 字符串或是一个完整的 SVG 文件路径</p>
<div class="hint-container info">
<p class="hint-container-title">可用的社交媒体</p>
<ul>
<li><strong>"Baidu"</strong>：百度</li>
<li><strong>"BiliBili"</strong>：哔哩哔哩</li>
<li><strong>"Bitbucket"</strong>：Bitbucket</li>
<li><strong>"Dingding"</strong>：钉钉</li>
<li><strong>"Discord"</strong>：Discord</li>
<li><strong>"Douban"</strong>：豆瓣</li>
<li><strong>"Dribbble"</strong>：Dribbble</li>
<li><strong>"Email"</strong>：邮件</li>
<li><strong>"Evernote"</strong>：印象笔记</li>
<li><strong>"Facebook"</strong>：脸书</li>
<li><strong>"Flipboard"</strong>：红板报</li>
<li><strong>"Gitee"</strong>：码云</li>
<li><strong>"GitHub"</strong>：GitHub</li>
<li><strong>"Gitlab"</strong>：Gitlab</li>
<li><strong>"Gmail"</strong>：谷歌邮箱</li>
<li><strong>"Instagram"</strong>：Instagram</li>
<li><strong>"Lark"</strong>：飞书</li>
<li><strong>"Line"</strong>：Line</li>
<li><strong>"Linkedin"</strong>：领英</li>
<li><strong>"Pinterest"</strong>：拼趣</li>
<li><strong>"Pocket"</strong>：Pocket</li>
<li><strong>"QQ"</strong>：QQ</li>
<li><strong>"Qzone"</strong>：QQ 空间</li>
<li><strong>"Reddit"</strong>：红迪</li>
<li><strong>"Rss"</strong>：RSS 地址</li>
<li><strong>"Steam"</strong>：蒸汽</li>
<li><strong>"Skype"</strong>：Skype</li>
<li><strong>"Telegram"</strong>：电报</li>
<li><strong>"Twitter"</strong>：推特</li>
<li><strong>"Wechat"</strong>：微信</li>
<li><strong>"Weibo"</strong>：微博</li>
<li><strong>"Whatsapp"</strong>：瓦次艾普</li>
<li><strong>"Youtube"</strong>：油管</li>
<li><strong>"Zhihu"</strong>：知乎</li>
</ul>
<p>（请不要好奇为什么这里一定要加上特别奇怪的中文翻译）</p>
</div>
</li>
</ul>
</li>
<li>
<p><strong>blog.roundAvatar</strong>：是否剪裁头像为圆形形状。默认值：<code>false</code></p>
</li>
<li>
<p><strong>blog.sidebarDisplay</strong>：是否在侧边栏展示博主信息。默认值：<code>"mobile"</code></p>
<ul>
<li><strong>"mobile"</strong>：在移动视图中显示在侧边栏中</li>
<li><strong>"always"</strong>：总是展示在侧边栏中</li>
<li><strong>"none"</strong>：永远不在侧边栏展示</li>
</ul>
</li>
<li>
<p><strong>blog.timeline</strong>：时间轴的顶部文字。默认值：<code>"昨日不在"</code></p>
</li>
<li>
<p><strong>blog.articlePerPage</strong>：每页的文章数量。默认值：<code>10</code></p>
</li>
<li>
<p><strong>blog.articleInfo</strong>：文章列表中展示的文章信息。默认值：<code>["Author", "Original", "Date", "PageView", "Category", "Tag", "ReadingTime"]</code></p>
<ul>
<li>
<p><strong>"Author"</strong>：作者</p>
</li>
<li>
<p><strong>"Category"</strong>：分类</p>
</li>
<li>
<p><strong>"Date"</strong>：写作日期</p>
</li>
<li>
<p><strong>"Original"</strong>：是否原创</p>
</li>
<li>
<p><strong>"Tag"</strong>：标签</p>
</li>
<li>
<p><strong>"ReadingTime"</strong>：预计阅读时间</p>
</li>
<li>
<p><strong>"PageView"</strong>：页面浏览量</p>
<div class="hint-container warning">
<p class="hint-container-title">注意</p>
<p>默认情况下，<code>ReadingTime</code> 和 <code>Word</code> 在开发服务器中不可用，<a href="#%E4%B8%BB%E9%A2%98%E5%9F%BA%E6%9C%AC%E9%80%89%E9%A1%B9">查看原因以及如何启用它</a></p>
</div>
</li>
</ul>
</li>
</ul>
<h4>加密配置</h4>
<ul>
<li>
<p><strong>encrypt.global</strong>：是否全局加密。默认值：<code>false</code></p>
</li>
<li>
<p><strong>encrypt.admin</strong>：最高权限密码，可以以数组的形式设置多个</p>
</li>
<li>
<p><strong>encrypt.config</strong>：加密配置，为一个对象，键名为匹配的路径，键值为对应的密码，接受字符串或字符串数组</p>
<details class="hint-container details"><summary>例子</summary>
<div class="language-js" data-ext="js" data-title="js"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 这会加密整个 guide 目录，并且两个密码都是可用的</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  "/guide/"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"1234"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"5678"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">],</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 这只会加密 config/page.html</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  "/config/page.html"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"1234"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div></details>
</li>
</ul>
<h3>主题布局选项</h3>
<h4>导航栏</h4>
<ul>
<li><strong>navbar</strong>：导航栏配置</li>
<li><strong>navbarIcon</strong>：是否在导航栏显示图标。默认值：<code>true</code></li>
<li><strong>navbarLayout</strong>：自定义导航栏布局。默认值：<code>{ start: ["Brand"], center: ["Links"], end: ["Language", "Repo", "Outlook", "Search"] }</code></li>
<li><strong>logo</strong>：导航栏图标，应为基于 <code>.vuepress/public</code> 文件夹的绝对路径</li>
<li><strong>logoDark</strong>：夜间模式下导航栏图标，应为基于 <code>.vuepress/public</code> 文件夹的绝对路径</li>
<li><strong>repo</strong>：仓库配置，用于在导航栏中显示仓库链接</li>
<li><strong>repoDisplay</strong>：是否在导航栏显示仓库链接。默认值：<code>true</code></li>
<li><strong>repoLabel</strong>：用于导航栏仓库按钮的无障碍标签</li>
<li><strong>navbarAutoHide</strong>：是否在向下滚动时自动隐藏导航栏。默认值：<code>"mobile"</code></li>
<li><strong>hideSiteNameOnMobile</strong>：是否在移动视图下隐藏站点名称。默认值：<code>true</code></li>
</ul>
<h4>侧边栏</h4>
<ul>
<li><strong>sidebar</strong>：侧边栏配置</li>
<li><strong>sidebarIcon</strong>：是否在侧边栏显示图标。默认值：<code>true</code></li>
<li><strong>sidebarSorter</strong>：结构侧边栏排序器。默认值：<code>["readme", "order", "title", "filename"]</code>
<ul>
<li><strong>readme</strong>：<code>README.md</code> 或 <code>readme.md</code> 在前</li>
<li><strong>order</strong>：正序在前并按其值升序排列，负序在后并按其值降序排列</li>
<li><strong>date</strong>：按日期升序排序</li>
<li><strong>date-desc</strong>：按日期降序排序</li>
<li><strong>title</strong>：按标题字母顺序排序</li>
<li><strong>filename</strong>：按文件名字母顺序排序</li>
</ul>
</li>
<li><strong>headerDepth</strong>：侧边栏嵌套的标题深度。默认值：<code>2</code></li>
</ul>
<h4>路径导航</h4>
<ul>
<li><strong>breadcrumb</strong>：是否全局启用路径导航。默认值：<code>true</code></li>
<li><strong>breadcrumbIcon</strong>：是否在路径导航显示图标。默认值：<code>true</code></li>
<li><strong>prevLink</strong>：是否在页面底部显示上一篇链接。默认值：<code>true</code></li>
<li><strong>nextLink</strong>：是否在页面底部显示下一篇链接。默认值：<code>true</code></li>
</ul>
<h4>标题</h4>
<ul>
<li><strong>titleIcon</strong>：是否在页面标题旁显示图标。默认值：<code>true</code></li>
<li><strong>pageInfo</strong>：文章信息，可以填入数组，数组的顺序是各条目显示的顺序。填入 <code>false</code> 使其被禁用。默认值：<code>["Author", "Original", "Date", "Category", "Tag", "ReadingTime"]</code>
<ul>
<li><strong>"Author"</strong>：作者</li>
<li><strong>"Date"</strong>：写作日期</li>
<li><strong>"Original"</strong>：是否原创</li>
<li><strong>"Category"</strong>：分类</li>
<li><strong>"Tag"</strong>：标签</li>
<li><strong>"ReadingTime"</strong>：预计阅读时间</li>
<li><strong>"Word"</strong>：字数</li>
<li><strong>"PageView"</strong>：页面浏览量</li>
</ul>
</li>
</ul>
<h4>Meta</h4>
<ul>
<li><strong>lastUpdated</strong>：是否显示页面最后更新时间。默认值：<code>true</code></li>
<li><strong>contributors</strong>：是否显示页面贡献者。默认值：<code>true</code></li>
<li><strong>editLink</strong>：是否展示编辑此页链接。默认值：<code>true</code></li>
<li><strong>editLinkPattern</strong>：编辑链接的匹配。其中 <code>:repo</code> <code>:branch</code> <code>:path</code> 会被自动替换为 <code>docsRepo</code> <code>docsBranch</code> 和 <code>docsDir + filePath</code></li>
<li><strong>docsRepo</strong>：文档仓库。默认值：<code>repo</code></li>
<li><strong>docsBranch</strong>：文档所在分支。默认值：<code>"main"</code></li>
<li><strong>docsDir</strong>：文档在仓库中的目录。默认值：<code>""</code></li>
</ul>
<h4>页脚</h4>
<ul>
<li><strong>footer</strong>：页脚的默认内容，可输入 <code>HTMLString</code></li>
<li><strong>copyright</strong>：默认的版权信息，设置为 false 来默认禁用它。默认值：<code>"Copyright © &lt;作者&gt;"</code></li>
<li><strong>displayFooter</strong>：是否默认显示页脚。默认值：<code>false</code></li>
</ul>
<h4>杂项</h4>
<ul>
<li><strong>home</strong>：当前语言的主页路径，用于导航栏图标和返回主页按钮的链接。默认值：当前 <code>locale</code> 的键名</li>
<li><strong>rtl</strong>：是否使用 RTL 布局。默认值：<code>false</code></li>
<li><strong>toc</strong>：是否在桌面模式下右侧展示标题列表。默认值：<code>true</code></li>
</ul>
<h3>主题外观选项</h3>
<ul>
<li><strong>iconAssets</strong>：字体图标资源链接，支持 <code>'iconfont'</code> 和 <code>'fontawesome'</code> 关键字</li>
<li><strong>darkmode</strong>：深色模式支持。默认值：<code>"switch"</code>
<ul>
<li><strong>"switch"</strong>：在深色模式，浅色模式和自动之间切换</li>
<li><strong>"toggle"</strong>：在深色模式和浅色模式之间切换</li>
<li><strong>"auto"</strong>：自动根据用户设备主题或当前时间决定是否应用深色模式</li>
<li><strong>"enable"</strong>：强制深色模式</li>
<li><strong>"disable"</strong>：禁用深色模式</li>
</ul>
</li>
<li><strong>themeColor</strong>：主题色选择器配置。默认值：<code>false</code></li>
<li><strong>fullscreen</strong>：是否显示全屏按钮。默认值：<code>false</code></li>
<li><strong>backToTop</strong>：是否显示返回顶部按钮。默认值：<code>true</code></li>
<li><strong>mobileBreakPoint</strong>：切换桌面布局和移动布局的窗口宽度，单位像素。默认值：<code>719</code></li>
<li><strong>pcBreakPoint</strong>：切换桌面布局和宽屏布局的窗口宽度，单位像素。默认值：<code>1440</code></li>
<li><strong>pure</strong>：是否开启纯净模式。默认值：<code>false</code></li>
<li><strong>print</strong>：是否在桌面模式下显示打印按钮。默认值：<code>true</code></li>
<li><strong>iconPrefix</strong>：通常情况下，它可以识别 <code>iconAssets</code> 并自动设置，如果识别失败，您可以手动设置图标的 <code>FontClass</code> 前缀</li>
</ul>
<h3>主题行为选项</h3>
<p><code>hopeTheme()</code> 接受可选的第二个参数，即行为选项。行为选项控制主题的行为。</p>
<p>行为选项也可接受一个布尔值：</p>
<ul>
<li><strong>false</strong>：意味着所有选项都设置为 <code>false</code></li>
<li><strong>true</strong>：意味着 <code>{ check: true, compact:true, custom :false, debug: false }</code></li>
</ul>

<ul>
<li><strong>check</strong>：是否执行附加检查。检查包括运行时检查和 <code>frontmatter</code> 检查。不兼容的值将被警告。默认值：<code>true</code></li>
<li><strong>compact</strong>：是否兼容历史版本（v1 最新版本和 v2 beta 版本）。默认值：<code>true</code></li>
<li><strong>custom</strong>：是否启用通过别名导入组件的自定义支持。默认值：<code>false</code></li>
<li><strong>debug</strong>：是否在调试模式下运行。默认值：<code>false</code></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注</p>
<p><code>check</code> 和 <code>check</code> 选项将在稳定版本中恢复为 <code>false</code> 作为默认值</p>
</div>
<h2>Frontmatter 配置</h2>
<h3>信息 Frontmatter 配置</h3>
<ul>
<li><strong>title</strong>：当前页面内容标题，默认为 Markdown 文件中的第一个 <code>h1</code> 标签内容</li>
<li><strong>shortTitle</strong>：当前页面的短标题，会在导航栏、侧边栏和路径导航中作为首选</li>
<li><strong>description</strong>：当前页面内容描述</li>
<li><strong>icon</strong>：当前页面图标的 FontClass 或文件路径（建议填写）</li>
<li><strong>author</strong>：作者，如果不填，则会回退到默认作者</li>
<li><strong>isOriginal</strong>：当前文章是否为原创。默认值：<code>false</code></li>
<li><strong>date</strong>：写作时间。格式：<code>YYYY-MM-DD</code> 或 <code>YYYY-MM-DD hh:mm:ss</code></li>
<li><strong>category</strong>：分类</li>
<li><strong>tag</strong>：标签</li>
<li><strong>sticky</strong>：是否在列表中置顶。当填入数字时，数字越大，排名越靠前。默认值：<code>false</code></li>
<li><strong>star</strong>：是否收藏在博客主题的文章列表中。当填入数字时，数字越大，排名越靠前。默认值：<code>false</code></li>
<li><strong>article</strong>：是否将该文章添加至文章列表中。默认值：<code>true</code></li>
<li><strong>timeline</strong>：是否将该文章添加至时间线中。默认值：<code>true</code></li>
<li><strong>image</strong>：设置预览图（分享图），请填入绝对路径</li>
<li><strong>banner</strong>：设置横幅图片（宽屏分享图），请填入绝对路径</li>
</ul>
<h3>布局 Frontmatter 配置</h3>
<ul>
<li>
<p><strong>pageInfo</strong>：文章信息展示项目</p>
<p>|  条目  |  对应内容  |  页面 frontmatter 值  |<br>
|  :</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>VuePress 插件</title>
      <link>https://docs.lizili.online/guide/vuepress/theme_plugins.html</link>
      <guid>https://docs.lizili.online/guide/vuepress/theme_plugins.html</guid>
      <source url="https://docs.lizili.online/rss.xml">VuePress 插件</source>
      <description>为博客主题添加一些额外的 VuePress 插件。 提示 vuepress-theme-hope 主题默认提供了一些 插件： vuepress-plugin-auto-catalog：VuePress2 的目录自动生成插件 vuepress-plugin-blog2：VuePress2 的博客插件 vuepress-plugin-comment2：提供...</description>
      <category>VuePress</category>
      <pubDate>Sun, 06 Oct 2024 14:45:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>为博客主题添加一些额外的 VuePress 插件。</p>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>vuepress-theme-hope</code> 主题默认提供了一些 <a href="https://theme-hope.vuejs.press/zh/config/plugins/intro.html#%E6%8F%92%E4%BB%B6%E5%88%97%E8%A1%A8" target="_blank" rel="noopener noreferrer">插件</a>：</p>
<ul>
<li><a href="https://plugin-auto-catalog.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-auto-catalog</a>：VuePress2 的目录自动生成插件</li>
<li><a href="https://plugin-blog2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-blog2</a>：VuePress2 的博客插件</li>
<li><a href="https://plugin-comment2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-comment2</a>：提供评论与浏览量功能</li>
<li><a href="https://plugin-components.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-components</a>：提供一些开箱即用的插件</li>
<li><a href="https://plugin-copy-code2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-copy-code2</a>：提供一键复制代码块功能</li>
<li><a href="https://plugin-copyright2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-copyright2</a>：在用户复制时追加版权信息，或禁用站点的复制与选择</li>
<li><a href="https://plugin-feed2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-feed2</a>：<code>Feed</code> 支持</li>
<li><a href="https://plugin-md-enhance.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-md-enhance</a>：提供更多 <code>Markdown</code> 语法</li>
<li><a href="https://plugin-photo-swipe.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-photo-swipe</a>：基于 <code>Photo Swipe</code> 的图片浏览插件</li>
<li><a href="https://plugin-pwa2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-pwa2</a>：增强的 <code>PWA</code> 支持</li>
<li><a href="https://plugin-reading-time2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-reading-time2</a>：阅读时间与字数统计</li>
<li><a href="https://plugin-sass-palette.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-sass-palette</a>：面向全部插件和主题的 <code>Sass</code> 配置插件</li>
<li><a href="https://plugin-seo2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-seo2</a>：<code>SEO</code> 增强插件</li>
<li><a href="https://plugin-sitemap2.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-plugin-sitemap2</a>：<code>Sitemap</code> 插件</li>
</ul>
</div>
<h2>动态标题</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>在主题中额外添加 <a href="https://www.npmjs.com/package/@vuepress-denaro/vuepress-plugin-dynamic-title/v/1.1.1-beta.0?activeTab=readme" target="_blank" rel="noopener noreferrer">@vuepress-denaro/vuepress-plugin-dynamic-title@next</a> 插件，为 <code>VuePress-v2</code> 版本提供了动态标题功能</p>
</div>
<h3>安装</h3>

<h3>用法</h3>
<p>将依赖包导入配置文件 <code>config</code> 文件。</p>

<h3>配置参数类型声明</h3>
<ul>
<li><strong>showIcon</strong>：文档在当前标签时显示的图标。默认：<code>""</code></li>
<li><strong>showText</strong>：文档在当前标签时显示的标题。默认：<code>"(/≧▽≦/)咦！又好了！"</code></li>
<li><strong>hideIcon</strong>：文档不在当前标签时显示的图标。默认：<code>""</code></li>
<li><strong>hideText</strong>：文档不在当前标签时显示的标题。默认：<code>"(●—●)喔哟, 崩溃啦！"</code></li>
<li><strong>recoverTime</strong>：标签改变后恢复标题的时间。默认：<code>"2000"</code>（毫秒）</li>
</ul>
<h2>鼠标点击</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>在主题中额外添加由 <code>Oragekk</code> 提供的本地插件 <a href="https://github.com/OrageKK/oragekk.github.io/tree/main/src/.vuepress/plugins/vuepress-plugin-popper" target="_blank" rel="noopener noreferrer">vuepress-plugin-popper</a>，<code>vuepress-plugin-popper</code> 基于 <a href="https://moefy-canvas.nyakku.moe/themes/popper.html" target="_blank" rel="noopener noreferrer">@moefy-canvas/theme-popper</a> 插件，为 <code>VuePress-v2</code> 版本提供了鼠标点击特效功能</p>
</div>
<h3>安装</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">pnpm</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> @moefy-canvas/theme-popper</span></span></code></pre>
</div><h3>用法</h3>
<p>将依赖包导入配置文件 <code>config</code> 文件，并将 <code>vuepress-plugin-popper</code> 目录导入到 <code>plugins</code> 目录下（<code>plugins</code> 目录与 <code>config</code> 文件在同级目录下）。</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">PopperShape</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> "@moefy-canvas/theme-popper"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">popperPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> "./plugins/vuepress-plugin-popper"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> defineUserConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 插件配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    popperPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      config</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        shape</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#E5C07B;--shiki-dark:#E5C07B">PopperShape</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">Star</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.95</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        numParticles</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">})</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置参数类型声明</h3>
<ul>
<li>
<p><strong>shape</strong>：形状</p>
<ul>
<li><strong>PopperShape.Star</strong>：星形。默认值：<code>PopperShape.Star</code></li>
<li><strong>PopperShape.Circle</strong>：圆形</li>
</ul>
</li>
<li>
<p><strong>size</strong>：设置大小。默认值：<code>1.75</code></p>
</li>
<li>
<p><strong>numParticles</strong>：设置粒子数。默认值：<code>10</code></p>
</li>
</ul>
<h2>看板娘</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>在主题中额外添加 <a href="https://www.npmjs.com/package/vuepress-plugin-oh-my-live2d" target="_blank" rel="noopener noreferrer">vuepress-plugin-oh-my-live2d@latest</a> 插件，为 <code>VuePress-v2</code> 版本提供了看板娘功能</p>
</div>
<h3>安装</h3>

<h3>用法</h3>
<p>将依赖包导入配置文件 <code>config</code> 文件。</p>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> { </span><span style="color:#E06C75;--shiki-dark:#E06C75">ohmylive2dPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> } </span><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#98C379;--shiki-dark:#98C379"> 'vuepress-plugin-oh-my-live2d'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> defineUserConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 插件配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    ohmylive2dPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      source</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"https://oml-api.tj520.top"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      models</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/pio/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">y</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/pa15_3701/normal/normal.model3.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">y</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          stageStyle</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"330"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 更多</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      ],</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      tips</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        style</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          width</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">150</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">70</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          offsetX</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">20</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          offsetY</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">50</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        welcomeTips</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          message</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            daybreak</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"早上好！一日之计在于晨，美好的一天就要开始了。"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            morning</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"上午好！工作顺利嘛，不要久坐，多起来走动走动哦！"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            noon</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"中午了，工作了一个上午，现在是午餐时间！"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            afternoon</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"午后很容易犯困呢，来杯咖啡吧~"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            dusk</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"傍晚了！工作一天幸苦啦~"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            night</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"晚上好，今天过得怎么样呢？"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            lateNight</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"已经这么晚了呀，早点休息吧，晚安~"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            weeHours</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"这么晚还不睡吗？当心熬夜秃头哦！"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    })</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">})</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置参数类型声明</h3>
<ul>
<li>
<p><strong>source</strong>：<code>Live2D Model</code> 的来源，支持 <strong>本地路径</strong> 或 <strong>远程 url</strong>。默认为 <code>https://oml-api.tj520.top</code></p>
</li>
<li>
<p><strong>models</strong>：模型配置已支持配置多个，之后可以在面板的控件中对其切换</p>
<ul>
<li><strong>path</strong>：模型具体路径，在加载模型时会与 <code>source</code> 选项进行拼接。默认为 <code>/pio/index.json</code></li>
<li><strong>scale</strong>：模型的缩放比例。默认为 <code>1</code></li>
<li><strong>x</strong>：模型在舞台中 <code>X</code> 轴方向的位置。默认为 <code>0</code></li>
<li><strong>y</strong>：模型在舞台中 <code>Y</code> 轴方向的位置。默认为 <code>0</code></li>
</ul>
</li>
<li>
<p><strong>tip</strong>：提示框配置</p>
<ul>
<li>
<p><strong>style</strong>：用于设置提示框样式</p>
<ul>
<li><strong>width</strong>：设置提示框宽度。默认为 <code>230</code></li>
<li><strong>height</strong>：设置提示框高度。默认为 <code>100</code></li>
<li><strong>offsetX</strong>：提示框在 <code>X</code> 轴方向的偏移量。默认为 <code>0</code></li>
<li><strong>offsetY</strong>：提示框在 <code>Y</code> 轴方向的偏移量。默认为 <code>0</code></li>
</ul>
</li>
<li>
<p><strong>stageStyle</strong>：用于配置舞台样式</p>
<ul>
<li><strong>height</strong>：设置舞台的高度。默认为 <code>auto</code></li>
</ul>
</li>
<li>
<p><strong>welcomeTips</strong>：模型在初次加载完之后的提示配置</p>
<ul>
<li>
<p><strong>massage</strong>：在对应时间段提示的内容</p>
<ul>
<li><strong>daybreak</strong>：早晨 <code>5-7</code> 点提示信息内容</li>
<li><strong>morning</strong>：早上 <code>8-11</code> 点提示信息内容</li>
<li><strong>noon</strong>：中午 <code>12-13</code> 点提示信息内容</li>
<li><strong>afternoon</strong>：下午 <code>14-17</code> 点提示信息内容</li>
<li><strong>dusk</strong>：傍晚 <code>18-19</code> 点提示信息内容</li>
<li><strong>night</strong>：晚上 <code>20-21</code> 点提示信息内容</li>
<li><strong>lateNight</strong>：深夜 <code>22-23</code> 点提示信息内容</li>
<li><strong>weeHours</strong>：凌晨 <code>0-4</code> 点提示信息内容</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>此项目不提供任何模型的下载地址，如有需要请自行寻找</p>
<ul>
<li><a href="https://vuepress.oml2d.com/configure/" target="_blank" rel="noopener noreferrer">基础配置</a></li>
<li><a href="https://github.com/iCharlesZ/vscode-live2d-models" target="_blank" rel="noopener noreferrer">vscode-live2d 看板娘模型库</a></li>
</ul>
<details class="hint-container details"><summary>vscode-live2d-models 模型配置</summary>
<div class="language-ts line-numbers-mode" data-ext="ts" data-title="ts"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#C678DD;--shiki-dark:#C678DD"> default</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> defineUserConfig</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 插件配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    ohmylive2dPlugin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      source</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/assets/live2d/vscode-live2d-models"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      models</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/bilibili-22/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/bilibili-33/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/AN94-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/AN94-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/AN94-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/AN94-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/G11/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.4</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/G11/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/HK416-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/HK416-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/HK416-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/HK416-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/Kar98k/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/Kar98k/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4A1-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4A1-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4A1-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4A1-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4-SOPMOD-II-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4-SOPMOD-II-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4-SOPMOD-II-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/M4-SOPMOD-II-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP9/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-3/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.8</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/UMP45-3/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.8</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-1/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-1/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-2/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-2/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-3/normal/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/girls-frontline/WA2000-3/destroy/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/haru02/haru02.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/haruto/haruto.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/hijiki/hijiki.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/index/index.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          stageStyle</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"240"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/kanzaki/kanzaki.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          stageStyle</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"330"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/kesshouban/model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">70</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/koharu/koharu.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/murakumo/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">x</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">20</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/nico/nico.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/potion-Maker-Pio/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">3.3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/potion-Maker-Tia/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">3.3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/shizuku-48/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          stageStyle</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"350"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/shizuku-pajama/index.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          stageStyle</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            height</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"350"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/tororo/tororo.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"/wanko/wanko.model.json"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">scale</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1.5</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;--shiki-dark:#E06C75">y</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">130</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  ],</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">})</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>tig介绍和使用</title>
      <link>https://docs.lizili.online/tools/iterm2/tig.html</link>
      <guid>https://docs.lizili.online/tools/iterm2/tig.html</guid>
      <source url="https://docs.lizili.online/rss.xml">tig介绍和使用</source>
      <description>简单来说，tig 是 Git 的文本模式界面（text-mode interface for Git）。 官方文档对它的说明如下： Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can a...</description>
      <category>效率</category>
      <pubDate>Sat, 10 Aug 2024 14:38:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>简单来说，tig 是 Git 的文本模式界面（text-mode interface for Git）。</p>
<p>官方文档对它的说明如下：</p>
<blockquote>
<p>Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands.</p>
</blockquote>
<figure><figcaption></figcaption></figure>
<p>如果你使用的是 Windows 系统，那么在安装 Git 时应该已经内置安装了 tig。通常在 <code>&lt;Git&gt;/usr/bin</code> 目录下可以找到。</p>
<p>其他系统安装命令如下：</p>
<ul>
<li>MacOS: <code>brew install tig</code></li>
<li>Ubuntu/Debian: <code>sudo apt install tig</code></li>
<li>Fedora/RHEL: <code>sudo dnf install tig</code></li>
</ul>
<blockquote>
<p>tig 布局通常是这样，包含一个状态窗口（最后那行）和一个或多个视图。默认通常只显示一个视图，当然也可以分屏显示多个视图（下面对主视图的介绍中就可以看到分屏显示的情况）。</p>
</blockquote>
<p>目前，tig 有 13 种视图，我们从主视图入手，因为它是 tig 的默认视图。</p>
<p>在终端执行 <code>tig</code> 命令即可进入 tig 的主视图，主视图中显示的是当前工作目录所在的 Git 仓库的提交日志。默认高亮选中第一行，即最后的日志。</p>
<blockquote>
<p>注意，这是一个可滚动浏览的提交日志列表，你可以通过快捷键在列表中进行导航。其操作方式类似于 vi，如果你熟悉 vi，那么应该可以快速上手。</p>
</blockquote>
<p><code>j</code>/<code>k</code> 键：可以让光标上下移动选中相应的提交日志行。</p>
<p><code>Enter</code> 键：选中某条提交日志行的状态下按 <code>Enter</code> 键，终端窗口会被分屏，左屏仍显示提交日志列表，右屏显示被选中的提交日志的详细信息。此时，焦点会自动切换到右屏中，即<code>j</code>/<code>k</code> 键将在右屏进行导航。</p>
<p><code>J</code>/<code>K</code>：如果此时需要在左屏各条提交日志间进行导航，可使用 <code>J</code>/<code>K</code>，右屏内容会随着选中的提交日志而即时改变。</p>
<blockquote>
<p>也可以使用上下方向键进行左屏导航。</p>
</blockquote>
<p><code>Tab</code> 键：当然，也可以按 <code>Tab</code> 键将焦点切换回左屏，使用 <code>j</code>/<code>k</code> 键进行导航。</p>
<p><code>Q</code>/<code>Ctrl + c</code>：退出 tig。</p>
<p>很显然，快捷键很多，而这只是一小部分。因此，通常你不可能记住所有快捷键，好在在 tig 的任一视图你都可以按下 <code>h</code> 键来查看帮助视图，其中完整列出了所有快捷键。</p>
<blockquote>
<p>一种操作对应的快捷键通常也不止一个，因此，你不需要记住所有快捷键，只需要选择性记住适合自己习惯的那个。</p>
</blockquote>
<p>按 <code>r</code> 键进入引用视图，该视图会显示分支、远程节点和标签。</p>
<p><code>j</code>/<code>k</code> 键：与主视图类似，上下移动光标导航。</p>
<p><code>Enter</code> 键：类似地，分屏显示选中引用的提交日志。</p>
<p><code>C</code> ：当焦点在引用视图上时，会询问是否执行 <code>git checkout</code> 命令，即切换分支；焦点在日志视图上时，会询问是否执行 <code>git cherry-pick</code> 命令。</p>
<p>按 <code>s</code>/<code>S</code> 键进入状态视图，该视图会分组显示暂存（暂存待提交）、未暂存（修改未暂存）和不跟踪的文件。</p>
<p><code>j</code>/<code>k</code> 键：仍是上下导航。</p>
<p><code>Enter</code> 键：如果选中的是暂存或未暂存文件，将分屏显示差异视图；如果选中的是未跟踪的文件，将分屏显示文件内容。</p>
<p><code>u</code> 键：如果选中的是暂存文件，则会取消暂存，这可能让其回到未暂存或不跟踪的文件列表；如果选中的是未暂存或不跟踪的文件，则会将其暂存。</p>
<p><code>!</code> 键：选中的是未暂存文件，丢弃文件修改。其他状态文件不能执行该操作。</p>
<p><code>C</code>：提交。</p>
<p>日志视图（<code>l</code>）：显示完整日志信息和差异统计。</p>
<p>差异视图（<code>d</code>）：显示当前工作副本与上次提交之间的差异，如果当前工作副本是干净的，则显示上次提交的更改。</p>
<p>树视图（<code>t</code>）：以目录方式展示仓库结构，并在其中导航查看文件内容。</p>
<p>暂存视图（<code>c</code>）：显示（未）暂存文件的更改以及不跟踪的文件的内容。</p>
<p>贮藏视图（<code>y</code>）：显示贮藏列表。</p>
<p>正则视图（<code>g</code>）：正则查找，匹配文件名及文本内容。</p>
<p>分页器视图（<code>p</code>）</p>
<p>帮助视图（<code>h</code>）：键绑定快速查看帮助。</p>
<p><a href="https://jonas.github.io/tig/" target="_blank" rel="noopener noreferrer">官方主页 - GitHub Pages</a></p>
<p><a href="https://jonas.github.io/tig/doc/manual.html" target="_blank" rel="noopener noreferrer">官方手册 - GitHub Pages</a></p>
<p><a href="https://github.com/jonas/tig/" target="_blank" rel="noopener noreferrer">Tig GitHub Repository</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>常用方法论参考</title>
      <link>https://docs.lizili.online/tools/%E6%96%B9%E6%B3%95%E8%AE%BA.html</link>
      <guid>https://docs.lizili.online/tools/%E6%96%B9%E6%B3%95%E8%AE%BA.html</guid>
      <source url="https://docs.lizili.online/rss.xml">常用方法论参考</source>
      <description>接收工作 一定要搞清楚交付的标准，不清楚标准就意味着返工的概率极大。如何搞清楚，工作需要达到的状态？ SMART公式 具体化（Specific）：明确具体指标和细节。 可衡量（Measurable）：确保目标可以量化。 可实现（Achievable）：目标可行，不理想化。 相关性（Relevant）：与总目标相关联。 有时限（Time-bound）：明...</description>
      <category>效率</category>
      <pubDate>Tue, 23 Jul 2024 10:02:42 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>接收工作</h2>
<p>一定要搞清楚交付的标准，不清楚标准就意味着返工的概率极大。如何搞清楚，工作需要达到的状态？</p>
<h3>SMART公式</h3>
<ul>
<li>具体化（Specific）：明确具体指标和细节。</li>
<li>可衡量（Measurable）：确保目标可以量化。</li>
<li>可实现（Achievable）：目标可行，不理想化。</li>
<li>相关性（Relevant）：与总目标相关联。</li>
<li>有时限（Time-bound）：明确的完成时间。</li>
</ul>
<h2>请示工作</h2>
<p>比如，工作中遇到问题等，不要上来就问该怎么办？需要带着方案（ &gt;2个 ）去。用RIDE模型，说服老板支持你。</p>
<h3>RIDE模型</h3>
<p>R-risk：风险，目前的困境</p>
<p>I-interest： 利益，引入共同利益</p>
<p>D-difference： 差异，A方案和B方案的区别</p>
<p>E-effect：影响，适当体现一些缺点（全挑好的说不真实）</p>
<h2>汇报工作</h2>
<h3>PREP</h3>
<ul>
<li>Point（结论先行）：上来就给结论，直击重点。</li>
<li>Reason（再讲理由）：陈述原因，给出有说服力的依据</li>
<li>Example（拿出事例）：最好给一个实例</li>
<li>Point（重述结论）：将发散的思维回归结论，强化观点</li>
</ul>
<h2>分享工作</h2>
<p>如果做团队分享，一定要多维分析，不可泛泛而谈</p>
<h3>5W2H</h3>
<p>从7个维度思考，广泛应用于产品、业务、项目运营可行性分析，问题解决和落地方法论。</p>
<p>What： 产品背景</p>
<p>Who： 目标人群</p>
<p>Why： 预期目标</p>
<p>Where： 使用场景</p>
<p>When：需求节点</p>
<p>How：如何验证</p>
<p>How much：用多少资源</p>
<p>不仅分享可用，很多场景都可以套用。业务/场景分析等</p>
<h2>复盘(SOP总结)</h2>
<h3>GRAI法则</h3>
<p>G-Goal：回顾目标</p>
<p>R-Result：评估结果，方向校准，数据验证</p>
<p>A-Analysis：分析成功/失败原因，表层/深层原因，偶发性和必然性</p>
<p>I-Insight：总结规律方法论</p>
<h2>其他</h2>
<p><a href="http://docs.lizili.online/assets/pdf/65%E4%B8%AA%E6%80%9D%E7%BB%B4%E6%A8%A1%E5%9E%8B%E5%9C%B0%E5%9B%BE.pdf" target="_blank" rel="noopener noreferrer">65个思维模型</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Rime输入法</title>
      <link>https://docs.lizili.online/tools/remi.html</link>
      <guid>https://docs.lizili.online/tools/remi.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Rime输入法</source>
      <description>RIME是什么 参考这个文章，可以有个大概的了解 选择原因 开源，相对安全可靠 离线使用，不会上传数据 高度的定制 (可双拼挂音形) 安装 下载地址: https://rime.im/download/ macos安装完后，通常右上角会出现如上的图标，如果没有出现，尝试重启或重新登陆。 功能说明 重新部署：当修改了配置文件时，用于配置生效使用 同步用户...</description>
      <category>效率</category>
      <pubDate>Fri, 24 May 2024 12:29:50 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://github.com/rime/home/wiki/RimeWithSchemata#rime-%E8%BC%B8%E5%85%A5%E6%96%B9%E6%A1%88" target="_blank" rel="noopener noreferrer">RIME是什么</a></p>
<p>参考这个文章，可以有个大概的了解</p>
<h2>选择原因</h2>
<ol>
<li>开源，相对安全可靠</li>
<li>离线使用，不会上传数据</li>
<li>高度的定制 (可双拼挂音形)</li>
</ol>
<h2>安装</h2>
<p>下载地址: <a href="https://rime.im/download/" target="_blank" rel="noopener noreferrer">https://rime.im/download/</a></p>
<figure><figcaption></figcaption></figure>
<p>macos安装完后，通常右上角会出现如上的图标，如果没有出现，尝试重启或重新登陆。</p>
<h3>功能说明</h3>
<ol>
<li>重新部署：当修改了配置文件时，用于配置生效使用</li>
<li>同步用户数据：同步用户配置、造词、字频记录(<a href="#%E9%85%8D%E7%BD%AE%E5%90%8C%E6%AD%A5cli">如何通过CLI同步</a>)</li>
<li>用户设定：打开用户配置文件夹（RIME都是以配置文件为主，无图形化）</li>
<li>在线文档</li>
<li>检查更新</li>
</ol>
<h2>配置文件</h2>
<p><a href="https://github.com/iDvel/rime-ice" target="_blank" rel="noopener noreferrer">雾凇配置参考</a></p>
<p><a href="https://dvel.me/posts/rime-ice/" target="_blank" rel="noopener noreferrer">雾凇配置详解</a></p>
<blockquote>
<p>感谢大佬的配置。建议直接下载别人的先使用，需要个人定制的，再去详细了解配置文件</p>
</blockquote>
<h2>小鹤音形</h2>
<h3>只支持音形</h3>
<p><a href="http://flypy.ysepan.com/" target="_blank" rel="noopener noreferrer">http://flypy.ysepan.com/</a></p>
<p>下载音形文件，打开<code>用户设定</code> ，将你的文件覆盖即可。</p>
<figure><figcaption></figcaption></figure>
<h3>支持双拼&amp;音形</h3>
<p>解压下载的文件，</p>
<ol>
<li>将build/*bin 文件复制都build目录下。</li>
<li>将flypy*文件，复制到rime目录</li>
<li>修改default.yaml 添加音形</li>
</ol>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">schema_list</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">schema</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">flypy</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # 小鹤音形</span></span></code></pre>
</div><p>重新部署即可，切换输入法的快捷定义是</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">switcher</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  caption</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"[方案菜单]"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  hotkeys</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">F2</span></span></code></pre>
</div><p>按快捷键F2，即可切换输入方式，具体以你个人的设置为准</p>
<figure><figcaption></figcaption></figure>
<h2>配置同步（CLI）</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#!/bin/bash</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">-n</span><span style="color:#98C379;--shiki-dark:#98C379"> "$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">pgrep</span><span style="color:#98C379;--shiki-dark:#98C379"> 'Squirrel')"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    cpu_usage</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">ps</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> $(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">pgrep</span><span style="color:#98C379;--shiki-dark:#98C379"> 'Squirrel'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#D19A66;--shiki-dark:#D19A66">-o</span><span style="color:#98C379;--shiki-dark:#98C379"> %cpu=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#98C379;--shiki-dark:#98C379">"$(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "</span><span style="color:#E06C75;--shiki-dark:#E06C75">$cpu_usage</span><span style="color:#98C379;--shiki-dark:#98C379"> == 0" </span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">|</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> bc</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -l</span><span style="color:#98C379;--shiki-dark:#98C379">)"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -eq</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">        cd</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/Library/Rime</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        DYLD_LIBRARY_PATH</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/Library/Input Methods/Squirrel.app/Contents/Frameworks"</span><span style="color:#98C379;--shiki-dark:#98C379"> "/Library/Input Methods/Squirrel.app/Contents/MacOS/Squirrel"</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> --quit</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        DYLD_LIBRARY_PATH</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/Library/Input Methods/Squirrel.app/Contents/Frameworks"</span><span style="color:#98C379;--shiki-dark:#98C379"> "/Library/Input Methods/Squirrel.app/Contents/MacOS/rime_dict_manager"</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> -s</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    fi</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span></code></pre>
</div><p>如果觉得脚本不方便，可直接输入以下内容</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">22</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 22</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> *</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> *</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> *</span><span style="color:#98C379;--shiki-dark:#98C379"> if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#D19A66;--shiki-dark:#D19A66">-n</span><span style="color:#98C379;--shiki-dark:#98C379"> "$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">pgrep</span><span style="color:#98C379;--shiki-dark:#98C379"> 'Squirrel')"</span><span style="color:#98C379;--shiki-dark:#98C379"> ]</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span><span style="color:#E06C75;--shiki-dark:#E06C75"> cpu_usage</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">ps</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> $(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">pgrep</span><span style="color:#98C379;--shiki-dark:#98C379"> 'Squirrel'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#D19A66;--shiki-dark:#D19A66">-o</span><span style="color:#98C379;--shiki-dark:#98C379"> %cpu=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">); </span><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#98C379;--shiki-dark:#98C379">"$(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "</span><span style="color:#E06C75;--shiki-dark:#E06C75">$cpu_usage</span><span style="color:#98C379;--shiki-dark:#98C379"> == 0" </span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">|</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> bc</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -l</span><span style="color:#98C379;--shiki-dark:#98C379">)"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -eq</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> cd</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/Library/Rime</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#E06C75;--shiki-dark:#E06C75">DYLD_LIBRARY_PATH</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/Library/Input Methods/Squirrel.app/Contents/Frameworks"</span><span style="color:#98C379;--shiki-dark:#98C379"> "/Library/Input Methods/Squirrel.app/Contents/MacOS/Squirrel"</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> --quit</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#E06C75;--shiki-dark:#E06C75">DYLD_LIBRARY_PATH</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/Library/Input Methods/Squirrel.app/Contents/Frameworks"</span><span style="color:#98C379;--shiki-dark:#98C379"> "/Library/Input Methods/Squirrel.app/Contents/MacOS/rime_dict_manager"</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> -s</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span></code></pre>
</div><h2>语言模型支持</h2>
<p>在<a href="https://github.com/amzxyz/RIME-LMDG/releases" target="_blank" rel="noopener noreferrer">LMDG的发布页</a>下载模型。我下载的是<a href="https://github.com/amzxyz/RIME-LMDG/releases/download/v2n3/amz-v2n3m1-zh-hans.gram" target="_blank" rel="noopener noreferrer">amz-v2n3m1-zh-hans.gram</a></p>
<p>将模型放到Rime的家目录，MacOS下是 <code>~/Library/Rime</code></p>
<p>新建使用的输入法的自定义配置文件，一下以小鹤双拼为例</p>
<figure><figcaption>image-20250325195226843</figcaption></figure>
<p>在patch下，添加如下代码，重新载入配置即可</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">patch</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  grammar</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    language</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">amz-v2n3m1-zh-hans</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  </span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    collocation_max_length</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">5</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    collocation_min_length</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">2</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  translator/contextual_suggestions</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  translator/max_homophones</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">7</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  translator/max_homographs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">7</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>db client (M1)</title>
      <link>https://docs.lizili.online/coder/faq/install%20db%20client%20on%20m1%20mac.html</link>
      <guid>https://docs.lizili.online/coder/faq/install%20db%20client%20on%20m1%20mac.html</guid>
      <source url="https://docs.lizili.online/rss.xml">db client (M1)</source>
      <description>mysql 安装 mysqlclient 会出现下面的问题： 若不需要安装mysql服务，直接安装客户端即可 安装完成后，检查命令是否可执行 箬笠报错如下 修改环境变量 此时继续安装 mysqlclient 若报错如下 安装zstd 修改环境变量 再次安装即可 postgre https://stackoverflow.com/questions/66...</description>
      <category>数据库</category>
      <pubDate>Fri, 24 May 2024 12:29:50 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>mysql</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">pip</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> mysqlclient==</span><span style="color:#D19A66;--shiki-dark:#D19A66">1.4.4</span></span></code></pre>
</div><p>安装 mysqlclient 会出现下面的问题：</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mysql_config</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> found</span></span></code></pre>
</div><p>若不需要安装mysql服务，直接安装客户端即可</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> mysql-client</span><span style="color:#98C379;--shiki-dark:#98C379"> pkg-config</span></span></code></pre>
</div><p>安装完成后，检查命令是否可执行</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">which</span><span style="color:#98C379;--shiki-dark:#98C379"> mysql_config</span></span></code></pre>
</div><p>箬笠报错如下</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Exception:</span><span style="color:#98C379;--shiki-dark:#98C379"> Can</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> find</span><span style="color:#98C379;--shiki-dark:#98C379"> valid</span><span style="color:#98C379;--shiki-dark:#98C379"> pkg-config</span><span style="color:#98C379;--shiki-dark:#98C379"> name.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      Specify</span><span style="color:#98C379;--shiki-dark:#98C379"> MYSQLCLIENT_CFLAGS</span><span style="color:#98C379;--shiki-dark:#98C379"> and</span><span style="color:#98C379;--shiki-dark:#98C379"> MYSQLCLIENT_LDFLAGS</span><span style="color:#98C379;--shiki-dark:#98C379"> env</span><span style="color:#98C379;--shiki-dark:#98C379"> vars</span><span style="color:#98C379;--shiki-dark:#98C379"> manually</span></span></code></pre>
</div><p>修改环境变量</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> MYSQLCLIENT_CFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mysql_config</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --cflags</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> MYSQLCLIENT_LDFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mysql_config</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --libs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><p>此时继续安装 mysqlclient</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">pip</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> mysqlclient==</span><span style="color:#D19A66;--shiki-dark:#D19A66">1.4.4</span></span></code></pre>
</div><p>若报错如下</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    ld:</span><span style="color:#98C379;--shiki-dark:#98C379"> library</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> found</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -lzstd</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    clang:</span><span style="color:#98C379;--shiki-dark:#98C379"> error:</span><span style="color:#98C379;--shiki-dark:#98C379"> linker</span><span style="color:#98C379;--shiki-dark:#98C379"> command</span><span style="color:#98C379;--shiki-dark:#98C379"> failed</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> exit</span><span style="color:#98C379;--shiki-dark:#98C379"> code</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (use </span><span style="color:#D19A66;--shiki-dark:#D19A66">-v</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> see</span><span style="color:#98C379;--shiki-dark:#98C379"> invocation</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    error:</span><span style="color:#98C379;--shiki-dark:#98C379"> command</span><span style="color:#98C379;--shiki-dark:#98C379"> '/usr/bin/gcc'</span><span style="color:#98C379;--shiki-dark:#98C379"> failed</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> exit</span><span style="color:#98C379;--shiki-dark:#98C379"> code</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span></code></pre>
</div><p>安装zstd</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> zstd</span></span></code></pre>
</div><p>修改环境变量</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> CFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"-I$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --prefix</span><span style="color:#98C379;--shiki-dark:#98C379">)/include"</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> LDFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"-L$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --prefix</span><span style="color:#98C379;--shiki-dark:#98C379">)/lib"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 若不生效，则使用</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> LDFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"-L/opt/homebrew/Cellar/zstd/1.5.6/lib"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#具体版本以安装的版本为准</span></span></code></pre>
</div><p>再次安装即可</p>
<h2>postgre</h2>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  ×</span><span style="color:#98C379;--shiki-dark:#98C379"> python</span><span style="color:#98C379;--shiki-dark:#98C379"> setup.py</span><span style="color:#98C379;--shiki-dark:#98C379"> egg_info</span><span style="color:#98C379;--shiki-dark:#98C379"> did</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#98C379;--shiki-dark:#98C379"> successfully.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  │</span><span style="color:#98C379;--shiki-dark:#98C379"> exit</span><span style="color:#98C379;--shiki-dark:#98C379"> code:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  ╰─</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; [23 </span><span style="color:#98C379;--shiki-dark:#98C379">lines</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> output]</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      running</span><span style="color:#98C379;--shiki-dark:#98C379"> egg_info</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      creating</span><span style="color:#98C379;--shiki-dark:#98C379"> /private/var/folders/bp/jkzx65zj6sq1xj6bb5bkt03w0000gn/T/pip-pip-egg-info-37d85hev/psycopg2.egg-info</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      writing</span><span style="color:#98C379;--shiki-dark:#98C379"> /private/var/folders/bp/jkzx65zj6sq1xj6bb5bkt03w0000gn/T/pip-pip-egg-info-37d85hev/psycopg2.egg-info/PKG-INFO</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      writing</span><span style="color:#98C379;--shiki-dark:#98C379"> dependency_links</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> /private/var/folders/bp/jkzx65zj6sq1xj6bb5bkt03w0000gn/T/pip-pip-egg-info-37d85hev/psycopg2.egg-info/dependency_links.txt</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      writing</span><span style="color:#98C379;--shiki-dark:#98C379"> top-level</span><span style="color:#98C379;--shiki-dark:#98C379"> names</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> /private/var/folders/bp/jkzx65zj6sq1xj6bb5bkt03w0000gn/T/pip-pip-egg-info-37d85hev/psycopg2.egg-info/top_level.txt</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      writing</span><span style="color:#98C379;--shiki-dark:#98C379"> manifest</span><span style="color:#98C379;--shiki-dark:#98C379"> file</span><span style="color:#98C379;--shiki-dark:#98C379"> '/private/var/folders/bp/jkzx65zj6sq1xj6bb5bkt03w0000gn/T/pip-pip-egg-info-37d85hev/psycopg2.egg-info/SOURCES.txt'</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      Error:</span><span style="color:#98C379;--shiki-dark:#98C379"> pg_config</span><span style="color:#98C379;--shiki-dark:#98C379"> executable</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> found.</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      pg_config</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> required</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> build</span><span style="color:#98C379;--shiki-dark:#98C379"> psycopg2</span><span style="color:#98C379;--shiki-dark:#98C379"> from</span><span style="color:#98C379;--shiki-dark:#98C379"> source.</span><span style="color:#98C379;--shiki-dark:#98C379">  Please</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> directory</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      containing</span><span style="color:#98C379;--shiki-dark:#98C379"> pg_config</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $PATH</span><span style="color:#98C379;--shiki-dark:#98C379"> or</span><span style="color:#98C379;--shiki-dark:#98C379"> specify</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> full</span><span style="color:#98C379;--shiki-dark:#98C379"> executable</span><span style="color:#98C379;--shiki-dark:#98C379"> path</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      option:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          python</span><span style="color:#98C379;--shiki-dark:#98C379"> setup.py</span><span style="color:#98C379;--shiki-dark:#98C379"> build_ext</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --pg-config</span><span style="color:#98C379;--shiki-dark:#98C379"> /path/to/pg_config</span><span style="color:#98C379;--shiki-dark:#98C379"> build</span><span style="color:#98C379;--shiki-dark:#98C379"> ...</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      or</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> pg_config</span><span style="color:#98C379;--shiki-dark:#98C379"> option</span><span style="color:#98C379;--shiki-dark:#98C379"> in</span><span style="color:#98C379;--shiki-dark:#98C379"> 'setup.cfg'.</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      If</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> prefer</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> avoid</span><span style="color:#98C379;--shiki-dark:#98C379"> building</span><span style="color:#98C379;--shiki-dark:#98C379"> psycopg2</span><span style="color:#98C379;--shiki-dark:#98C379"> from</span><span style="color:#98C379;--shiki-dark:#98C379"> source,</span><span style="color:#98C379;--shiki-dark:#98C379"> please</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> PyPI</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      'psycopg2-binary'</span><span style="color:#98C379;--shiki-dark:#98C379"> package</span><span style="color:#98C379;--shiki-dark:#98C379"> instead.</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      For</span><span style="color:#98C379;--shiki-dark:#98C379"> further</span><span style="color:#98C379;--shiki-dark:#98C379"> information</span><span style="color:#98C379;--shiki-dark:#98C379"> please</span><span style="color:#98C379;--shiki-dark:#98C379"> check</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> 'doc/src/install.rst'</span><span style="color:#98C379;--shiki-dark:#98C379"> file</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (also </span><span style="color:#98C379;--shiki-dark:#98C379">at</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      &lt;</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">https://www.psycopg.org/docs/install.html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;).</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      [end of output]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  note:</span><span style="color:#98C379;--shiki-dark:#98C379"> This</span><span style="color:#98C379;--shiki-dark:#98C379"> error</span><span style="color:#98C379;--shiki-dark:#98C379"> originates</span><span style="color:#98C379;--shiki-dark:#98C379"> from</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> subprocess,</span><span style="color:#98C379;--shiki-dark:#98C379"> and</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> likely</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> problem</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> pip.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">error:</span><span style="color:#98C379;--shiki-dark:#98C379"> metadata-generation-failed</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">×</span><span style="color:#98C379;--shiki-dark:#98C379"> Encountered</span><span style="color:#98C379;--shiki-dark:#98C379"> error</span><span style="color:#98C379;--shiki-dark:#98C379"> while</span><span style="color:#98C379;--shiki-dark:#98C379"> generating</span><span style="color:#98C379;--shiki-dark:#98C379"> package</span><span style="color:#98C379;--shiki-dark:#98C379"> metadata.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">╰─</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">See</span><span style="color:#98C379;--shiki-dark:#98C379"> above</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> output.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">note:</span><span style="color:#98C379;--shiki-dark:#98C379"> This</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> an</span><span style="color:#98C379;--shiki-dark:#98C379"> issue</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> package</span><span style="color:#98C379;--shiki-dark:#98C379"> mentioned</span><span style="color:#98C379;--shiki-dark:#98C379"> above,</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> pip.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">hint:</span><span style="color:#98C379;--shiki-dark:#98C379"> See</span><span style="color:#98C379;--shiki-dark:#98C379"> above</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> details.</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><a href="https://stackoverflow.com/questions/66888087/cannot-install-psycopg2-with-pip3-on-m1-mac" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/66888087/cannot-install-psycopg2-with-pip3-on-m1-mac</a></p>
<p>安装pgsql</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF"> brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> postgresql@16</span></span></code></pre>
</div><p>导入环境变量</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> PATH</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/opt/homebrew/opt/postgresql@16/bin:</span><span style="color:#E06C75;--shiki-dark:#E06C75">$PATH</span><span style="color:#98C379;--shiki-dark:#98C379">"</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> LDFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"-L/opt/homebrew/opt/postgresql@16/lib"</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> CPPFLAGS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">"-I/opt/homebrew/opt/postgresql@16/include"</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Redis</title>
      <link>https://docs.lizili.online/ops/linux/redis.html</link>
      <guid>https://docs.lizili.online/ops/linux/redis.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Redis</source>
      <description>常用类型和操作 认证登录 客户端工具redis-di登录 数据类型 常见的有字符串、列表、集合、等 字符串 列表 集合 hash哈希 发布和订阅 切库&amp;运维命令 redis 有 0~15 共16个数据库，默认登录的为 0，不同的数据库，数据相互之前是独立的 运维命令 查看当前状态 DB操作监控 redis info查询 配置动态更新 无需重启，修改配置...</description>
      <category>linux</category>
      <pubDate>Fri, 24 May 2024 12:29:50 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>常用类型和操作</h2>
<h3>认证登录</h3>
<p>客户端工具redis-di登录</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">redis-cli</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">redis-cli</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -h</span><span style="color:#98C379;--shiki-dark:#98C379"> redisd</span><span style="color:#98C379;--shiki-dark:#98C379"> ip</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">redis-cli</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -h</span><span style="color:#98C379;--shiki-dark:#98C379"> xxx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> xxx</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># redis的认证</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;auth password</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">redis-cli</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -a</span><span style="color:#98C379;--shiki-dark:#98C379"> password</span></span></code></pre>
</div><h3>数据类型</h3>
<p>常见的有字符串、列表、集合、等</p>
<h4>字符串</h4>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">›set</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> aaa</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">›keys</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> *</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;get name</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;set name bbb</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; del name</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#增加key并赋值 #混示所有的key #获取key的佶 ＃重新绘key赋佶 #别除key</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">命令不区分大小写：</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span><span style="color:#98C379;--shiki-dark:#98C379">GET</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">key区分大小写：</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span><span style="color:#98C379;--shiki-dark:#98C379">get</span><span style="color:#98C379;--shiki-dark:#98C379"> Name</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>列表</h4>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">rpush</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> aaa</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # rpush 依次在右边添加，lpush反之</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">rpush</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> bbb</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">rpush</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> vvv</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">3</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">rpush</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> ccc</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">4</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">get</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">error</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">WRONGTYPE</span><span style="color:#98C379;--shiki-dark:#98C379"> Operation</span><span style="color:#98C379;--shiki-dark:#98C379"> against</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> key</span><span style="color:#98C379;--shiki-dark:#98C379"> holding</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> wrong</span><span style="color:#98C379;--shiki-dark:#98C379"> kind</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> value</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">scan</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"0"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) 1) </span><span style="color:#98C379;--shiki-dark:#98C379">"name"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">llen</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">4</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">lrange</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 4</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 列表需要使用lrange查看</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"aaa"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"bbb"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"vvv"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">4</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"ccc"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 删除第三个值</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">lrem</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 3</span><span style="color:#98C379;--shiki-dark:#98C379"> vvv</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">lrange</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 4</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"aaa"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"bbb"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"ccc"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 弹出</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">lpop</span><span style="color:#98C379;--shiki-dark:#98C379"> 左弹出</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rpop</span><span style="color:#98C379;--shiki-dark:#98C379"> 右弹出</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>集合</h4>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">sadd</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span><span style="color:#98C379;--shiki-dark:#98C379"> s1</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">SMEMBERS</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 列出集合的元素</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"s1"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">sadd</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span><span style="color:#98C379;--shiki-dark:#98C379"> s2</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">SMEMBERS</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"s1"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"s2"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">srem</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span><span style="color:#98C379;--shiki-dark:#98C379"> s1</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 删除</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">SMEMBERS</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"s2"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">spop</span><span style="color:#98C379;--shiki-dark:#98C379"> 随机删除1个</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>hash哈希</h4>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hset</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#98C379;--shiki-dark:#98C379"> zhangsan</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hset</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span><span style="color:#98C379;--shiki-dark:#98C379"> age</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 18</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hgetall</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # 获取全部值</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"name"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"zhangsan"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"age"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">4</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"18"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hget</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # 获取单个值</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">"zhangsan"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 删除</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hdel</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span><span style="color:#98C379;--shiki-dark:#98C379"> name</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hgetall</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"age"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">"18"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">del</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">integer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">hgetall</span><span style="color:#98C379;--shiki-dark:#98C379"> hash</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">empty</span><span style="color:#98C379;--shiki-dark:#98C379"> array</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>发布和订阅</h4>
<figure><figcaption></figcaption></figure>
<h2>切库&amp;运维命令</h2>
<p>redis 有 0~15 共16个数据库，默认登录的为 0，不同的数据库，数据相互之前是独立的</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">select</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">OK</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379[1]</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">select</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 16</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">error</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">ERR</span><span style="color:#98C379;--shiki-dark:#98C379"> DB</span><span style="color:#98C379;--shiki-dark:#98C379"> index</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> out</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> range</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379[1]</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">select</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">OK</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">127.0.0.1:6379</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span></code></pre>
</div><h3>运维命令</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; RANDOMKEY </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#随机获取一个key</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; KEYS * </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#查看所有key，注意阻寨，如果key量特别大时候，容易卡死阻塞，上千万上百万时候容易阻塞 #建议使用，每次获取11个key，可以循环获取，直到获取所有key</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; SCAN O </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#从编号0开始，中间会有一个编号提示（类似索引编号），按编号提示依次循环获取，直到编号为0即表示获取完所有的key</span></span></code></pre>
</div><p>查看当前状态</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt; root@c93f2576f844:/data# redis-cli -a 123456 --stat</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Warning:</span><span style="color:#98C379;--shiki-dark:#98C379"> Using</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> password</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> '-a'</span><span style="color:#98C379;--shiki-dark:#98C379"> or</span><span style="color:#98C379;--shiki-dark:#98C379"> '-u'</span><span style="color:#98C379;--shiki-dark:#98C379"> option</span><span style="color:#98C379;--shiki-dark:#98C379"> on</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> command</span><span style="color:#98C379;--shiki-dark:#98C379"> line</span><span style="color:#98C379;--shiki-dark:#98C379"> interface</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> be</span><span style="color:#98C379;--shiki-dark:#98C379"> safe.</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>向僵尸开炮-辅助脚本</title>
      <link>https://docs.lizili.online/coder/script/wx%E5%B0%8F%E6%B8%B8%E6%88%8F-%E5%90%91%E5%83%B5%E5%B0%B8%E5%BC%80%E7%82%AE%E8%BE%85%E5%8A%A9.html</link>
      <guid>https://docs.lizili.online/coder/script/wx%E5%B0%8F%E6%B8%B8%E6%88%8F-%E5%90%91%E5%83%B5%E5%B0%B8%E5%BC%80%E7%82%AE%E8%BE%85%E5%8A%A9.html</guid>
      <source url="https://docs.lizili.online/rss.xml">向僵尸开炮-辅助脚本</source>
      <description>背景 之前微信推送了一款名为向僵尸开炮的小游戏，前期玩的让我无法自拔，于是在忙碌中寻找片刻的悠闲。然而，游戏的内容显得过于单一，长久玩起来就有点枯燥了，还需氪金技术。因此，就渐渐的不再玩了。 数月后，再次打开了这个应用，发现我的体力值已经累积到了900多点。 这个游戏一局消耗： 5点体力 5-7分钟 20关卡，每一关需选择技能 简单算来，需要投入180...</description>
      <pubDate>Tue, 23 Apr 2024 05:06:11 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>背景</h2>
<p>之前微信推送了一款名为<code>向僵尸开炮</code>的小游戏，前期玩的让我无法自拔，于是在忙碌中寻找片刻的悠闲。然而，游戏的内容显得过于单一，长久玩起来就有点枯燥了，还需氪金技术。因此，就渐渐的不再玩了。</p>
<p>数月后，再次打开了这个应用，发现我的体力值已经累积到了<code>900多</code>点。</p>
<p>这个游戏一局消耗：</p>
<ul>
<li>5点体力</li>
<li>5-7分钟</li>
<li>20关卡，每一关需选择技能</li>
</ul>
<p>简单算来，需要投入<code>180局</code>的精力。如果以每局五分钟计算，需要连续投入<code>15个小时</code>。</p>
<p>这么固定的操作，可不可以用自动化处理呢？说干就干！写个自动化脚本！</p>
<h2>自动化</h2>
<p>目前常见桌面自动化，主要分两种</p>
<ol>
<li>操作浏览器的，通过获取浏览的元素，进行自动化操作，常见的自动化测试，多数都是这么干的，比如<code>selenium</code> <code>playWright</code></li>
<li>操作鼠标，模拟人的行为。比如 <code>pyatuogui</code> <code>tagui</code></li>
</ol>
<p>当然，市面上还有比较成熟的厂商，已集成这两个功能，并且还支持挂脚本，可玩性更高，比如<code>Uipath</code> <code>影刀</code>，Uipath好像更牛一些，前一段还推出单个机器人支持并发执行。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Relabel</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/06-relabel.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/06-relabel.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Relabel</source>
      <description>在的配置与集成环节，接触了文件的引入(动态服务发现方法之一)和relabel_configs，看的一脸懵逼，所以去详细看了下，并记录一下。 replace&amp;laabelmap 在Prometheus所有的Target实例中，都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标...</description>
      <pubDate>Tue, 26 Mar 2024 07:54:42 GMT</pubDate>
      <content:encoded><![CDATA[
<p>在<a href="/ops/monitor/prometheus/05-exporter.html" target="_blank">exporter</a>的配置与集成环节，接触了文件的引入(动态服务发现方法之一)和<code>relabel_configs</code>，看的一脸懵逼，所以去详细看了下，并记录一下。</p>
<h2>replace&amp;laabelmap</h2>
<p>在Prometheus所有的Target实例中，都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容：</p>
<p>在Prometheus的所有的实例中，都包含了一些默认的元数据(Metadata)标签，如下图</p>
<figure><figcaption></figcaption></figure>
<p>如： <code>__address__</code> ：当前Target实例的访问地址<code>&lt;host&gt;:&lt;port&gt;</code> , 通常来说，Target以<code>__</code>作为前置的标签是在系统内部使用的,有点像PY的私有方法，因此这些标签不会被写入到样本数据中，如果需要，可通过<code>scrape_configs</code>进行操作</p>
<h3>replace</h3>
<p>一个简单的例子</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">test</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    kubernetes_sd_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">role</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">pod</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      api_server</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://xxxx.xx.xx:xxxx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      tls_config</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        insecure_skip_verify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">source_labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:  [</span><span style="color:#98C379;--shiki-dark:#98C379">"__address__"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      target_label</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"address"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      #action: replace  # 这个是默认的行为，如果未指定action，则为replace</span></span></code></pre>
</div><p>将 <code>source_labels</code> 下 <code>__address__</code> 的值，赋值到标签为 <code>addr</code> 下。</p>
<p>除了使用<code>replace</code>以外，还可以指定<code>action</code>为<code>labelmap</code>，labelmap会根据<code>regex</code>的定义去匹配所有实例标签名称，并且以匹配到的内容为新的标签名，其值作为新标签的值</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">- </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'kubernetes-nodes'</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  kubernetes_sd_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">role</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">node</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">action</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">labelmap</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    regex</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">__meta_kubernetes_node_label_(.+)</span></span></code></pre>
</div><p>还可以使用<code>labelkeep</code>和<code>keepdrop</code>对标签进行过滤，是丢弃还是保留。</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">regex</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">label_should_drop_(.+)</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    action</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">labeldrop</span></span></code></pre>
</div><p>总结： 通过Relabeling机制，可以对prometheus实例的标签进行规范的管理与维护。有了标签的规范，后续就可按标签做很多事情</p>
<h3>keep/drop</h3>
<p>标签虽有了管理，但如果是通过配置中心或集群发现等，自动发现服务，server端若不做控制，将会发现所有的实例，这一点是我们不想看到的。比如我们在集群中加了个测试节点，或者有多个server，做业务区分等。此时可通过keep/drop行为，来做过滤。</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">test</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    kubernetes_sd_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">role</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">pod</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      api_server</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://xxxx.xx.xx:xxxx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      tls_config</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        insecure_skip_verify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">source_labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:  [</span><span style="color:#98C379;--shiki-dark:#98C379">"__address__"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      regex</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.2.133:10249"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      action</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">keep</span></span></code></pre>
</div><p><strong>action设置为keep，会根据regex匹配后进行保留。若为drop则为丢弃</strong></p>
<h3>hashmod</h3>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'test'</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#E06C75;--shiki-dark:#E06C75">source_labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">__address__</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        modulus</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:       </span><span style="color:#D19A66;--shiki-dark:#D19A66">4</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        target_label</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:  </span><span style="color:#98C379;--shiki-dark:#98C379">tmp_hash</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        action</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:        </span><span style="color:#98C379;--shiki-dark:#98C379">hashmod</span></span></code></pre>
</div><p><a href="https://github.com/prometheus/prometheus/blob/main/model/relabel/relabel.go#L289" target="_blank" rel="noopener noreferrer">https://github.com/prometheus/prometheus/blob/main/model/relabel/relabel.go#L289</a></p>
<p>根据当前Target实例__address__的值以4作为系数，这样每个Target实例都会包含一个新的标签tmp_hash，并且该值的范围在1~4之间，查看Target实例的标签信息，可以看到如下的结果，每一个Target实例都包含了一个新的tmp_hash值</p>
<figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>Prometheus</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/01-README.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/01-README.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Prometheus</source>
      <description>建议使用 kube-prometheus，参考 介绍 官方概述 prometheus组件架构图prometheus组件架构图 Prometheus Server：存储和抓取时间序列数据的主要服务器，且内置的Express Browser UI，通过这个UI可以直接通过PromQL实现数据的查询以及可视化。 TSDB：指标是任何系统了解其健康状况和运行状...</description>
      <pubDate>Thu, 21 Mar 2024 13:21:43 GMT</pubDate>
      <content:encoded><![CDATA[
<p>建议使用 kube-prometheus，参考<a href="/ops/monitor/prometheus/20-Prometheus%20Operator%20%E4%B8%8E%20kube-prometheus.html" target="_blank">Prometheus Operator 与 kube-prometheus</a></p>
<h2>介绍</h2>
<p><a href="https://prometheus.io/docs/introduction/overview/" target="_blank" rel="noopener noreferrer">官方概述</a></p>
<figure><figcaption>prometheus组件架构图</figcaption></figure>
<ol>
<li>Prometheus Server：存储和抓取时间序列数据的主要服务器，且内置的Express Browser UI，通过这个UI可以直接通过PromQL实现数据的查询以及可视化。</li>
<li>TSDB：指标是任何系统了解其健康状况和运行状态的关键方面。任何系统的设计都需要收集、存储和报告指标，以提供系统的脉搏。数据存储在一系列时间间隔内，需要一个高效的数据库来存储和检索这些数据。OpenTSDB 时序数据库就是这样一种可以满足这种需求的时序数据库。</li>
<li>PromQL： Prometheus 以 PromQL 的形式定义了一种丰富的查询语言，用于从时序数据库中查询数据。</li>
<li>Pushgateway：可用于支持短期工作，代理等</li>
<li>导出器：它们用于将指标数据提升到普罗米修斯服务器。</li>
<li>Alertmanager：用于将通知发送到各种通信渠道，如 Slack、Email 以通知用户。</li>
<li>Exporter： 将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server。分为两类，直接采集：这一类Exporter直接内置了对Prometheus监控的支持，比如cAdvisor，Kubernetes，Etcd，Gokit等。间接采集：间接采集，原有监控目标并不直接支持Prometheus，因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如： Mysql Exporter，JMX Exporter，Consul Exporter等。</li>
</ol>
<h2>PromQL</h2>
<p>待补充</p>
<h2>告警</h2>
<h2>Prometheus Operator</h2>
<figure><figcaption>Prometheus Operator 架构</figcaption></figure>
<p>没有Operator的时候，监控逻辑是：<code>export</code> 暴露端口，server端通过<code>pull</code>的方式去拿取数据，具体拿那个，相应的配置在server端配置.<br>
通常是编辑<code>prometheus.yml</code>，并在<code>scrape_configs</code>节点下添加以下内容:</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'prometheus'</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'localhost:9090'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 采集node exporter监控数据</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'node'</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">'localhost:9100'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
</div><p>如果使用<code>Operator</code>的方式，</p>
<h2>Operator监控集群外服务</h2>
]]></content:encoded>
    </item>
    <item>
      <title>quick start</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/02-Prometheus-quick-start.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/02-Prometheus-quick-start.html</guid>
      <source url="https://docs.lizili.online/rss.xml">quick start</source>
      <description>建议使用 kube-prometheus，参考 介绍 官方概述 prometheus组件架构图prometheus组件架构图 Prometheus Server：存储和抓取时间序列数据的主要服务器，且内置的Express Browser UI，通过这个UI可以直接通过PromQL实现数据的查询以及可视化。 TSDB：指标是任何系统了解其健康状况和运行状...</description>
      <pubDate>Thu, 21 Mar 2024 13:21:43 GMT</pubDate>
      <content:encoded><![CDATA[
<p>建议使用 kube-prometheus，参考<a href="/ops/monitor/prometheus/20-Prometheus%20Operator%20%E4%B8%8E%20kube-prometheus.html" target="_blank">Prometheus Operator 与 kube-prometheus</a></p>
<h2>介绍</h2>
<p><a href="https://prometheus.io/docs/introduction/overview/" target="_blank" rel="noopener noreferrer">官方概述</a></p>
<figure><figcaption>prometheus组件架构图</figcaption></figure>
<ol>
<li>Prometheus Server：存储和抓取时间序列数据的主要服务器，且内置的Express Browser UI，通过这个UI可以直接通过PromQL实现数据的查询以及可视化。</li>
<li>TSDB：指标是任何系统了解其健康状况和运行状态的关键方面。任何系统的设计都需要收集、存储和报告指标，以提供系统的脉搏。数据存储在一系列时间间隔内，需要一个高效的数据库来存储和检索这些数据。OpenTSDB 时序数据库就是这样一种可以满足这种需求的时序数据库。</li>
<li>PromQL： Prometheus 以 PromQL 的形式定义了一种丰富的查询语言，用于从时序数据库中查询数据。</li>
<li>Pushgateway：可用于支持短期工作，代理等</li>
<li>导出器：它们用于将指标数据提升到普罗米修斯服务器。</li>
<li>Alertmanager：用于将通知发送到各种通信渠道，如 Slack、Email 以通知用户。</li>
<li>Exporter： 将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server。分为两类，直接采集：这一类Exporter直接内置了对Prometheus监控的支持，比如cAdvisor，Kubernetes，Etcd，Gokit等。间接采集：间接采集，原有监控目标并不直接支持Prometheus，因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如： Mysql Exporter，JMX Exporter，Consul Exporter等。</li>
</ol>
<h3>server</h3>
<p><a href="https://prometheus.io/download/" target="_blank" rel="noopener noreferrer">https://prometheus.io/download/</a></p>
<h4>解压</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">drwxr-xr-x</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#D19A66;--shiki-dark:#D19A66">   38</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:21</span><span style="color:#98C379;--shiki-dark:#98C379"> console_libraries</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">drwxr-xr-x</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#D19A66;--shiki-dark:#D19A66">  173</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:21</span><span style="color:#98C379;--shiki-dark:#98C379"> consoles</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-rw-r--r--</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#98C379;--shiki-dark:#98C379">  12K</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:21</span><span style="color:#98C379;--shiki-dark:#98C379"> LICENSE</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-rw-r--r--</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#98C379;--shiki-dark:#98C379"> 3.7K</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:21</span><span style="color:#98C379;--shiki-dark:#98C379"> NOTICE</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-rwxr-xr-x</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#98C379;--shiki-dark:#98C379"> 128M</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:10</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-rw-r--r--</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#D19A66;--shiki-dark:#D19A66">  934</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:21</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus.yml</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-rwxr-xr-x</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#98C379;--shiki-dark:#98C379"> 120M</span><span style="color:#98C379;--shiki-dark:#98C379"> 3月</span><span style="color:#D19A66;--shiki-dark:#D19A66">  11</span><span style="color:#98C379;--shiki-dark:#98C379"> 23:10</span><span style="color:#98C379;--shiki-dark:#98C379"> promtool</span></span></code></pre>
</div><h4>启动</h4>
<p>默认加载当前路径下的 <code>prometheus.yaml</code>,默认的存储路径为当前目录的<code>data/</code>, 也可以通过<code>--storage.tsdb.path="data/"</code>指定路径</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">./prometheus</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --storage.tsdb.path=</span><span style="color:#98C379;--shiki-dark:#98C379">"data/"</span></span></code></pre>
</div><h3>node exporter</h3>
<p><a href="https://github.com/prometheus/node_exporter" target="_blank" rel="noopener noreferrer">https://github.com/prometheus/node_exporter</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter-1.7.0.linux-amd64.tar.gz</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">cd</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter-1.7.0.linux-amd64</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mv</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/bin/</span></span></code></pre>
</div><p>启动脚本</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/systemd/system/node_exporter.service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt; </span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">"EOF"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">[Unit]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">Description=node_export</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">Documentation=https://github.com/prometheus/node_exporter</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379"> </span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">[Service]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">ExecStart=/opt/prometheus/node_exporter</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">Restart=on-failure</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">[Install]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">WantedBy=multi-user.target</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> daemon-reload</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> enable</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> start</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> status</span><span style="color:#98C379;--shiki-dark:#98C379"> node_exporter</span></span></code></pre>
</div><p>访问9100端口</p>
<figure><figcaption></figcaption></figure>
<h3>添加target</h3>
<p>修改Prometheus配置文件，编辑prometheus.yml并在scrape_configs节点下添加内容</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"prometheus"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"localhost:9090"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 采集node exporter监控数据，这里定义的node 会在server中看到</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"node"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<h3>图形化</h3>
<h4>数据源</h4>
<figure><figcaption></figcaption></figure>
<p>选模版即可,也可以自己通过PromeQL语句，自行定义</p>
<p><a href="https://grafana.com/grafana/dashboards/" target="_blank" rel="noopener noreferrer">https://grafana.com/grafana/dashboards/</a></p>
<h2>云原生</h2>
<h3>下载</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> oci://registry-1.docker.io/bitnamicharts/prometheus</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0.12.1</span></span></code></pre>
</div><h3>配置</h3>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">global</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  imageRegistry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">alertmanager</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">alert.prometheus.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">LoadBalancer</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">server</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  thanos</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    create</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    pathType</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ImplementationSpecific</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">prometheus.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    ingressClassName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"nginx"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>PromQL</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/03-PromQL.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/03-PromQL.html</guid>
      <source url="https://docs.lizili.online/rss.xml">PromQL</source>
      <description>时序数据库 时序数据库（Time Series Database，简称TSDB）是专门用于处理时间序列数据的数据库。时间序列数据是一种按时间顺序排列的数据点集合，通常用于记录随时间变化的数据，如股票价格、气象数据、物联网设备传感器读数等。 横轴表示时间（通常是连续的时间线），纵轴表示测量的数值。每个数据点都对应一个时间戳和相应的数值 数据 每一个点称为...</description>
      <pubDate>Thu, 21 Mar 2024 13:21:43 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>时序数据库</h2>
<p>时序数据库（Time Series Database，简称TSDB）是专门用于处理时间序列数据的数据库。时间序列数据是一种按时间顺序排列的数据点集合，通常用于记录随时间变化的数据，如股票价格、气象数据、物联网设备传感器读数等。</p>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>  ^</span></span>
<span class="line"><span>  │   . . . . . . . . . . . . . . . . .   . . </span></span>
<span class="line"><span>  │     . . . . . . . . . . . .     . . . . . </span></span>
<span class="line"><span>  │     .     .   . . . . .   .     . . . . . </span></span>
<span class="line"><span>  │     .     . . . . . . . . . . . . .   . .  </span></span>
<span class="line"><span>  v</span></span>
<span class="line"><span>    &lt;</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Job与Instance</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/04-job_instance.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/04-job_instance.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Job与Instance</source>
      <description>当我们需要采集不同的监控指标(例如：主机、MySQL、Nginx)时，我们只需要运行相应的监控采集程序，并且让Prometheus Server知道这些Exporter实例的访问地址。在Prometheus中，每一个暴露监控样本数据的HTTP服务称为一个实例。例如在当前主机上运行的node exporter可以被称为一个实例(Instance)。 jo...</description>
      <pubDate>Thu, 21 Mar 2024 13:21:43 GMT</pubDate>
      <content:encoded><![CDATA[
<p>当我们需要采集不同的监控指标(例如：主机、MySQL、Nginx)时，我们只需要运行相应的监控采集程序，并且让Prometheus Server知道这些Exporter实例的访问地址。在Prometheus中，每一个暴露监控样本数据的HTTP服务称为一个实例。例如在当前主机上运行的node exporter可以被称为一个实例(Instance)。</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 指标采集配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 任务名称</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"prometheus"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 实例列表</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"127.0.0.1:9090"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 任务名称</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"node"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 实例列表</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.200.102:9100"</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>job</h2>
<p>Prometheus 默认有一个 prometheus 的job，该任务主要用于收集 Prometheus 自己的相关指标。</p>
<p>用户可以根据采集实例进行分类然后分配到不同的<code>job</code>。</p>
<p>比如将所有 <code>Node Exporter</code> 的实例分到名为 <code>node</code> 任务。job_name 定义的任务名称会以 <code>job=node</code>的格式作为标签被添加到时间序列中，这样就可以通过该标签对数据也进行分组。</p>
<p>通过 Prometheus 提供的 UI 界面可以看到目前的实例和任务相关情况：</p>
<figure><figcaption></figcaption></figure>
<h2>实例</h2>
<p>简单来讲</p>
<p><code>instance</code>: 一个单独 scrape 的目标， 一般对应于一个进程。</p>
<p><code>jobs</code>: 一组同种类型的 instances</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"node"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">api-server</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">instance 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">1.2.3.4:5670</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">instance 2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">1.2.3.4:5671</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">instance 3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">5.6.7.8:5670</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">instance 4</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">5.6.7.8:5671</span></span></code></pre>
</div><p>而一组用于相同采集目的的实例，或者同一个采集进程的多个副本则通过一个一个任务(Job)进行管理。同时，Prometheus 也会给每一个实例添加一个 UP 指标：</p>
<figure><figcaption></figcaption></figure>
<p>当前在每一个Job中主要使用了静态配置(static_configs)的方式定义监控目标。除了静态配置每一个Job的采集Instance地址以外，Prometheus还支持与DNS、Consul、E2C、Kubernetes等进行集成实现自动发现Instance实例，并从这些Instance上获取监控数据。</p>
<h2>标签</h2>
<p>除了系统提供的job 标签以外，用户也可以自己添加标签：</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 指标采集配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"node"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          group</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"sre"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          env</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"product"</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<h2>配置引用</h2>
<p>将 targets 的配置抽离成单独的文件，然后在主配置中引入，这样就避免了<code>static_configs</code>下配置的混乱</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 指标采集配置</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  ...</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 新增用户测试文件的任务</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"node-exporter-file"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 从文件获取实例</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    file_sd_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">files</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">/opt/prometheus/conf/targets/node-exporter.yml</span></span></code></pre>
</div><p>node-exporter.yml 内容如下：</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">- </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    group</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"sre"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    env</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"product"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 加了个标识，用于区别</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    way</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"file"</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<h2>其他</h2>
<p><code>kubernetes_sd_configs</code>:  实现k8s集群的服务发现</p>
<p><code>consul_sd_config</code> : 基于consul的服务发现</p>
<p>等</p>
]]></content:encoded>
    </item>
    <item>
      <title>Exporter</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/05-exporter.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/05-exporter.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Exporter</source>
      <description>export 简单来讲，能够向 sever 提供数据的程序，就可以称为exporter，在server的视角下，它即为一个target 官方提供的https://github.com/orgs/prometheus/repositories?q=exporter 使用 以下引用自网络 独立使用的 以我们已经使用过的Node Exporter为例，由于操...</description>
      <pubDate>Thu, 21 Mar 2024 13:21:43 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>export</h2>
<p>简单来讲，能够向 sever 提供数据的程序，就可以称为exporter，在server的视角下，它即为一个<code>target</code></p>
<p>官方提供的<a href="https://github.com/orgs/prometheus/repositories?q=exporter" target="_blank" rel="noopener noreferrer">https://github.com/orgs/prometheus/repositories?q=exporter</a></p>
<figure><figcaption></figcaption></figure>
<h2>使用</h2>
<blockquote>
<p>以下引用自网络</p>
</blockquote>
<ul>
<li>
<p>独立使用的</p>
<p>以我们已经使用过的Node Exporter为例，由于操作系统本身并不直接支持Prometheus，同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。因此，用户只能通过独立运行一个程序的方式，通过操作系统提供的相关接口，将系统的运行状态数据转换为可供Prometheus读取的监控数据。 除了Node Exporter以外，比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。 这些Exporter程序扮演了一个中间代理人的角色。</p>
</li>
<li>
<p>集成到应用中的</p>
<p>为了能够更好的监控系统的内部运行状态，有些开源项目如Kubernetes，ETCD等直接在代码中使用了Prometheus的Client Library，提供了对Prometheus的直接支持。这种方式打破的监控的界限，让应用程序可以直接将内部的运行状态暴露给Prometheus，适合于一些需要更多自定义监控指标需求的项目。</p>
</li>
</ul>
<h2>白盒监控</h2>
<p>白盒监控（White-box monitoring）是指对系统内部运行机制、逻辑、状态进行深入监控的一种方式。它依赖于系统内部的指标和日志，可以提供系统内部运行的详细视图，比如应用程序的性能指标、数据库查询性能、系统调用的统计信息等。白盒监控需要对被监控系统有较深的理解，通过收集系统的内部指标来分析系统的健康状况和性能问题。</p>
<p>Prometheus通过以下几个方面实现白盒监控：</p>
<ul>
<li>
<p>指标收集</p>
<p>Prometheus客户端库提供了一套丰富的指标收集接口，支持各种语言的应用程序。开发者可以在应用程序中直接使用这些库来暴露出内部状态的指标（比如HTTP请求延迟、数据库查询次数等），Prometheus服务器定期从这些暴露出的指标中抓取数据。</p>
</li>
<li>
<p>自定义指标</p>
<p>除了利用客户端库提供的标准指标类型（如Counter、Gauge、Histogram和Summary）外，用户还可以根据需要定义自己的指标，更细致地监控应用程序的内部状态。</p>
</li>
<li>
<p>服务发现</p>
<p>Prometheus支持多种服务发现机制（包括静态配置、DNS、Consul、Kubernetes等），这使得它可以自动发现并监控新的服务实例，适用于动态变化的环境。</p>
</li>
<li>
<p>查询语言</p>
<p>Prometheus提供了一种强大的查询语言（PromQL），它允许用户通过表达式来检索和处理时间序列数据，非常适合对内部指标进行深入分析。</p>
</li>
<li>
<p>告警规则</p>
<p>用户可以基于收集到的指标设置告警规则，一旦满足告警条件，Prometheus就会触发告警。这种机制可以及时发现系统内部的异常状态。</p>
</li>
</ul>
<p>常见的<code>Exporter</code>均为白盒监控</p>
<h2>黑盒监控</h2>
<p>在黑盒监控中，监控系统将被监控的服务视为一个黑盒子，只通过外部接口来检测系统的状态和性能，例如通过模拟用户请求来检测网站的可用性和响应时间。黑盒监控侧重于从用户的角度监控服务，重点关注服务是否可用、响应时间是否符合预期等。</p>
<p>黑盒监控是以故障为导向。当故障发生时，黑盒监控能快速发现故障，而白盒监控则侧重于主动发现或者预测潜在的问题。</p>
<p>Prometheus本身专注于白盒监控，即收集和分析应用程序内部的指标数据。然而，它可以通过集成黑盒监控工具，如Blackbox Exporter，来实现黑盒监控。它能够对外部系统执行各种检查，包括：</p>
<p><code>HTTP、HTTPS</code>：检查网页的可用性、证书有效性、页面加载时间等。</p>
<p><code>TCP</code>：检查TCP端口的可访问性。</p>
<p><code>ICMP</code> (Ping)：检查网络的连通性。</p>
<p><code>DNS</code>：检查DNS查询的响应。</p>
<h3>安装</h3>
<p><a href="https://github.com/prometheus/blackbox_exporter/releases" target="_blank" rel="noopener noreferrer">https://github.com/prometheus/blackbox_exporter/releases</a></p>
<h3>配置</h3>
<p>安装包默认配置文件。（在Blackbox Exporter每一个探针配置称为一个module，并且以YAML配置文件的形式提供给Blackbox Exporter。<br>
）</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">modules</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  http_2xx</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    prober</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      preferred_ip_protocol</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ip4"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  http_post_2xx</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    prober</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      method</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">POST</span></span></code></pre>
</div><p>访问<a href="http://127.0.0.1:9115/probe?module=http_2xx&amp;target=baidu.com" target="_blank" rel="noopener noreferrer">http://127.0.0.1:9115/probe?module=http_2xx&amp;target=baidu.com</a><br>
对baidu.com进行探测</p>
<figure><figcaption></figcaption></figure>
<h3>集成</h3>
<p>在Prometheus下配置对Blockbox Exporter实例的采集任务即可</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">- </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">baidu_http2xx_probe</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  params</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    module</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">http_2xx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    target</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">baidu.com</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  metrics_path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/probe</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">127.0.0.1:9115</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">- </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">prometheus_http2xx_probe</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  params</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    module</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">http_2xx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    target</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">prometheus.io</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  metrics_path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/probe</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">127.0.0.1:9115</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当我们需要对doge站点进行采集时，一个个配置，显然不太现实。所以可以采用Relabling的方式对这些配置进行简化。</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">scrape_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'blackbox'</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    metrics_path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/probe</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    params</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      module</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">http_2xx</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">http://prometheus.io</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # Target to probe with http.</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">https://prometheus.io</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">   # Target to probe with https.</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">http://example.com:8080</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # Target to probe with http on port 8080.</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    relabel_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">source_labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">__address__</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        target_label</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">__param_target</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">source_labels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">__param_target</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        target_label</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">instance</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">target_label</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">__address__</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        replacement</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">127.0.0.1:9115</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol>
<li>根据Target实例的地址，写入<code>__param_target</code>标签中。<code>__param_&lt;name&gt;</code>形式的标签表示，在采集任务时会在请求目标地址中添加<code>&lt;name&gt;</code>参数，等同于params的设置；</li>
<li>获取<code>__param_target</code>的值，并覆写到<code>instance</code>标签中；</li>
<li>覆写Target实例的<code>__address__</code>标签值为<code>BlockBox Exporter</code>实例的访问地址</li>
</ol>
<h3>http探针</h3>
<p>待补充</p>
<p><code>valid_http_versions</code></p>
<p><code>valid_status_codes</code></p>
<h2>自定义exporter</h2>
<p>待补充</p>
]]></content:encoded>
    </item>
    <item>
      <title>kubernetes-event-exporter</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-event-exporter.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-event-exporter.html</guid>
      <source url="https://docs.lizili.online/rss.xml">kubernetes-event-exporter</source>
      <description>kubernetes-event-exporter 是一个用于采集k8s事件的工具，通过它可以将 Kubernetes 事件导出到第三方平台或者数据库（如Webhooks/HTTP，Elasticsearch，OpenSearch，Kafka，Slack，File，Loki等），以便用于可观察性或警报目的。 服务配置 大屏导入 导入过程略，大屏模版如下...</description>
      <category>云原生</category>
      <pubDate>Mon, 18 Mar 2024 09:28:32 GMT</pubDate>
      <content:encoded><![CDATA[
<h2></h2>
<blockquote>
<p>kubernetes-event-exporter 是一个用于采集k8s事件的工具，通过它可以将 Kubernetes 事件导出到第三方平台或者数据库（如Webhooks/HTTP，Elasticsearch，OpenSearch，Kafka，Slack，File，Loki等），以便用于可观察性或警报目的。</p>
</blockquote>
<h2>服务配置</h2>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">docker.io</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  repository</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">bitnami/kubernetes-event-exporter</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  tag</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">1.6.1-debian-12-r16</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">config</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  logLevel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">debug</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  metricsNamePrefix</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">'event_exporter_'</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 修改为json，便于数据操作</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  logFormat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">json</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # https://github.com/resmoio/kubernetes-event-exporter#configuration</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  receivers</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # - name: "dump"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    #   file:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    #     path: "/dev/stdout"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    #     layout: {}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"loki"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      loki</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # 地址根据实际情况修改</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://grafana-loki-distributor.middleware:3100/loki/api/v1/push</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        headers</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          Content-Type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">application/json</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          User-Agent</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"kube-event-exporter"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        streamLabels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          app</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kubernetes-event-exporter</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          dataCenter</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">local-cluster</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          source</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">event-exporter</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # 这里不建议修改了，汇总和模板冲突。如自定义大屏的话，可按需配置</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # layout: {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  route</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    routes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">match</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          # - receiver: "dump"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          - </span><span style="color:#E06C75;--shiki-dark:#E06C75">receiver</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"loki"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">metrics</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  prometheusRule</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>大屏导入</h2>
<p>导入过程略，大屏模版如下</p>
<p><a href="https://grafana.com/grafana/dashboards/17882-kubernetes-event-exporter/" target="_blank" rel="noopener noreferrer">https://grafana.com/grafana/dashboards/17882-kubernetes-event-exporter/</a></p>
<h2>event生成</h2>
<p>模拟动作，出发事件，查看效果</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> deploy</span><span style="color:#98C379;--shiki-dark:#98C379"> event-test</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --image=nginx-bad</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>metrics-server</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-metrics-server.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-metrics-server.html</guid>
      <source url="https://docs.lizili.online/rss.xml">metrics-server</source>
      <description>github-metrics-server kubeadm 默认是不部署的。 依赖于 API Aggregator 只可以查询当前的度量数据，不保存历史数据。 检查Aggregator是否开启 修改配置，并开启。 增加 --enable-aggregator-routing=true，修改后，服务会自动重启 下载文件</description>
      <category>云原生</category>
      <pubDate>Tue, 12 Mar 2024 03:42:17 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://github.com/kubernetes-sigs/metrics-server" target="_blank" rel="noopener noreferrer">github-metrics-server</a></p>
<ul>
<li>kubeadm 默认是不部署的。</li>
<li>依赖于 API Aggregator</li>
<li>只可以查询当前的度量数据，不保存历史数据。</li>
</ul>
<p>检查Aggregator是否开启</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ps</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -ef</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#98C379;--shiki-dark:#98C379"> apiserver</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#98C379;--shiki-dark:#98C379"> enable-aggregator-routing</span></span></code></pre>
</div><p>修改配置，并开启。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> vi</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/manifests/kube-apiserver.yaml</span></span></code></pre>
</div><p>增加 <code>--enable-aggregator-routing=true</code>，修改后，服务会自动重启</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">v1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kind</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">Pod</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span><span style="color:#D19A66;--shiki-dark:#D19A66">...</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  containers</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">command</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">kube-apiserver</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">	......</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">--enable-bootstrap-token-auth=true</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 新增</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">--enable-aggregator-routing=true</span></span></code></pre>
</div><p>下载文件</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml</span></span></code></pre>
</div><div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  template</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      containers</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#E06C75;--shiki-dark:#E06C75">args</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--cert-dir=/tmp</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--secure-port=10250</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # 默认是InternalIP,ExternalIP,Hostname</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--kubelet-preferred-address-types=InternalIP</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--kubelet-use-node-status-port</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--metric-resolution=15s</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # 添加此行</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#98C379;--shiki-dark:#98C379">--kubelet-insecure-tls</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        # 修改镜像地址</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">registry.cn-hangzhou.aliyuncs.com/chenby/metrics-server:v0.6.1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        imagePullPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">IfNotPresent</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>Operator与kube-prometheus</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/20-Prometheus%20Operator%20%E4%B8%8E%20kube-prometheus.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/20-Prometheus%20Operator%20%E4%B8%8E%20kube-prometheus.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Operator与kube-prometheus</source>
      <description>原文来自 EWhisper.cn Prometheus Operator 在 Kubernetes 上管理 Prometheus 集群，使用 Kubernetes 自定义资源（CRD），简化了 Prometheus、Alertmanager 和相关监控组件的部署和配置。目前提供四种资源类型 Prometheus：声明式创建和管理Prometheus S...</description>
      <category>云原生</category>
      <pubDate>Mon, 11 Mar 2024 08:51:15 GMT</pubDate>
      <content:encoded><![CDATA[<blockquote>
<p>原文来自 <a href="https://ewhisper.cn/" target="_blank" rel="noopener noreferrer">EWhisper.cn</a></p>
</blockquote>
<h2>Prometheus Operator</h2>
<p>在 Kubernetes 上管理 Prometheus 集群，使用 Kubernetes 自定义资源（CRD），简化了 Prometheus、Alertmanager 和相关监控组件的部署和配置。目前提供四种资源类型</p>
<ul>
<li>Prometheus：声明式创建和管理Prometheus Server实例</li>
<li>ServiceMonitor：负责声明式的管理监控配置</li>
<li>PrometheusRule：负责声明式的管理告警配置</li>
<li>Alertmanager：声明式的创建和管理Alertmanager实例</li>
</ul>
<p>简言之，Prometheus Operator能够帮助用户自动化的创建以及管理Prometheus Server以及其相应的配置。</p>
<h2>kube-prometheus</h2>
<p><a href="https://github.com/prometheus-operator/kube-prometheus" target="_blank" rel="noopener noreferrer">kube-prometheus</a> 提供了一个基于 Prometheus 和 Prometheus Operator 的完整集群监控堆栈的示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例、用于收集节点指标的指标导出器（如 node_exporters)、将 Prometheus 链接到各种指标端点的目标配置，以及用于通知集群中潜在问题的示例警报规则。</p>
<h2>helm chart</h2>
<p><a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack" target="_blank" rel="noopener noreferrer">prometheus-community/kube-prometheus-stack</a> helm chart 提供了与 kube-prometheus 相似的特性集。这张 chart 是由 prometheus 社区维护的。</p>
<h3>Prometheus Operator 功能</h3>
<h3>CRD</h3>
<p>Prometheus Operator 的一个核心特性是 watch Kubernetes API 服务器对特定对象的更改，并确保当前 Prometheus 部署与这些对象匹配。Operator 对以下自定义资源定义 (crd) 进行操作：</p>
<p><code>monitoring.coreos.com/v1</code>:</p>
<ul>
<li><code>Prometheus</code>: 它定义了 Prometheus 期望的部署。</li>
<li><code>Alertmanager</code>: 它定义了 AlertManager 期望的部署。</li>
<li><code>ThanosRuler</code>: 它定义了 ThanosRuler 期望的部署；如果有多个 Prometheus 实例，则通过 <code>ThanosRuler</code> 进行告警规则的统一管理。</li>
<li><code>ServiceMonitor</code>: Prometheus Operator 通过 <code>PodMonitor</code> 和 <code>ServiceMonitor</code> 实现对资源的监控，<code>ServiceMonitor</code> 用于通过 Service 对 K8S 中的任何资源进行监控，推荐首选 <code>ServiceMonitor</code>. 它声明性地指定了 Kubernetes service 应该如何被监控。Operator 根据 API 服务器中对象的当前状态自动生成 Prometheus 刮擦配置。</li>
<li><code>PodMonitor</code>: Prometheus Operator 通过 <code>PodMonitor</code> 和 <code>ServiceMonitor</code> 实现对资源的监控，<code>PodMonitor</code> 用于对 Pod 进行监控，推荐首选 <code>ServiceMonitor</code>. <code>PodMonitor</code> 声明性地指定了应该如何监视一组 pod。Operator 根据 API 服务器中对象的当前状态自动生成 Prometheus 刮擦配置。</li>
<li><code>Probe</code>: 它声明性地指定了应该如何监视 ingress 或静态目标组。Operator 根据定义自动生成 Prometheus 刮擦配置。</li>
<li><code>PrometheusRule</code>: 用于管理 Prometheus 告警规则；它定义了一套所需的 Prometheus 警报和/或记录规则。Prometheus 生成一个规则文件，可以被 Prometheus 实例使用。</li>
<li><code>AlertmanagerConfig</code>: 用于管理 AlertManager 配置文件，主要是告警发给谁；它声明性地指定 Alertmanager 配置的子部分，允许将警报路由到自定义接收器，并设置禁止规则。</li>
</ul>
<p>Prometheus Operator 自动检测 Kubernetes API 服务器对上述任何对象的更改，并确保匹配的部署和配置保持同步。</p>
<h3>简化的部署配置</h3>
<p>配置 Prometheus 的基础知识，如版本、持久性、保留策略和来自本机 Kubernetes 资源的副本。最简的持久化的 Prometheus 的部署，只需要创建如下 yaml 即可：</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">monitoring.coreos.com/v1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kind</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">Prometheus</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">metadata</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">persisted</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  storage</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    volumeClaimTemplate</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        storageClassName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ssd</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          requests</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            storage</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">40Gi</span></span></code></pre>
</div><h2>Prometheus 目标配置</h2>
<p>根据熟悉的 Kubernetes 标签查询自动生成监控目标配置；无需学习普罗米修斯特定的配置语言。</p>
<h2>大厂案例</h2>
<p>哪些大厂在用 Prometheus Operator 或 kube-prometheus?</p>
<h3>RedHat</h3>
<p>从 Prometheus Operator 的 API 也能看出来，这个 Operator 最早是由 CoreOS 开发并开源的，而现在 CoreOS 已经被 RedHat 收购，所以 RedHat 的 OpenShift 4 完全是采用 Prometheus Operator 作为它的 Metrics 解决方案的。典型的架构如下图：</p>
<figure><figcaption></figcaption></figure>
<p>可以看到 Prometheus 和 AlertManager 都是通过 Prometheus Operator 来进行管理的。</p>
<h3>Rancher</h3>
<p>Rancher 2 以后的 rancher-monitoring 也是基于 kube-prometheus 做了进一步的改进而来的，这是通过 rancher-monitoring helm chart 部署后的关系图，可以看到部署的组件还是非常多的：</p>
<ul>
<li>Grafana</li>
<li>Prometheus CRD</li>
<li>Prometheus Operator</li>
<li>Prometheus</li>
<li>AlertManager</li>
<li>kube-state-metrics</li>
<li>prometheus adapter</li>
<li>node exporter</li>
<li>...</li>
</ul>
<figure><figcaption></figcaption></figure>
<p>我为什么推荐你用 Prometheus Operator 或 kube-prometheus 而非原生 prometheus?</p>
<p>理由如下：</p>
<ol>
<li>众多大厂的选择；</li>
<li>极大简化了 Prometheus 的配置复杂度；</li>
<li>开箱即用的大量：
<ol>
<li>监控对象，如：K8S 组件 - coredns, kubelet, controller manager, apiserver, etcd, scheduler, kube proxy; 监控组件自监控 - grafana, AlertManager, prometheus 等；</li>
<li>仪表板，自带 24 个仪表板，非常实用，涵盖：集群/组件/网络/存储/Node/Pod 等等维度；</li>
<li>告警规则，自带了 100 多个告警规则，涵盖 K8S 的方方面面；</li>
</ol>
</li>
<li>流行的开源产品，很多也默认会带有对 Prometheus Operator 的支持，如 Loki 就有相关的 ServiceMonitor;</li>
<li>通过 ServiceMonitor 等，其实反而相比添加 Prometheus Annotation 有更大的灵活性；如下面的例子</li>
<li>高可用的支持，如：
<ol>
<li>多个 Prometheus 的 shards</li>
<li>多个 AlertManager</li>
<li>ThanosRuler</li>
</ol>
</li>
<li>RBAC: 如默认可以创建 3 个 monitoring 的角色：admin/edit/viewer, 可以分别对应监控的管理员，维护人员和只读用户；</li>
</ol>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<p>示例，灵活性：</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoints</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#E06C75;--shiki-dark:#E06C75">honorLabels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      params</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        _scheme</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          - </span><span style="color:#98C379;--shiki-dark:#98C379">https</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      port</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">metrics</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      proxyUrl</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://pushprox-k3s-server-proxy.cattle-monitoring-system.svc:8080</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      relabelings</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        - </span><span style="color:#E06C75;--shiki-dark:#E06C75">sourceLabels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            - </span><span style="color:#98C379;--shiki-dark:#98C379">__metrics_path__</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          targetLabel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">metrics_path</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  jobLabel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">component</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespaceSelector</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    matchNames</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#98C379;--shiki-dark:#98C379">cattle-monitoring-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  podTargetLabels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">component</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">pushprox-exporter</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  selector</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    matchLabels</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      component</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">k3s-server</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      k8s-app</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">pushprox-k3s-server-client</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      provider</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kubernetes</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      release</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">rancher-monitoring</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>️ 参考文档</p>
]]></content:encoded>
    </item>
    <item>
      <title>kube-prometheus</title>
      <link>https://docs.lizili.online/ops/monitor/prometheus/22-kube-prometheus.html</link>
      <guid>https://docs.lizili.online/ops/monitor/prometheus/22-kube-prometheus.html</guid>
      <source url="https://docs.lizili.online/rss.xml">kube-prometheus</source>
      <description>下载chart 下载模版 安装 prometheus-values.yaml 文件如下： 集群外实例添加 additional-scrape-configurations 新建一个配置文件, 如prometheus-additional.yaml 这里的配置写法，和维护 prometheus的启动配置文件一致。 为配置文件创建一个secret 生成配置...</description>
      <category>云原生</category>
      <pubDate>Mon, 11 Mar 2024 08:51:15 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>下载chart</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> oci://registry-1.docker.io/bitnamicharts/kube-prometheus</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 8.30.1</span></span></code></pre>
</div><h2>下载模版</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">https://grafana.com/grafana/dashboards/15758-kubernetes-views-namespaces/?tab</span><span style="color:#98C379;--shiki-dark:#98C379">=revisions</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">https://grafana.com/grafana/dashboards/1860-node-exporter-full/?tab</span><span style="color:#98C379;--shiki-dark:#98C379">=revisions</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<h2>安装</h2>
<p><code>prometheus-values.yaml</code> 文件如下：</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">global</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  imageRegistry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  imagePullSecrets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: []</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  storageClass</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">fullnameOverride</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"kube-prometheus"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">operator</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">docker.io</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    repository</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">bitnami/prometheus-operator</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    tag</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0.72.0-debian-12-r1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    pullPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">IfNotPresent</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    pullSecrets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: []</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">prometheus</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">docker.io</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    repository</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">bitnami/prometheus</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    tag</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">2.50.1-debian-12-r1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    pullSecrets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: []</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  persistence</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">10Gi</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  podDisruptionBudget</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">prometheus.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  retention</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">5d</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  thanos</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    create</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">alertmanager</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">docker.io</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    repository</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">bitnami/alertmanager</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    tag</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0.27.0-debian-12-r1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    pullSecrets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: []</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  persistence</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    accessModes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#98C379;--shiki-dark:#98C379">ReadWriteOnce</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">5Gi</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">alert.prometheus.zili.work</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">## </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># node-exporter:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># kube-state-metrics:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># ServiceMonitors:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">coreDns</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubelet</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">blackboxExporter</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeApiServer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeControllerManager</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kube-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.133</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    ports</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10257</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    targetPorts</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10257</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    https</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    insecureSkipVerify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeScheduler</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kube-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.133</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    ports</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10259</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    targetPorts</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10259</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    https</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    insecureSkipVerify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeProxy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kube-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.133</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.135</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.135</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> kube-prometheus</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><!-- ## 集群内实例添加 -->
<h2>集群外实例添加</h2>
<p><a href="https://github.com/bitnami/charts/blob/main/bitnami/kube-prometheus/README.md#additional-scrape-configurations" target="_blank" rel="noopener noreferrer">additional-scrape-configurations</a></p>
<ol>
<li>新建一个配置文件, 如<code>prometheus-additional.yaml</code></li>
</ol>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">- </span><span style="color:#E06C75;--shiki-dark:#E06C75">job_name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  static_configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  - </span><span style="color:#E06C75;--shiki-dark:#E06C75">targets</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"192.168.1.32:9100"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
</div><p>这里的配置写法，和维护 prometheus的启动配置文件一致。</p>
<ol start="2">
<li>为配置文件创建一个secret</li>
</ol>
<p>生成配置</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> secret</span><span style="color:#98C379;--shiki-dark:#98C379"> generic</span><span style="color:#98C379;--shiki-dark:#98C379"> additional-scrape-configs</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --from-file=prometheus-additional.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --dry-run=client</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -oyaml</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">additional-scrape-configs.yaml</span></span></code></pre>
</div><p>应用配置</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 注意namespace 保持一致</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> apply</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> additional-scrape-configs.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> prometheus</span></span></code></pre>
</div><ol start="3">
<li>在编排中，添加这个配置</li>
</ol>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">prometheus</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  ...</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  ...</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  additionalScrapeConfigs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">external</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    external</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">additional-scrape-configs</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      key</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">prometheus-additional.yaml</span></span></code></pre>
</div><p>更新服务即可</p>
<figure><figcaption></figcaption></figure>
<h2>FAQ</h2>
<h3>unhealthy</h3>
<figure><figcaption></figcaption></figure>
<ol>
<li>是否为pod，非pod的服务，需指定endpotin、port、tls等</li>
<li>网络策略（防火墙、服务端口等）</li>
<li>RBAC 授权</li>
</ol>
<p>我的集群为<code>kubeadm</code>安装，默认这几个服务的端口绑定在<code>localhost</code> <code>127.0.0.1</code>上，需要将地址暴露出来，这里为了方便，统一调整为 <code>0.0.0.0</code></p>
<p>配置变更后，服务会自动重启，无须额外操作。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -e</span><span style="color:#98C379;--shiki-dark:#98C379"> "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/manifests/kube-controller-manager.yaml</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -e</span><span style="color:#98C379;--shiki-dark:#98C379"> "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/manifests/kube-scheduler.yaml</span></span></code></pre>
</div><p>更改编排文件，端口如下，再次执行即可。</p>
<figure><figcaption></figcaption></figure>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeControllerManager</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kube-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.133</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    ports</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10257</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    targetPorts</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10257</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    https</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    insecureSkipVerify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kubeScheduler</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kube-system</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.133</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    ports</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10259</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    targetPorts</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">10259</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  serviceMonitor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    https</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    insecureSkipVerify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>proxy的调整</p>
<p>编辑<code>configmap</code>， 修改<code>metricsBindAddress</code>的值为<code>0.0.0.0</code>,重启proxy服务即可</p>
<figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>Git</title>
      <link>https://docs.lizili.online/ops/linux/git.html</link>
      <guid>https://docs.lizili.online/ops/linux/git.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Git</source>
      <description>常用命令 分支 tag 显示分支与路径 vi ~/.bashrc 记得soure FAQ 权限不足 由于昨晚新增和修改了文件,今早到公司就进行了个pull的操作 却提示 搜索相关解决办法,基本解决办法都是说重新生成秘钥.然后复制到git,操作后并不能解决问题. 静下来想想,那出问题的可能就是别的权限了. 原来昨晚创建了新的文件夹用的是sudo创建的 秘...</description>
      <category>git</category>
      <pubDate>Mon, 04 Mar 2024 03:48:53 GMT</pubDate>
      <content:encoded><![CDATA[<h2>常用命令</h2>
<h3>分支</h3>
<p>| 命令 | 说明 |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>压缩与解压</title>
      <link>https://docs.lizili.online/ops/linux/%E8%A7%A3%E5%8E%8B%E7%BC%A9.html</link>
      <guid>https://docs.lizili.online/ops/linux/%E8%A7%A3%E5%8E%8B%E7%BC%A9.html</guid>
      <source url="https://docs.lizili.online/rss.xml">压缩与解压</source>
      <description>.tar （注：tar是打包，不是压缩！） 解包： tar xvf FileName.tar 打包： tar cvf FileName.tar DirName .gz 解压1： gunzip FileName.gz 解压2： gzip -d FileName.gz 压缩： gzip FileName .tar.gz 和 .tgz 解压： tar zxv...</description>
      <category>linux</category>
      <pubDate>Mon, 04 Mar 2024 03:48:53 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>.tar</h2>
<p>（注：tar是打包，不是压缩！）</p>
<p>解包：</p>
<p>tar xvf FileName.tar</p>
<p>打包：</p>
<p>tar cvf FileName.tar DirName</p>
<h2>.gz</h2>
<p>解压1：</p>
<p>gunzip FileName.gz</p>
<p>解压2：</p>
<p>gzip -d FileName.gz</p>
<p>压缩：</p>
<p>gzip FileName</p>
<h2>.tar.gz 和 .tgz</h2>
<p>解压：</p>
<p>tar zxvf FileName.tar.gz</p>
<p>压缩：</p>
<p>tar zcvf FileName.tar.gz DirName</p>
<h2>tar 与 find 结合使用</h2>
<p>将按照自己条件查询出来的文件名写入到一个文件 tmp.list 中</p>
<p>find /tmp -cmin +24 &gt; tmp.list</p>
<p>然后将文件中记录到的所有文件加入到压缩包中</p>
<p>tar -T tmp.list -czvf tmp.expire.tar.gz</p>
<h2>.bz2</h2>
<p>解压1：</p>
<p>bzip2 -d FileName.bz2</p>
<p>解压2：</p>
<p>bunzip2 FileName.bz2</p>
<p>压缩：</p>
<p>bzip2 -z FileName</p>
<h2>.tar.bz2</h2>
<p>解压：</p>
<p>tar jxvf FileName.tar.bz2</p>
<p>压缩：</p>
<p>tar jcvf FileName.tar.bz2 DirName</p>
<h2>.bz</h2>
<p>解压1：</p>
<p>bzip2 -d <a href="http://FileName.bz" target="_blank" rel="noopener noreferrer">FileName.bz</a></p>
<p>解压2：</p>
<p>bunzip2 <a href="http://FileName.bz" target="_blank" rel="noopener noreferrer">FileName.bz</a></p>
<p>压缩：未知</p>
<h2>.tar.bz</h2>
<p>解压：</p>
<p>tar jxvf <a href="http://FileName.tar.bz" target="_blank" rel="noopener noreferrer">FileName.tar.bz</a></p>
<p>压缩：未知</p>
<h2>.Z</h2>
<p>解压：</p>
<p>uncompress FileName.Z</p>
<p>压缩：</p>
<p>compress FileName</p>
<h2>.tar.Z</h2>
<p>解压：</p>
<p>tar Zxvf FileName.tar.Z</p>
<p>压缩：</p>
<p>tar Zcvf FileName.tar.Z DirName</p>
<h2>.zip</h2>
<p>解压：</p>
<p>unzip FileName.zip</p>
<p>压缩：</p>
<p>zip -r FileName.zip DirName</p>
<h2>.rar</h2>
<p>解压：</p>
<p>rar x FileName.rar</p>
<p>压缩：</p>
<p>rar a FileName.rar DirName</p>
<h2>.lha</h2>
<p>解压：</p>
<p>lha -e FileName.lha</p>
<p>压缩：</p>
<p>lha -a FileName.lha FileName</p>
<h2>.rpm</h2>
<p>解包：</p>
<p>rpm2cpio FileName.rpm | cpio -div</p>
<p>安装：</p>
<p>rpm -ivh awstats-7.0-1.noarch.rpm</p>
]]></content:encoded>
    </item>
    <item>
      <title>Django基础学习</title>
      <link>https://docs.lizili.online/coder/code/Django/Django-%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://docs.lizili.online/coder/code/Django/Django-%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Django基础学习</source>
      <description>Django简介 urls.py 网址入口，关联到对应的view.py中的一个函数（或者generic类），访问网址就对应一个函数 view.py 处理用户发出的请求，从urls.py中对应过来，通过选人templates中的网页，可将内容显示，比如，登陆后的用户名，用户请求的数据，输出到网页 models.py 与数据库关联，存入或读取数据的时候会用...</description>
      <pubDate>Fri, 01 Mar 2024 05:14:38 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>Django简介</h2>
<p><strong><a href="http://urls.py" target="_blank" rel="noopener noreferrer">urls.py</a></strong></p>
<blockquote>
<p>网址入口，关联到对应的view.py中的一个函数（或者generic类），访问网址就对应一个函数</p>
</blockquote>
<p><strong><a href="http://view.py" target="_blank" rel="noopener noreferrer">view.py</a></strong></p>
<blockquote>
<p>处理用户发出的请求，从urls.py中对应过来，通过选人templates中的网页，可将内容显示，比如，登陆后的用户名，用户请求的数据，输出到网页</p>
</blockquote>
<p><strong><a href="http://models.py" target="_blank" rel="noopener noreferrer">models.py</a></strong></p>
<blockquote>
<p>与数据库关联，存入或读取数据的时候会用到这个</p>
</blockquote>
<p><strong><a href="http://forms.py" target="_blank" rel="noopener noreferrer">forms.py</a></strong></p>
<blockquote>
<p>表单，用户在浏览器上输入数据提交，对数据的验证工作以及输入框的生成等工作</p>
</blockquote>
<p><strong>templates</strong>文件夹</p>
<blockquote>
<p><a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a> 中的函数渲染templates中的Html模板，得到动态内容的网页，当然可以用缓存来提高速度。</p>
</blockquote>
<p><strong><a href="http://admin.py" target="_blank" rel="noopener noreferrer">admin.py</a></strong></p>
<blockquote>
<p>后台，可以用很少的代码量，拥有一个强大的后台</p>
</blockquote>
<p><strong><a href="http://settings.py" target="_blank" rel="noopener noreferrer">settings.py</a></strong></p>
<blockquote>
<p>Django 的设置，配置文件，比如Debug开关，静态文件位置等</p>
</blockquote>
<h2>Django环境搭建</h2>
<blockquote>
<p>Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3.</p>
<p>Django 1.6.x 支持 Python 2.6.X, 2.7.X, 3.2.X 和 3.3.X</p>
<p>Django 1.7.x 支持 Python 2.7, 3.2, 3.3, 和 3.4 （注意：Python 2.6 不支持了）</p>
<p><strong>Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5. （长期支持版本 LTS)</strong></p>
<p>Django 1.9.x 支持 Python 2.7, 3.4 和 3.5. 不支持 3.3 了</p>
<p>Django 1.10.x 支持 Python 2.7, 3.4 和 3.5.</p>
<p><strong>Django 1.11.x 下一个长期支持版本，将于2017年4月发布</strong></p>
</blockquote>
<p>**更详细的可以<a href="https://www.djangoproject.com/download/" target="_blank" rel="noopener noreferrer">参考这里</a>**一般来说，选择长期支持版本比较好。</p>
<blockquote>
<p>使用最新版本的问题就是，可能要用到的一些第三方插件没有及时更新，无法正常使用这些三方包。</p>
</blockquote>
<blockquote>
<p>如果是学习，可以选择目前的 Django 1.8.x 来进行，遇到问题也容易找到答案。</p>
<p>当然如果需要新版本的功能也可以使用新版本，毕竟 Django 1.9 以后admin界面还是更漂亮些</p>
</blockquote>
<h3>Django基础部分</h3>
<h2>安装Django</h2>
<p>安装pip</p>
<p>ubuntu <code>sudo apt-get install python-pip</code></p>
<p>centos <code>yum -y install python-pip</code></p>
<p>升级pip</p>
<p><code>pip install --upgrade pip</code></p>
<p>利用pip安装Django</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">（sudo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) pip install Django</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">或者</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (sudo) pip install </span><span style="color:#E06C75;--shiki-dark:#E06C75">Django</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">=1.8.16</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> 或者</span><span style="color:#98C379;--shiki-dark:#98C379"> pip</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> Django==</span><span style="color:#D19A66;--shiki-dark:#D19A66">1.10.3</span></span></code></pre>
</div><h2>搭建多个互不干扰的开发环境</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 安装:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">pip</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> virtualenv</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mkdir</span><span style="color:#98C379;--shiki-dark:#98C379"> myproject</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">cd</span><span style="color:#98C379;--shiki-dark:#98C379"> myproject</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">virtualenv</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --no-site-packages</span><span style="color:#98C379;--shiki-dark:#98C379"> test</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#命令virtualenv就可以创建一个独立的Python运行环境，我们还加上了参数--no-site-packages，这样，已经安装到系统Python环境中的所有第三方包都不会复制过来，这样，我们就得到了一个不带任何第三方包的“干净”的Python运行环境。</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">source</span><span style="color:#98C379;--shiki-dark:#98C379"> test/bin/activate</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#命令行提示符的最前方，会提示当前所在的python环境</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#然后就可以在此环境下	进行开发/测试等</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">deactivate</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  #退出环境</span></span></code></pre>
</div><p>##Django的基本命令（请牢牢记住，不能tab）</p>
<h3>新建一个django project</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">django-admin.py</span><span style="color:#98C379;--shiki-dark:#98C379"> startproject</span><span style="color:#98C379;--shiki-dark:#98C379"> zixue</span></span></code></pre>
</div><h3>新建app</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> startapp</span><span style="color:#98C379;--shiki-dark:#98C379"> app-name</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">或</span><span style="color:#98C379;--shiki-dark:#98C379"> django-admin.py</span><span style="color:#98C379;--shiki-dark:#98C379"> startapp</span><span style="color:#98C379;--shiki-dark:#98C379"> app-name</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。</span></span></code></pre>
</div><h3>同步数据库</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> syncdb</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#注意：Django 1.7.1及以上的版本需要用以下命令</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> makemigrations</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> migrate</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#这种方法可以创建表，当你在models.py中新增了类时，运行它就可以自动在数据库中创建表了，不用手动创建。</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#备注：对已有的 models 进行修改，Django 1.7之前的版本的Django都是无法自动更改表结构的，不过有第三方工具 south,</span></span></code></pre>
</div><h3>使用开发服务器</h3>
<p>开发服务器，即开发时使用，一般修改代码后会自动重启，方便调试和开发，但是由于性能问题，建议只用来测试，不要用在生产环境。</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> runserver</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 当提示端口被占用的时候，可以用其它端口：</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> runserver</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 8001</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> runserver</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 9999</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">（当然也可以kill掉占用端口的进程）</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 监听所有可用 ip （电脑可能有一个或多个内网ip，一个或多个外网ip，即有多个ip地址）</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> runserver</span><span style="color:#98C379;--shiki-dark:#98C379"> 0.0.0.0:8000</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 访问对应的 ip加端口，比如 http://172.16.20.2:8000</span></span></code></pre>
</div><h3>清空数据库</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> flush</span></span></code></pre>
</div><h3>创建超级管理员</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> createsuperuser</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 按照提示输入用户名和对应的密码就好了邮箱可以留空，用户名和密码必填</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 修改 用户密码可以用：</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> changepassword</span><span style="color:#98C379;--shiki-dark:#98C379"> username</span></span></code></pre>
</div><p>导入导出数据</p>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> dumpdata</span><span style="color:#98C379;--shiki-dark:#98C379"> appname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">appname.json</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> loaddata</span><span style="color:#98C379;--shiki-dark:#98C379"> appname.json</span></span></code></pre>
</div><h3>Django羡慕的环境终端</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> shell</span></span></code></pre>
</div><h3>数据库命令行</h3>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> manage.py</span><span style="color:#98C379;--shiki-dark:#98C379"> dbshell</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Django</span><span style="color:#98C379;--shiki-dark:#98C379"> 会自动进入在settings.py中设置的数据库，如果是</span><span style="color:#98C379;--shiki-dark:#98C379"> MySQL</span><span style="color:#98C379;--shiki-dark:#98C379"> 或</span><span style="color:#98C379;--shiki-dark:#98C379"> postgreSQL,会要求输入数据库用户密码。</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉，可能喜欢这种方式。</span></span></code></pre>
</div><h3>更多命令</h3>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>终端上输入 python manage.py 可以看到详细的列表，在忘记子名称的时候特别有用。</span></span></code></pre>
</div><h2>Django的视图与网址</h2>
<h3>创建项目</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">django-admin.py</span><span style="color:#98C379;--shiki-dark:#98C379"> startproject</span><span style="color:#98C379;--shiki-dark:#98C379"> mysite</span></span></code></pre>
</div><p>创建成功后，目录如下</p>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>mysite</span></span>
<span class="line"><span>├── manage.py</span></span>
<span class="line"><span>└── mysite</span></span>
<span class="line"><span>    ├── __init__.py</span></span>
<span class="line"><span>    ├── settings.py</span></span>
<span class="line"><span>    ├── urls.py</span></span>
<span class="line"><span>    └── wsgi.py</span></span>
<span class="line"><span>    </span></span>
<span class="line"><span>新建了一个 mysite 目录，其中还有一个 mysite 目录，这个子目录 mysite 中是一些项目的设置settings.py 文件，总的urls配置文件 urls.py 以及部署服务器时用到的 wsgi.py 文件， __init__.py 是python包的目录结构必须的，与调用有关。</span></span></code></pre>
</div><h3>新建应用（app） 名字叫learn</h3>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>python manage.py startapp learn   #learn只是一个app的名称</span></span></code></pre>
</div><p><strong>把我们新定义的app加到settings.py中的INSTALL_APPS</strong></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">mysite</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">/</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">mysite</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">/</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">settings.py</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">INSTALLED_APPS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.admin'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.auth'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.contenttypes'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.sessions'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.messages'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.staticfiles'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'learn'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#备注,这一步是干什么呢? 新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件) , 后面你会学习到它们分别用来干什么.</span></span></code></pre>
</div><h3>定义视图函数 （访问页面的内容）</h3>
<p>修改 应用 learn <a href="http://xn--view-zf5fs05s.py" target="_blank" rel="noopener noreferrer">中的view.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#coding:utf-8</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.http </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> HttpResponse</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> index</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> HttpResponse</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">u</span><span style="color:#98C379;--shiki-dark:#98C379">'欢迎'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明就报错.</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#第二行引入HttpResponse，它是用来向网页返回内容的，就像Python中的 print 一样，只不过 HttpResponse 是把内容显示到网页上。</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#我们定义了一个index()函数，第一个参数必须是 request，与网页发来的请求有关，request 变量里面包含get或post的内容，用户浏览器，系统等信息#在里面（后面会讲，先了解一下就可以）。</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#函数返回了一个 HttpResponse 对象，可以经过一些处理，最终显示几个字到网页上。</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#那问题来了，我们访问什么网址才能看到刚才写的这个函数呢？怎么让网址和函数关联起来呢？</span></span></code></pre>
</div><h3>定义视图函数相关的URL（即，访问什么网址，对应什么内容）</h3>
<p><a href="http://xn--mysiteurls-cj2pv14ncbj3i5e.py" target="_blank" rel="noopener noreferrer">打开mysite下的urls.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#Django 1.7</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.conf.urls </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> patterns, include, url</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.contrib </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> admin</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">admin.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">autodiscover</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">urlpatterns </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> patterns</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">''</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'learn.views.index'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),  </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># new</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # url(r'^blog/', include('blog.urls')),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^admin/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">include</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(admin.site.urls)),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#Django1.8 以上</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.conf.urls </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> url</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.contrib </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> admin</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn_views  </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># new</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">urlpatterns </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, learn_views.index),  </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># new</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^admin/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, admin.site.urls),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
</div><div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#开启python测试</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">python manage.py runserver</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#允许远程访问</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">python manager.py runserver </span><span style="color:#D19A66;--shiki-dark:#D19A66">0.0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.0.0:</span><span style="color:#D19A66;--shiki-dark:#D19A66">8000</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> （指定IP和端口)</span></span></code></pre>
</div><h2>视图与网址进阶</h2>
<h3>新建项目</h3>
<h3>新建应用</h3>
<p>同上</p>
<h3><a class="header-anchor" href="#修改应用下的views-py"><span></span></a><a href="http://xn--views-bi1hu6ifr4bnrmqs1boed.py" target="_blank" rel="noopener noreferrer">修改应用下的views.py</a></h3>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.shortcuts </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> render</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.http </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> HttpResponse</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> add</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    a </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> request.</span><span style="color:#D19A66;--shiki-dark:#D19A66">GET</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[</span><span style="color:#98C379;--shiki-dark:#98C379">'a'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    b </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> request.</span><span style="color:#D19A66;--shiki-dark:#D19A66">GET</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[</span><span style="color:#98C379;--shiki-dark:#98C379">'b'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    c </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> int</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(a)</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">+int</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(b)</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> HttpResponse</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">str</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(c))</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    #注：request.GET 类似于一个字典，更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0</span></span></code></pre>
</div><h3><a class="header-anchor" href="#修改项目下的urls-py"><span></span></a><a href="http://xn--urls-494f03hh47c652ah1ao76v.py" target="_blank" rel="noopener noreferrer">修改项目下的urls.py</a></h3>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.conf.urls </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> url</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.contrib </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> admin</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn_views</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> calc </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> calc_views</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">urlpatterns </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,calc_views.add,</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,learn_views.index),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^admin/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, admin.site.urls),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
</div><h3>打开网址</h3>
<p>IP:8000/add/?a=1&amp;b=2</p>
<h3>采用add/2/4的方式</h3>
<p>进入cala/views.py 定义函数</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> add2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">a</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">b</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	c </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> int</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(a) </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">+</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> int</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(b)</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> HttpResponse</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">str</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(c))</span></span></code></pre>
</div><p><a href="http://xn--urls-494f03hh47c652ah1ao76v.py" target="_blank" rel="noopener noreferrer">修改项目下的urls.py</a></p>
<p>Django 1.7.X</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'calc.views.add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span></code></pre>
</div><p>Django 1.8+</p>
<p>我们可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字，+ 代表一个或多个前面的字符，写在一起 \d+ 就是一个或多个数字，用括号括起来的意思是保存为一个子组（更多知识请参见 Python 正则表达式），每一个子组将作为一个参数，被 <a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a> 中的对应视图函数接收。</p>
<p>访问 <a href="http://127.0.0.1:8000/add/4/5/" target="_blank" rel="noopener noreferrer">http://127.0.0.1:8000/add/4/5/</a> 就可以看到和刚才同样的效果</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, calc_views.add2, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span></code></pre>
</div><h2>URL name详解</h2>
<p><code>url(r'^add/$', calc_views.add,name='add'), 这里的name='add' 是用来干什么的呢？</code></p>
<p><strong>简单的来说，name可以在template,models，views中得到对应的网址，相当于给网址去了名字，只要名字不变，网址变不变都是可以获取到的</strong></p>
<p>修改calc/views.py (应用calc已经在setting.py中INSTALLED_APPS导入,不然模板是找不到的)</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.http </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> HttpResponse</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.shortcuts </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> render</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> index</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">...</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#render 是渲染模板</span></span></code></pre>
</div><p>然后新建<strong>templates</strong>文件夹,在新建home.html</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;!</span><span style="color:#E06C75;--shiki-dark:#E06C75">DOCTYPE</span><span style="color:#D19A66;--shiki-dark:#D19A66"> html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">head</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;自强学堂&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">head</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">body</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#D19A66;--shiki-dark:#D19A66"> href</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/add/4/5/"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;计算 4+5&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">body</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span></code></pre>
</div><p><a href="http://xn--urls-zf5fz6gh00d652ah1ao76v.py" target="_blank" rel="noopener noreferrer">修改项目中的urls.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">...</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn_views</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> calc </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> calc_views</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">urlpatterns </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,calc_views.index,</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'home'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,calc_views.add,</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,calc_views.add2,</span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^admin/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, admin.site.urls),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
</div><p>然后运行服务,访问页面就会出现  计算4+5  的链接</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#D19A66;--shiki-dark:#D19A66"> href</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#98C379;--shiki-dark:#98C379">"/add/4/5/"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;计算 4+5&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span></code></pre>
</div><p>如果这样写“死网址”，会使得在改了网址（正则）后，模板（template)，视图(<a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a>，用以用于跳转)，模型(<a href="http://models.py" target="_blank" rel="noopener noreferrer">models.py</a>，可以用用于获取对象对应的地址）用了此网址的，都得进行相应的更改，修改的代价很大，一不小心，有的地方没改过来，就不能用了。</p>
<p>那么有没有更优雅的方式来解决这个问题呢？</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">不带参数的：</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% url 'name' %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">带参数的：参数可以是变量名</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% url 'name' 参数 %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">例如：</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#D19A66;--shiki-dark:#D19A66"> href</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">=</span><span style="color:#98C379;--shiki-dark:#98C379">"{% url 'add2' 4 5 %}"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;link&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">a</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span></code></pre>
</div><p>当 <a href="http://urls.py" target="_blank" rel="noopener noreferrer">urls.py</a> 进行更改，前提是不改 name（这个参数设定好后不要轻易改），获取的网址也会动态地跟着变，比如改成：</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^new_add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, calc_views.add2, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#add 变成了 new_add，但是后面的 name='add2' 没改，这时 {% url 'add2' 4 5 %} 就会渲染对应的网址成 /new_add/4/5/</span></span></code></pre>
</div><p>另外，比如用户收藏夹中收藏的URL是旧的，如何让以前的 /add/3/4/自动跳转到现在新的网址呢？</p>
<p><strong>要知道Django不会帮你做这个，这个需要自己来写一个跳转方法</strong>：</p>
<p>具体思路是，在 <a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a> 写一个跳转的函数：</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.http </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> HttpResponseRedirect</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.core.urlresolvers </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> reverse  </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># django 1.4.x - django 1.10.x</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#  from django.urls import reverse  # new in django 1.10.x</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> old_add2_redirect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">a</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">b</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> HttpResponseRedirect</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        reverse</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">args</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(a, b))</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    )</span></span></code></pre>
</div><p>urls.py中</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, calc_views.old_add2_redirect),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^new_add/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/</span><span style="color:#D19A66;--shiki-dark:#D19A66">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">\d</span><span style="color:#D19A66;--shiki-dark:#D19A66">+)</span><span style="color:#E06C75;--shiki-dark:#E06C75">/$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, calc_views.add2, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'add2'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span></code></pre>
</div><p>这样，<strong>假如用户收藏夹中</strong>有 /add/4/5/ ，访问时就会自动跳转到新的 /new_add/4/5/ 了</p>
<h2>templates</h2>
<p>创建一个项目和app</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">django</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">-</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">admin.py startproject zqxt_tmpl</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">cd zqxt_tmpl</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">python manage.py startapp learn</span></span></code></pre>
</div><p>把 learn 加入到 settings.INSTALLED_APPS中</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">INSTALLED_APPS</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> =</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.admin'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.auth'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.contenttypes'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.sessions'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.messages'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'django.contrib.staticfiles'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    'learn'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><p>打开 learn/views.py 写一个首页的视图</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.shortcuts </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> render</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><p>创建templates/home.html</p>
<p>然后将输入和网址对应</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.conf.urls </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> include, url</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.contrib </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> admin</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> views </span><span style="color:#C678DD;--shiki-dark:#C678DD">as</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> learn_views</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">urlpatterns </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^$'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, learn_views.home, </span><span style="color:#E06C75;font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">name</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">'home'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    url</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#C678DD;--shiki-dark:#C678DD">r</span><span style="color:#E06C75;--shiki-dark:#E06C75">'^admin/'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">include</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(admin.site.urls)),</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#Django1.10+</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#url(r'^admin/', admin.site.urls),  #include</span></span></code></pre>
</div><h3>项目中有多个应用,所以就会有多个templates以及多个index.html</h3>
<p>默认情况下Django是不会去区分的,最先找到那个就显示那个,所以如果为了区分的话</p>
<p>就在各个应用的templates下进行在划分</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">project</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> app1</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">|</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">....</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   ├──</span><span style="color:#98C379;--shiki-dark:#98C379"> templates</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">   └──</span><span style="color:#98C379;--shiki-dark:#98C379"> app1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">       ├──</span><span style="color:#98C379;--shiki-dark:#98C379"> index.html</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">       └──</span><span style="color:#98C379;--shiki-dark:#98C379"> search.html</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> app2</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">|</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">.....</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   ├──</span><span style="color:#98C379;--shiki-dark:#98C379"> templates</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">   └──</span><span style="color:#98C379;--shiki-dark:#98C379"> app2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">       ├──</span><span style="color:#98C379;--shiki-dark:#98C379"> index.html</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">│</span><span style="color:#98C379;--shiki-dark:#98C379">   │</span><span style="color:#98C379;--shiki-dark:#98C379">       └──</span><span style="color:#98C379;--shiki-dark:#98C379"> poll.html</span></span></code></pre>
</div><h3>模版补充知识点</h3>
<p>网站模板的设计，一般的，我们做网站有一些通用的部分，比如<strong>导航，底部，访问统计代码等等</strong></p>
<blockquote>
<p>可以写一个 base.html 来包含这些通用文件（include)</p>
</blockquote>
<div class="language-html line-numbers-mode" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;!</span><span style="color:#E06C75;--shiki-dark:#E06C75">DOCTYPE</span><span style="color:#D19A66;--shiki-dark:#D19A66"> html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">head</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;{% block title %}默认标题{% endblock %} - test&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">title</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">head</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">body</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% include 'nav.html' %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% block content %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">div</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;这里是默认内容，所有继承自这个模板的，如果不覆盖就显示这里的默认内容。&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">div</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% endblock %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% include 'bottom.html' %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% include 'tongji.html' %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">body</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">html</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">#如果需要，写足够多的 block 以便继承的模板可以重写该部分，include 是包含其它文件的内容，就是把一些网页共用的部分拿出来，重复利用，改动的时候也方便一些，还可以把广告代码放在一个单独的html中，改动也方便一些，在用到的地方include进去。其它的页面继承自 base.html 就好了，继承后的模板也可以在 block 块中 include 其它的模板文件。</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>templatesde 进阶</h2>
<p><strong>主要讲解模板中的循环，条件判断，常用的标签，过滤器的使用</strong></p>
<h3>基本字节的显示</h3>
<ul>
<li><a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a></li>
</ul>
<p>在视图中我们传递了一个字符串名称是 string(引号内的表示可悲html调用的) 到模板 home.html</p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># -*- coding: utf-8 -*-</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">from</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> django.shortcuts </span><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> render</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    string </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#C678DD;--shiki-dark:#C678DD"> u</span><span style="color:#98C379;--shiki-dark:#98C379">"学习Django，用它来建网站"</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, {</span><span style="color:#98C379;--shiki-dark:#98C379">'string'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: string})</span></span></code></pre>
</div><ul>
<li>home.html</li>
</ul>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{{ string }}</span></span></code></pre>
</div><h3>for循环</h3>
<p><a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    TutorialList </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span><span style="color:#98C379;--shiki-dark:#98C379">"HTML"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"CSS"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"jQuery"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"Python"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"Django"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, {</span><span style="color:#98C379;--shiki-dark:#98C379">'TutorialList'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: TutorialList})</span></span></code></pre>
</div><p>home.html</p>
<p>for循环要有个结束标记</p>
<p>一般的变量声明使用 <code>{{ }}</code></p>
<p>功能性的 比如循环，条件判断等使用<code>{%  %}</code></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">%</span><span style="color:#C678DD;--shiki-dark:#C678DD"> for</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> i </span><span style="color:#C678DD;--shiki-dark:#C678DD">in</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> TutorialList </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">%</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{{ i }}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">%</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> endfor </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">%</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div><h3>显示字典的内容</h3>
<p><a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    info_dict </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span><span style="color:#98C379;--shiki-dark:#98C379">'site'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#C678DD;--shiki-dark:#C678DD">u</span><span style="color:#98C379;--shiki-dark:#98C379">'学堂'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">'content'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#C678DD;--shiki-dark:#C678DD">u</span><span style="color:#98C379;--shiki-dark:#98C379">'IT技术教程'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, {</span><span style="color:#98C379;--shiki-dark:#98C379">'info_dict'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: info_dict})</span></span></code></pre>
</div><p>home.html</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">站点：{{ info_dict.site }} 内容：{{ info_dict.content }}</span></span></code></pre>
</div><p>遍历字典</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% for key, value in info_dict.items %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    {{ key }}: {{ value }}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% endfor %}</span></span></code></pre>
</div><h3>条件判断和 for 循环</h3>
<p><a href="http://views.py" target="_blank" rel="noopener noreferrer">views.py</a></p>
<div class="language-python" data-ext="python" data-title="python"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">def</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> home</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">request</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    List </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> map</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">str</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">range</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;--shiki-dark:#D19A66">100</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">))</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 一个长度为100的 List</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    return</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> render</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(request, </span><span style="color:#98C379;--shiki-dark:#98C379">'home.html'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, {</span><span style="color:#98C379;--shiki-dark:#98C379">'List'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: List})</span></span></code></pre>
</div><p>home.html</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% for item in List %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    {{ item }}, #每次结束都会在值得后面添加最后，最后一个依然会添加 99,</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% endfor %}</span></span></code></pre>
</div><p>所以，如何判读是不是最后一次遍历呢</p>
<blockquote>
<p>forloop.last变量  判断是否为最后一项，如果是则为真，反之。</p>
</blockquote>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% for item in List %}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    {{ item }}{% if not forloop.last %}, {% endif %} ##判断不是最后一个则加逗号</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{% endfor %}</span></span></code></pre>
</div><p>for循环的其他变量</p>
<p>| 变量                  | 描述                            |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Grafana-loki</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/loki.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/loki.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Grafana-loki</source>
      <description>bitnami官方安装指导 loki配置 拉取charts 安装 Data source querier (k8s内) 通过label 即可查询对应的日志 模版导入 下载模板：https://grafana.com/grafana/dashboards/15141-kubernetes-service-logs/?tab=revisions</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Thu, 29 Feb 2024 09:47:09 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/grafana-loki" target="_blank" rel="noopener noreferrer">bitnami官方安装指导</a></p>
<h2>loki配置</h2>
<p>拉取charts</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> oci://registry-1.docker.io/bitnamicharts/grafana-loki</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2.18.0</span></span></code></pre>
</div><div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">loki</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  gossipRing</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">compactor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  persistence</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    accessModes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      - </span><span style="color:#98C379;--shiki-dark:#98C379">ReadWriteOnce</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">2Gi</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ClusterIP</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">gateway</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  auth</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    username</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    password</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    existingSecret</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ClusterIP</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">grafana-loki.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">indexGateway</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  ## @param indexGateway.enabled Enable index-gateway deployment</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  ##</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">distributor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ingester</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: {}</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  persistence</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">2Gi</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">querier</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  persistence</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    size</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">2Gi</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">queryFrontend</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">queryScheduler</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  networkPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ruler</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">tableManager</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">promtail</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  logLevel</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">info</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>安装</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> grafana-loki</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> loki-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><p>Data source <code>querier</code> (k8s内)</p>
<figure><figcaption></figcaption></figure>
<p>通过label 即可查询对应的日志</p>
<figure><figcaption></figcaption></figure>
<h2>模版导入</h2>
<p>下载模板：<a href="https://grafana.com/grafana/dashboards/15141-kubernetes-service-logs/?tab=revisions" target="_blank" rel="noopener noreferrer">https://grafana.com/grafana/dashboards/15141-kubernetes-service-logs/?tab=revisions</a></p>
<figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>gitlab-runner</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/gitlab-runner.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/gitlab-runner.html</guid>
      <source url="https://docs.lizili.online/rss.xml">gitlab-runner</source>
      <description>安装 runner 的安装，在打开runner界面时，即可查看相关的手册 在K8S中安装 仓库添加 配置 安装 runner 无法注册 检查自己 gitlabUrl 是否配置正确</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Mon, 15 Jan 2024 02:25:57 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>安装</h2>
<blockquote>
<p>runner 的安装，在打开runner界面时，即可查看相关的手册</p>
</blockquote>
<figure><figcaption></figcaption></figure>
<h3>在K8S中安装</h3>
<p>仓库添加</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span><span style="color:#98C379;--shiki-dark:#98C379"> https://charts.gitlab.io</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 查询对应的版本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> search</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -l</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab/gitlab-runner</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">     </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 找gitlab版本 对应的版本号</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab/gitlab-runner</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version=0.39.1</span></span></code></pre>
</div><p>配置</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 镜像用和自己git版本匹配的</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">gitlab/gitlab-runner:alpine-v14.10.1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">imagePullPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">IfNotPresent</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">replicas</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">3</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">gitlabUrl</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://gitlab.zili.work:8888/</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 这个token 来自 runner界面，如果使用runnerToken 则副本数只能为1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">runnerRegistrationToken</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"p1fDzwhHbyGeK4XSz7RM"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">terminationGracePeriodSeconds</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">3600</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">concurrent</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">20</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">checkInterval</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">30</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">sessionServer</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">rbac</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  create</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  resources</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"pods"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"pods/exec"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"pods/attach"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"secrets"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"configmaps"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  verbs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: [</span><span style="color:#98C379;--shiki-dark:#98C379">"get"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"list"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"watch"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"create"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"patch"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"delete"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">, </span><span style="color:#98C379;--shiki-dark:#98C379">"update"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  rules</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: []</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  clusterWideAccess</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  podSecurityPolicy</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    resourceNames</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    - </span><span style="color:#98C379;--shiki-dark:#98C379">gitlab-runner</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">metrics</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ClusterIP</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">runners</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # 缓存 https://docs.gitlab.com/runner/install/kubernetes.html#s3</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  config</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#C678DD;--shiki-dark:#C678DD">|</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    [[runners]]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      [runners.kubernetes]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        privileged = true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        namespace = "{{.Release.Namespace}}"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        image = "ubuntu:16.04"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      [runners.cache]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        Type = "s3"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        Path = "caches"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        Shared = true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        [runners.cache.s3]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          ServerAddress = "minio.middleware.svc.cluster.local:9000"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          BucketName = "gitlab-runner"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          Insecure = true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          AccessKey = "admin"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">          SecretKey = "Password@0101"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  executor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">kubernetes</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  tags</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"Kubernetes,K8S"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  cloneUrl</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"http://gitlab.zili.work:8888/"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">securityContext</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  runAsUser</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">100</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  fsGroup</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">65533</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-runner</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66">  -n</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-runner</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><p>runner 无法注册</p>
<figure><figcaption></figcaption></figure>
<p>检查自己 <code>gitlabUrl</code> 是否配置正确</p>
]]></content:encoded>
    </item>
    <item>
      <title>argocd</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/argocd.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/argocd.html</guid>
      <source url="https://docs.lizili.online/rss.xml">argocd</source>
      <description>官方文档 安装 拉取charts grafana配置</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Thu, 21 Dec 2023 08:21:12 GMT</pubDate>
      <content:encoded><![CDATA[
<h2><a class="header-anchor" href="#官方文档"><span></span></a><a href="https://argo-cd.readthedocs.io/en/stable/getting_started/" target="_blank" rel="noopener noreferrer">官方文档</a></h2>
<h2>安装</h2>
<p>拉取charts</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> oci://registry-1.docker.io/bitnamicharts/grafana</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 9.6.5</span></span></code></pre>
</div><p>grafana配置</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">admin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  user</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  password</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  existingSecret</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  existingSecretPasswordKey</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">password</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  pathType</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ImplementationSpecific</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">grafana.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> grafana</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> grafana-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Containerd 私有仓库配置</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/containerd-config-provide-registry.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/containerd-config-provide-registry.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Containerd 私有仓库配置</source>
      <description>Kubernetes 从 v1.20 开始弃用 Docker，并推荐用户切换到基于容器运行时接口（CRI）的容器引擎，如 containerd、cri-o 等。 docker 配置 登陆 获取 auth, 这个auth，一会配置containerd会用到 配置containerd 搜索 plugins.&amp;quot;io.containerd.grpc.v1.cr...</description>
      <category>云原生</category>
      <pubDate>Thu, 21 Dec 2023 08:20:41 GMT</pubDate>
      <content:encoded><![CDATA[
<blockquote>
<p>Kubernetes 从 v1.20 开始弃用 Docker，并推荐用户切换到基于容器运行时接口（CRI）的容器引擎，如 containerd、cri-o 等。</p>
</blockquote>
<h2>docker 配置</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> vi</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/docker/daemon.json</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  "insecure-registries"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    [</span><span style="color:#98C379;--shiki-dark:#98C379">"harbor.zili.work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div><h2>登陆</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">docker</span><span style="color:#98C379;--shiki-dark:#98C379"> login</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor.zili.work</span></span></code></pre>
</div><p>获取 auth, 这个auth，一会配置containerd会用到</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/.docker/config.json</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">	"auths"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">		"harbor.zili.work"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">			"auth"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "YWRtaW46SGFyYm9yMTIzNDU="</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">		}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	}</span></span></code></pre>
</div><h2>配置containerd</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">vi</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/containerd/config.toml</span></span></code></pre>
</div><p>搜索 <code>plugins."io.containerd.grpc.v1.cri".registry.configs</code>， 开始配置，配置如下</p>
<figure><figcaption></figcaption></figure>
<div class="language-toml line-numbers-mode" data-ext="toml" data-title="toml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"harbor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">tls</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          insecure_skip_verify</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">configs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"harbor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">auth</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          auth</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = </span><span style="color:#98C379;--shiki-dark:#98C379">"YWRtaW46SGFyYm9yMTIzNDU="</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">headers</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mirrors</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mirrors</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"harbor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = [</span><span style="color:#98C379;--shiki-dark:#98C379">"http://harbor.zili.work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">x509_key_pair_streaming</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      tls_cert_file</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      tls_key_file</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mirrors</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        [</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">plugins</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"io</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grpc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">v1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">mirrors</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"harbor</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          endpoint</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> = [</span><span style="color:#98C379;--shiki-dark:#98C379">"http://harbor.zili.work"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>重启服务即可</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> restart</span><span style="color:#98C379;--shiki-dark:#98C379"> containerd</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>CoreDNS 域名添加</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/add-domain-on-CoreDNS.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/add-domain-on-CoreDNS.html</guid>
      <source url="https://docs.lizili.online/rss.xml">CoreDNS 域名添加</source>
      <description>Host解析设置 通过修改 CoreDNS ConfigMap, 即可实现，无限在values中添加过多的HostAlias host {} 内容，即为自定义域名，且fallthrough 必须配置，否则其他域名将无法解析</description>
      <category>云原生</category>
      <pubDate>Mon, 11 Dec 2023 13:40:31 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>Host解析设置</h2>
<p>通过修改 <mark>CoreDNS ConfigMap</mark>, 即可实现，无限在values中添加过多的HostAlias</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> edit</span><span style="color:#98C379;--shiki-dark:#98C379"> configmap</span><span style="color:#98C379;--shiki-dark:#98C379"> coredns</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> kube-system</span></span></code></pre>
</div><p><code>host {}</code> 内容，即为自定义域名，且<code>fallthrough</code> 必须配置，否则其他域名将无法解析</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Corefile:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> |</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">    .</span><span style="color:#98C379;--shiki-dark:#98C379">:53</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        errors</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        health</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          lameduck</span><span style="color:#98C379;--shiki-dark:#98C379"> 5s</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        }</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        ready</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        kubernetes</span><span style="color:#98C379;--shiki-dark:#98C379"> cluster.local</span><span style="color:#98C379;--shiki-dark:#98C379"> in-addr.arpa</span><span style="color:#98C379;--shiki-dark:#98C379"> ip6.arpa</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          pods</span><span style="color:#98C379;--shiki-dark:#98C379"> insecure</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          fallthrough</span><span style="color:#98C379;--shiki-dark:#98C379"> in-addr.arpa</span><span style="color:#98C379;--shiki-dark:#98C379"> ip6.arpa</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        }</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        hosts</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">         192.168.2.149</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor.zili.work</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">         192.168.4.14</span><span style="color:#98C379;--shiki-dark:#98C379"> minio.jkstack.com</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">         fallthrough</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        }</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        prometheus</span><span style="color:#98C379;--shiki-dark:#98C379"> :9153</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        forward</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#98C379;--shiki-dark:#98C379"> "/etc/resolv.conf"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        cache</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 30</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        loop</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        reload</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        loadbalance</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>harbor</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/harbor.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/harbor.html</guid>
      <source url="https://docs.lizili.online/rss.xml">harbor</source>
      <description>官方文档 安装 values修改 部署 域名解析 404 404修复</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Mon, 11 Dec 2023 13:40:31 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://github.com/goharbor/harbor-helm" target="_blank" rel="noopener noreferrer">官方文档</a></p>
<h2></h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor</span><span style="color:#98C379;--shiki-dark:#98C379"> https://helm.goharbor.io</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span></code></pre>
</div><h2>安装</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor/harbor</span><span style="color:#D19A66;--shiki-dark:#D19A66">  --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1.13.1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor-1.13.1.tgz</span></span></code></pre>
</div><h3>values修改</h3>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt; </span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">harbor-values.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">expose:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  type: ingress</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  tls:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: false</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  ingress:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    hosts:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      core: harbor.zili.work</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    annotations:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        ingressClassName: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    harbor:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      annotations:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        ingressClassName: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">externalURL: http://harbor.zili.work</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  persistentVolumeClaim:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    registry:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      accessMode: ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      size: 2Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    trivy:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      accessMode: ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      size: 2Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">harborAdminPassword: "Harbor12345"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>部署</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><h3>域名解析</h3>
<p><a href="/cloud-native/kubernetes/add-domain-on-CoreDNS.html" target="_blank">CoreDNS 添加域名解析</a></p>
<h3>404</h3>
<p><a href="https://github.com/goharbor/harbor-helm/issues/1189" target="_blank" rel="noopener noreferrer">404修复</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> edit</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress/harbor-ingress</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --namespace</span><span style="color:#98C379;--shiki-dark:#98C379"> harbor</span></span></code></pre>
</div><div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">在 spec 下 追加一行  ingressClassName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx。 如下</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">...</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   ingressClassName</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">   rules</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   - </span><span style="color:#E06C75;--shiki-dark:#E06C75">host</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">harbor.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">     http</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">       paths</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">       - </span><span style="color:#E06C75;--shiki-dark:#E06C75">backend</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">       ....</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>minio</title>
      <link>https://docs.lizili.online/cloud-native/middleware/minio.html</link>
      <guid>https://docs.lizili.online/cloud-native/middleware/minio.html</guid>
      <source url="https://docs.lizili.online/rss.xml">minio</source>
      <description>部署 github/bitnami 拉取 charts 解压 配置 更多配置参考 charts内的 values 或官方文档说明 安装</description>
      <category>云原生</category>
      <pubDate>Thu, 07 Dec 2023 07:00:31 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>部署</h2>
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/minio" target="_blank" rel="noopener noreferrer">github/bitnami</a></p>
<h3>拉取 charts</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379">  oci://registry-1.docker.io/bitnamicharts/minio</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 12.10.4</span></span></code></pre>
</div><h3>解压</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> minio-12.10.4.tgz</span></span></code></pre>
</div><h3>配置</h3>
<blockquote>
<p>更多配置参考 charts内的 values 或官方文档说明</p>
</blockquote>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">minio-values.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">global:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  imageRegistry: ""</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">mode: standalone</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">auth:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  rootUser: admin</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  rootPassword: "Password@0101"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">service:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  type: ClusterIP</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  ports:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    api: 9000</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    console: 9001</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">ingress:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  hostname: minio.zili.work</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  path: /</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  pathType: ImplementationSpecific</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  servicePort: minio-console</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  annotations:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    kubernetes.io/ingress.class: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    nginx.ingress.kubernetes.io/proxy-body-size: "0"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">apiIngress:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  hostname: minio-api.zili.work</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  path: /</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  pathType: ImplementationSpecific</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  servicePort: minio-api</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  annotations:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    kubernetes.io/ingress.class: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    nginx.ingress.kubernetes.io/proxy-body-size: "0"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    nginx.ingress.kubernetes.io/enable-cors: "true"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  accessModes:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    - ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  size: 10Gi</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> minio</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> minio-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>postgresql</title>
      <link>https://docs.lizili.online/cloud-native/middleware/postgresql.html</link>
      <guid>https://docs.lizili.online/cloud-native/middleware/postgresql.html</guid>
      <source url="https://docs.lizili.online/rss.xml">postgresql</source>
      <description>部署 github/bitnami 拉取 charts 解压 配置 更多配置参考 charts内的 values 或官方文档说明 安装</description>
      <category>云原生</category>
      <pubDate>Thu, 07 Dec 2023 07:00:31 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>部署</h2>
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/postgresql" target="_blank" rel="noopener noreferrer">github/bitnami</a></p>
<h3>拉取 charts</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379">  oci://registry-1.docker.io/bitnamicharts/postgresql</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 12.5.2</span></span></code></pre>
</div><h3>解压</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> postgresql-12.5.2.tgz</span></span></code></pre>
</div><h3>配置</h3>
<blockquote>
<p>更多配置参考 charts内的 values 或官方文档说明</p>
</blockquote>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">pgsql-values.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">global:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  imageRegistry: ""</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  postgresql:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    auth:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      postgresPassword: "Password@0101"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      username: "gitlab"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      password: "Password@0101"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      database: "gitlab"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">primary:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    accessModes:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      - ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    size: 8Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  readReplicas:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    resources:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      limits: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      requests:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        memory: 256Mi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        cpu: 250m</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">readReplicas:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  name: read</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  replicaCount: 1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    accessModes:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      - ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    size: 8Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  readReplicas:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    resources:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      limits: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      requests:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        memory: 256Mi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        cpu: 250m</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> pgsql</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> pgsql-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>redis</title>
      <link>https://docs.lizili.online/cloud-native/middleware/redis.html</link>
      <guid>https://docs.lizili.online/cloud-native/middleware/redis.html</guid>
      <source url="https://docs.lizili.online/rss.xml">redis</source>
      <description>部署 github/bitnami 拉取 charts 解压 配置 更多配置参考 charts内的 values 或官方文档说明 安装</description>
      <category>云原生</category>
      <pubDate>Thu, 07 Dec 2023 07:00:31 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>部署</h2>
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/redis" target="_blank" rel="noopener noreferrer">github/bitnami</a></p>
<h3>拉取 charts</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379">  oci://registry-1.docker.io/bitnamicharts/redis</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 16.13.2</span></span></code></pre>
</div><h3>解压</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> redis-16.13.2.tgz</span></span></code></pre>
</div><h3>配置</h3>
<blockquote>
<p>更多配置参考 charts内的 values 或官方文档说明</p>
</blockquote>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">redis-values.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">global:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  redis:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    password: Password@0101</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">master:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  count: 1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    accessModes:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      - ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    size: 8Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  resources:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    limits: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    requests: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">replica:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  replicaCount: 1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  persistence:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    accessModes:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      - ReadWriteOnce</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    size: 8Gi</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  resources:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    limits: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    requests: {}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> redis</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> redis-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>nginx-ingress</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/infra/ingress.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/infra/ingress.html</guid>
      <source url="https://docs.lizili.online/rss.xml">nginx-ingress</source>
      <description>官方文档 Ingress 为外部访问集群提供了一个 统一入口，避免了对外暴露集群端口；功能类似 Nginx，可以根据域名、路径把请求转发到不同的 Service，通过反向代理实现负载均衡。 ingress-nginx-controller：解决服务暴露与负载均衡问题 安装 拉取charts 修改values.yaml loadBalancerIP 为 ...</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Tue, 05 Dec 2023 13:44:44 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://kubernetes.github.io/ingress-nginx/deploy/" target="_blank" rel="noopener noreferrer">官方文档</a></p>
<p>Ingress 为外部访问集群提供了一个 统一入口，避免了对外暴露集群端口；功能类似 Nginx，可以根据域名、路径把请求转发到不同的 Service，通过反向代理实现负载均衡。</p>
<blockquote>
<p>ingress-nginx-controller：解决服务暴露与负载均衡问题</p>
</blockquote>
<h2>安装</h2>
<h3>拉取charts</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress-nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> https://kubernetes.github.io/ingress-nginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> helm</span><span style="color:#98C379;--shiki-dark:#98C379"> search</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress-nginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">                       	CHART</span><span style="color:#98C379;--shiki-dark:#98C379"> VERSION</span><span style="color:#98C379;--shiki-dark:#98C379">	APP</span><span style="color:#98C379;--shiki-dark:#98C379"> VERSION</span><span style="color:#98C379;--shiki-dark:#98C379">	DESCRIPTION</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                       </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ingress-nginx/ingress-nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66">	4.8.4</span><span style="color:#D19A66;--shiki-dark:#D19A66">        	1.9.4</span><span style="color:#98C379;--shiki-dark:#98C379">      	Ingress</span><span style="color:#98C379;--shiki-dark:#98C379"> controller</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> Kubernetes</span><span style="color:#98C379;--shiki-dark:#98C379"> using</span><span style="color:#98C379;--shiki-dark:#98C379"> NGINX</span><span style="color:#98C379;--shiki-dark:#98C379"> a...</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress-nginx/ingress-nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 4.8.4</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress-nginx-4.8.4.tgz</span></span></code></pre>
</div><h3>修改<code>values.yaml</code></h3>
<p><code>loadBalancerIP</code> 为 <a href="/ops/GitOps/deploy/infra/metallb.html" target="_blank">Metallb</a> 地址池里的IP</p>
<div class="language-yaml line-numbers-mode" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">controller</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    ## Keep false as default for now!</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">registry.cn-hangzhou.aliyuncs.com</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">google_containers/nginx-ingress-controller</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 注释了</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # digest: sha256:5b161f051d017e55d358435f295f5e9a297e66158f136321d9b04520ec6c48a3</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # digestChroot: sha256:5976b1067cfbca8a21d0ba53d71f83543a73316a61ea7f7e436d6cf84ddf9b26</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  kind</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">Deployment</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  replicaCount</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  service</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    type</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">LoadBalancer</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    loadBalancerIP</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">192.168.2.149</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # 地址为meatllb pool中的地址</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  admissionWebhooks</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    patch</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">      image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        registry</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">registry.aliyuncs.com</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">        image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">google_containers/kube-webhook-certgen</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        #digest: sha256:a7943503b45d552785aa3b5e457f169a5661fb94d82b8a3373bcd9ebaf9aac80</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66">  -n</span><span style="color:#98C379;--shiki-dark:#98C379"> kube-system</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Longhorn</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/infra/longhorn.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/infra/longhorn.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Longhorn</source>
      <description>官方安装指导 支持多种安装方式，这里使用helm 安装 前置准备 安装 仓库添加 安装 访问 longhorn 安装默认时安装了UI的。 若需要访问，安装ingress ，开启longhorn的即可 本机hosts文件中，添加记录。若生产环境，申请泛域名，做映射</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Tue, 05 Dec 2023 13:44:44 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://longhorn.io/docs/1.5.3/deploy/important-notes/" target="_blank" rel="noopener noreferrer">官方安装指导</a></p>
<p>支持多种安装方式，这里使用helm 安装</p>
<h2>前置准备</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --setopt=tsflags=noscripts</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> iscsi-initiator-utils</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "InitiatorName=$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">/sbin/iscsi-iname</span><span style="color:#98C379;--shiki-dark:#98C379">)"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/iscsi/initiatorname.iscsi</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> enable</span><span style="color:#98C379;--shiki-dark:#98C379"> iscsid</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> start</span><span style="color:#98C379;--shiki-dark:#98C379"> iscsid</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 ~]# systemctl status iscsid</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">●</span><span style="color:#98C379;--shiki-dark:#98C379"> iscsid.service</span><span style="color:#98C379;--shiki-dark:#98C379"> -</span><span style="color:#98C379;--shiki-dark:#98C379"> Open-iSCSI</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">   Loaded:</span><span style="color:#98C379;--shiki-dark:#98C379"> loaded</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (/usr/lib/systemd/system/iscsid.service; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">vendor</span><span style="color:#98C379;--shiki-dark:#98C379"> preset:</span><span style="color:#98C379;--shiki-dark:#98C379"> disabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">   Active:</span><span style="color:#98C379;--shiki-dark:#98C379"> active</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (running) since Mon 2023-12-04 16:36:21 CST; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">9s</span><span style="color:#98C379;--shiki-dark:#98C379"> ago</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">     Docs:</span><span style="color:#98C379;--shiki-dark:#98C379"> man:iscsid</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">8</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">           man:iscsiuio(8</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">           man:iscsiadm(8</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF"> Main</span><span style="color:#98C379;--shiki-dark:#98C379"> PID:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 22072</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (iscsid)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">   Status:</span><span style="color:#98C379;--shiki-dark:#98C379"> "Ready to process requests"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    Tasks:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">   Memory:</span><span style="color:#98C379;--shiki-dark:#98C379"> 1.8M</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">   CGroup:</span><span style="color:#98C379;--shiki-dark:#98C379"> /system.slice/iscsid.service</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">           └─22072</span><span style="color:#98C379;--shiki-dark:#98C379"> /sbin/iscsid</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span></span></code></pre>
</div><h2>安装</h2>
<p>仓库添加</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> longhorn</span><span style="color:#98C379;--shiki-dark:#98C379"> https://charts.longhorn.io</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span></code></pre>
</div><p>安装</p>

<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> kubectl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> longhorn-system</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span><span style="color:#98C379;--shiki-dark:#98C379"> pod</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">                                                READY</span><span style="color:#98C379;--shiki-dark:#98C379">   STATUS</span><span style="color:#98C379;--shiki-dark:#98C379">    RESTARTS</span><span style="color:#98C379;--shiki-dark:#98C379">   AGE</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">csi-attacher-79b44f5d-5xvhb</span><span style="color:#98C379;--shiki-dark:#98C379">                         1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          8m32s</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">...</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">...</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">longhorn-ui-7c667cb6fc-rxlwp</span><span style="color:#98C379;--shiki-dark:#98C379">                        1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          10m</span></span></code></pre>
</div><h2>访问</h2>
<p>longhorn 安装默认时安装了UI的。</p>
<p>若需要访问，安装ingress ，开启longhorn的<a href="/ops/GitOps/deploy/infra/ingress.html" target="_blank">ingress</a>即可</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  ## Set to true to enable ingress record generation</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  host</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">longhorn.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span></code></pre>
</div><p>本机hosts文件中，添加记录。若生产环境，申请泛域名，做映射</p>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#98C379;--shiki-dark:#98C379">192.168.2.149 longhorn.zili.work</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>metalLB</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/infra/metallb.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/infra/metallb.html</guid>
      <source url="https://docs.lizili.online/rss.xml">metalLB</source>
      <description>官方文档 项目地址 MetalLB 是一个负载均衡器，专门解决裸金属 Kubernetes 集群中无法使用 LoadBalancer 类型服务的痛点。有了MetaLB， metallb：为k8s集群的service提供LoadBalancer类型的支持 前置准备 Kubernetes v1.13.0 或者更新的版本 CNI兼容自查 这里使用MetaLB...</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Tue, 05 Dec 2023 13:44:44 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://metallb.org/installation/" target="_blank" rel="noopener noreferrer">官方文档</a></p>
<p><a href="https://github.com/danderson/metallb" target="_blank" rel="noopener noreferrer">项目地址</a></p>
<p>MetalLB 是一个负载均衡器，专门解决裸金属 Kubernetes 集群中无法使用 LoadBalancer 类型服务的痛点。有了MetaLB，</p>
<blockquote>
<p>metallb：为k8s集群的service提供LoadBalancer类型的支持</p>
</blockquote>
<h2>前置准备</h2>
<ol>
<li>Kubernetes v1.13.0 或者更新的版本</li>
<li><a href="https://metallb.universe.tf/installation/network-addons/" target="_blank" rel="noopener noreferrer">CNI兼容自查</a></li>
<li>这里使用MetaLB的 layer 2模式，需要至少两个连续的IP作为地址池使用</li>
<li>L2 模式下需要各个节点间 7946 端口联通</li>
<li>BGP 略</li>
</ol>
<h3>修改 kube proxy</h3>
<p>修改 kube-proxy 配置文件，启用严格的 ARP。如果 kube-proxy 使用的是 ipvs 模式</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> edit</span><span style="color:#98C379;--shiki-dark:#98C379"> configmap</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> kube-system</span><span style="color:#98C379;--shiki-dark:#98C379"> kube-proxy</span></span></code></pre>
</div><div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          ipvs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            excludeCIDRs</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">null</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            minSyncPeriod</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0s</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            scheduler</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            strictARP</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> #false改为true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            syncPeriod</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0s</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            tcpFinTimeout</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0s</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            tcpTimeout</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0s</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">            udpTimeout</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">0s</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          kind</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">KubeProxyConfiguration</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          metricsBindAddress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">          mode</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"ipvs"</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> # 配置为 ipvs</span></span></code></pre>
</div><h2>安装</h2>
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/metallb" target="_blank" rel="noopener noreferrer">bitnami - metallb</a></p>

<h2>地址池配置</h2>
<blockquote>
<p>Layer2 模式进行配置，需要创建一个 IPAddressPool 资源对象，用来指定用于分配的 IP 池，这部分一定要在 DHCP 服务器上做 IP 资源的保留，避免IP冲突，引发异常</p>
</blockquote>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">pool.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">apiVersion: metallb.io/v1beta1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">kind: IPAddressPool</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">metadata:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  name: ip-pool</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  namespace: metallb-system</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">spec:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  addresses:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    - 192.168.2.149-192.168.2.150        #分配给LB的IP池</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><p>广播</p>
<blockquote>
<p>广播声明，可以关联上面的 IP 池对象，这样会使用关联的 IP 池地址。为了通告来自 IPAddressPool 的 IP，L2Advertisement 实例必须关联到 IPAddressPool。</p>
</blockquote>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;  </span><span style="color:#98C379;--shiki-dark:#98C379">advertise.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">apiVersion: metallb.io/v1beta1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">kind: L2Advertisement</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">metadata:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  name: l2adver</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  namespace: metallb-system</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">spec:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  ipAddressPools:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    - ip-pool</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>kubectl apply -f pool.yaml</span></span>
<span class="line"><span>kubectl apply -f  advertise.yaml</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>gitlab</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/gitlab.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/gitlab.html</guid>
      <source url="https://docs.lizili.online/rss.xml">gitlab</source>
      <description>官方文档 gitlab 安装 values修改 配置选项参考值 部署 获取root密码</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Tue, 05 Dec 2023 13:44:44 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://docs.gitlab.com/charts/installation/" target="_blank" rel="noopener noreferrer">官方文档</a></p>
<h2></h2>
<p>gitlab</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span><span style="color:#98C379;--shiki-dark:#98C379"> https://charts.gitlab.io/</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span></code></pre>
</div><h2>安装</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab/gitlab</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 7.6.1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-7.6.1.tgz</span></span></code></pre>
</div><h3>values修改</h3>
<p><a href="https://docs.gitlab.com/charts/installation/command-line-options.html" target="_blank" rel="noopener noreferrer">配置选项参考值</a></p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt; </span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">gitlab-values.yaml</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">global:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  common:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    labels: {}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  hosts:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    domain: zili.work</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    https: false</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    externalIP: 192.168.2.149</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  ingress:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    configureCertmanager: false</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    provider: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    annotations:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">      ingressClassName: nginx</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: true</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    path: /</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    pathType: Prefix</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  gitaly:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    enabled: true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">gitlab-runner:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  install: false</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">nginx-ingress:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  enabled: false</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">prometheus:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">  install: false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>部署</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Release</span><span style="color:#98C379;--shiki-dark:#98C379"> "gitlab"</span><span style="color:#98C379;--shiki-dark:#98C379"> does</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> exist.</span><span style="color:#98C379;--shiki-dark:#98C379"> Installing</span><span style="color:#98C379;--shiki-dark:#98C379"> it</span><span style="color:#98C379;--shiki-dark:#98C379"> now.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME:</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">LAST</span><span style="color:#98C379;--shiki-dark:#98C379"> DEPLOYED:</span><span style="color:#98C379;--shiki-dark:#98C379"> Thu</span><span style="color:#98C379;--shiki-dark:#98C379"> Dec</span><span style="color:#D19A66;--shiki-dark:#D19A66">  7</span><span style="color:#98C379;--shiki-dark:#98C379"> 11:37:35</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2023</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAMESPACE:</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">STATUS:</span><span style="color:#98C379;--shiki-dark:#98C379"> deployed</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">REVISION:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NOTES:</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">===</span><span style="color:#98C379;--shiki-dark:#98C379"> CRITICAL</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">The</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> charts</span><span style="color:#98C379;--shiki-dark:#98C379"> are</span><span style="color:#98C379;--shiki-dark:#98C379"> included</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> evaluation</span><span style="color:#98C379;--shiki-dark:#98C379"> purposes</span><span style="color:#98C379;--shiki-dark:#98C379"> only.</span><span style="color:#98C379;--shiki-dark:#98C379"> They</span><span style="color:#98C379;--shiki-dark:#98C379"> will</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> be</span><span style="color:#98C379;--shiki-dark:#98C379"> supported</span><span style="color:#98C379;--shiki-dark:#98C379"> by</span><span style="color:#98C379;--shiki-dark:#98C379"> GitLab</span><span style="color:#98C379;--shiki-dark:#98C379"> Support</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">for</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> production workloads. Use Cloud Native Hybrid deployments for production. For more information visit</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">https://docs.gitlab.com/charts/installation/index.html#use-the-reference-architectures.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> PostgreSQL</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> Redis</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> Gitaly</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> MinIO</span></span>
<span class="line"></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">===</span><span style="color:#98C379;--shiki-dark:#98C379"> NOTICE</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">The</span><span style="color:#98C379;--shiki-dark:#98C379"> minimum</span><span style="color:#98C379;--shiki-dark:#98C379"> required</span><span style="color:#98C379;--shiki-dark:#98C379"> version</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> PostgreSQL</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> now</span><span style="color:#98C379;--shiki-dark:#98C379"> 13.</span><span style="color:#98C379;--shiki-dark:#98C379"> See</span><span style="color:#98C379;--shiki-dark:#98C379"> https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/doc/installation/upgrade.md</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> more</span><span style="color:#98C379;--shiki-dark:#98C379"> details.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">===</span><span style="color:#98C379;--shiki-dark:#98C379"> WARNING</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Automatic</span><span style="color:#98C379;--shiki-dark:#98C379"> TLS</span><span style="color:#98C379;--shiki-dark:#98C379"> certificate</span><span style="color:#98C379;--shiki-dark:#98C379"> generation</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> cert-manager</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> disabled.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">One</span><span style="color:#98C379;--shiki-dark:#98C379"> or</span><span style="color:#98C379;--shiki-dark:#98C379"> more</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> components</span><span style="color:#98C379;--shiki-dark:#98C379"> does</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> have</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> TLS</span><span style="color:#98C379;--shiki-dark:#98C379"> certificate</span><span style="color:#98C379;--shiki-dark:#98C379"> Secret</span><span style="color:#98C379;--shiki-dark:#98C379"> configured.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">As</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> result,</span><span style="color:#98C379;--shiki-dark:#98C379"> Self-signed</span><span style="color:#98C379;--shiki-dark:#98C379"> certificates</span><span style="color:#98C379;--shiki-dark:#98C379"> were</span><span style="color:#98C379;--shiki-dark:#98C379"> generated</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> these</span><span style="color:#98C379;--shiki-dark:#98C379"> components.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">You</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> retrieve</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> CA</span><span style="color:#98C379;--shiki-dark:#98C379"> root</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> these</span><span style="color:#98C379;--shiki-dark:#98C379"> certificates</span><span style="color:#98C379;--shiki-dark:#98C379"> from</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">gitlab-wildcard-tls-ca</span><span style="color:#98C379;--shiki-dark:#98C379">`</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> secret,</span><span style="color:#98C379;--shiki-dark:#98C379"> via</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> command.</span><span style="color:#98C379;--shiki-dark:#98C379"> It</span><span style="color:#98C379;--shiki-dark:#98C379"> can</span><span style="color:#98C379;--shiki-dark:#98C379"> then</span><span style="color:#98C379;--shiki-dark:#98C379"> be</span><span style="color:#98C379;--shiki-dark:#98C379"> imported</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> web</span><span style="color:#98C379;--shiki-dark:#98C379"> browser</span><span style="color:#98C379;--shiki-dark:#98C379"> or</span><span style="color:#98C379;--shiki-dark:#98C379"> system</span><span style="color:#98C379;--shiki-dark:#98C379"> store.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span><span style="color:#98C379;--shiki-dark:#98C379"> secret</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-wildcard-tls-ca</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -ojsonpath=</span><span style="color:#98C379;--shiki-dark:#98C379">'{.data.cfssl_ca}'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">base64</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --decode</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">gitlab.zili.work.ca.pem</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">If</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> do</span><span style="color:#98C379;--shiki-dark:#98C379"> not</span><span style="color:#98C379;--shiki-dark:#98C379"> wish</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> use</span><span style="color:#98C379;--shiki-dark:#98C379"> self-signed</span><span style="color:#98C379;--shiki-dark:#98C379"> certificates,</span><span style="color:#98C379;--shiki-dark:#98C379"> please</span><span style="color:#98C379;--shiki-dark:#98C379"> set</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> properties:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> global.ingress.tls.secretName</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">OR</span><span style="color:#98C379;--shiki-dark:#98C379"> all</span><span style="color:#98C379;--shiki-dark:#98C379"> of:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> global.ingress.tls.enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (set </span><span style="color:#98C379;--shiki-dark:#98C379">to</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">true</span><span style="color:#98C379;--shiki-dark:#98C379">`</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab.webservice.ingress.tls.secretName</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> registry.ingress.tls.secretName</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> minio.ingress.tls.secretName</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab.kas.ingress.tls.secretName</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Help</span><span style="color:#98C379;--shiki-dark:#98C379"> us</span><span style="color:#98C379;--shiki-dark:#98C379"> improve</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> installation</span><span style="color:#98C379;--shiki-dark:#98C379"> experience,</span><span style="color:#98C379;--shiki-dark:#98C379"> let</span><span style="color:#98C379;--shiki-dark:#98C379"> us</span><span style="color:#98C379;--shiki-dark:#98C379"> know</span><span style="color:#98C379;--shiki-dark:#98C379"> how</span><span style="color:#98C379;--shiki-dark:#98C379"> we</span><span style="color:#98C379;--shiki-dark:#98C379"> did</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#98C379;--shiki-dark:#98C379"> minute</span><span style="color:#98C379;--shiki-dark:#98C379"> survey:https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=helm</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&amp;</span><span style="color:#E06C75;--shiki-dark:#E06C75">release</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">16-6</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>获取root密码</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span><span style="color:#98C379;--shiki-dark:#98C379"> secret</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab-gitlab-initial-root-password</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -ojsonpath=</span><span style="color:#98C379;--shiki-dark:#98C379">'{.data.password}'</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> gitlab</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">base64</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --decode</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ; </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Grafana</title>
      <link>https://docs.lizili.online/ops/GitOps/deploy/tool/grafana.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/deploy/tool/grafana.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Grafana</source>
      <description>bitnami官方安装指导 下载chart 仓库添加 配置 安装</description>
      <category>云原生</category>
      <category>gitops</category>
      <pubDate>Tue, 05 Dec 2023 13:44:44 GMT</pubDate>
      <content:encoded><![CDATA[
<p><a href="https://github.com/bitnami/charts/tree/main/bitnami/grafana" target="_blank" rel="noopener noreferrer">bitnami官方安装指导</a></p>
<h2>下载chart</h2>
<p>仓库添加</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> oci://registry-1.docker.io/bitnamicharts/grafana</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 9.6.5</span></span></code></pre>
</div><h2>配置</h2>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">admin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  user</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  password</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">"admin"</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  existingSecret</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  existingSecretPasswordKey</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">password</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">ingress</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  pathType</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ImplementationSpecific</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">""</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  hostname</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">grafana.zili.work</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  path</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">/</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  annotations</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    kubernetes.io/ingress.class</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span></code></pre>
</div><h2>安装</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> grafana</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> grafana-values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> middleware</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>kubeadm安装K8S集群</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-install.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/kubernetes-install.html</guid>
      <source url="https://docs.lizili.online/rss.xml">kubeadm安装K8S集群</source>
      <description>前置准备 CentOS * 3 网络策略互通 互联网访问开通 节点唯一主机名、mac yum 配置 yum docker k8s依赖容器运行时,v1.24 弃用 dockershim,可直接使用使用containerd kubernetes yum 缓存 安装工具 时间设置 防火墙 swap selinux ipvs 安装docker 或安装conta...</description>
      <category>云原生</category>
      <pubDate>Thu, 30 Nov 2023 11:03:10 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>前置准备</h2>
<ol>
<li>CentOS * 3</li>
<li>网络策略互通</li>
<li>互联网访问开通</li>
<li>节点唯一主机名、mac</li>
</ol>
<h3>yum 配置</h3>
<p>yum</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/yum.repos.d/Centos-7.repo</span><span style="color:#98C379;--shiki-dark:#98C379"> http://mirrors.aliyun.com/repo/Centos-7.repo</span></span></code></pre>
</div><p>docker</p>
<blockquote>
<p>k8s依赖容器运行时,v1.24 弃用 dockershim,可直接使用使用containerd</p>
</blockquote>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/yum.repos.d/docker-ce.repo</span><span style="color:#98C379;--shiki-dark:#98C379"> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo</span></span></code></pre>
</div><p>kubernetes</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/yum.repos.d/kubernetes.repo</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">[kubernetes]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">name=Kubernetes</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">enabled=1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">gpgcheck=0</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">repo_gpgcheck=0</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><p>yum 缓存</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> clean</span><span style="color:#98C379;--shiki-dark:#98C379"> all</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> makecache</span></span></code></pre>
</div><h3>安装工具</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -y</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> tree</span><span style="color:#98C379;--shiki-dark:#98C379"> vim</span><span style="color:#98C379;--shiki-dark:#98C379"> wget</span><span style="color:#98C379;--shiki-dark:#98C379"> bash-completion</span><span style="color:#98C379;--shiki-dark:#98C379"> bash-completion-extras</span><span style="color:#98C379;--shiki-dark:#98C379">  net-tools</span><span style="color:#98C379;--shiki-dark:#98C379">  unzip</span><span style="color:#98C379;--shiki-dark:#98C379"> nc</span><span style="color:#98C379;--shiki-dark:#98C379"> nmap</span><span style="color:#98C379;--shiki-dark:#98C379"> telnet</span><span style="color:#98C379;--shiki-dark:#98C379"> ntpdate</span></span></code></pre>
</div><h3>时间设置</h3>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>timedatectl set-timezone Asia/Shanghai</span></span>
<span class="line"><span></span></span>
<span class="line"><span>(echo "0 01 23 * * ntpdate ntp1.aliyun.com" ; crontab -l )| crontab</span></span></code></pre>
</div><h3>防火墙 swap selinux</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">## 如果防火墙是running，关闭防火墙</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> disable</span><span style="color:#98C379;--shiki-dark:#98C379"> firewalld</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> stop</span><span style="color:#98C379;--shiki-dark:#98C379"> firewalld</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 关闭SELinux </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> setenforce</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -ri</span><span style="color:#98C379;--shiki-dark:#98C379"> 's#(SELINUX=).*#\1disabled#'</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/selinux/config</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 关闭swap。避免 kubelet启动失败</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> swapoff</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -a</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 永久关闭swap</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> '/ swap / s/^\(.*\)$/#\1/g'</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/fstab</span></span></code></pre>
</div><h3>ipvs</h3>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 加载ipvs模块</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#98C379;--shiki-dark:#98C379"> br_netfilter</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs_sh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs_rr</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs_wrr</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">modprobe</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --</span><span style="color:#98C379;--shiki-dark:#98C379"> nf_conntrack_ipv4</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 验证ip_vs模块</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">lsmod</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> |</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ip_vs_wrr</span><span style="color:#D19A66;--shiki-dark:#D19A66">              12697</span><span style="color:#D19A66;--shiki-dark:#D19A66">  0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ip_vs_rr</span><span style="color:#D19A66;--shiki-dark:#D19A66">               12600</span><span style="color:#D19A66;--shiki-dark:#D19A66">  0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ip_vs_sh</span><span style="color:#D19A66;--shiki-dark:#D19A66">               12688</span><span style="color:#D19A66;--shiki-dark:#D19A66">  0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ip_vs</span><span style="color:#D19A66;--shiki-dark:#D19A66">                 145458</span><span style="color:#D19A66;--shiki-dark:#D19A66">  6</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs_rr,ip_vs_sh,ip_vs_wrr</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">nf_conntrack</span><span style="color:#D19A66;--shiki-dark:#D19A66">          139264</span><span style="color:#D19A66;--shiki-dark:#D19A66">  2</span><span style="color:#98C379;--shiki-dark:#98C379"> ip_vs,nf_conntrack_ipv4</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">libcrc32c</span><span style="color:#D19A66;--shiki-dark:#D19A66">              12644</span><span style="color:#D19A66;--shiki-dark:#D19A66">  3</span><span style="color:#98C379;--shiki-dark:#98C379"> xfs,ip_vs,nf_conntrack</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 内核文件 </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;  </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/sysctl.d/k8s.conf</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">net.bridge.bridge-nf-call-ip6tables = 1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">net.bridge.bridge-nf-call-iptables = 1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">net.ipv4.ip_forward=1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">vm.max_map_count=262144</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 生效并验证内核优化</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sysctl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/sysctl.d/k8s.conf</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>安装docker</h2>
<blockquote>
<p>或安装containerd。关注配置 /etc/containerd/config.toml</p>
</blockquote>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> docker-ce</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -y</span></span></code></pre>
</div><p>配置docker</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/docker/daemon.json</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">{</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    "registry-mirrors": [</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        "https://registry.hub.docker.com",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        "http://hub-mirror.c.163.com",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        "https://docker.mirrors.ustc.edu.cn",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">        "https://registry.docker-cn.com"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    ],</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    # "exec-opts": ["native.cgroupdriver=systemd"],</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    "data-root": "/data/docker",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    "log-driver": "json-file",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">    "log-opts": {"max-size":"10m", "max-file":"3"}</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">} </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><blockquote>
<p>Kubernetes 推荐使用 systemd 来替代 cgroupfs，是因为 systemd 是 Kubernetes 自带的 cgroup 管理器，负责为每个进程分配 cgroupfs，但 Docker 的 cgroup driver 默认是 cgroupfs，这样就同时运行了两个 cgroup 控制管理器。当资源有压力时，有可能会出现不稳定的情况。</p>
</blockquote>
<p>如果不修改配置，会在 kubeadm init 时提示：</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[WARNING IsDockerSystemdCheck]: detected </span><span style="color:#98C379;--shiki-dark:#98C379">"cgroupfs"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> as the Docker cgroup driver. The recommended driver is </span><span style="color:#98C379;--shiki-dark:#98C379">"systemd"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">. Please follow the guide at https://kubernetes.io/docs/setup/cri/</span></span></code></pre>
</div><p>启动</p>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>systemctl start docker &amp;&amp; systemctl enable docker</span></span></code></pre>
</div><p>验证</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">docker</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#98C379;--shiki-dark:#98C379"> hello-world</span></span></code></pre>
</div><p>pause 镜像地址更换</p>
<blockquote>
<p>为了防止安装过程中出现pause镜像下载失败的问题，建议运行containerd config dump &gt; /etc/containerd/config.toml 命令，将当前配置导出到文件，并修改sandbox_image配置。</p>
</blockquote>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">## 修改配置文件/etc/containerd/config.toml， 更改sandbox_image配置</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[plugins]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  [plugins.</span><span style="color:#98C379;--shiki-dark:#98C379">"io.containerd.grpc.v1.cri"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    sandbox_image</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> "registry.aliyuncs.com/google_containers/pause:3.9"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">## 如果没有/etc/containerd/config.toml文件，将默认配置导出到/etc/containerd/config.toml。</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">containerd</span><span style="color:#98C379;--shiki-dark:#98C379"> config</span><span style="color:#98C379;--shiki-dark:#98C379"> default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/containerd/config.toml</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">## 重启containerd</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> restart</span><span style="color:#98C379;--shiki-dark:#98C379"> containerd</span></span></code></pre>
</div><h2>安装kubeadm, kubelet, kubectl</h2>
<p>kubeadm：部署k8s集群的工具</p>
<p>kubelet: 该组件在集群中的所有机器上运行，并执行启动pod和容器之类的任务。</p>
<p>kubectl: 与集群通信的工具。可以只在master节点上安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -y</span><span style="color:#98C379;--shiki-dark:#98C379"> kubelet</span><span style="color:#98C379;--shiki-dark:#98C379"> kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> kubectl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --disableexcludes=kubernetes</span></span></code></pre>
</div><p>开机启动</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> enable</span><span style="color:#98C379;--shiki-dark:#98C379"> kubelet.service</span></span></code></pre>
</div><h2>安装K8S</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF"> kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> init</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  --apiserver-advertise-address=192.168.2.133</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  --image-repository</span><span style="color:#98C379;--shiki-dark:#98C379"> registry.aliyuncs.com/google_containers</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  --kubernetes-version</span><span style="color:#98C379;--shiki-dark:#98C379"> v1.28.0</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  --service-cidr=10.96.0.0/12</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">  --pod-network-cidr=10.244.0.0/16</span></span></code></pre>
</div><p>安装成功提示</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">To</span><span style="color:#98C379;--shiki-dark:#98C379"> start</span><span style="color:#98C379;--shiki-dark:#98C379"> using</span><span style="color:#98C379;--shiki-dark:#98C379"> your</span><span style="color:#98C379;--shiki-dark:#98C379"> cluster,</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> need</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> as</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> regular</span><span style="color:#98C379;--shiki-dark:#98C379"> user:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  mkdir</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> cp</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/admin.conf</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube/config</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> chown</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> $(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">id</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -u</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span><span style="color:#98C379;--shiki-dark:#98C379">:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">id</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -g</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#E06C75;--shiki-dark:#E06C75">$HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube/config</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Alternatively,</span><span style="color:#98C379;--shiki-dark:#98C379"> if</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> are</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> root</span><span style="color:#98C379;--shiki-dark:#98C379"> user,</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> can</span><span style="color:#98C379;--shiki-dark:#98C379"> run:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">  export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> KUBECONFIG</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">etc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">kubernetes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">admin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">conf</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Then</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> can</span><span style="color:#98C379;--shiki-dark:#98C379"> join</span><span style="color:#98C379;--shiki-dark:#98C379"> any</span><span style="color:#98C379;--shiki-dark:#98C379"> number</span><span style="color:#98C379;--shiki-dark:#98C379"> of</span><span style="color:#98C379;--shiki-dark:#98C379"> worker</span><span style="color:#98C379;--shiki-dark:#98C379"> nodes</span><span style="color:#98C379;--shiki-dark:#98C379"> by</span><span style="color:#98C379;--shiki-dark:#98C379"> running</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> on</span><span style="color:#98C379;--shiki-dark:#98C379"> each</span><span style="color:#98C379;--shiki-dark:#98C379"> as</span><span style="color:#98C379;--shiki-dark:#98C379"> root:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> join</span><span style="color:#98C379;--shiki-dark:#98C379"> 192.168.2.133:6443</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --token</span><span style="color:#98C379;--shiki-dark:#98C379"> dm4r9m.xjlx0z6e4w54uxze</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">	--discovery-token-ca-cert-hash</span><span style="color:#98C379;--shiki-dark:#98C379"> sha256:7c12c7c06ea525e6a16fc8b7f62416af11ed36d266eea348606fbbc49f6cd1f3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]#</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>根据提示执行</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">To</span><span style="color:#98C379;--shiki-dark:#98C379"> start</span><span style="color:#98C379;--shiki-dark:#98C379"> using</span><span style="color:#98C379;--shiki-dark:#98C379"> your</span><span style="color:#98C379;--shiki-dark:#98C379"> cluster,</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> need</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> following</span><span style="color:#98C379;--shiki-dark:#98C379"> as</span><span style="color:#98C379;--shiki-dark:#98C379"> a</span><span style="color:#98C379;--shiki-dark:#98C379"> regular</span><span style="color:#98C379;--shiki-dark:#98C379"> user:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  mkdir</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> cp</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/admin.conf</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube/config</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> chown</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> $(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">id</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -u</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span><span style="color:#98C379;--shiki-dark:#98C379">:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">$(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">id</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -g</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#E06C75;--shiki-dark:#E06C75">$HOME</span><span style="color:#98C379;--shiki-dark:#98C379">/.kube/config</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Alternatively,</span><span style="color:#98C379;--shiki-dark:#98C379"> if</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> are</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> root</span><span style="color:#98C379;--shiki-dark:#98C379"> user,</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> can</span><span style="color:#98C379;--shiki-dark:#98C379"> run:</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">  export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> KUBECONFIG</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">etc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">kubernetes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">admin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">conf</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">我使用的roor用户，所以执行：</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> KUBECONFIG</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">etc</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">kubernetes</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">admin</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">conf</span></span></code></pre>
</div><p>节点添加, init成功后，会有此提示</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> join</span><span style="color:#98C379;--shiki-dark:#98C379"> 192.168.2.133:6443</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --token</span><span style="color:#98C379;--shiki-dark:#98C379"> dm4r9m.xjlx0z6e4w54uxze</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">	--discovery-token-ca-cert-hash</span><span style="color:#98C379;--shiki-dark:#98C379"> sha256:7c12c7c06ea525e6a16fc8b7f62416af11ed36d266eea348606fbbc49f6cd1f3</span></span></code></pre>
</div><p>检查node, 未安装网络插件CNI，所以NotReady</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 ~]# kubectl get node -A</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">     STATUS</span><span style="color:#98C379;--shiki-dark:#98C379">     ROLES</span><span style="color:#98C379;--shiki-dark:#98C379">           AGE</span><span style="color:#98C379;--shiki-dark:#98C379">   VERSION</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili01</span><span style="color:#98C379;--shiki-dark:#98C379">   NotReady</span><span style="color:#98C379;--shiki-dark:#98C379">   control-plane</span><span style="color:#98C379;--shiki-dark:#98C379">   23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili02</span><span style="color:#98C379;--shiki-dark:#98C379">   NotReady</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;          </span><span style="color:#98C379;--shiki-dark:#98C379">23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili03</span><span style="color:#98C379;--shiki-dark:#98C379">   NotReady</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;          </span><span style="color:#98C379;--shiki-dark:#98C379">23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span></code></pre>
</div><h2>安装网络插件</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml</span></span></code></pre>
</div><p>修改文件中，<code>net-conf.json.Network</code>， 与init时指定的<code>--pod-network-cidr=10.244.0.0/16</code> 一致</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">data:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  cni-conf.json:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> |</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      "name"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "cbr0",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      "cniVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "0.3.1",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      "plugins"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          "type"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "flannel",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          "delegate"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">            "hairpinMode"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> true</span><span style="color:#98C379;--shiki-dark:#98C379">,</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">            "isDefaultGateway"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> true</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          "type"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "portmap",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">          "capabilities"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">            "portMappings"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> true</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">          }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      ]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  net-conf.json:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> |</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      "Network"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "10.244.0.0/16",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">      "Backend"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        "Type"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "vxlan"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>部署插件</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl apply -f kube-flannel.yml</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">namespace/kube-flannel</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">clusterrole.rbac.authorization.k8s.io/flannel</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">clusterrolebinding.rbac.authorization.k8s.io/flannel</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">serviceaccount/flannel</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">configmap/kube-flannel-cfg</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">daemonset.apps/kube-flannel-ds</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span></code></pre>
</div><p>检查</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl -n kube-system get pod -o wide</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">                             READY</span><span style="color:#98C379;--shiki-dark:#98C379">   STATUS</span><span style="color:#98C379;--shiki-dark:#98C379">    RESTARTS</span><span style="color:#98C379;--shiki-dark:#98C379">   AGE</span><span style="color:#98C379;--shiki-dark:#98C379">   IP</span><span style="color:#98C379;--shiki-dark:#98C379">              NODE</span><span style="color:#98C379;--shiki-dark:#98C379">     NOMINATED</span><span style="color:#98C379;--shiki-dark:#98C379"> NODE</span><span style="color:#98C379;--shiki-dark:#98C379">   READINESS</span><span style="color:#98C379;--shiki-dark:#98C379"> GATES</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">coredns-66f779496c-hntt2</span><span style="color:#98C379;--shiki-dark:#98C379">         1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   10.244.1.2</span><span style="color:#98C379;--shiki-dark:#98C379">      zili02</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">coredns-66f779496c-n549l</span><span style="color:#98C379;--shiki-dark:#98C379">         1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   10.244.1.3</span><span style="color:#98C379;--shiki-dark:#98C379">      zili02</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">etcd-zili01</span><span style="color:#98C379;--shiki-dark:#98C379">                      1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.133</span><span style="color:#98C379;--shiki-dark:#98C379">   zili01</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-apiserver-zili01</span><span style="color:#98C379;--shiki-dark:#98C379">            1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.133</span><span style="color:#98C379;--shiki-dark:#98C379">   zili01</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-controller-manager-zili01</span><span style="color:#98C379;--shiki-dark:#98C379">   1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   1</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.133</span><span style="color:#98C379;--shiki-dark:#98C379">   zili01</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-proxy-hfjc4</span><span style="color:#98C379;--shiki-dark:#98C379">                 1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.134</span><span style="color:#98C379;--shiki-dark:#98C379">   zili02</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-proxy-kpkf7</span><span style="color:#98C379;--shiki-dark:#98C379">                 1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.135</span><span style="color:#98C379;--shiki-dark:#98C379">   zili03</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-proxy-xwpqj</span><span style="color:#98C379;--shiki-dark:#98C379">                 1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.133</span><span style="color:#98C379;--shiki-dark:#98C379">   zili01</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-scheduler-zili01</span><span style="color:#98C379;--shiki-dark:#98C379">            1/1</span><span style="color:#98C379;--shiki-dark:#98C379">     Running</span><span style="color:#D19A66;--shiki-dark:#D19A66">   1</span><span style="color:#98C379;--shiki-dark:#98C379">          23h</span><span style="color:#D19A66;--shiki-dark:#D19A66">   192.168.2.133</span><span style="color:#98C379;--shiki-dark:#98C379">   zili01</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;           &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl get nodes</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">     STATUS</span><span style="color:#98C379;--shiki-dark:#98C379">   ROLES</span><span style="color:#98C379;--shiki-dark:#98C379">           AGE</span><span style="color:#98C379;--shiki-dark:#98C379">   VERSION</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili01</span><span style="color:#98C379;--shiki-dark:#98C379">   Ready</span><span style="color:#98C379;--shiki-dark:#98C379">    control-plane</span><span style="color:#98C379;--shiki-dark:#98C379">   23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili02</span><span style="color:#98C379;--shiki-dark:#98C379">   Ready</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;          </span><span style="color:#98C379;--shiki-dark:#98C379">23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">zili03</span><span style="color:#98C379;--shiki-dark:#98C379">   Ready</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;          </span><span style="color:#98C379;--shiki-dark:#98C379">23h</span><span style="color:#98C379;--shiki-dark:#98C379">   v1.28.2</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl create deployment nginx </span><span style="color:#E06C75;--shiki-dark:#E06C75">--image</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">nginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">deployment.apps/nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> created</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl expose deployment nginx </span><span style="color:#E06C75;--shiki-dark:#E06C75">--port</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">80</span><span style="color:#E06C75;--shiki-dark:#E06C75"> --type</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">NodePort</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">service/nginx</span><span style="color:#98C379;--shiki-dark:#98C379"> exposed</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl get svc -A</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAMESPACE</span><span style="color:#98C379;--shiki-dark:#98C379">     NAME</span><span style="color:#98C379;--shiki-dark:#98C379">         TYPE</span><span style="color:#98C379;--shiki-dark:#98C379">        CLUSTER-IP</span><span style="color:#98C379;--shiki-dark:#98C379">     EXTERNAL-IP</span><span style="color:#98C379;--shiki-dark:#98C379">   PORT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">S</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)                  </span><span style="color:#98C379;--shiki-dark:#98C379">AGE</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">default</span><span style="color:#98C379;--shiki-dark:#98C379">       kubernetes</span><span style="color:#98C379;--shiki-dark:#98C379">   ClusterIP</span><span style="color:#D19A66;--shiki-dark:#D19A66">   10.96.0.1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">      &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;        </span><span style="color:#98C379;--shiki-dark:#98C379">443/TCP</span><span style="color:#98C379;--shiki-dark:#98C379">                  2d15h</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">default</span><span style="color:#98C379;--shiki-dark:#98C379">       nginx</span><span style="color:#98C379;--shiki-dark:#98C379">        NodePort</span><span style="color:#D19A66;--shiki-dark:#D19A66">    10.96.30.102</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;        </span><span style="color:#98C379;--shiki-dark:#98C379">80:30892/TCP</span><span style="color:#98C379;--shiki-dark:#98C379">             3s</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kube-system</span><span style="color:#98C379;--shiki-dark:#98C379">   kube-dns</span><span style="color:#98C379;--shiki-dark:#98C379">     ClusterIP</span><span style="color:#D19A66;--shiki-dark:#D19A66">   10.96.0.10</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">     &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;        </span><span style="color:#98C379;--shiki-dark:#98C379">53/UDP,53/TCP,9153/TCP</span><span style="color:#98C379;--shiki-dark:#98C379">   2d15h</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>访问 节点地址 + 端口</p>
<figure><figcaption></figcaption></figure>
<h2>其他</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#生成一条永久有效的token</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> token</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --ttl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#查询token</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubeadm</span><span style="color:#98C379;--shiki-dark:#98C379"> token</span><span style="color:#98C379;--shiki-dark:#98C379"> list</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#获取ca证书sha256编码hash值</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">openssl</span><span style="color:#98C379;--shiki-dark:#98C379"> x509</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -pubkey</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -in</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/kubernetes/pki/ca.crt</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">openssl</span><span style="color:#98C379;--shiki-dark:#98C379"> rsa</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -pubin</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -outform</span><span style="color:#98C379;--shiki-dark:#98C379"> der</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> 2&gt;</span><span style="color:#98C379;--shiki-dark:#98C379">/dev/null</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">openssl</span><span style="color:#98C379;--shiki-dark:#98C379"> dgst</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -sha256</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -hex</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">sed</span><span style="color:#98C379;--shiki-dark:#98C379"> 's/^.* //'</span></span></code></pre>
</div><h3>污点删除</h3>
<p>查看污点</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@zili01 install_k8s]# kubectl describe nodes  |</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#98C379;--shiki-dark:#98C379"> Taints</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Taints:</span><span style="color:#98C379;--shiki-dark:#98C379">             node-role.kubernetes.io/control-plane:NoSchedule</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Taints:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">             &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Taints:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">             &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span></code></pre>
</div><p>master节点，默认不参与调度的，可通过污点删除，让master参与调度</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> taint</span><span style="color:#98C379;--shiki-dark:#98C379"> nodes</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --all</span><span style="color:#98C379;--shiki-dark:#98C379"> node-role.kubernetes.io/control-plane-</span></span></code></pre>
</div><blockquote>
<p>不建议删除。建议master 节点配置降低，和node分开部署，各司其职</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>longhorn备份</title>
      <link>https://docs.lizili.online/cloud-native/backup/longhorn-backup.html</link>
      <guid>https://docs.lizili.online/cloud-native/backup/longhorn-backup.html</guid>
      <source url="https://docs.lizili.online/rss.xml">longhorn备份</source>
      <description>前置准备 集群内安装minio，并上传文件，模拟业务应用 集群外搭建minio 作为longhorn 备份的存储服务 集群内安装minio 此minio用作模拟业务应用使用 安装参考： Bitnami Minio miniominio 集群外安装minio 此minio用以作为备份的存储使用 添加secret 这个secret的ns需要和longhor...</description>
      <category>云原生</category>
      <pubDate>Wed, 20 Sep 2023 08:34:13 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>前置准备</h2>
<ol>
<li>集群内安装minio，并上传文件，模拟业务应用</li>
<li>集群外搭建minio 作为longhorn 备份的存储服务</li>
</ol>
<h3>集群内安装minio</h3>
<p>此minio用作模拟业务应用使用 安装参考： <a href="https://github.com/bitnami/charts/tree/main/bitnami/minio" target="_blank" rel="noopener noreferrer">Bitnami Minio</a></p>
<figure><figcaption>minio</figcaption></figure>
<h3>集群外安装minio</h3>
<p>此minio用以作为备份的存储使用</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">docker</span><span style="color:#98C379;--shiki-dark:#98C379"> run</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> 9000:9000</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> 9001:9001</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     --net=host</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     --name</span><span style="color:#98C379;--shiki-dark:#98C379"> minio</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     -v</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $PWD</span><span style="color:#98C379;--shiki-dark:#98C379">/data:/data</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     -v</span><span style="color:#E06C75;--shiki-dark:#E06C75"> $PWD</span><span style="color:#98C379;--shiki-dark:#98C379">/config:/root/.minio</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     -d</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --restart=always</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     -e</span><span style="color:#98C379;--shiki-dark:#98C379"> "MINIO_ACCESS_KEY=admin"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">     -e</span><span style="color:#98C379;--shiki-dark:#98C379"> "MINIO_SECRET_KEY=Passw0rd"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">     minio/minio:RELEASE.2021-11-09T03-21-45Z</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">     server</span><span style="color:#98C379;--shiki-dark:#98C379"> /data</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --console-address</span><span style="color:#98C379;--shiki-dark:#98C379"> ":9001"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -address</span><span style="color:#98C379;--shiki-dark:#98C379"> ":9000"</span></span></code></pre>
</div><h3>添加secret</h3>
<p>这个secret的ns需要和longhorn保持一致</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> secret</span><span style="color:#98C379;--shiki-dark:#98C379"> generic</span><span style="color:#98C379;--shiki-dark:#98C379"> minio-secret</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">    --from-literal=AWS_ACCESS_KEY_ID=admin</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">    --from-literal=AWS_SECRET_ACCESS_KEY=Passw0rd</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">    --from-literal=AWS_ENDPOINTS=http://xxxxxx:9000</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">  \</span></span>
<span class="line"><span style="color:#D19A66;--shiki-dark:#D19A66">    -n</span><span style="color:#98C379;--shiki-dark:#98C379"> longhorn-system</span></span></code></pre>
</div><h2>备份</h2>
<ol>
<li>
<p>集群外minio，创建备份存放的bucket 如: <code>longhorn</code></p>
</li>
<li>
<p>longhorn 关联S3 服务</p>
</li>
</ol>
<figure><figcaption>longhorn设置</figcaption></figure>
<ol start="3">
<li>模拟业务使用，上传文件到 集群内minio 服务中</li>
</ol>
<figure><figcaption>文件上传</figcaption></figure>
<ol start="4">
<li>备份</li>
</ol>
<figure><figcaption>备份</figcaption></figure>
<figure><figcaption>label</figcaption></figure>
<h2>恢复</h2>
<ol>
<li>删除集群内的minio服务，并清空volume。模拟数据丢失</li>
</ol>
<figure><figcaption>卸载应用</figcaption></figure>
<ol start="2">
<li>将备份数据转换为 恢复卷</li>
</ol>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<ol start="3">
<li>激活恢复卷</li>
</ol>
<figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<ol start="4">
<li>挂载volume</li>
</ol>
<figure><figcaption>挂载已存在的卷</figcaption></figure>
<h2>定时备份</h2>
<p>入口一 为创建定时任务<br>
入口二 可关联定时任务，也可创建定时任务</p>
<figure><figcaption>定时任务</figcaption></figure>
<h2>扩容</h2>
<ol>
<li>根据应用容器找到对应的PVC</li>
<li>将容器副本数设置为0，使PVC处于未分配模式</li>
<li>修改申请磁盘空间（限制只能扩容不能缩容）</li>
<li>恢复容器副本数，使PVC处于分配模式，重新挂载</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>k8s namespace 强删</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/delete-k8s-namespace-force.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/delete-k8s-namespace-force.html</guid>
      <source url="https://docs.lizili.online/rss.xml">k8s namespace 强删</source>
      <description>导出 修改 代理 删除 🙏 希望不要用到</description>
      <category>云原生</category>
      <pubDate>Wed, 16 Aug 2023 08:06:10 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>导出</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span><span style="color:#98C379;--shiki-dark:#98C379"> namespace</span><span style="color:#98C379;--shiki-dark:#98C379"> ingress-nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> json</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">nginx.json</span></span></code></pre>
</div><h2>修改</h2>
<figure><figcaption></figcaption></figure>
<h2>代理</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> proxy</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --port=8081</span></span></code></pre>
</div><h2>删除</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -k</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -H</span><span style="color:#98C379;--shiki-dark:#98C379"> "Content-Type: application/json"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -X</span><span style="color:#98C379;--shiki-dark:#98C379"> PUT</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --data-binary</span><span style="color:#98C379;--shiki-dark:#98C379"> @nginx.json</span><span style="color:#98C379;--shiki-dark:#98C379"> http://127.0.0.1:8081/api/v1/namespaces/ingress-nginx/finalize</span></span></code></pre>
</div><p>🙏 希望不要用到</p>
]]></content:encoded>
    </item>
    <item>
      <title>Velero 云原生备份</title>
      <link>https://docs.lizili.online/cloud-native/backup/velero.html</link>
      <guid>https://docs.lizili.online/cloud-native/backup/velero.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Velero 云原生备份</source>
      <description>Velero 云原生的灾难恢复和迁移工具，可将集群中的数据，备份到对象存储中（本地使用minio），在需要的时候进行恢复，也可以用来做集群环境的迁移 工作流程 How Velero Works 官方图官方图 velero 主要包含两部分 部署在集群上的服务端 部署在管控机的客户端 备份流程 客户端发送指令，如 velero backup create ...</description>
      <category>云原生</category>
      <pubDate>Fri, 11 Aug 2023 09:52:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>Velero 云原生的灾难恢复和迁移工具，可将集群中的数据，备份到对象存储中（本地使用minio），在需要的时候进行恢复，也可以用来做集群环境的迁移</p>
<h2>工作流程</h2>
<p><a href="https://velero.io/docs/v1.11/how-velero-works/" target="_blank" rel="noopener noreferrer">How Velero Works</a></p>
<figure><figcaption>官方图</figcaption></figure>
<p>velero 主要包含两部分</p>
<ul>
<li>部署在集群上的服务端</li>
<li>部署在管控机的客户端</li>
</ul>
<h3>备份流程</h3>
<ul>
<li>客户端发送指令，如 velero backup create test-backup</li>
<li>调用 Kubernetes API 服务器来创建一个 Backup 对象。</li>
<li>BackupController 通知新对象Backup 开始备份过程。</li>
<li>BackupController 开始备份过程。查询 API 资源来收集备份数据。</li>
<li>BackupController 调用对象存储服务（如 AWS S3）上传备份文件。</li>
</ul>
<h2>velero 特性</h2>
<ul>
<li>集群数据备份和恢复</li>
<li>迁移集群的资源到其他集群</li>
<li>将生产集群复制到开发和测试集群</li>
</ul>
<h2>存储支持</h2>
<p><mark>BackupStorageLocation</mark>: 用来定义 Kubernetes 集群资源的数据存放位置，也就是集群对象数据，不是 PVC 的数据。主要支持的后端存储是 S3 兼容的存储，比如：Mino 和阿里云 OSS 等。</p>
<p><mark>VolumeSnapshotLocation</mark>: 主要用来给 PV 做快照，需要云提供商提供插件。阿里云已经提供了插件，这个需要使用 CSI 等存储机制。你也可以使用专门的备份工具 <mark>Restic</mark>，把 PV 数据备份到阿里云 OSS 中去(安装时需要自定义选项)。</p>
<p><mark>Restic</mark> 是一款 GO 语言开发的数据加密备份工具，支持的仓库有 Local、SFTP、Aws S3、Minio、OpenStack Swift、Backblaze B2、Azure BS、Google Cloud storage、Rest Server。</p>
<p>项目地址：<a href="https://github.com/restic/restic" target="_blank" rel="noopener noreferrer">https://github.com/restic/restic</a></p>
<h2>前置准备</h2>
<h3>集群(兼容)信息</h3>
<p><a href="https://github.com/vmware-tanzu/velero#velero-compatibility-matrix" target="_blank" rel="noopener noreferrer">兼容列表</a></p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> version</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --output</span><span style="color:#98C379;--shiki-dark:#98C379"> json</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  "clientVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "major"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "1",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "minor"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "24",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "v1.24.2",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitCommit"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "f66044f4361b9f1f96f0053dd46cb7dce5e990a8",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitTreeState"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "clean",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "buildDate"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "2022-06-15T14:22:29Z",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "goVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "go1.18.3",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "compiler"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "gc",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "platform"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "darwin/arm64"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  "kustomizeVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "v4.5.4",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  "serverVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "major"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "1",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "minor"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "24",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "v1.24.4",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitCommit"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "95ee5ab382d64cfe6c28967f36b53970b8374491",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "gitTreeState"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "clean",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "buildDate"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "2022-08-17T18:47:37Z",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "goVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "go1.18.5",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "compiler"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "gc",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "platform"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "linux/amd64"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装velero 客户端</h3>
<p>方式一 macos</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span></span></code></pre>
</div><p>方式二</p>
<p><a href="https://github.com/vmware-tanzu/velero/releases/tag/v1.11.1" target="_blank" rel="noopener noreferrer">git releases page</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -xvf</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">RELEASE-TARBALL-NAM</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">E&gt;</span><span style="color:#98C379;--shiki-dark:#98C379">.tar.gz</span></span></code></pre>
</div><h3>安装minio</h3>
<p>略</p>
<h3>创建bucket</h3>
<p>web界面或其他方式</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mc</span><span style="color:#98C379;--shiki-dark:#98C379"> mb</span><span style="color:#98C379;--shiki-dark:#98C379"> local/velero</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<h3>安装velero 服务端</h3>
<p>minio凭证</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">.credentials-velero</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &lt;&lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">[default]</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">aws_access_key_id = username</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">aws_secret_access_key = password</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">EOF</span></span></code></pre>
</div><p><a href="https://github.com/vmware-tanzu/helm-charts/blob/main/charts/velero/README.md" target="_blank" rel="noopener noreferrer">helm chart</a></p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> vmware-tanzu</span><span style="color:#98C379;--shiki-dark:#98C379"> https://vmware-tanzu.github.io/helm-charts</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> vmware-tanzu/velero</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--namespace </span><span style="color:#98C379;--shiki-dark:#98C379">velero</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--create-namespace </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set-file </span><span style="color:#98C379;--shiki-dark:#98C379">credentials.secretContents.cloud=./credentials-velero</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].name=default</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].provider=aws</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].bucket=velero</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].config.region=minio</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].config.s3ForcePathStyle=</span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.backupStorageLocation[0].config.s3Url=http://jkstack-minio.middleware.svc.cluster.local:9000</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">configuration.defaultVolumesToFsBackup=</span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">snapshotsEnabled=</span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">deployNodeAgent=</span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">initContainers[0].name=velero-plugin-for-aws</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">initContainers[0].image=velero/velero-plugin-for-aws:latest</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">initContainers[0].imagePullPolicy=IfNotPresent</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">initContainers[0].volumeMounts[0].mountPath=/target</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--set </span><span style="color:#98C379;--shiki-dark:#98C379">initContainers[0].volumeMounts[0].name=plugins</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><figure><figcaption></figcaption></figure>
<p>客户端已连上服务端，并查询和返回了版本信息</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> version</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Client:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">	Version:</span><span style="color:#98C379;--shiki-dark:#98C379"> v1.10.0</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">	Git</span><span style="color:#98C379;--shiki-dark:#98C379"> commit:</span><span style="color:#98C379;--shiki-dark:#98C379"> -</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Server:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">	Version:</span><span style="color:#98C379;--shiki-dark:#98C379"> v1.11.1</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># WARNING: the client version does not match the server version. Please update client</span></span></code></pre>
</div><h2>备份</h2>
<p><a href="https://velero.io/docs/v1.11/examples/" target="_blank" rel="noopener noreferrer">官方示例</a></p>
<p><a href="https://velero.io/docs/v1.11/backup-reference/" target="_blank" rel="noopener noreferrer">备份参考</a></p>
<p>新建了个mysql，并创建了个db</p>
<h3>创建备份</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> mysql-backup</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --include-namespaces</span><span style="color:#98C379;--shiki-dark:#98C379"> velero-mysql</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --wait</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Backup</span><span style="color:#98C379;--shiki-dark:#98C379"> request</span><span style="color:#98C379;--shiki-dark:#98C379"> "mysql-backup"</span><span style="color:#98C379;--shiki-dark:#98C379"> submitted</span><span style="color:#98C379;--shiki-dark:#98C379"> successfully.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Waiting</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> complete.</span><span style="color:#98C379;--shiki-dark:#98C379"> You</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> safely</span><span style="color:#98C379;--shiki-dark:#98C379"> press</span><span style="color:#98C379;--shiki-dark:#98C379"> ctrl-c</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> stop</span><span style="color:#98C379;--shiki-dark:#98C379"> waiting</span><span style="color:#98C379;--shiki-dark:#98C379"> -</span><span style="color:#98C379;--shiki-dark:#98C379"> your</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> will</span><span style="color:#98C379;--shiki-dark:#98C379"> continue</span><span style="color:#98C379;--shiki-dark:#98C379"> in</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> background.</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">.......</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Backup</span><span style="color:#98C379;--shiki-dark:#98C379"> completed</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> status:</span><span style="color:#98C379;--shiki-dark:#98C379"> Finalizing.</span><span style="color:#98C379;--shiki-dark:#98C379"> You</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> check</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> more</span><span style="color:#98C379;--shiki-dark:#98C379"> information</span><span style="color:#98C379;--shiki-dark:#98C379"> using</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> commands</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> backup describe mysql-backup`</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> and</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> backup logs mysql-backup`</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">.</span></span></code></pre>
</div><h3>模拟故障</h3>
<p>直接把服务删除了</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> helm</span><span style="color:#98C379;--shiki-dark:#98C379"> uninstall</span><span style="color:#98C379;--shiki-dark:#98C379"> velero-mysql</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> velero-mysql</span></span></code></pre>
</div><h3>恢复备份</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> restore</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --from-backup</span><span style="color:#98C379;--shiki-dark:#98C379"> mysql-backup</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --wait</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Restore</span><span style="color:#98C379;--shiki-dark:#98C379"> request</span><span style="color:#98C379;--shiki-dark:#98C379"> "mysql-backup-20230811165240"</span><span style="color:#98C379;--shiki-dark:#98C379"> submitted</span><span style="color:#98C379;--shiki-dark:#98C379"> successfully.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Waiting</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> restore</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> complete.</span><span style="color:#98C379;--shiki-dark:#98C379"> You</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> safely</span><span style="color:#98C379;--shiki-dark:#98C379"> press</span><span style="color:#98C379;--shiki-dark:#98C379"> ctrl-c</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> stop</span><span style="color:#98C379;--shiki-dark:#98C379"> waiting</span><span style="color:#98C379;--shiki-dark:#98C379"> -</span><span style="color:#98C379;--shiki-dark:#98C379"> your</span><span style="color:#98C379;--shiki-dark:#98C379"> restore</span><span style="color:#98C379;--shiki-dark:#98C379"> will</span><span style="color:#98C379;--shiki-dark:#98C379"> continue</span><span style="color:#98C379;--shiki-dark:#98C379"> in</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> background.</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">......................................................</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Restore</span><span style="color:#98C379;--shiki-dark:#98C379"> completed</span><span style="color:#98C379;--shiki-dark:#98C379"> with</span><span style="color:#98C379;--shiki-dark:#98C379"> status:</span><span style="color:#98C379;--shiki-dark:#98C379"> Completed.</span><span style="color:#98C379;--shiki-dark:#98C379"> You</span><span style="color:#98C379;--shiki-dark:#98C379"> may</span><span style="color:#98C379;--shiki-dark:#98C379"> check</span><span style="color:#98C379;--shiki-dark:#98C379"> for</span><span style="color:#98C379;--shiki-dark:#98C379"> more</span><span style="color:#98C379;--shiki-dark:#98C379"> information</span><span style="color:#98C379;--shiki-dark:#98C379"> using</span><span style="color:#98C379;--shiki-dark:#98C379"> the</span><span style="color:#98C379;--shiki-dark:#98C379"> commands</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> restore describe mysql-backup-20230811165240`</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> and</span><span style="color:#98C379;--shiki-dark:#98C379"> `</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> restore logs mysql-backup-20230811165240`</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">.</span></span></code></pre>
</div><figure><figcaption></figcaption></figure>
<figure><figcaption></figcaption></figure>
<p>恢复成功,数据库仍在。</p>
<h3>删除备份</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">NAME</span><span style="color:#98C379;--shiki-dark:#98C379">           STATUS</span><span style="color:#98C379;--shiki-dark:#98C379">      ERRORS</span><span style="color:#98C379;--shiki-dark:#98C379">   WARNINGS</span><span style="color:#98C379;--shiki-dark:#98C379">   CREATED</span><span style="color:#98C379;--shiki-dark:#98C379">                         EXPIRES</span><span style="color:#98C379;--shiki-dark:#98C379">   STORAGE</span><span style="color:#98C379;--shiki-dark:#98C379"> LOCATION</span><span style="color:#98C379;--shiki-dark:#98C379">   SELECTOR</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mysql-backup</span><span style="color:#98C379;--shiki-dark:#98C379">   Completed</span><span style="color:#D19A66;--shiki-dark:#D19A66">   0</span><span style="color:#D19A66;--shiki-dark:#D19A66">        0</span><span style="color:#98C379;--shiki-dark:#98C379">          2023-08-11</span><span style="color:#98C379;--shiki-dark:#98C379"> 16:29:53</span><span style="color:#98C379;--shiki-dark:#98C379"> +0800</span><span style="color:#98C379;--shiki-dark:#98C379"> CST</span><span style="color:#98C379;--shiki-dark:#98C379">   29d</span><span style="color:#98C379;--shiki-dark:#98C379">       default</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">            &lt;</span><span style="color:#98C379;--shiki-dark:#98C379">non</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">e&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span><span style="color:#98C379;--shiki-dark:#98C379"> velero</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> delete</span><span style="color:#98C379;--shiki-dark:#98C379"> mysql-backup</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Are</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> sure</span><span style="color:#98C379;--shiki-dark:#98C379"> you</span><span style="color:#98C379;--shiki-dark:#98C379"> want</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> continue</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (Y/N)? y</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Request</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> delete</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> "mysql-backup"</span><span style="color:#98C379;--shiki-dark:#98C379"> submitted</span><span style="color:#98C379;--shiki-dark:#98C379"> successfully.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">The</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> will</span><span style="color:#98C379;--shiki-dark:#98C379"> be</span><span style="color:#98C379;--shiki-dark:#98C379"> fully</span><span style="color:#98C379;--shiki-dark:#98C379"> deleted</span><span style="color:#98C379;--shiki-dark:#98C379"> after</span><span style="color:#98C379;--shiki-dark:#98C379"> all</span><span style="color:#98C379;--shiki-dark:#98C379"> associated</span><span style="color:#98C379;--shiki-dark:#98C379"> data</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (disk </span><span style="color:#98C379;--shiki-dark:#98C379">snapshots,</span><span style="color:#98C379;--shiki-dark:#98C379"> backup</span><span style="color:#98C379;--shiki-dark:#98C379"> files,</span><span style="color:#98C379;--shiki-dark:#98C379"> restores</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) are removed.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">❯</span></span></code></pre>
</div><h2>定时备份</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># Create a backup every 6 hours</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> schedule</span><span style="color:#98C379;--shiki-dark:#98C379"> NAME</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --schedule=</span><span style="color:#98C379;--shiki-dark:#98C379">"0 */6 * * *"</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># every day or weekly</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> schedule</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> NAME</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --schedule=</span><span style="color:#98C379;--shiki-dark:#98C379">"30 09 * * *"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> schedule</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> NAME</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --schedule=</span><span style="color:#98C379;--shiki-dark:#98C379">"30 10 * * 0"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --include-cluster-resources=true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">velero</span><span style="color:#98C379;--shiki-dark:#98C379"> schedule</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> NAME</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --include-namespaces</span><span style="color:#98C379;--shiki-dark:#98C379"> NS</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --schedule</span><span style="color:#98C379;--shiki-dark:#98C379"> "0 8 * * *"</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>验证码识别-ddddocr</title>
      <link>https://docs.lizili.online/coder/ops/ddddocr.html</link>
      <guid>https://docs.lizili.online/coder/ops/ddddocr.html</guid>
      <source url="https://docs.lizili.online/rss.xml">验证码识别-ddddocr</source>
      <description>没事搞什么爬虫。还好带带弟弟OCR，救了命了 ONNX MacOS M1 需安装 onnxruntime DDDDOR 使用 报错 AttributeError: module &amp;apos;PIL.Image&amp;apos; has no attribute &amp;apos;ANTIALIAS&amp;apos; 新版本的 ANTIALIAS 已经被移除, 退版本即可 pip install Pillow=...</description>
      <pubDate>Mon, 07 Aug 2023 03:18:03 GMT</pubDate>
      <content:encoded><![CDATA[
<p>没事搞什么爬虫。还好带带弟弟OCR，救了命了</p>
<h2>ONNX</h2>
<p>MacOS M1 需安装 onnxruntime</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> onnxruntime</span></span></code></pre>
</div><h2>DDDDOR</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">pip</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> https://pypi.tuna.tsinghua.edu.cn/simple</span><span style="color:#98C379;--shiki-dark:#98C379"> ddddocr</span></span></code></pre>
</div><h2>使用</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">import</span><span style="color:#98C379;--shiki-dark:#98C379"> ddddocr</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ocr</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> ddddocr.DdddOcr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">show_ad</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">False</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">with</span><span style="color:#98C379;--shiki-dark:#98C379"> open</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">"test.png"</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">,</span><span style="color:#98C379;--shiki-dark:#98C379"> 'rb'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#98C379;--shiki-dark:#98C379">as</span><span style="color:#98C379;--shiki-dark:#98C379"> f:</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    image</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> f.read</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">res</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> ocr.classification</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">image</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">print</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">res</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span></code></pre>
</div><p>报错</p>
<blockquote>
<p>AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'</p>
</blockquote>
<p>新版本的 <code>ANTIALIAS</code> 已经被移除, 退版本即可 <code>pip install Pillow==9.5.0</code></p>
<h2>训练</h2>
<h3>PyTorch安装</h3>
<p><a href="https://pytorch.org/get-started/locally/" target="_blank" rel="noopener noreferrer">PyTorch 官方</a> 查看自己支持的版本</p>
<h3>dddd_trainer</h3>
<p>安装<code>dddd_trainer</code>, 并初始化。 <a href="https://github.com/sml2h3/dddd_trainer" target="_blank" rel="noopener noreferrer">参考官方Github</a>, 已经很详细了</p>
<h3>命令</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> app.py</span><span style="color:#98C379;--shiki-dark:#98C379"> create</span><span style="color:#98C379;--shiki-dark:#98C379"> ztest</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> app.py</span><span style="color:#98C379;--shiki-dark:#98C379"> cache</span><span style="color:#98C379;--shiki-dark:#98C379"> ztest</span><span style="color:#98C379;--shiki-dark:#98C379"> /opt/dddd-ocr/images_set</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">python</span><span style="color:#98C379;--shiki-dark:#98C379"> app.py</span><span style="color:#98C379;--shiki-dark:#98C379"> train</span><span style="color:#98C379;--shiki-dark:#98C379"> ztest</span></span></code></pre>
</div><p>当你出现如下错误的时候，可能是样本数据太少导致的。</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Read</span><span style="color:#98C379;--shiki-dark:#98C379"> Cache</span><span style="color:#98C379;--shiki-dark:#98C379"> File</span><span style="color:#98C379;--shiki-dark:#98C379"> End!</span><span style="color:#98C379;--shiki-dark:#98C379"> Caches</span><span style="color:#98C379;--shiki-dark:#98C379"> Num</span><span style="color:#98C379;--shiki-dark:#98C379"> is</span><span style="color:#98C379;--shiki-dark:#98C379"> 4.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">2023-08-04</span><span style="color:#98C379;--shiki-dark:#98C379"> 15:23:28.176</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">INFO</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">     | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">utils.load_cache:__init__:25</span><span style="color:#98C379;--shiki-dark:#98C379"> -</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Reading</span><span style="color:#98C379;--shiki-dark:#98C379"> Cache</span><span style="color:#98C379;--shiki-dark:#98C379"> File...</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>you-get下载</title>
      <link>https://docs.lizili.online/tools/you-get.html</link>
      <guid>https://docs.lizili.online/tools/you-get.html</guid>
      <source url="https://docs.lizili.online/rss.xml">you-get下载</source>
      <description>介绍 you-get是一个开源的命令行工具,用于从网络上下载视频、音频和图片 （claude ai） 官网you-get MacOS平台，其他方式查看官网。 我通常用来下载Bilibili的视频 安装 you-get ffmpeg 官方： ffmpeg is a required dependency, for downloading and join...</description>
      <category>效率</category>
      <pubDate>Wed, 26 Jul 2023 08:33:02 GMT</pubDate>
      <content:encoded><![CDATA[<h2>介绍</h2>
<blockquote>
<p>you-get是一个开源的命令行工具,用于从网络上下载视频、音频和图片 （claude ai）</p>
</blockquote>
<p><a href="https://you-get.org/" target="_blank" rel="noopener noreferrer">官网you-get</a></p>
<p>MacOS平台，其他方式查看官网。 我通常用来下载Bilibili的视频</p>
<h2>安装</h2>
<h3>you-get</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> you-get</span></span></code></pre>
</div><h3>ffmpeg</h3>
<blockquote>
<p>官方： ffmpeg is a required dependency, for downloading and joining videos streamed in multiple parts (e.g. on some sites like Youku), and for YouTube videos of 1080p or high resolution.</p>
</blockquote>
<p>所以，建议安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> ffmpeg</span></span></code></pre>
</div><h2>操作</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">you-get</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -h</span></span></code></pre>
</div><div class="language- line-numbers-mode" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>you-get: version 0.4.1555, a tiny downloader that scrapes the web.</span></span>
<span class="line"><span>usage: you-get [OPTION]... URL...</span></span>
<span class="line"><span></span></span>
<span class="line"><span>A tiny downloader that scrapes the web</span></span>
<span class="line"><span></span></span>
<span class="line"><span>options:</span></span>
<span class="line"><span>  -V, --version         Print version and exit</span></span>
<span class="line"><span>  -h, --help            Print this help message and exit</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Dry-run options:</span></span>
<span class="line"><span>  (no actual downloading)</span></span>
<span class="line"><span></span></span>
<span class="line"><span>  -i, --info            Print extracted information</span></span>
<span class="line"><span>  -u, --url             Print extracted information with URLs</span></span>
<span class="line"><span>  --json                Print extracted URLs in JSON format</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Download options:</span></span>
<span class="line"><span>  -n, --no-merge        Do not merge video parts</span></span>
<span class="line"><span>  --no-caption          Do not download captions (subtitles, lyrics, danmaku, ...)</span></span>
<span class="line"><span>  -f, --force           Force overwriting existing files</span></span>
<span class="line"><span>  --skip-existing-file-size-check</span></span>
<span class="line"><span>                        Skip existing file without checking file size</span></span>
<span class="line"><span>  -F STREAM_ID, --format STREAM_ID</span></span>
<span class="line"><span>                        Set video format to STREAM_ID</span></span>
<span class="line"><span>  -O FILE, --output-filename FILE</span></span>
<span class="line"><span>                        Set output filename</span></span>
<span class="line"><span>  -o DIR, --output-dir DIR</span></span>
<span class="line"><span>                        Set output directory</span></span>
<span class="line"><span>  -p PLAYER, --player PLAYER</span></span>
<span class="line"><span>                        Stream extracted URL to a PLAYER</span></span>
<span class="line"><span>  -c COOKIES_FILE, --cookies COOKIES_FILE</span></span>
<span class="line"><span>                        Load cookies.txt or cookies.sqlite</span></span>
<span class="line"><span>  -t SECONDS, --timeout SECONDS</span></span>
<span class="line"><span>                        Set socket timeout</span></span>
<span class="line"><span>  -d, --debug           Show traceback and other debug info</span></span>
<span class="line"><span>  -I FILE, --input-file FILE</span></span>
<span class="line"><span>                        Read non-playlist URLs from FILE</span></span>
<span class="line"><span>  -P PASSWORD, --password PASSWORD</span></span>
<span class="line"><span>                        Set video visit password to PASSWORD</span></span>
<span class="line"><span>  -l, --playlist        Prefer to download a playlist</span></span>
<span class="line"><span>  -a, --auto-rename     Auto rename same name different files</span></span>
<span class="line"><span>  -k, --insecure        ignore ssl errors</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Playlist optional options:</span></span>
<span class="line"><span>  --first FIRST         the first number</span></span>
<span class="line"><span>  --last LAST           the last number</span></span>
<span class="line"><span>  --size PAGE_SIZE, --page-size PAGE_SIZE</span></span>
<span class="line"><span>                        the page size number</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Proxy options:</span></span>
<span class="line"><span>  -x HOST:PORT, --http-proxy HOST:PORT</span></span>
<span class="line"><span>                        Use an HTTP proxy for downloading</span></span>
<span class="line"><span>  -y HOST:PORT, --extractor-proxy HOST:PORT</span></span>
<span class="line"><span>                        Use an HTTP proxy for extracting only</span></span>
<span class="line"><span>  --no-proxy            Never use a proxy</span></span>
<span class="line"><span>  -s HOST:PORT or USERNAME:PASSWORD@HOST:PORT, --socks-proxy HOST:PORT or USERNAME:PASSWORD@HOST:PORT</span></span>
<span class="line"><span>                        Use an SOCKS5 proxy for downloading</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>下载</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">you-get</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> 网址URL</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">   #查看视频的信息包括：格式、画质、大小等</span></span></code></pre>
</div><p>单个视频下载</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">you-get</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --format=dash-flv480</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/Download/xxx</span><span style="color:#98C379;--shiki-dark:#98C379">  https://www.bilibili.com/xxxxxx</span></span></code></pre>
</div><p>列表下载</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">you-get</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --format=dash-flv480</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/Download/xxx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -l</span><span style="color:#98C379;--shiki-dark:#98C379"> https://www.bilibili.com/video/BV1xxxxxxxx</span></span></code></pre>
</div><p>列表-单个视频下载</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">you-get</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --format=flv360</span><span style="color:#98C379;--shiki-dark:#98C379"> https://www.bilibili.com/xxxxx?p=x</span><span style="color:#98C379;--shiki-dark:#98C379"> （第几个视频，x就是几）</span></span></code></pre>
</div><h2>更新</h2>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">brew</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#98C379;--shiki-dark:#98C379"> you-get</span><span style="color:#98C379;--shiki-dark:#98C379"> ffmpeg</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>goroutine</title>
      <link>https://docs.lizili.online/coder/code/Golang/goroutine.html</link>
      <guid>https://docs.lizili.online/coder/code/Golang/goroutine.html</guid>
      <source url="https://docs.lizili.online/rss.xml">goroutine</source>
      <description>以下引于 claude.ai goroutine是Go语言中的轻量级线程。具体来说,goroutine有以下几个主要特征: goroutine由Go运行时(runtime)管理,可以实现高度的并发。一个程序可以同时运行成千上万个goroutine。 goroutine之间通过channel进行通信。channel使得不同goroutine之间可以安全地...</description>
      <pubDate>Wed, 26 Jul 2023 07:31:48 GMT</pubDate>
      <content:encoded><![CDATA[
<blockquote>
<p>以下引于 <a href="http://claude.ai" target="_blank" rel="noopener noreferrer">claude.ai</a></p>
</blockquote>
<p>goroutine是Go语言中的轻量级线程。具体来说,goroutine有以下几个主要特征:</p>
<ol>
<li>goroutine由Go运行时(runtime)管理,可以实现高度的并发。一个程序可以同时运行成千上万个goroutine。</li>
<li>goroutine之间通过channel进行通信。channel使得不同goroutine之间可以安全地共享内存。</li>
<li>创建goroutine的代价非常小。因为goroutine的堆栈起始很小(仅2KB),所以可以很容易地创建很多goroutine。</li>
<li>goroutine使用协作式调度(cooperative scheduling),多个goroutine可以在一个或几个操作系统线程上执行。Go运行时内部使用自举调度器在goroutine之间快速切换。</li>
<li>goroutine通信安全。通信和内存同步都隐式实现,不需加锁。<br>
总之,goroutine作为Go并发的核心,使得编写并发程序变得简单、高效。它独特的设计对Go语言的高并发性能起到关键作用。</li>
</ol>
<h2>创建goroutine</h2>
<p><code>go</code> ，只要在函数前添加它，就实现了并发。</p>
<div class="language-go line-numbers-mode" data-ext="go" data-title="go"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">package</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> main</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">	"fmt"</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">	"time"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">func</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> SubTask</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	for</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">		fmt</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Println</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Now</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">().</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">"15:04:05"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">), </span><span style="color:#98C379;--shiki-dark:#98C379">"this is a SubTask"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">		time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Sleep</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#D19A66;--shiki-dark:#D19A66">5</span><span style="color:#C678DD;--shiki-dark:#C678DD"> *</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 100</span><span style="color:#C678DD;--shiki-dark:#C678DD"> *</span><span style="color:#E06C75;--shiki-dark:#E06C75"> time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">Millisecond</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 延迟0.5s</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">func</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> main</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	go</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> SubTask</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">//创建一个协程</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">	time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Sleep</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">Second</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">) </span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 延迟1s</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">	fmt</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Println</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#E06C75;--shiki-dark:#E06C75">time</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Now</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">().</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Format</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">"15:04:05"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">), </span><span style="color:#98C379;--shiki-dark:#98C379">"this is a main goroutine"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><figure><figcaption></figcaption></figure>
<p>这里就可以到一个问题，虽然<code>SubTask</code>是个循环，但是<code>main</code>执行完毕的时候，它也就结束了。所以这里需要注意，<mark>当主协程结束的时候，子协程也会退出</mark>。那我们做并行的时候，一定要注意这种关系</p>
<p>如何保证子协程执行完毕，主协程再退出呢？</p>
<h2>runtime</h2>
<h3>Gosched</h3>
<blockquote>
<p>以下引于 <a href="http://claude.ai" target="_blank" rel="noopener noreferrer">claude.ai</a></p>
</blockquote>
<p>gosched()是一个Go运行时(runtime)提供的函数,它允许当前goroutine主动放弃CPU,将CPU时间片让给其他可运行的goroutine。</p>
<p>具体来说,gosched()函数有以下几个主要作用:</p>
<ol>
<li>将CPU时间片让给同一物理线程上的其他goroutine运行。因为Go运行时会对goroutine进行合理调度,所以一个线程上可能有多个goroutine在运行。gosched()可以在适当的时候放弃时间片,避免goroutine独占CPU。</li>
<li>当缺少goroutine可运行时,它允许运行时内核线程安全地寻找其他物理线程上的可运行goroutine。如果找到,可以提前恢复已阻塞的goroutine,并为其分配CPU时间。</li>
<li>在多核环境下,它也可以触发work-stealing算法,让处于空闲的线程帮助正在执行的线程,提高多核CPU的利用率。</li>
<li>最后,gosched()还可以作为runtime内部算法的一部分,帮助对goroutine、线程进行优化管理。<br>
所以,gosched()对Go并发程序的性能优化是非常重要的。使用它可以达到更高的CPU利用率,最小化线程阻塞,优化goroutine执行。</li>
</ol>
<div class="language-go line-numbers-mode" data-ext="go" data-title="go"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">package</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> main</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">import</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">	"fmt"</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">func</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> main</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	go</span><span style="color:#C678DD;--shiki-dark:#C678DD"> func</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">		for</span><span style="color:#E06C75;--shiki-dark:#E06C75"> i</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> :=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#E06C75;--shiki-dark:#E06C75">i</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> &lt;</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 3</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#E06C75;--shiki-dark:#E06C75">i</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">++</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">			fmt</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Println</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">"goroutine..."</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">		}</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	}()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">	for</span><span style="color:#E06C75;--shiki-dark:#E06C75"> i</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> :=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#E06C75;--shiki-dark:#E06C75">i</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> &lt;</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">; </span><span style="color:#E06C75;--shiki-dark:#E06C75">i</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">++</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">		//runtime.Gosched()</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">		fmt</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">Println</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">(</span><span style="color:#98C379;--shiki-dark:#98C379">"hello main"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">	}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>子协程要么没执行，要么顺序是乱的</p>
<figure><figcaption>无Gosched</figcaption></figure>
<p>按预期执行</p>
<figure><figcaption>Gosched</figcaption></figure>
]]></content:encoded>
    </item>
    <item>
      <title>k8sGPT</title>
      <link>https://docs.lizili.online/cloud-native/kubernetes/k8sGPT.html</link>
      <guid>https://docs.lizili.online/cloud-native/kubernetes/k8sGPT.html</guid>
      <source url="https://docs.lizili.online/rss.xml">k8sGPT</source>
      <description>扫描 Kubernetes 集群、诊断和分类问题的工具,通过 AI 进行的问题诊断。 local ai部署 如果openai可以用的话，可以不安装 官方 run-localai-in-kubernetes 添加helm repo 安装local ai 方法1: 模型下载模型下载 这个下载过程比较慢，建议使用离线的方式 local-ai启动local-a...</description>
      <category>云原生</category>
      <pubDate>Tue, 25 Jul 2023 10:22:02 GMT</pubDate>
      <content:encoded><![CDATA[
<blockquote>
<p>扫描 Kubernetes 集群、诊断和分类问题的工具,通过 AI 进行的问题诊断。</p>
</blockquote>
<h2>local ai部署</h2>
<p>如果openai可以用的话，可以不安装</p>
<p><a href="https://github.com/go-skynet/LocalAI#run-localai-in-kubernetes" target="_blank" rel="noopener noreferrer">官方 run-localai-in-kubernetes</a></p>
<h3>添加helm repo</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> go-skynet</span><span style="color:#98C379;--shiki-dark:#98C379"> https://go-skynet.github.io/helm-charts/</span></span></code></pre>
</div><h3>安装local ai</h3>
<ul>
<li>方法1:</li>
</ul>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> local-ai</span><span style="color:#98C379;--shiki-dark:#98C379"> go-skynet/local-ai</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> values.yaml</span></span></code></pre>
</div><figure><figcaption>模型下载</figcaption></figure>
<p>这个下载过程比较慢，建议使用离线的方式</p>
<figure><figcaption>local-ai启动</figcaption></figure>
<ul>
<li>方法2:</li>
</ul>
<p>由于网络问题，服务器下载模型，非常慢。所以我将模型和charts都离线了，如果镜像也慢的</p>
<h4>下载charts</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> pull</span><span style="color:#98C379;--shiki-dark:#98C379"> go-skynet/local-ai</span></span></code></pre>
</div><h4>修改value</h4>
<figure><figcaption>更换模型下载地址</figcaption></figure>
<h4>安装服务</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> upgrade</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --install</span><span style="color:#98C379;--shiki-dark:#98C379"> local-ai</span><span style="color:#98C379;--shiki-dark:#98C379"> .</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> values.yaml</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> ai</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><h3>问题处理</h3>
<p><a href="https://github.com/go-skynet/LocalAI/issues/181" target="_blank" rel="noopener noreferrer">https://github.com/go-skynet/LocalAI/issues/181</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#98C379;--shiki-dark:#98C379"> http://localhost:8080/models/apply</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -H</span><span style="color:#98C379;--shiki-dark:#98C379"> "Content-Type: application/json"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -d</span><span style="color:#98C379;--shiki-dark:#98C379"> '{ "url": "github:go-skynet/model-gallery/gpt4all-j.yaml", "name": "gpt4all-j" }'</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#98C379;--shiki-dark:#98C379"> http://localhost:8080/v1/chat/completions</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -H</span><span style="color:#98C379;--shiki-dark:#98C379"> "Content-Type: application/json"</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -d</span><span style="color:#98C379;--shiki-dark:#98C379"> '{</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">     "model": "gpt4all-j",</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">     "messages": [{"role": "user", "content": "who you are"}],</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">     "temperature": 0.1</span></span>
<span class="line"><span style="color:#98C379;--shiki-dark:#98C379">   }'</span></span></code></pre>
</div><p>local ai 接口正常返回信息</p>
<figure><figcaption></figcaption></figure>
<h2>安装k8sGPT</h2>
<p><a href="https://docs.k8sgpt.ai/getting-started/in-cluster-operator/" target="_blank" rel="noopener noreferrer">官方 in-cluster-operator</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> k8sgpt</span><span style="color:#98C379;--shiki-dark:#98C379"> https://charts.k8sgpt.ai/</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> update</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">helm</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> release</span><span style="color:#98C379;--shiki-dark:#98C379"> k8sgpt/k8sgpt-operator</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> k8sgpt-operator-system</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --create-namespace</span></span></code></pre>
</div><p>集群多了两个CRD服务</p>
<figure><figcaption>crds</figcaption></figure>
<h3>部署k8sGPT resource</h3>
<div class="language-yaml" data-ext="yaml" data-title="yaml"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">apiVersion</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">core.k8sgpt.ai/v1alpha1</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">kind</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">K8sGPT</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">metadata</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  name</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">k8sgpt-local-ai</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  namespace</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ai</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">spec</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  ai</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    enabled</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">true</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    model</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">ggml-gpt4all-j</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    backend</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">localai</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">    baseUrl</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">http://local-ai.ai/v1</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  # local ai 服务地址 这个就是之前安装的服务了</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  noCache</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#D19A66;--shiki-dark:#D19A66">false</span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">  version</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">: </span><span style="color:#98C379;--shiki-dark:#98C379">v0.3.8</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> apply</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> k8sGPT.yaml</span></span></code></pre>
</div><p>安装完后的服务POD</p>
<figure><figcaption>所有的POD</figcaption></figure>
<h3>查看results</h3>
<p>没做故障模拟，所以这里就是空了</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">kubectl</span><span style="color:#98C379;--shiki-dark:#98C379"> get</span><span style="color:#98C379;--shiki-dark:#98C379"> results</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> json</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> ai</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "apiVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "v1",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "items"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [],</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "kind"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> "List",</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    "metadata"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> {</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        "resourceVersion"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#98C379;--shiki-dark:#98C379"> ""</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Nginx</title>
      <link>https://docs.lizili.online/ops/linux/Nginx.html</link>
      <guid>https://docs.lizili.online/ops/linux/Nginx.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Nginx</source>
      <description>请注意 本文内容可能已过时，请自行甄别。 安装 安装Nginx nginx默认使用80端口，请确保80未被使用 Nginx安装包 Nginx cache purge 模块(可选) 编译安装 启动 打开浏览器，访问nginx地址，出现welcome nginx则配置成功 日志格式 日志变量(log_format) 默认日志格式 可以根据自己的情况定义不同...</description>
      <category>linux</category>
      <pubDate>Sat, 22 Jul 2023 04:46:05 GMT</pubDate>
      <content:encoded><![CDATA[
<div class="hint-container warning">
<p class="hint-container-title">请注意</p>
<p>本文内容可能已过时，请自行甄别。</p>
</div>
<h2>安装</h2>
<blockquote>
<p>安装Nginx</p>
</blockquote>
<p><strong>nginx默认使用80端口，请确保80未被使用</strong></p>
<p>Nginx安装包</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> http://www.nginx.org/download/nginx-[version].tar.gz</span></span></code></pre>
</div><p>Nginx cache purge 模块(可选)</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># wget http://labs.frickle.com/files/ngx_cache_purge-[version].tar.gz</span></span></code></pre>
</div><p>编译安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">./configure</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--prefix=/usr/local/nginx-[version] </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">--with-http_stub_status_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_ssl_module </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_realip_module </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\ </span></span>
<span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">--add-module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#98C379;--shiki-dark:#98C379">../ngx_cache_purge-1.3</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># make</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># make install</span></span></code></pre>
</div><p>启动</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/nginx-[version]/sbin/nginx</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">   #启动</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/nginx-[version]/sbin/nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -t</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> #测试，检测配置</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/nginx-[version]/sbin/nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -s</span><span style="color:#98C379;--shiki-dark:#98C379"> stop</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/nginx-[version]/sbin/nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -s</span><span style="color:#98C379;--shiki-dark:#98C379"> reload</span></span></code></pre>
</div><p>打开浏览器，访问nginx地址，出现welcome nginx则配置成功</p>
<h2>日志格式</h2>
<p>日志变量(log_format)</p>
<div class="language-txt line-numbers-mode" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>$args                    #请求中的参数值</span></span>
<span class="line"><span>$query_string            #同 $args</span></span>
<span class="line"><span>$arg_NAME                #GET请求中NAME的值</span></span>
<span class="line"><span>$is_args                 #如果请求中有参数，值为"?"，否则为空字符串</span></span>
<span class="line"><span>$uri                     #请求中的当前URI(不带请求参数，参数位于$args)，可以不同于浏览器传递的$request_uri的值，它可以通过内部重定向，或者使用index指令进行修改，$uri不包含主机名，如"/foo/bar.html"。</span></span>
<span class="line"><span>$document_uri            #同 $uri</span></span>
<span class="line"><span>$document_root           #当前请求的文档根目录或别名</span></span>
<span class="line"><span>$host                    #优先级：HTTP请求行的主机名&gt;"HOST"请求头字段&gt;符合请求的服务器名.请求中的主机头字段，如果请求中的主机头不可用，则为服务器处理请求的服务器名称</span></span>
<span class="line"><span>$hostname                #主机名</span></span>
<span class="line"><span>$https                   #如果开启了SSL安全模式，值为"on"，否则为空字符串。</span></span>
<span class="line"><span>$binary_remote_addr      #客户端地址的二进制形式，固定长度为4个字节</span></span>
<span class="line"><span>$body_bytes_sent         #传输给客户端的字节数，响应头不计算在内；这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容</span></span>
<span class="line"><span>$bytes_sent              #传输给客户端的字节数</span></span>
<span class="line"><span>$connection              #TCP连接的序列号</span></span>
<span class="line"><span>$connection_requests     #TCP连接当前的请求数量</span></span>
<span class="line"><span>$content_length          #"Content-Length" 请求头字段</span></span>
<span class="line"><span>$content_type            #"Content-Type" 请求头字段</span></span>
<span class="line"><span>$cookie_name             #cookie名称</span></span>
<span class="line"><span>$limit_rate              #用于设置响应的速度限制</span></span>
<span class="line"><span>$msec                    #当前的Unix时间戳</span></span>
<span class="line"><span>$nginx_version           #nginx版本</span></span>
<span class="line"><span>$pid                     #工作进程的PID</span></span>
<span class="line"><span>$pipe                    #如果请求来自管道通信，值为"p"，否则为"."</span></span>
<span class="line"><span>$proxy_protocol_addr     #获取代理访问服务器的客户端地址，如果是直接访问，该值为空字符串</span></span>
<span class="line"><span>$realpath_root           #当前请求的文档根目录或别名的真实路径，会将所有符号连接转换为真实路径</span></span>
<span class="line"><span>$remote_addr             #客户端地址</span></span>
<span class="line"><span>$remote_port             #客户端端口</span></span>
<span class="line"><span>$remote_user             #用于HTTP基础认证服务的用户名</span></span>
<span class="line"><span>$request                 #代表客户端的请求地址</span></span>
<span class="line"><span>$request_body            #客户端的请求主体：此变量可在location中使用，将请求主体通过proxy_pass，fastcgi_pass，uwsgi_pass和scgi_pass传递给下一级的代理服务器</span></span>
<span class="line"><span>$request_body_file       #将客户端请求主体保存在临时文件中。文件处理结束后，此文件需删除。如果需要之一开启此功能，需要设置client_body_in_file_only。如果将次文件传 递给后端的代理服务器，需要禁用request body，即设置proxy_pass_request_body off，fastcgi_pass_request_body off，uwsgi_pass_request_body off，or scgi_pass_request_body off</span></span>
<span class="line"><span>$request_completion      #如果请求成功，值为"OK"，如果请求未完成或者请求不是一个范围请求的最后一部分，则为空</span></span>
<span class="line"><span>$request_filename        #当前连接请求的文件路径，由root或alias指令与URI请求生成</span></span>
<span class="line"><span>$request_length          #请求的长度 (包括请求的地址，http请求头和请求主体)</span></span>
<span class="line"><span>$request_method          #HTTP请求方法，通常为"GET"或"POST"</span></span>
<span class="line"><span>$request_time            #处理客户端请求使用的时间,单位为秒，精度毫秒； 从读入客户端的第一个字节开始，直到把最后一个字符发送给客户端后进行日志写入为止。</span></span>
<span class="line"><span>$request_uri             #这个变量等于包含一些客户端请求参数的原始URI，它无法修改，请查看$uri更改或重写URI，不包含主机名，例如："/cnphp/test.php?arg=freemouse"</span></span>
<span class="line"><span>$scheme                  #请求使用的Web协议，"http" 或 "https"</span></span>
<span class="line"><span>$server_addr             #服务器端地址，需要注意的是：为了避免访问linux系统内核，应将ip地址提前设置在配置文件中</span></span>
<span class="line"><span>$server_name             #服务器名</span></span>
<span class="line"><span>$server_port             #服务器端口</span></span>
<span class="line"><span>$server_protocol         #服务器的HTTP版本，通常为 "HTTP/1.0" 或 "HTTP/1.1"</span></span>
<span class="line"><span>$status                  #HTTP响应代码</span></span>
<span class="line"><span>$time_iso8601            #服务器时间的ISO 8610格式</span></span>
<span class="line"><span>$time_local              #服务器时间（LOG Format 格式）</span></span>
<span class="line"><span>$cookie_NAME             #客户端请求Header头中的cookie变量，前缀"$cookie_"加上cookie名称的变量，该变量的值即为cookie名称的值</span></span>
<span class="line"><span>$http_NAME               #匹配任意请求头字段；变量名中的后半部分NAME可以替换成任意请求头字段，如在配置文件中需要获取http请求头："Accept-Language"，$http_accept_language即可</span></span>
<span class="line"><span>$http_cookie</span></span>
<span class="line"><span>$http_host               #请求地址，即浏览器中你输入的地址（IP或域名）</span></span>
<span class="line"><span>$http_referer            #url跳转来源,用来记录从那个页面链接访问过来的</span></span>
<span class="line"><span>$http_user_agent         #用户终端浏览器等信息</span></span>
<span class="line"><span>$http_x_forwarded_for  #客户端地址(有反向代理时使用)</span></span>
<span class="line"><span>$sent_http_NAME          #可以设置任意http响应头字段；变量名中的后半部分NAME可以替换成任意响应头字段，如需要设置响应头Content-length，$sent_http_content_length即可</span></span>
<span class="line"><span>$sent_http_cache_control</span></span>
<span class="line"><span>$sent_http_connection</span></span>
<span class="line"><span>$sent_http_content_type</span></span>
<span class="line"><span>$sent_http_keep_alive</span></span>
<span class="line"><span>$sent_http_last_modified</span></span>
<span class="line"><span>$sent_http_location</span></span>
<span class="line"><span>$sent_http_transfer_encoding</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>默认日志格式</p>
<div class="language-txt" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '</span></span>
<span class="line"><span>                      '$status $body_bytes_sent "$http_referer" '</span></span>
<span class="line"><span>                      '"$http_user_agent";</span></span>
<span class="line"><span></span></span>
<span class="line"><span>#main为日志格式名</span></span></code></pre>
</div><p>可以根据自己的情况定义不同的log格式.然后在日志的 path后调用<br>
access_log  logs/it_access.log  main;</p>
<p>当日志文件中记录的值为"-"时，表示为空 .</p>
<h3>自定义的格式</h3>
<div class="language-txt" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>log_format logstash '$remote_addr|$http_host|$request|$http_referer|$status |$http_user_agent|$request_time|$remote_user';</span></span></code></pre>
</div><h2>lua获取请求参数</h2>
<figure><figcaption>conf</figcaption></figure>
<blockquote>
<p>下载的所有包，放在了/opt/packages目录下</p>
</blockquote>
<h3>安装依赖</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -y</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> gcc</span><span style="color:#98C379;--shiki-dark:#98C379"> gcc-c++</span><span style="color:#98C379;--shiki-dark:#98C379"> glib</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span><span style="color:#98C379;--shiki-dark:#98C379"> make</span><span style="color:#98C379;--shiki-dark:#98C379"> autoconf</span><span style="color:#98C379;--shiki-dark:#98C379"> openssl</span><span style="color:#98C379;--shiki-dark:#98C379"> openssl-devel</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">libxslt-devel </span><span style="color:#98C379;--shiki-dark:#98C379">gd</span><span style="color:#98C379;--shiki-dark:#98C379"> gd-devel</span><span style="color:#98C379;--shiki-dark:#98C379"> pcre</span><span style="color:#98C379;--shiki-dark:#98C379"> pcre-devel</span><span style="color:#98C379;--shiki-dark:#98C379">  readline-devel</span><span style="color:#98C379;--shiki-dark:#98C379">  wget</span><span style="color:#98C379;--shiki-dark:#98C379"> curl</span></span></code></pre>
</div><h3>下载安装包</h3>
<h4>nginx</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> http://nginx.org/download/nginx-1.12.2.tar.gz</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -xvf</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx-1.12.2.tar.gz</span></span></code></pre>
</div><h4>ngx_devel_kit</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#98C379;--shiki-dark:#98C379"> zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> v0.3.0.tar.gz</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 放着，一会编译ngxin时导入。</span></span></code></pre>
</div><h4>lua-nginx-module</h4>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#98C379;--shiki-dark:#98C379"> zxvf</span><span style="color:#98C379;--shiki-dark:#98C379"> v0.10.13.tar.gz</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 放着，一会编译ngxin时导入。</span></span></code></pre>
</div><h3>安装LuaJIT</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> http://luajit.org/download/LuaJIT-2.0.5.tar.gz</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -zxvf</span><span style="color:#98C379;--shiki-dark:#98C379">  LuaJIT-2.0.5.tar.gz</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">cd</span><span style="color:#98C379;--shiki-dark:#98C379"> LuaJIT-2.0.5</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> PREFIX=/usr/local/LuaJIT</span></span></code></pre>
</div><p>输出 以下内容则成功</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#98C379;--shiki-dark:#98C379">====</span><span style="color:#98C379;--shiki-dark:#98C379"> Successfully</span><span style="color:#98C379;--shiki-dark:#98C379"> installed</span><span style="color:#98C379;--shiki-dark:#98C379"> LuaJIT</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 2.0.5</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/LuaJIT</span><span style="color:#98C379;--shiki-dark:#98C379"> ====</span></span></code></pre>
</div><p>修改环境变量</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> LUAJIT_LIB</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">usr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">local</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">LuaJIT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">lib</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">export</span><span style="color:#E06C75;--shiki-dark:#E06C75"> LUAJIT_INC</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">=</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">usr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">local</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">LuaJIT</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">include</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">luajit-2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">.</span><span style="color:#E06C75;--shiki-dark:#E06C75">0</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">source</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/profile</span></span></code></pre>
</div><h3>编译安装nginx</h3>
<p>查看编译参数, 避免之前的模块路径错误</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -V</span></span></code></pre>
</div><p>新建用户，不新建，configure时取消参数--user=nginx</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">useradd</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -M</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -s</span><span style="color:#98C379;--shiki-dark:#98C379"> /sbin/nologin</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span></span></code></pre>
</div><p>编译安装</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">./configure</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --user=nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --group=nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --prefix=/usr/local/nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --with-file-aio</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_ssl_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_realip_module</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --with-http_addition_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_xslt_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_image_filter_module</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --with-http_sub_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_dav_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_flv_module</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --with-http_mp4_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_gunzip_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_gzip_static_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_auth_request_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_random_index_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_secure_link_module </span><span style="color:#D19A66;--shiki-dark:#D19A66">--with-http_degradation_module</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> \</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-http_stub_status_module </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--add-module=/opt/packages/ngx_devel_kit-0.3.0 </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">\</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">--add-module=/opt/packages/lua-nginx-module-0.10.13</span></span></code></pre>
</div><div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -j2</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span></span></code></pre>
</div><h3>测试lua</h3>
<p>修改<code>nginx.conf</code> 的<code>server</code> 添加如下</p>
<div class="language-txt" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>location /lua { </span></span>
<span class="line"><span>    default_type 'text/plain'; </span></span>
<span class="line"><span>    content_by_lua 'ngx.say("lua install success")'; </span></span>
<span class="line"><span>}</span></span></code></pre>
</div><p>重载nginx</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">nginx</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -s</span><span style="color:#98C379;--shiki-dark:#98C379"> reload</span></span></code></pre>
</div><p>请求</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">curl</span><span style="color:#98C379;--shiki-dark:#98C379"> http://127.0.0.1/lua</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># lua install success</span></span></code></pre>
</div><h3>安装 cjson</h3>
<p><mark>如果需要lua解析json，可安装此模块</mark></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">wget</span><span style="color:#98C379;--shiki-dark:#98C379"> http://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">tar</span><span style="color:#98C379;--shiki-dark:#98C379"> xvf</span><span style="color:#98C379;--shiki-dark:#98C379"> lua-cjson-2.1.0.ta.gz</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">cd</span><span style="color:#98C379;--shiki-dark:#98C379"> lua-cjson-2.1.0</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span></span></code></pre>
</div><p>如若报错如下</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cc</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -c</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -O3</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -Wall</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -pedantic</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -DNDEBUG</span><span style="color:#D19A66;--shiki-dark:#D19A66">  -I/usr/local/include</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -fpic</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -o</span><span style="color:#98C379;--shiki-dark:#98C379"> lua_cjson.o</span><span style="color:#98C379;--shiki-dark:#98C379"> lua_cjson.c</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">lua_cjson.c:43:17:</span><span style="color:#98C379;--shiki-dark:#98C379"> 致命错误：lua.h：没有那个文件或目录</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> #include &lt;lua.h&gt;</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">                 ^</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">编译中断。</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make:</span><span style="color:#E5C07B;--shiki-dark:#E5C07B"> ***</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [lua_cjson.o] 错误 1</span></span></code></pre>
</div><p>修改<code>Makefile</code> 这两处</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">PREFIX</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379">            /usr/local/LuaJIT</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">LUA_INCLUDE_DIR</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">   $(</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">PREFIX</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">)</span><span style="color:#98C379;--shiki-dark:#98C379">/include/luajit-2.0</span></span></code></pre>
</div><p>复制<code>cjson.so</code></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF"> cp</span><span style="color:#98C379;--shiki-dark:#98C379"> cjson.so</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/LuaJIT/lib/lua/5.1/</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF"> chmod</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 755</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/LuaJIT/lib/lua/5.1/cjson.so</span></span></code></pre>
</div><h3>使用lua 去rewrite路由</h3>
<div class="language-txt line-numbers-mode" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>location /ztest {</span></span>
<span class="line"><span>	# 请求体的size大于nginx配置里的client_body_buffer_size</span></span>
<span class="line"><span>	# 则会导致请求体被缓冲到磁盘临时文件里，client_body_buffer_size默认是8k或者16k</span></span>
<span class="line"><span>	# 如果考虑性能，可以使用ngx.req.get_body_file()，见后续</span></span>
<span class="line"><span>	</span></span>
<span class="line"><span>	client_max_body_size  100m ;</span></span>
<span class="line"><span>    client_body_buffer_size  100m ;</span></span>
<span class="line"><span>    set $proxy '';</span></span>
<span class="line"><span>        rewrite_by_lua_block {</span></span>
<span class="line"><span>            local request_method = ngx.var.request_method</span></span>
<span class="line"><span>            if request_method == "GET" then</span></span>
<span class="line"><span>                local arg = ngx.req.get_uri_args()["proxy"] or 0</span></span>
<span class="line"><span>                ngx.var.proxy = arg</span></span>
<span class="line"><span>            elseif request_method == "POST" then</span></span>
<span class="line"><span>                ngx.req.read_body()</span></span>
<span class="line"><span>                local jkdata = ngx.req.get_body_data()</span></span>
<span class="line"><span>                --ngx.print(jkdata)</span></span>
<span class="line"><span>                if jkdata then</span></span>
<span class="line"><span>                	--如果传进来的是 json 通过这种方式解析，</span></span>
<span class="line"><span>                    --cjson = require "cjson"</span></span>
<span class="line"><span>                    --jkval = cjson.decode(jkdata)</span></span>
<span class="line"><span>                    --ngx.var.proxy = valp["proxy"]</span></span>
<span class="line"><span>                    # 这里测试下，使用正则去匹配了IP</span></span>
<span class="line"><span>                    ngx.var.proxy = jkdata:match("(%d+%.%d+%.%d+%.%d+)")</span></span>
<span class="line"><span>                    --ngx.var.proxy = jkval["proxy"]</span></span>
<span class="line"><span>                end</span></span>
<span class="line"><span>            end</span></span>
<span class="line"><span>        }</span></span>
<span class="line"><span>    include     /usr/local/nginx/conf/uwsgi_params;</span></span>
<span class="line"><span>    proxy_pass  $proxy:18001;</span></span>
<span class="line"><span>    access_log logs/aaa_access.log;</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>ngx.req.get_body_file()</p>
<div class="language-txt line-numbers-mode" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>ngx.req.read_body()</span></span>
<span class="line"><span>body_data = ngx.req.get_body_data()</span></span>
<span class="line"><span>if not body_data then</span></span>
<span class="line"><span>    local datafile = ngx.req.get_body_file()</span></span>
<span class="line"><span>    if not datafile then</span></span>
<span class="line"><span>        error_code = 1</span></span>
<span class="line"><span>        error_msg = "no request body found"</span></span>
<span class="line"><span>    else</span></span>
<span class="line"><span>        local fh, err = io.open(datafile, "r")</span></span>
<span class="line"><span>        if not fh then</span></span>
<span class="line"><span>            error_code = 2</span></span>
<span class="line"><span>            error_msg = "failed to open " .. tostring(datafile) .. "for reading: " .. tostring(err)</span></span>
<span class="line"><span>        else</span></span>
<span class="line"><span>            fh:seek("set")</span></span>
<span class="line"><span>            body_data = fh:read("*a")</span></span>
<span class="line"><span>            fh:close()</span></span>
<span class="line"><span>            if body_data == "" then</span></span>
<span class="line"><span>                error_code = 3</span></span>
<span class="line"><span>                error_msg = "request body is empty"</span></span>
<span class="line"><span>            end</span></span>
<span class="line"><span>        end</span></span>
<span class="line"><span>    end</span></span>
<span class="line"><span> end</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>相关包</h3>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>链接: https://pan.baidu.com/s/1nq9pOQO7uj88DwfHaT0EDg 提取码: p3fh</span></span></code></pre>
</div><h2>nginx负载与反代</h2>
<blockquote>
<p>nginx 负载</p>
</blockquote>
<p>新建配置文件blance-test.conf</p>
<p><strong>在nginx.conf 中include blance-test.conf</strong></p>
<div class="language-txt line-numbers-mode" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>upstream blance-test {</span></span>
<span class="line"><span>    server 192.168.1.11:80;</span></span>
<span class="line"><span>    server 192.168.1.22:80;</span></span>
<span class="line"><span>}</span></span>
<span class="line"><span>server</span></span>
<span class="line"><span>{</span></span>
<span class="line"><span>    listen 80;</span></span>
<span class="line"><span>    server_name www.example.com; </span></span>
<span class="line"><span>    location / {</span></span>
<span class="line"><span>        proxy_redirect off;</span></span>
<span class="line"><span>        proxy_set_header Host $host;</span></span>
<span class="line"><span>        proxy_set_header X-Real-IP $remote_addr;</span></span>
<span class="line"><span>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; </span></span>
<span class="line"><span>        proxy_pass http://blance-test;</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span>    access_log logs/blance-test_access.log;</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>⚠️ <code>proxy_set_header....</code></p>
<p>重点看下proxy_set_header X-Forwarded-For,当使用了代理时，web服务器无法取得真实IP，为了避免这个情况，代理服务器通常会增加一个叫做x_forwarded_for的头信息，连接它的客户端IP（即客户端IP）加到这个头信息里，这样就能保证网站的web服务器能获取到真实IP</p>
<p><code>$host</code>: 请求中的主机头(Host)字段，如果请求中的主机头不可用或者空，则为处理请求的server名称(处理请求的server的server_name的值)。小写，不含端口。</p>
<p><code>$remote_addr;</code> 客户端的IP地址（中间无代理则是真实客户端IP，有代理则是代理IP）</p>
<p><code>$proxy_add_x_forwarded_for;</code>  就是<code>$http_x_forwarded_for</code>加上<code>$remote_addr </code></p>
<p>官方解释</p>
<blockquote>
<p>$proxy_add_x_forwarded_for</p>
<p>the “X-Forwarded-For” client request header field with the $remote_addr variable appended to it, separated by a comma. If the “X-Forwarded-For” field is not present in the client request header, the $proxy_add_x_forwarded_for variable is equal to the $remote_addr variable.</p>
</blockquote>
<blockquote>
<p>nginx 反向代理</p>
</blockquote>
<p><em><strong>可选配置，与http同级</strong></em></p>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>   client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数</span></span>
<span class="line"><span>    client_body_buffer_size 256k;</span></span>
<span class="line"><span>    client_header_timeout 3m;</span></span>
<span class="line"><span>    client_body_timeout 3m;</span></span>
<span class="line"><span>    send_timeout 3m;</span></span>
<span class="line"><span>    proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)</span></span>
<span class="line"><span>    proxy_read_timeout 300s; #连接成功后，后端服务器响应时间(代理接收超时)</span></span>
<span class="line"><span>    proxy_send_timeout 300s;</span></span>
<span class="line"><span>    proxy_buffer_size 64k; #设置代理服务器（nginx）保存用户头信息的缓冲区大小</span></span>
<span class="line"><span>    proxy_buffers 4 32k; #proxy_buffers缓冲区，网页平均在32k以下的话，这样设置</span></span>
<span class="line"><span>    proxy_busy_buffers_size 64k; #高负荷下缓冲大小（proxy_buffers*2）</span></span>
<span class="line"><span>    proxy_temp_file_write_size 64k; #设定缓存文件夹大小，大于这个值，将从upstream服务器传递请求，而不缓冲到磁盘</span></span>
<span class="line"><span>    proxy_ignore_client_abort on; #不允许代理端主动关闭连接</span></span></code></pre>
</div><p>新建配置文件reverse-proxy.conf<em><strong>然后在nginx.conf 中include reverse-proxy.conf</strong></em></p>
<div class="language- line-numbers-mode" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>    server {</span></span>
<span class="line"><span>        listen          7001;</span></span>
<span class="line"><span>        server_name     192.168.1.202:7001;</span></span>
<span class="line"><span>        charset utf-8;</span></span>
<span class="line"><span>        location /console {</span></span>
<span class="line"><span>           # proxy_set_header Host $host:$proxy_port;</span></span>
<span class="line"><span>            proxy_set_header Host $http_host;</span></span>
<span class="line"><span>            proxy_set_header X-Real-IP $remote_addr;</span></span>
<span class="line"><span>            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; </span></span>
<span class="line"><span>            proxy_pass http://192.168.1.11:7001;</span></span>
<span class="line"><span>        }</span></span>
<span class="line"><span>        access_log logs/192.168.1.11:7001_access.log;</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span>    server {</span></span>
<span class="line"><span>        listen          8001;</span></span>
<span class="line"><span>        server_name     192.168.1.202:8001;</span></span>
<span class="line"><span>        charset utf-8;</span></span>
<span class="line"><span>        location / {</span></span>
<span class="line"><span>            proxy_set_header Host $host:$proxy_port;</span></span>
<span class="line"><span>            proxy_set_header X-Real-IP $remote_addr;</span></span>
<span class="line"><span>            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; </span></span>
<span class="line"><span>            proxy_pass http://192.168.1.11:8001;</span></span>
<span class="line"><span>        }</span></span>
<span class="line"><span>        access_log logs/192.168.1.11:8001_access.log;</span></span>
<span class="line"><span>    }</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>这里要说明下</p>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>server_name </span></span>
<span class="line"><span>#主要用于配置基于名称的虚拟主机，可匹配正则，如果没有域名可填写IP，不填或随便填写一个</span></span>
<span class="line"><span>#nginx 根据 server_name 匹配 HTTP 请求头的 host，去决定使用那个 server</span></span>
<span class="line"><span>#如果都没有匹配则使用默认的。如果没有默认就是第一个server</span></span>
<span class="line"><span></span></span>
<span class="line"><span>$http_host 和 $host的区别</span></span>
<span class="line"><span></span></span>
<span class="line"><span>$host 上边描述过，主机头(Host)字段，如果不可用或空就是server_name的值。</span></span>
<span class="line"><span>$http_host  可以理解请求地址，即浏览器中你输入的地址（IP或域名）</span></span>
<span class="line"><span>那么这两个使用哪个好一些呢？</span></span>
<span class="line"><span>如果Host请求头部没有出现在请求头中，则$http_host值为空，但是$host值为主域名，</span></span>
<span class="line"><span>一般而言，会用$host代替$http_host，避免http请求中丢失Host头部的情况下Host不被重写。</span></span>
<span class="line"><span>如果对端口又要求可加上 :$proxy_port</span></span></code></pre>
</div><p><a href="http://nginx.org/en/docs/http/ngx_http_proxy_module.html#.24proxy_add_x_forwarded_for" target="_blank" rel="noopener noreferrer">官方关于nginx 代理模块的文章</a></p>
<blockquote>
<p>Nginx访问日志 IP统计<br>
awk '{print $1}' access.log | sort | uniq -c|sort -n</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>rpm包制作</title>
      <link>https://docs.lizili.online/ops/linux/package-rpm.html</link>
      <guid>https://docs.lizili.online/ops/linux/package-rpm.html</guid>
      <source url="https://docs.lizili.online/rss.xml">rpm包制作</source>
      <description>RPM（Redhat Package Manager）是用于Redhat、CentOS、Fedora等Linux 分发版（distribution）的常见的软件包管理器。因为它允许分发已编译的软件，所以用户只用一个命令就可以安装软件. 安装 使用 rpmdev-setuptree命令，可在$HOME下生产一个标注的工作空间rpmbuild 结构如下 如...</description>
      <category>linux</category>
      <pubDate>Fri, 21 Jul 2023 15:45:53 GMT</pubDate>
      <content:encoded><![CDATA[
<blockquote>
<p>RPM（Redhat Package Manager）是用于Redhat、CentOS、Fedora等Linux 分发版（distribution）的常见的软件包管理器。因为它允许分发已编译的软件，所以用户只用一个命令就可以安装软件.</p>
</blockquote>
<h2>安装</h2>
<div class="language-" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>yum install rpm-build</span></span>
<span class="line"><span>yum install rpmdevtools</span></span></code></pre>
</div><h2>使用</h2>
<p><code>rpmdev-setuptree</code>命令，可在<code>$HOME</code>下生产一个标注的工作空间<code>rpmbuild</code></p>
<p>结构如下</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">$</span><span style="color:#98C379;--shiki-dark:#98C379"> tree</span><span style="color:#98C379;--shiki-dark:#98C379"> rpmbuild</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rpmbuild</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> BUILD</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> RPMS</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> SOURCES</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">├──</span><span style="color:#98C379;--shiki-dark:#98C379"> SPECS</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">└──</span><span style="color:#98C379;--shiki-dark:#98C379"> SRPMS</span></span></code></pre>
</div><p>如果未安装<code>rpmdevtools</code> 手动创建也是可以的</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">mkdir</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379"> ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}`</span></span></code></pre>
</div><h2>目录</h2>
<table>
<thead>
<tr>
<th>目录名</th>
<th>说明</th>
<th>macros中的宏名</th>
</tr>
</thead>
<tbody>
<tr>
<td>~/rpmbuild/</td>
<td>rpmbuild文件夹</td>
<td>%_topdir</td>
</tr>
<tr>
<td>~/rpmbuild/BUILD</td>
<td>编译rpm包的临时目录</td>
<td>%_builddir</td>
</tr>
<tr>
<td>~/rpmbuild/BUILDROOT</td>
<td>编译后生成的软件临时安装目录</td>
<td>%_buildrootdir</td>
</tr>
<tr>
<td>~/rpmbuild/RPMS</td>
<td>最终生成的可安装rpm包的所在目录</td>
<td>%_rpmdir</td>
</tr>
<tr>
<td>~/rpmbuild/SOURCES</td>
<td>所有源代码和补丁文件的存放目录</td>
<td>%_sourcedir</td>
</tr>
<tr>
<td>~/rpmbuild/SPECS</td>
<td>存放SPEC文件的目录(重要)</td>
<td>%_specdir</td>
</tr>
<tr>
<td>~/rpmbuild/SRPMS</td>
<td>软件最终的rpm源码格式存放路径(暂时忽略掉，别挂在心上)</td>
<td>%_srcrpmdir</td>
</tr>
</tbody>
</table>
<h2>流程</h2>
<ol>
<li>
<p>源代码放在<code>%_sourcedir</code>下,一般是<code>.tar.gz</code>之类,或文件</p>
</li>
<li>
<p>编译,在<code>%_builddir</code>中进行,源码包解压后复制到此目录即可</p>
</li>
<li>
<p>安装,把软件包应该包含的内容（比如二进制文件、配置文件、man文档等）复制到<code>%_buildrootdir</code>中，并按照实际安装后的目录结构组装，比如二进制命令可能会放在<code>/usr/bin</code>下，那么就在<code>%_buildrootdir</code>下也按照同样的目录结构放置</p>
</li>
<li>
<p>配置,安装前,中,后,的一些工作,以及卸载前的工作.</p>
</li>
<li>
<p>检测,软件是否正常运行. 可选</p>
</li>
<li>
<p>生成rpm包,放到<code>%_rpmdir</code>下</p>
</li>
</ol>
<p>以上流程均是通过编写SPEC文件进行操作.</p>
<table>
<thead>
<tr>
<th>阶段</th>
<th>读取的目录</th>
<th>写入的目录</th>
<th>具体动作</th>
</tr>
</thead>
<tbody>
<tr>
<td>%prep</td>
<td>%_sourcedir</td>
<td>%_builddir</td>
<td>读取位于 %_sourcedir 目录的源代码和 patch 。之后，解压源代码至 %_builddir 的子目录并应用所有 patch</td>
</tr>
<tr>
<td>%build</td>
<td>%_builddir</td>
<td>%_builddir</td>
<td>编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure &amp;&amp; make 的命令实现</td>
</tr>
<tr>
<td>%install</td>
<td>%_builddir</td>
<td>%_buildrootdir</td>
<td>读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录。这些文件就是用户安装 RPM 后，最终得到的文件。注意一个奇怪的地方: 最终安装目录 不是 构建目录。通过执行类似 make install 的命令实现</td>
</tr>
<tr>
<td>%check</td>
<td>%_builddir</td>
<td>%_builddir</td>
<td>检查软件是否正常运行。通过执行类似 make test 的命令实现。很多软件包都不需要此步。</td>
</tr>
<tr>
<td>bin</td>
<td>%_buildrootdir</td>
<td>%_rpmdir</td>
<td>读取位于 %_buildrootdir 最终安装目录下的文件，以便最终在 %_rpmdir 目录下创建 RPM 包。在该目录下，不同架构的 RPM 包会分别保存至不同子目录， noarch 目录保存适用于所有架构的 RPM 包。这些 RPM 文件就是用户最终安装的 RPM 包。</td>
</tr>
<tr>
<td>src</td>
<td>%_sourcedir</td>
<td>%_srcrpmdir</td>
<td>创建源码 RPM 包（简称 SRPM，以.src.rpm 作为后缀名），并保存至 %_srcrpmdir 目录。SRPM 包通常用于审核和升级软件包。</td>
</tr>
</tbody>
</table>
<h2>SPEC</h2>
<p>zabbix agentd rpm包构建参考</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%define</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix_user</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                  </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#自定义宏，名字为zabbix_user值为zabbix,%{zabbix_user}引用</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Name:</span><span style="color:#98C379;--shiki-dark:#98C379">   zabbix</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                              </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#软件包的名字，后面可用%{name}引用</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Version:</span><span style="color:#D19A66;--shiki-dark:#D19A66">    3.0.14</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                           </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#软件的实际版本号，可使用%{version}引用</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Release:</span><span style="color:#98C379;--shiki-dark:#98C379">    1%{?dist}</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                       </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#发布序列号，标明第几次打包  </span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Summary:</span><span style="color:#98C379;--shiki-dark:#98C379">    zabbix_agentd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                   </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#软件包内容概要</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Group:</span><span style="color:#98C379;--shiki-dark:#98C379">      zabbix</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                          </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#软件包分组</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">License:</span><span style="color:#98C379;--shiki-dark:#98C379">    GPL</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#授权许可方式</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">URL:</span><span style="color:#98C379;--shiki-dark:#98C379">        blog.dl1548.com</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#软件的主页</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#源代码包，可以有Source0,Source1等源,对应%install下</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source0:</span><span style="color:#98C379;--shiki-dark:#98C379">    zabbix-3.0.14.tar.gz</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source1:</span><span style="color:#98C379;--shiki-dark:#98C379">    discover_disk.pl</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source2:</span><span style="color:#98C379;--shiki-dark:#98C379">    tcp_conn_status.sh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source3:</span><span style="color:#98C379;--shiki-dark:#98C379">    zbx_parse_iostat_values.sh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source4:</span><span style="color:#98C379;--shiki-dark:#98C379">    tcp-status-params.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Source5:</span><span style="color:#98C379;--shiki-dark:#98C379">    zbx_parse_iostat_values.conf</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">BuildRequires:</span><span style="color:#98C379;--shiki-dark:#98C379">      net-tools</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#gcc, gcc-c++            </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#制作rpm包时，所依赖的基本库</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Requires:</span><span style="color:#98C379;--shiki-dark:#98C379">      net-tools</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#gcc, gcc-c++       </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#安装rpm包时，所依赖的软件包</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#BuildRoot: %{_tmpdir}/%{name}-%{version}-%{release}</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#构建包的临时文件路径.centos5 不写会报错</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%description</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#定义rpm包的描述信息</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Zabbix</span><span style="color:#98C379;--shiki-dark:#98C379"> agentd</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">creata</span><span style="color:#98C379;--shiki-dark:#98C379"> by</span><span style="color:#98C379;--shiki-dark:#98C379"> jingkunsystem-lizili</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%pre</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                        </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#rpm包安装前执行的脚本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/passwd</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/dev/null</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#E5C07B;--shiki-dark:#E5C07B">$?</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> !=</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ] </span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">then</span><span style="color:#61AFEF;--shiki-dark:#61AFEF"> useradd</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -M</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -s</span><span style="color:#98C379;--shiki-dark:#98C379"> /sbin/nologin</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[ </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">-d</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> /usr/local/zabbix ]||</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">rm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -rf</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -rf</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/zabbix</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%post</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                       </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#rpm包安装后执行的脚本</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "/BASEDIR=\/usr\/local/c\BASEDIR=\/usr\/local\/%{name}"</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/init.d/zabbix_agentd</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%preun</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                      </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#rpm卸载前执行的脚本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/etc/init.d/zabbix_agentd</span><span style="color:#98C379;--shiki-dark:#98C379"> stop</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%postun</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                     </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#rpm卸载后执行的脚本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">userdel</span><span style="color:#98C379;--shiki-dark:#98C379">  zabbix</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -rf</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%prep</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%setup</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -q</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                   </span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%build</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                      </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#定义编译软件包时的操作</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">./configure</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --prefix=/usr/local/%</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">name}</span><span style="color:#D19A66;--shiki-dark:#D19A66">  --enable-agent</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -j8</span><span style="color:#98C379;--shiki-dark:#98C379"> %{?_smp_mflags}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%install</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                    </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#定义安装软件包，使用默认值即可</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">test</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -L</span><span style="color:#98C379;--shiki-dark:#98C379"> %{buildroot}/usr/local/%{name}</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">rm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -f</span><span style="color:#98C379;--shiki-dark:#98C379"> %{buildroot}/usr/local/%{name}</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -d</span><span style="color:#98C379;--shiki-dark:#98C379"> %{buildroot}/etc/profile.d</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -d</span><span style="color:#98C379;--shiki-dark:#98C379"> %{buildroot}/etc/init.d</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">make</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> DESTDIR=%{buildroot}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#其他脚本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -D</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -m</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0755</span><span style="color:#98C379;--shiki-dark:#98C379"> %{SOURCE1}</span><span style="color:#98C379;--shiki-dark:#98C379">        %{buildroot}/usr/local/%{name}/lib/discover_disk.pl</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -D</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -m</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0755</span><span style="color:#98C379;--shiki-dark:#98C379"> %{SOURCE2}</span><span style="color:#98C379;--shiki-dark:#98C379">        %{buildroot}/usr/local/%{name}/lib/tcp_conn_status.sh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -D</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -m</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0755</span><span style="color:#98C379;--shiki-dark:#98C379"> %{SOURCE3}</span><span style="color:#98C379;--shiki-dark:#98C379">        %{buildroot}/usr/local/%{name}/lib/zbx_parse_iostat_values.sh</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#其他配置文件</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -D</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -m</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0755</span><span style="color:#98C379;--shiki-dark:#98C379"> %{SOURCE4}</span><span style="color:#98C379;--shiki-dark:#98C379">        %{buildroot}/usr/local/%{name}/etc/zabbix_agentd.conf.d/tcp-status-params.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">install</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -D</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -m</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0755</span><span style="color:#98C379;--shiki-dark:#98C379"> %{SOURCE5}</span><span style="color:#98C379;--shiki-dark:#98C379">        %{buildroot}/usr/local/%{name}/etc/zabbix_agentd.conf.d/zbx_parse_iostat_values.conf</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> 'export PATH=/etc/zabbix/bin:/etc/zabbix/sbin:$PATH'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;&gt; </span><span style="color:#98C379;--shiki-dark:#98C379">%{buildroot}/etc/profile.d/%{name}.sh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cp</span><span style="color:#98C379;--shiki-dark:#98C379"> %{_builddir}/%{name}-%{version}/misc/init.d/fedora/core/zabbix_agentd</span><span style="color:#98C379;--shiki-dark:#98C379">       %{buildroot}/etc/init.d/zabbix_agentd</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%files</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%defattr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> (-,root,root,0755)                                      </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#定义rpm包安装时创建的相关目录及文件</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#在该选项中%defattr (-,root,root)一定要注意。它是指定安装文件的属性，分别是(mode,owner,group)，-表示默认值，对文本文件是0644，可执行文件是0755。</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/%</span><span style="color:#98C379;--shiki-dark:#98C379">{name}</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">/*</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/zabbix/lib/*</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/usr/local/zabbix/etc/zabbix_agentd.conf.d/*</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/etc/init.d/zabbix_agentd</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">/etc/profile.d/%</span><span style="color:#98C379;--shiki-dark:#98C379">{name}</span><span style="color:#61AFEF;--shiki-dark:#61AFEF">.sh</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%changelog</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                                  </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#主要用于软件的变更日志。该选项可有可无</span></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">%clean</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -rf</span><span style="color:#98C379;--shiki-dark:#98C379"> %{buildroot}</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">                         </span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#清理临时文件</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>打包</h2>
<p>在<code>SPECS</code>文件夹下执行 <code>rpmbuild -bb xxx.spec</code> 即可</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-ba</span><span style="color:#98C379;--shiki-dark:#98C379"> 既生成src.rpm又生成二进制rpm</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bs</span><span style="color:#98C379;--shiki-dark:#98C379"> 只生成src的rpm</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bb</span><span style="color:#98C379;--shiki-dark:#98C379"> 只生二进制的rpm</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bp</span><span style="color:#98C379;--shiki-dark:#98C379"> 执行到pre</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bc</span><span style="color:#98C379;--shiki-dark:#98C379"> 执行到</span><span style="color:#98C379;--shiki-dark:#98C379"> build段</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bi</span><span style="color:#98C379;--shiki-dark:#98C379"> 执行install段</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">-bl</span><span style="color:#98C379;--shiki-dark:#98C379"> 检测有文件没包含</span></span></code></pre>
</div><p>可以先<code>rpmbuild -bp</code>,再<code>-bc</code> 再<code>-bi</code>如果没问题<code>rpmbuild -bb/ba</code>生成二进制包或两个都生成</p>
<p>脚本参考(主要针对centos7 内核)</p>
<div class="language-shell line-numbers-mode" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#/usr/bin/bash</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#ip= ip addr |grep inet |egrep -v "inet6|127.0.0.1" |awk '{print $2}' |awk -F "/" '{print $1}'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># get server ip</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -e</span><span style="color:#98C379;--shiki-dark:#98C379"> "\n NOTICE! Check the package net-tools is installed \n "</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">read</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379">  "zabbix server ip："</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix_server</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">!</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> "</span><span style="color:#E06C75;--shiki-dark:#E06C75">$zabbix_server</span><span style="color:#98C379;--shiki-dark:#98C379">"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">    echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "you have not input server ip, exit"</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">    exit</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># get agent ip</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">read</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -p</span><span style="color:#98C379;--shiki-dark:#98C379">  "local ip: "</span><span style="color:#98C379;--shiki-dark:#98C379"> local_ip</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [ </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">!</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -n</span><span style="color:#98C379;--shiki-dark:#98C379"> "</span><span style="color:#E06C75;--shiki-dark:#E06C75">$local_ip</span><span style="color:#98C379;--shiki-dark:#98C379">"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]; </span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">    echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "you have not input local ip, exit"</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">    exit</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "start to install..."</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sleep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#version centos7</span></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#cat /etc/*release | egrep -i "centos|rhel|red hat|redhat"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "check os version..."</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sleep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#version centos7</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">cat</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span><span style="color:#98C379;--shiki-dark:#98C379">release</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -q</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "centos\|rhel\|red hat\|redhat"</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [[ </span><span style="color:#E5C07B;--shiki-dark:#E5C07B">$?</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -eq</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]];</span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">    cat</span><span style="color:#98C379;--shiki-dark:#98C379"> /etc/</span><span style="color:#E5C07B;--shiki-dark:#E5C07B">*</span><span style="color:#98C379;--shiki-dark:#98C379">release</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> | </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">grep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -q</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "7\."</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    if</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [[ </span><span style="color:#E5C07B;--shiki-dark:#E5C07B">$?</span><span style="color:#56B6C2;--shiki-dark:#56B6C2"> -eq</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 0</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ]];</span><span style="color:#C678DD;--shiki-dark:#C678DD">then</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sleep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        rpm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -ivh</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix-3.0.14-1.el7.centos.x86_64.rpm</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">        echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "modify the agentd configuration"</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sleep</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "/^Server=/c\Server=${</span><span style="color:#E06C75;--shiki-dark:#E06C75">zabbix_server</span><span style="color:#98C379;--shiki-dark:#98C379">}"</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix/etc/zabbix_agentd.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "/^ServerActive=/c\ServerActive=${</span><span style="color:#E06C75;--shiki-dark:#E06C75">zabbix_server</span><span style="color:#98C379;--shiki-dark:#98C379">}"</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix/etc/zabbix_agentd.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "/^Hostname=/c\Hostname=${</span><span style="color:#E06C75;--shiki-dark:#E06C75">local_ip</span><span style="color:#98C379;--shiki-dark:#98C379">}"</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix/etc/zabbix_agentd.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "/Timeout=3/c\Timeout=30"</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix/etc/zabbix_agentd.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        sed</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -i</span><span style="color:#98C379;--shiki-dark:#98C379"> "260i\Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf"</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/local/zabbix/etc/zabbix_agentd.conf</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        systemctl</span><span style="color:#98C379;--shiki-dark:#98C379"> daemon-reload</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        /etc/init.d/zabbix_agentd</span><span style="color:#98C379;--shiki-dark:#98C379"> start</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">        chkconfig</span><span style="color:#98C379;--shiki-dark:#98C379"> zabbix_agentd</span><span style="color:#98C379;--shiki-dark:#98C379"> on</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">        echo</span><span style="color:#98C379;--shiki-dark:#98C379"> "SUCCESSFUL !"</span></span>
<span class="line"><span style="color:#56B6C2;--shiki-dark:#56B6C2">        exit</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">    fi</span></span>
<span class="line"><span style="color:#C678DD;--shiki-dark:#C678DD">fi</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Docker</title>
      <link>https://docs.lizili.online/ops/linux/Docker%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://docs.lizili.online/ops/linux/Docker%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Docker</source>
      <description>请注意 本文内容可能已过时，请自行甄别。 Docker三个基本概念 镜像（image） 容器（container） 仓库（rrepository) 安装 不同系统安装方式不同，详见 以centos为例(仅支持64位kernel &amp;gt;=3.10)建议使用国内源 卸载原有版本 yum remove docker docker-common docker-se...</description>
      <category>linux</category>
      <category>docker</category>
      <pubDate>Fri, 21 Jul 2023 15:32:04 GMT</pubDate>
      <content:encoded><![CDATA[
<div class="hint-container caution">
<p class="hint-container-title">请注意</p>
<p>本文内容可能已过时，请自行甄别。</p>
</div>
<p>Docker三个基本概念</p>
<ul>
<li>镜像（image）</li>
<li>容器（container）</li>
<li>仓库（rrepository)</li>
</ul>
<h2>安装</h2>
<p>不同系统安装方式不同，<a href="https://github.com/yeasy/docker_practice/blob/master/install/README.md" target="_blank" rel="noopener noreferrer">详见</a><br>
以<code>centos</code>为例(仅支持64位kernel &gt;=3.10)建议使用国内源</p>
<p><strong>卸载原有版本</strong></p>
<p><code>yum remove docker docker-common docker-selinux docker-engine</code></p>
<p>yum-util 提供yum-config-manager功能，另外两个是devicemapper驱动依赖</p>
<p><code>yum install -y yum-utils device-mapper-persistent-data lvm2</code></p>
<p><strong>添加yum源</strong></p>
<div class="language-txt" data-ext="txt" data-title="txt"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span># 阿里源</span></span>
<span class="line"><span>yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo</span></span>
<span class="line"><span></span></span>
<span class="line"><span>#中科大</span></span>
<span class="line"><span>sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo</span></span>
<span class="line"><span></span></span>
<span class="line"><span># 官方源</span></span>
<span class="line"><span># sudo yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo</span></span></code></pre>
</div><p>查看版本<br>
<code> yum list docker-ce --showduplicates | sort -r</code></p>
<p>可选择版本进行安装。默认仓库只开放稳定版</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> docker-ce</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> #默认安装最新稳定版</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">sudo</span><span style="color:#98C379;--shiki-dark:#98C379"> yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> docker-ce-17.12.0.ce</span><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"> #安装指定版本</span></span></code></pre>
</div><p>启动并开机启动，<code>docker version</code> 即可查看版本</p>
<h2>创建用户组</h2>
<p>为了安全起见，docker只允许root和docker用户组的用户进行访问</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">groupadd</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">usermod</span><span style="color:#D19A66;--shiki-dark:#D19A66"> -G</span><span style="color:#98C379;--shiki-dark:#98C379"> docker</span><span style="color:#98C379;--shiki-dark:#98C379"> username</span></span></code></pre>
</div><h2>镜像加速</h2>
<p>若文件不存在,则手动创建</p>
<p><code>vim /etc/docker/daemon.json</code></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#docker国内镜像加速应该是挂了</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">{</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">  "registry-mirrors"</span><span style="color:#56B6C2;--shiki-dark:#56B6C2">:</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> [</span><span style="color:#98C379;--shiki-dark:#98C379">"https://registry.docker-cn.com"</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">]</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#阿里云镜像加速</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">登陆[阿里云](https://cr.console.aliyun.com</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">),获取专属加速地址</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">类似</span><span style="color:#98C379;--shiki-dark:#98C379"> https://xxxx.mirror.aliyuncs.com</span><span style="color:#98C379;--shiki-dark:#98C379"> 替换上面的地址</span></span></code></pre>
</div><p>systemctl daemon-reload</p>
<p>systemctl restart docker</p>
<h2>image</h2>
<p>获取镜像<br>
<code>docker pull [选项] [ 仓库地址]  仓库名/标签</code> 默认从<code>docker hub</code> 中拉取</p>
<p>例如 ： docker pull centos #默认就是从docker hub下载最新的</p>
<p>如果需要下载制定tag的，可去官网查询</p>
<p><code>docker search xxxx</code> 不显示tag</p>
<p><code>docker pull centos:7.4.1708</code> 下载指定版本</p>
<p><code>docker images -a </code>  列出镜像 (显示包括中间层镜像)</p>
<p>中间层镜像：是其他镜像所依赖的镜像，不能删除，否则会导致上层镜像因为依赖丢失报错，事实上也无需删除，相同的层只会存储一遍。</p>
<p><code>docker system df</code>  查看镜像,容器,数据卷占用空间</p>
<p><code>docker images -f since(或before)=image name</code> 列出某个image之前(之后)的镜像</p>
<p><code>docker image prune</code>删除虚悬镜像(dangling)</p>
<p>虚悬镜像：也就是新旧镜像重名而导致的，pull和build都可能会出现这种情况，<code>docker image ls -f dangling=true</code>可 查看，虚悬镜像都是无价值的，可删除</p>
<p><code>docker rmi $(docker images -q -f dangling=true)</code>  批量删除dangling</p>
<p><code>docker run --name webserver -d -p 80:80 nginx</code>  以nginx镜像为基础，运行容器，也就是新建个容器</p>
<h3>构建镜像</h3>
<h3>Dockerfile</h3>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">$</span><span style="color:#98C379;--shiki-dark:#98C379">   mkdir</span><span style="color:#98C379;--shiki-dark:#98C379">   mynginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">$</span><span style="color:#98C379;--shiki-dark:#98C379">   cd</span><span style="color:#98C379;--shiki-dark:#98C379">  mynginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">$</span><span style="color:#98C379;--shiki-dark:#98C379">   touch</span><span style="color:#98C379;--shiki-dark:#98C379">   Dockerfile</span></span></code></pre>
</div><p>cat Dockerfile</p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">FROM</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">RUN</span><span style="color:#98C379;--shiki-dark:#98C379"> echo</span><span style="color:#98C379;--shiki-dark:#98C379"> '&lt;h1&gt;Dockerfile&lt;/h1&gt;'</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &gt;    &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/usr/share/nginx/html/index.html</span></span></code></pre>
</div><p><code>FROM image</code></p>
<p>必写,定制镜像也是以镜像为基础的.这里就是选定一个基础镜像,可以以相关服务镜像为基础(nginx,mysql等),也可是是系统(ubuntu,centos等).</p>
<p>另外,docker还提供<code>FROM scratch</code> 意味不以任何镜像为基础.</p>
<p><code>RUN</code></p>
<p>shell格式 : 用来执行命令行命令.</p>
<p>exec格式: <code>RUN ["可执行文件","参数1",    "参数2"]</code>这像是函数调用</p>
<p><code>RUN</code>命令常用来安装软件包</p>
<h4>构建</h4>
<p><code>docker build [选项] &lt;上下文路径/URL/-&gt;</code><br>
在文件目录下执行<code>docker build -t nginx:v3   .</code></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[root@docker docker]# docker build -t nginx:v3 </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">.</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Sending</span><span style="color:#98C379;--shiki-dark:#98C379"> build</span><span style="color:#98C379;--shiki-dark:#98C379"> context</span><span style="color:#98C379;--shiki-dark:#98C379"> to</span><span style="color:#98C379;--shiki-dark:#98C379"> Docker</span><span style="color:#98C379;--shiki-dark:#98C379"> daemon</span><span style="color:#98C379;--shiki-dark:#98C379">  2.048kB</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">Step</span><span style="color:#98C379;--shiki-dark:#98C379"> 1/2</span><span style="color:#98C379;--shiki-dark:#98C379"> :</span><span style="color:#98C379;--shiki-dark:#98C379"> FROM</span><span style="color:#98C379;--shiki-dark:#98C379"> nginx</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge使用</title>
      <link>https://docs.lizili.online/tools/MicrosoftEdge.html</link>
      <guid>https://docs.lizili.online/tools/MicrosoftEdge.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Microsoft Edge使用</source>
      <description>插件 Edge插件中心 油猴 Tampermonkey 脚本下载地址greasyfork, 挑你喜欢的安装就可以了 floccus floccus bookmarks sync 我主要用它同步chrome和edge间的书签，使用体验很好，具体使用参考 翻译 沙拉翻译 沉浸式翻译: 网页翻译的同时，还保留原文，方便对照着看。 去广告 adguard uB...</description>
      <category>效率</category>
      <pubDate>Fri, 21 Jul 2023 15:14:47 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>插件</h2>
<p><a href="https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home" target="_blank" rel="noopener noreferrer">Edge插件中心</a></p>
<h3>油猴</h3>
<p><a href="https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd" target="_blank" rel="noopener noreferrer">Tampermonkey</a></p>
<ul>
<li>脚本下载地址<a href="https://greasyfork.org/zh-CN" target="_blank" rel="noopener noreferrer">greasyfork</a>, 挑你喜欢的安装就可以了</li>
</ul>
<h3>floccus</h3>
<p><a href="https://microsoftedge.microsoft.com/addons/detail/floccus-bookmarks-sync/gjkddcofhiifldbllobcamllmanombji" target="_blank" rel="noopener noreferrer">floccus bookmarks sync</a></p>
<ul>
<li>我主要用它同步chrome和edge间的书签，使用体验很好，具体使用<a href="https://zhuanlan.zhihu.com/p/480842140" target="_blank" rel="noopener noreferrer">参考</a></li>
</ul>
<h3>翻译</h3>
<p><a href="https://microsoftedge.microsoft.com/addons/detail/%E6%B2%99%E6%8B%89%E6%9F%A5%E8%AF%8D%E8%81%9A%E5%90%88%E8%AF%8D%E5%85%B8%E5%88%92%E8%AF%8D%E7%BF%BB%E8%AF%91/idghocbbahafpfhjnfhpbfbmpegphmmp" target="_blank" rel="noopener noreferrer">沙拉翻译</a></p>
<p><a href="https://microsoftedge.microsoft.com/addons/detail/%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BF%BB%E8%AF%91-%E7%BD%91%E9%A1%B5%E7%BF%BB%E8%AF%91%E6%8F%92%E4%BB%B6-pdf%E7%BF%BB%E8%AF%91-/amkbmndfnliijdhojkpoglbnaaahippg?utm_source=official" target="_blank" rel="noopener noreferrer">沉浸式翻译</a>: 网页翻译的同时，还保留原文，方便对照着看。</p>
<h3>去广告</h3>
<ul>
<li><a href="https://microsoftedge.microsoft.com/addons/detail/adguard-%E5%B9%BF%E5%91%8A%E6%8B%A6%E6%88%AA%E5%99%A8/pdffkfellgipmhklpdmokmckkkfcopbh" target="_blank" rel="noopener noreferrer">adguard</a></li>
<li><a href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak" target="_blank" rel="noopener noreferrer">uBlock</a></li>
</ul>
<h3>vim</h3>
<p><a href="https://microsoftedge.microsoft.com/addons/detail/vimium-c-%E5%85%A8%E9%94%AE%E7%9B%98%E6%93%8D%E4%BD%9C%E6%B5%8F%E8%A7%88%E5%99%A8/aibcglbfblnogfjhbcmmpobjhnomhcdo" target="_blank" rel="noopener noreferrer">vimium-c</a> 用vim的操作浏览网页，丝滑</p>
]]></content:encoded>
    </item>
    <item>
      <title>运维平台建设流程和规范大纲</title>
      <link>https://docs.lizili.online/ops/GitOps/%E8%BF%90%E7%BB%B4%E5%B9%B3%E5%8F%B0%E5%BB%BA%E8%AE%BE%E6%B5%81%E7%A8%8B%E5%92%8C%E8%A7%84%E8%8C%83%E5%A4%A7%E7%BA%B2.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/%E8%BF%90%E7%BB%B4%E5%B9%B3%E5%8F%B0%E5%BB%BA%E8%AE%BE%E6%B5%81%E7%A8%8B%E5%92%8C%E8%A7%84%E8%8C%83%E5%A4%A7%E7%BA%B2.html</guid>
      <source url="https://docs.lizili.online/rss.xml">运维平台建设流程和规范大纲</source>
      <description>平台规划 通过容器平台的搭建，来支持微服务架构应用，满足业务的快速开发和迭代需求，逐步建立标准的开发、 测试,、生成环境， 形成统一的规范和标准，为快速交付赋能。同时需适应公司DevOps过程, 完善开发、测试、部署、运维监控工具链和自动化流程，提升敏捷研发、持续集成的能力; imageimage 目标 容器平台搭建，并适应devops流程，推进个项目...</description>
      <category>工作分享</category>
      <category>gitops</category>
      <pubDate>Sat, 08 Apr 2023 09:17:44 GMT</pubDate>
      <content:encoded><![CDATA[
<h2>平台规划</h2>
<p>通过容器平台的搭建，来支持微服务架构应用，满足业务的快速开发和迭代需求，逐步建立标准的开发、&nbsp;测试,、生成环境，&nbsp;形成统一的规范和标准，为快速交付赋能。同时需适应公司DevOps过程,&nbsp;完善开发、测试、部署、运维监控工具链和自动化流程，提升敏捷研发、持续集成的能力;</p>
<figure><figcaption>image</figcaption></figure>
<h2>目标</h2>
<p>容器平台搭建，并适应devops流程，推进个项目的接入</p>
<h2>职责</h2>
<h2>IT服务</h2>
<ul>
<li>
<p>IDC机房</p>
<ul>
<li>服务器，网络服务，存储等基础服务的稳定，用来支撑上层业务</li>
</ul>
</li>
<li>
<p>硬件服务器维护&nbsp;/&nbsp;虚拟化资源维护&nbsp;/&nbsp;操作系统的安装部署</p>
</li>
<li>
<p>内部AD管理</p>
<ul>
<li>
<p>ldap</p>
</li>
<li>
<p>dns</p>
</li>
<li>
<p>jms</p>
</li>
<li>
<p>gitlab</p>
</li>
<li>
<p>其他</p>
</li>
</ul>
</li>
<li>
<p>安全管理</p>
<ul>
<li>
<p>域名</p>
</li>
<li>
<p>证书</p>
</li>
<li>
<p>网络策略</p>
</li>
<li>
<p>防火墙策略</p>
</li>
<li>
<p>VPN</p>
</li>
</ul>
</li>
<li>
<p>其他</p>
<ul>
<li>待定</li>
</ul>
</li>
</ul>
<h2>SRE</h2>
<ul>
<li>
<p>业务运维规范和维护</p>
</li>
<li>
<p>CICD&nbsp;工作流的创建,&nbsp;辅助产品快速迭代和发布</p>
</li>
<li>
<p>搭建监控平台&nbsp;,&nbsp;(&nbsp;后续可配合SLO&nbsp;(SLI)&nbsp;进行监控&nbsp;)</p>
<ul>
<li>
<p>业务监控&nbsp;（&nbsp;产品维度&nbsp;）</p>
</li>
<li>
<p>应用监控&nbsp;（&nbsp;中间件&nbsp;）</p>
</li>
<li>
<p>链路追踪</p>
</li>
<li>
<p>资源监控（应用以及基础）</p>
</li>
</ul>
</li>
<li>
<p>搭建日志平台,&nbsp;(&nbsp;后续可配合SLO&nbsp;(SLI)&nbsp;进行监控&nbsp;)</p>
<ul>
<li>
<p>日志收集</p>
</li>
<li>
<p>日志监控</p>
</li>
<li>
<p>日志分析</p>
</li>
<li>
<p>故障定位</p>
</li>
</ul>
</li>
<li>
<p>infra服务（中间件）维护-安全,稳定,高效.&nbsp;(&nbsp;目前选型&nbsp;bitnami&nbsp;)</p>
</li>
<li>
<p>数据库</p>
</li>
</ul>
<h2>架构</h2>
<figure><figcaption>image</figcaption></figure>
<h2>微服务</h2>
<p>微服务更多的是开发规范和标准，&nbsp;有基础设施组负责。</p>
<h2>容器化</h2>
<p>目标：&nbsp;以容器化方式运行产品</p>
<p>容器规范大纲</p>
<div class="language- line-numbers-mode" data-ext="" data-title=""><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span>容器化规范对象</span></span>
<span class="line"><span>容器规范的价值及作用</span></span>
<span class="line"><span>容器规范的目标镜像规范</span></span>
<span class="line"><span>镜像规范的作用</span></span>
<span class="line"><span>镜像规范的目标</span></span>
<span class="line"><span>镜像存储规范</span></span>
<span class="line"><span>镜像 Tag 规范</span></span>
<span class="line"><span>墓础镜像规范</span></span>
<span class="line"><span>镜像命名规范</span></span>
<span class="line"><span>镜像使用规范</span></span>
<span class="line"><span>墓础镜像清单</span></span>
<span class="line"><span>容器命名规范</span></span>
<span class="line"><span>Dockerfile 规范</span></span>
<span class="line"><span>    FROM 指令：</span></span>
<span class="line"><span>    RUN 指令</span></span>
<span class="line"><span>    WORKDIR 指令</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>初始镜像</h3>
<p><a href="https://hackernoon.com/distroless-containers-hype-or-true-value-2rfl3wat" target="_blank" rel="noopener noreferrer">Distroless&nbsp;Containers:&nbsp;Hype&nbsp;or&nbsp;True&nbsp;Value?</a></p>
<p><a href="https://mp.weixin.qq.com/s/iI0PU6r5vpJ7Pl41b7d1aA" target="_blank" rel="noopener noreferrer">不要轻易使用 Alpine 镜像来构建 Docker 镜像，有坑！</a></p>
<h4>crond</h4>
<p>暂不需要</p>
<p>ntp依赖于宿主机系统时间</p>
<ul>
<li>时区设置&nbsp;(Shanghai)</li>
</ul>
<p><a href="https://cloud.tencent.com/developer/article/1626811" target="_blank" rel="noopener noreferrer">https://cloud.tencent.com/developer/article/1626811</a></p>
<div class="language-shell" data-ext="shell" data-title="shell"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">ENV</span><span style="color:#98C379;--shiki-dark:#98C379"> TZ</span><span style="color:#98C379;--shiki-dark:#98C379"> Asia/Shanghai</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">RUN</span><span style="color:#98C379;--shiki-dark:#98C379"> apk</span><span style="color:#98C379;--shiki-dark:#98C379"> add</span><span style="color:#98C379;--shiki-dark:#98C379"> tzdata</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">cp</span><span style="color:#98C379;--shiki-dark:#98C379"> /usr/share/zoneinfo/</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">${</span><span style="color:#E06C75;--shiki-dark:#E06C75">TZ</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">} </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/localtime</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#56B6C2;--shiki-dark:#56B6C2">echo</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> ${</span><span style="color:#E06C75;--shiki-dark:#E06C75">TZ</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">} &gt; </span><span style="color:#98C379;--shiki-dark:#98C379">/etc/timezone</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp;&amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">apk</span><span style="color:#98C379;--shiki-dark:#98C379"> del</span><span style="color:#98C379;--shiki-dark:#98C379"> tzdata</span></span></code></pre>
</div><ul>
<li>字符集(UTF-8)</li>
</ul>
<p><strong>ENV&nbsp;LANG="en_US.UTF-8"</strong></p>
<ul>
<li>应用环境变量</li>
</ul>
<p><strong>业务&amp;中间件</strong></p>
<p>|  关键字  |  说明  |  备注  |<br>
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>SaltStack</title>
      <link>https://docs.lizili.online/ops/linux/SaltStack%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://docs.lizili.online/ops/linux/SaltStack%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://docs.lizili.online/rss.xml">SaltStack</source>
      <description>请注意 本文内容可能已过时，请自行甄别。 salt简介 SaltStack是一个服务器基础架构集中化管理平台，具备配置管理、远程执行、监控等功能，基于Python语言实现，结合轻量级消息队列（ZeroMQ）与Python第三方模块（Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等）构建。 通过部署SaltS...</description>
      <category>自动化工具</category>
      <category>linux</category>
      <pubDate>Sun, 02 Apr 2023 11:08:55 GMT</pubDate>
      <content:encoded><![CDATA[
<div class="hint-container caution">
<p class="hint-container-title">请注意</p>
<p>本文内容可能已过时，请自行甄别。</p>
</div>
<h2>salt简介</h2>
<p>SaltStack是一个服务器基础架构集中化管理平台，具备配置管理、远程执行、监控等功能，基于Python语言实现，结合轻量级消息队列（ZeroMQ）与Python第三方模块（Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等）构建。</p>
<p>通过部署SaltStack，我们可以在成千万台服务器上做到批量执行命令，根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等，SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。</p>
<!--more-->
<h2>salt基本原理</h2>
<blockquote>
<p>SaltStack 采用 C/S模式，server端就是salt的master，client端就是minion，minion与master之间通过ZeroMQ消息队列通信</p>
<p>minion上线后先与master端联系，把自己的pub key发过去，这时master端通过salt-key -L命令就会看到minion的key，接受该minion-key后，也就是master与minion已经互信</p>
<p>master可以发送任何指令让minion执行了，salt有很多可执行模块，比如说cmd模块，在安装minion的时候已经自带了，它们通常位于你的python库中，<code>locate salt | grep /usr/</code> 可以看到salt自带的所有东西。</p>
<p>这些模块是python写成的文件，里面会有好多函数，如cmd.run，当我们执行<code>salt '*' cmd.run 'uptime'</code>的时候，master下发任务匹配到的minion上去，minion执行模块函数，并返回结果。master监听4505和4506端口，4505对应的是ZMQ的PUB system，用来发送消息，4506对应的是REP system是来接受消息的。</p>
</blockquote>
<p>具体步骤如下</p>
<ol>
<li>Salt stack的Master与Minion之间通过ZeroMq进行消息传递，使用了ZeroMq的发布-订阅模式，连接方式包括tcp，ipc</li>
<li>salt命令，将<code>cmd.run ls</code>命令从<code>salt.client.LocalClient.cmd_cli</code>发布到master，获取一个Jodid，根据jobid获取命令执行结果。</li>
<li>master接收到命令后，将要执行的命令发送给客户端minion。</li>
<li>minion从消息总线上接收到要处理的命令，交给<code>minion._handle_aes</code>处理</li>
<li><code>minion._handle_aes</code>发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后，调用<code>minion._return_pub</code>方法，将执行结果通过消息总线返回给master</li>
<li>master接收到客户端返回的结果，调用<code>master._handle_aes</code>方法，将结果写的文件中</li>
<li><code>salt.client.LocalClient.cmd_cli</code>通过轮询获取Job执行结果，将结果输出到终端。</li>
</ol>
<h2>安装salt</h2>
<blockquote>
<p>导入salt 密钥</p>
</blockquote>
<div class="language-bash line-numbers-mode" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">7版本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rpm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --import</span><span style="color:#98C379;--shiki-dark:#98C379"> https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">6版本</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">rpm</span><span style="color:#D19A66;--shiki-dark:#D19A66"> --import</span><span style="color:#98C379;--shiki-dark:#98C379"> https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#新增 /etc/yum.repos.d/saltstack.repo</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">7</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> &amp; </span><span style="color:#61AFEF;--shiki-dark:#61AFEF">6版本</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">[saltstack-repo] </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">name</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> RHEL</span><span style="color:#98C379;--shiki-dark:#98C379"> /</span><span style="color:#98C379;--shiki-dark:#98C379"> CentOS</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> $ </span><span style="color:#98C379;--shiki-dark:#98C379">releasever的</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">SaltStack</span><span style="color:#98C379;--shiki-dark:#98C379"> repo</span><span style="color:#98C379;--shiki-dark:#98C379"> baseurl</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> https://repo.saltstack.com/yum/redhat/</span><span style="color:#E06C75;--shiki-dark:#E06C75">$releasever</span><span style="color:#98C379;--shiki-dark:#98C379">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">$basearch</span><span style="color:#98C379;--shiki-dark:#98C379">/latest</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">enabled</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">gpgcheck</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 1</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">gpgkey</span><span style="color:#98C379;--shiki-dark:#98C379"> =</span><span style="color:#98C379;--shiki-dark:#98C379"> https：//</span><span style="color:#98C379;--shiki-dark:#98C379"> repo.saltstack.com/yum/redhat/</span><span style="color:#E06C75;--shiki-dark:#E06C75">$releasever</span><span style="color:#98C379;--shiki-dark:#98C379">/</span><span style="color:#E06C75;--shiki-dark:#E06C75">$basearch</span><span style="color:#98C379;--shiki-dark:#98C379">/latest/SALTSTACK-GPG-KEY.pub</span></span></code></pre>
<div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p>安装 salt-minion, salt-master,或Salt components:</p>
</blockquote>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> salt-master</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> salt-minion</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> salt-ssh</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> salt-syndic</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">yum</span><span style="color:#98C379;--shiki-dark:#98C379"> install</span><span style="color:#98C379;--shiki-dark:#98C379"> salt-cloud</span></span></code></pre>
</div><h2>配置salt</h2>
<h3>master</h3>
<blockquote>
<p>一般使用默认就好   (/etc/salt/master)</p>
</blockquote>
<div class="language-bash" data-ext="bash" data-title="bash"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#指定master，冒号后有一个空格</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">master:</span><span style="color:#D19A66;--shiki-dark:#D19A66"> 192.168.2.22</span></span>
<span class="line"><span style="color:#61AFEF;--shiki-dark:#61AFEF">user:</span><span style="color:#98C379;--shiki-dark:#98C379"> root</span></span>
<span class="line"></span>
<span class="line"><span style="color:#7F848E;font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">#</span></span></code></pre>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Ansible</title>
      <link>https://docs.lizili.online/ops/linux/ansible%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://docs.lizili.online/ops/linux/ansible%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Ansible</source>
      <description>请注意 本文内容可能已过时，请自行甄别。 前言 Ansible is Simple IT Automation——简单的自动化IT工具，可以实现 批量系统配置、批量程序部署、批量运行命令等功能，简而言之，就是 分布式集中管理工具， 通俗的讲就是批量在远端服务器上执行命令。其实，ansible自身不具备部署能力的，只是提供框架，其核心为模块 什么是ans...</description>
      <category>自动化工具</category>
      <category>linux</category>
      <pubDate>Sun, 02 Apr 2023 11:08:55 GMT</pubDate>
      <content:encoded><![CDATA[
<div class="hint-container caution">
<p class="hint-container-title">请注意</p>
<p>本文内容可能已过时，请自行甄别。</p>
</div>
<h2>前言</h2>
<p><strong>Ansible is Simple IT Automation——简单的自动化IT工具，可以实现 批量系统配置、批量程序部署、批量运行命令等功能，简而言之，就是</strong> <span style="color:red"> <strong>分布式集中管理工具</strong></span>， <strong>通俗的讲就是批量在远端服务器上执行命令。其实，ansible自身不具备部署能力的，只是提供框架，其核心为模块</strong></p>
<!--more-->
<h2>什么是ansible?</h2>
<figure><figcaption>ansible架构</figcaption></figure>
<p>| 五大部分               | 功能                             |<br>
| :</p>
]]></content:encoded>
    </item>
    <item>
      <title>GitOps落地指南</title>
      <link>https://docs.lizili.online/ops/GitOps/%E8%90%BD%E5%9C%B0%E6%8C%87%E5%8D%97.html</link>
      <guid>https://docs.lizili.online/ops/GitOps/%E8%90%BD%E5%9C%B0%E6%8C%87%E5%8D%97.html</guid>
      <source url="https://docs.lizili.online/rss.xml">GitOps落地指南</source>
      <description>通过GitOps的设计与落地，来满足云原生环境下业务的持续交付，建立标准的开发、 测试、生产环境， 形成统一的规范，完善自动化，为业务快速交付赋能。 整体架构 运维架构概览运维架构概览</description>
      <category>工作分享</category>
      <category>gitops</category>
      <pubDate>Sun, 02 Apr 2023 05:14:20 GMT</pubDate>
      <content:encoded><![CDATA[<!-- <PDF url="/assets/pdf/SRE-GitOps设计.pdf" no-toolbar /> -->
<h1></h1>
<p>通过GitOps的设计与落地，来满足云原生环境下业务的持续交付，建立标准的开发、&nbsp;测试、生产环境，&nbsp;形成统一的规范，完善自动化，为业务快速交付赋能。</p>
<!--more-->
<!-- ![封面图](https://alidocs.oss-cn-zhangjiakou.aliyuncs.com/a/dzV0LxOEYFnw4502/957a72b936d248f9956c2b5d270867700714.png) -->
<h2>整体架构</h2>
<figure><figcaption>运维架构概览</figcaption></figure>
]]></content:encoded>
      <enclosure url="https://alidocs.oss-cn-zhangjiakou.aliyuncs.com/a/dzV0LxOEYFnw4502/957a72b936d248f9956c2b5d270867700714.png" type="image/png"/>
    </item>
    <item>
      <title>Markdown 介绍</title>
      <link>https://docs.lizili.online/guide/markdown/introduce.html</link>
      <guid>https://docs.lizili.online/guide/markdown/introduce.html</guid>
      <source url="https://docs.lizili.online/rss.xml">Markdown 介绍</source>
      <description>文章来源 Markdown 是一种可以使用普通文本编辑器编写的标记语言，通过简单的标记语法，它可以使普通文本内容具有一定的格式。 Markdown 的目标是实现「易读易写」。</description>
      <category>Markdown</category>
      <pubDate>Sun, 02 Apr 2023 02:50:23 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://theme-hope.vuejs.press/zh/guide/markdown/" target="_blank" rel="noopener noreferrer">文章来源</a></p>
<p>Markdown 是一种可以使用普通文本编辑器编写的标记语言，通过简单的标记语法，它可以使普通文本内容具有一定的格式。</p>
<p>Markdown 的目标是实现「易读易写」。</p>
<!-- more -->
<h2>概述</h2>
<p>不过最需要强调的便是它的可读性。一份使用 Markdown 格式撰写的文件应该可以直接以纯文字发佈，并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响，包括 [Setext][1]、[atx][2]、[Textile][3]、[reStructuredText][4]、[Grutatext][5] 和 [EtText][6]，然而最大灵感来源其实是纯文字的电子邮件格式。</p>
<p>因此 Markdown 的语法全由标点符号所组成，并经过严谨慎选，是为了让它们看起来就像所要表达的意思。像是在文字两旁加上星号，看起来就像*强调*。Markdown 的列表看起来，嗯，就是列表。假如你有使用过电子邮件，引言写法看起来就真的像是引用一段文字。</p>
<p>Markdown 具有一系列衍生版本，用于扩展 Markdown 的功能 (如表格、脚注、内嵌 HTML 等等) ，这些功能原初的 Markdown 尚不具备，它们能让 Markdown 转换成更多的格式，例如 LaTeX，Docbook。Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、 Maruku 等。这些衍生版本要么基于工具，如 Pandoc；要么基于网站，如 GitHub 和 Wikipedia，在语法上基本兼容，但在一些语法和渲染效果上有改动。</p>
<h2>用途</h2>
<p>Markdown 的语法有个主要的目的: 用来作为一种网络内容的<em>写作</em>用语言。Markdown 的重点在于，它能让文件更容易阅读、编写。因此，Markdown 的格式语法只涵盖纯文字可以涵盖的范围。</p>
<p>Markdown 的语法简洁明了、学习容易，而且功能比纯文本更强，因此有很多人用它写博客。世界上最流行的博客平台 WordPress 能很好的支持 Markdown。</p>
<p>用于编写说明文档，并且以 <code>README.md</code> 的文件名保存在软件的目录下面。</p>
<p>除此之外，我们还可以快速将 Markdown 转化为演讲 PPT、Word 产品文档、LaTex 论文甚至是用非常少量的代码完成最小可用原型。在数据科学领域，Markdown 已经广泛使用，极大地推进了动态可重复性研究的历史进程。</p>
<h3>行内 HTML</h3>
<p>不在 Markdown 涵盖范围之外的标签，都可以直接在文件里面用 HTML 撰写。不需要额外标注这是 HTML 或是 Markdown；只要直接加标签就可以了。</p>
<p>只有块元素 ── 比如 <code>&lt;div&gt;</code>、<code>&lt;table&gt;</code>、<code>&lt;pre&gt;</code>、<code>&lt;p&gt;</code> 等标签，必须在前后加上空行，以利与内容区隔。而且这些 (元素) 的开始与结尾标签，不可以用 tab 或是空白来缩进。Markdown 的解析器有智慧型判断，可以避免在块标签前后加上没有必要的 <code>&lt;p&gt;</code> 标签。</p>
<p>举例来说，在 Markdown 文件里加上一段 HTML 表格:</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">This is a regular paragraph.</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">table</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">tr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">        &lt;</span><span style="color:#E06C75;--shiki-dark:#E06C75">td</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;Foo&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">td</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">    &lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">tr</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&lt;/</span><span style="color:#E06C75;--shiki-dark:#E06C75">table</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">This is another regular paragraph.</span></span></code></pre>
</div><p>请注意，Markdown 语法在 HTML 块标签中将不会被进行处理。例如，你无法在 HTML 块内使用 Markdown 形式的 <code>*强调*</code>。</p>
<h3>特殊字元自动转换</h3>
<p>在 HTML 文件中，有两个字元需要特殊处理: <code>&lt;</code> 和 <code>&amp;</code> 。 <code>&lt;</code> 符号用于起始标签，<code>&amp;</code> 符号则用于标记 HTML 实体，如果你只是想要使用这些符号，你必须要使用实体的形式，像是 <code>&amp;lt;</code> 和 <code>&amp;amp;</code>。</p>
<p><code>&amp;</code> 符号其实很容易让写作网络文件的人感到困扰，如果你要打「AT&amp;T」 ，你必须要写成「<code>AT&amp;amp;T</code>」 ，还得转换网址内的 <code>&amp;</code> 符号，如果你要链接到 <code>http://images.google.com/images?num=30&amp;q=larry+bird</code></p>
<p>你必须要把网址转成:</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">http://images.google.com/images?num=30</span><span style="color:#E06C75;--shiki-dark:#E06C75">&amp;amp;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">q=larry+bird</span></span></code></pre>
</div><p>才能放到链接标签的 <code>href</code> 属性里。不用说也知道这很容易忘记，这也可能是 HTML 标准检查所检查到的错误中，数量最多的。</p>
<p>Markdown 允许你直接使用这些符号，但是你要小心跳脱字元的使用，如果你是在 HTML 实体中使用 <code>&amp;</code> 符号的话，它不会被转换，而在其它情形下，它则会被转换成 <code>&amp;amp;</code>。所以你如果要在文件中插入一个著作权的符号，你可以这样写:</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#E06C75;--shiki-dark:#E06C75">&amp;copy;</span></span></code></pre>
</div><p>Markdown 将不会对这段文字做修改，但是如果你这样写:</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">AT&amp;T</span></span></code></pre>
</div><p>Markdown 就会将它转为:</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">AT</span><span style="color:#E06C75;--shiki-dark:#E06C75">&amp;amp;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">T</span></span></code></pre>
</div><p>类似的状况也会发生在 <code>&lt;</code> 符号上，因为 Markdown 支持 <a href="#%E8%A1%8C%E5%86%85-html">行内 HTML</a> ，如果你是使用 <code>&lt;</code> 符号作为 HTML 标签使用，那 Markdown 也不会对它做任何转换，但是如果你是写:</p>
<div class="language-md" data-ext="md" data-title="md"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">4 &lt; 5</span></span></code></pre>
</div><p>Markdown 将会把它转换为:</p>
<div class="language-html" data-ext="html" data-title="html"><pre class="shiki shiki-themes one-dark-pro one-dark-pro vp-code" style="background-color:#282c34;--shiki-dark-bg:#282c34;color:#abb2bf;--shiki-dark:#abb2bf" tabindex="0"><code><span class="line"><span style="color:#ABB2BF;--shiki-dark:#ABB2BF">4 </span><span style="color:#E06C75;--shiki-dark:#E06C75">&amp;lt;</span><span style="color:#ABB2BF;--shiki-dark:#ABB2BF"> 5</span></span></code></pre>
</div><p>不过需要注意的是，code 范围内，不论是行内还是块， <code>&lt;</code> 和 <code>&amp;</code> 两个符号都<em>一定</em>会被转换成 HTML 实体，这项特性让你可以很容易地用 Markdown 写 HTML code (和 HTML 相对而言， HTML 语法中，你要把所有的 <code>&lt;</code> 和 <code>&amp;</code> 都转换为 HTML 实体，才能在 HTML 文件里面写出 HTML code。)</p>
]]></content:encoded>
      <enclosure url="https://docs.lizili.online/path/to/img.jpg" type="image/jpeg"/>
    </item>
  </channel>
</rss>