<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>buyfakett</title>
        <link>https://www.tteam.icu</link>
        <description>buyfakett Webside</description>
        <lastBuildDate>Sat, 21 Mar 2026 06:53:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright © 2024 &lt;a href="https://github.com/buyfakett" target="_blank" style="color: skyblue"&gt;buyfakett&lt;/a&gt;&lt;br /&gt;Powered by &lt;a href="https://rspress.rs" target="_blank" style="color: skyblue"&gt;Rspress&lt;/a&gt;</copyright>
        <item>
            <title><![CDATA[【vps测评】netcup]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】netcup</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】netcup</guid>
            <pubDate>Sun, 01 Mar 2026 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="netcup"><a href="#netcup" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://www.netcup.com/en" target="_blank" rel="noopener noreferrer" class="rp-link">netcup</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>Netcup 是欧洲领先的服务器提供商，以硬件配置高、运行稳定、价格低廉著称。</p>
<p>本来打算在冬促的时候入一个机器的，但是在冬促前半天的时候通知因为内存和硬盘原因取消了</p>
<p>刚刚好在和朋友吐槽，朋友的群友中刚刚好有第二天过期的我想要的机器，所以就收过来了</p>
<p>然后我把<a href="/blog/vps/【vps测评】hetnzer" class="rp-link">hz</a>上的服务迁移到这里了</p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目----------------------</span></span>
<span class="line"><span>CPU 型号          : AMD EPYC-Genoa Processor</span></span>
<span class="line"><span>CPU 核心数        : 4</span></span>
<span class="line"><span>CPU 频率          : 2246.624 MHz</span></span>
<span class="line"><span>CPU 缓存          : L1: 128.00 KB / L2: 4.00 MB / L3: 128.00 MB</span></span>
<span class="line"><span>AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span>VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span>内存              : 301.84 MiB / 7.76 GiB</span></span>
<span class="line"><span>Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span>硬盘空间          : 1.51 GiB / 502.89 GiB</span></span>
<span class="line"><span>启动盘路径        : /dev/vda1</span></span>
<span class="line"><span>系统在线时间      : 0 days, 0 hour 13 min</span></span>
<span class="line"><span>负载              : 0.42, 0.27, 0.13</span></span>
<span class="line"><span>系统              : Debian GNU/Linux 13 (trixie) (x86_64)</span></span>
<span class="line"><span>架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span>内核              : 6.12.63+deb13-cloud-amd64</span></span>
<span class="line"><span>TCP加速方式       : cubic</span></span>
<span class="line"><span>虚拟化架构        : KVM</span></span>
<span class="line"><span>IPV4 ASN          : AS197540 netcup GmbH</span></span>
<span class="line"><span>IPV4 位置         : Nürnberg / Bavaria / DE</span></span>
<span class="line"><span>IPV6 ASN          : AS197540 netcup GmbH</span></span>
<span class="line"><span>IPV6 位置         : Vienna / Vienna / Austria</span></span>
<span class="line"><span>IPV6 子网掩码     : 64</span></span>
<span class="line"><span>------------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span>-&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span>1 线程测试(单核)得分: 		3886 Scores</span></span>
<span class="line"><span>4 线程测试(多核)得分: 		15248 Scores</span></span>
<span class="line"><span>--------------------内存测试--感谢lemonbench开源----------------------------</span></span>
<span class="line"><span>-&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span>单线程读测试:		44486.50 MB/s</span></span>
<span class="line"><span>单线程写测试:		24970.09 MB/s</span></span>
<span class="line"><span>--------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span>-&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span>测试操作		写速度					读速度</span></span>
<span class="line"><span>100MB-4K Block		18.4 MB/s (4490 IOPS, 5.70s)		36.1 MB/s (8803 IOPS, 2.91s)</span></span>
<span class="line"><span>1GB-1M Block		646 MB/s (616 IOPS, 1.62s)		2.0 GB/s (1928 IOPS, 0.52s)</span></span>
<span class="line"><span>----------------------磁盘fio读写测试--感谢yabs开源-----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>------   | ---            ----  | ----           ----</span></span>
<span class="line"><span>Read       | 159.84 MB/s  (39.9k) | 577.64 MB/s   (9.0k)</span></span>
<span class="line"><span>Write      | 160.26 MB/s  (40.0k) | 580.68 MB/s   (9.0k)</span></span>
<span class="line"><span>Total      | 320.10 MB/s  (80.0k) | 1.15 GB/s    (18.0k)</span></span>
<span class="line"><span>|                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>------   | ---            ----  | ----           ----</span></span>
<span class="line"><span>Read       | 438.66 MB/s    (856) | 693.63 MB/s    (677)</span></span>
<span class="line"><span>Write      | 461.97 MB/s    (902) | 739.82 MB/s    (722)</span></span>
<span class="line"><span>Total      | 900.64 MB/s   (1.7k) | 1.43 GB/s     (1.3k)</span></span>
<span class="line"><span>正在并发测试中，大概2~3分钟无输出，请耐心等待。。。</span></span>
<span class="line"><span>---------------流媒体解锁--感谢oneclickvirt/UnlockTests测试----------------</span></span>
<span class="line"><span>测试时间:  2026-02-24 19:59:14</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>============[ 跨国平台 ]============</span></span>
<span class="line"><span>Apple                     YES (Region: DEU) [Via DNS]</span></span>
<span class="line"><span>BingSearch                YES (Region: AT)</span></span>
<span class="line"><span>Claude                    YES [Via DNS]</span></span>
<span class="line"><span>Dazn                      YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Disney+                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Gemini                    NO</span></span>
<span class="line"><span>GoogleSearch              YES</span></span>
<span class="line"><span>Google Play Store         YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>IQiYi                     YES (Region: DE) [Native]</span></span>
<span class="line"><span>Instagram Licensed Audio  YES [Via DNS]</span></span>
<span class="line"><span>KOCOWA                    YES [Via DNS]</span></span>
<span class="line"><span>MetaAI                    NO [Via DNS]</span></span>
<span class="line"><span>Netflix                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Netflix CDN               DE</span></span>
<span class="line"><span>OneTrust                  YES (Region: DE BAVARIA) [Via DNS]</span></span>
<span class="line"><span>ChatGPT                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Paramount+                YES [Via DNS]</span></span>
<span class="line"><span>Amazon Prime Video        YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Reddit                    YES</span></span>
<span class="line"><span>SonyLiv                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Sora                      YES (Region: DE)</span></span>
<span class="line"><span>Spotify Registration      NO</span></span>
<span class="line"><span>Steam Store               YES (Community Available) (Region: DE)</span></span>
<span class="line"><span>TVBAnywhere+              YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>TikTok                    YES (Region: DE) [Native]</span></span>
<span class="line"><span>Viu.com                   YES [Via DNS]</span></span>
<span class="line"><span>Wikipedia Editability     YES</span></span>
<span class="line"><span>YouTube Region            YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>YouTube CDN               FRA</span></span>
<span class="line"><span>IPV6:</span></span>
<span class="line"><span>============[ 跨国平台 ]============</span></span>
<span class="line"><span>Apple                     YES (Region: DEU) [Via DNS]</span></span>
<span class="line"><span>BingSearch                YES (Region: AT)</span></span>
<span class="line"><span>Claude                    YES [Via DNS]</span></span>
<span class="line"><span>Dazn                      N/A (No IPv6 Support)</span></span>
<span class="line"><span>Disney+                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Gemini                    NO</span></span>
<span class="line"><span>GoogleSearch              YES</span></span>
<span class="line"><span>Google Play Store         YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>IQiYi                     N/A (No IPv6 Support)</span></span>
<span class="line"><span>Instagram Licensed Audio  YES [Via DNS]</span></span>
<span class="line"><span>KOCOWA                    N/A (No IPv6 Support)</span></span>
<span class="line"><span>MetaAI                    NO [Via DNS]</span></span>
<span class="line"><span>Netflix                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Netflix CDN               DE</span></span>
<span class="line"><span>OneTrust                  YES (Region: DE BAVARIA) [Via DNS]</span></span>
<span class="line"><span>ChatGPT                   Unknown</span></span>
<span class="line"><span>Paramount+                YES [Via DNS]</span></span>
<span class="line"><span>Amazon Prime Video        N/A (No IPv6 Support)</span></span>
<span class="line"><span>Reddit                    Failed (Network Connection Failed)</span></span>
<span class="line"><span>SonyLiv                   YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>Sora                      YES (Region: DE)</span></span>
<span class="line"><span>Spotify Registration      NO</span></span>
<span class="line"><span>Steam Store               Failed (Network Connection Failed)</span></span>
<span class="line"><span>TVBAnywhere+              N/A (No IPv6 Support)</span></span>
<span class="line"><span>TikTok                    N/A (No IPv6 Support)</span></span>
<span class="line"><span>Viu.com                   N/A (No IPv6 Support)</span></span>
<span class="line"><span>Wikipedia Editability     YES</span></span>
<span class="line"><span>YouTube Region            YES (Region: DE) [Via DNS]</span></span>
<span class="line"><span>YouTube CDN               FRA</span></span>
<span class="line"><span>---------------------TikTok解锁--感谢lmc999的源脚本---------------------</span></span>
<span class="line"><span>Tiktok Region:		Failed</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用--------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | dkly数据库        [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>ipintel数据库 [F] | ipfighter数据库   [G] | fraudlogix数据库   [H] | cloudflare数据库  [I] |</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>信任得分(越高越好): 33 [8]</span></span>
<span class="line"><span>VPN得分(越低越好): 100 [8]</span></span>
<span class="line"><span>代理得分(越低越好): 0 [8]</span></span>
<span class="line"><span>社区投票-无害: 0 [2]</span></span>
<span class="line"><span>社区投票-恶意: 0 [2]</span></span>
<span class="line"><span>威胁得分(越低越好): 100 [8]</span></span>
<span class="line"><span>欺诈得分(越低越好): 0 [E]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3]</span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0094 (Elevated) [A]</span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A]</span></span>
<span class="line"><span>威胁级别: low [B]</span></span>
<span class="line"><span>流量占比: 真人(越高越好)11% [I] 机器人(越低越好)88% [I]</span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 93 [2]</span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting [0 3 7 8 A C]</span></span>
<span class="line"><span>公司类型: hosting [0 7 A]</span></span>
<span class="line"><span>浏览器类型: 主流67% 其他32% [I]</span></span>
<span class="line"><span>设备类型: 桌面88% 移动11% 其他0% [I]</span></span>
<span class="line"><span>操作系统类型: 主流89% 其他10% [I]</span></span>
<span class="line"><span>是否云提供商: Yes [7 D]</span></span>
<span class="line"><span>是否数据中心: Yes [0 5 8 A C G]</span></span>
<span class="line"><span>是否移动设备: Yes [E] No [5 A C G]</span></span>
<span class="line"><span>是否代理: No [0 4 5 7 8 A B C D E] Yes [G]</span></span>
<span class="line"><span>是否VPN: No [0 7 A C D E] Yes [G]</span></span>
<span class="line"><span>是否Tor: No [0 3 7 8 A B C D E]</span></span>
<span class="line"><span>是否Tor出口: No [7 D]</span></span>
<span class="line"><span>是否网络爬虫: No [A B E]</span></span>
<span class="line"><span>是否匿名: Yes [8] No [7 D]</span></span>
<span class="line"><span>是否攻击者: No [7 8 D]</span></span>
<span class="line"><span>是否滥用者: No [7 8 A C D E]</span></span>
<span class="line"><span>是否威胁: No [7 8 C D]</span></span>
<span class="line"><span>是否中继: No [0 7 8 C D]</span></span>
<span class="line"><span>是否Bogon: No [7 8 A C D]</span></span>
<span class="line"><span>是否机器人: No [E]</span></span>
<span class="line"><span>DNS-黑名单: 309(Total_Check) 0(Clean) 0(Blacklisted) 0(Other)</span></span>
<span class="line"><span>IPV6:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3]</span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0094 (Elevated) [A]</span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A]</span></span>
<span class="line"><span>威胁级别: low [B]</span></span>
<span class="line"><span>流量占比: 真人(越高越好)11% [I] 机器人(越低越好)88% [I]</span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting [3 A]</span></span>
<span class="line"><span>公司类型: hosting [A]</span></span>
<span class="line"><span>浏览器类型: 主流67% 其他32% [I]</span></span>
<span class="line"><span>设备类型: 桌面88% 移动11% 其他0% [I]</span></span>
<span class="line"><span>操作系统类型: 主流89% 其他10% [I]</span></span>
<span class="line"><span>是否数据中心: Yes [A G]</span></span>
<span class="line"><span>是否移动设备: No [A G]</span></span>
<span class="line"><span>是否代理: Yes [G] No [A B]</span></span>
<span class="line"><span>是否VPN: Yes [G] No [A]</span></span>
<span class="line"><span>是否Tor: No [3 A B]</span></span>
<span class="line"><span>是否网络爬虫: No [A B]</span></span>
<span class="line"><span>是否滥用者: No [A]</span></span>
<span class="line"><span>是否Bogon: No [A]</span></span>
<span class="line"><span>DNS-黑名单: 309(Total_Check) 0(Clean) 0(Blacklisted) 309(Other)</span></span>
<span class="line"><span>Google搜索可行性：NO</span></span>
<span class="line"><span>------------邮件端口检测--基于oneclickvirt/portchecker开源------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✔     ✔     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Apple     ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>FastMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ProtonMail✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Namecrane ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    </span></span>
<span class="line"><span>Free_fr   ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>-------------上游及三网回程--基于oneclickvirt/backtrace开源--------------</span></span>
<span class="line"><span>国家: DE 城市: Nürnberg 服务商: AS197540 netcup GmbH</span></span>
<span class="line"><span>北京电信v4 219.141.140.10           电信163    [普通线路]</span></span>
<span class="line"><span>北京联通v4 202.106.195.68  检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>北京移动v4 221.179.155.161          移动CMI    [普通线路] 移动CMIN2  [精品线路]</span></span>
<span class="line"><span>上海电信v4 202.96.209.133           电信163    [普通线路]</span></span>
<span class="line"><span>上海联通v4 210.22.97.1     检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>上海移动v4 211.136.112.200          移动CMI    [普通线路]</span></span>
<span class="line"><span>广州电信v4 58.60.188.222            电信163    [普通线路]</span></span>
<span class="line"><span>广州联通v4 210.21.196.6    检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>广州移动v4 120.196.165.24           移动CMI    [普通线路]</span></span>
<span class="line"><span>成都电信v4 61.139.2.69              电信163    [普通线路]</span></span>
<span class="line"><span>成都联通v4 119.6.6.6       检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>成都移动v4 211.137.96.205           移动CMI    [普通线路]</span></span>
<span class="line"><span>北京电信v6 2400:89c0:1053:3::69     电信163    [普通线路]</span></span>
<span class="line"><span>北京联通v6 2400:89c0:1013:3::54     联通4837   [普通线路]</span></span>
<span class="line"><span>北京移动v6 2409:8c00:8421:1303::55  移动CMIN2  [精品线路]</span></span>
<span class="line"><span>上海电信v6 240e:e1:aa00:4000::24    电信163    [普通线路]</span></span>
<span class="line"><span>上海联通v6 2408:80f1:21:5003::a     联通4837   [普通线路]</span></span>
<span class="line"><span>上海移动v6 2409:8c1e:75b0:3003::26  移动CMI    [普通线路]</span></span>
<span class="line"><span>广州电信v6 240e:97c:2f:3000::44     电信163    [普通线路]</span></span>
<span class="line"><span>广州联通v6 2408:8756:f50:1001::c    联通4837   [普通线路]</span></span>
<span class="line"><span>广州移动v6 2409:8c54:871:1001::12   检测不到回程路由节点的IPV6地址</span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，检测可能已越过汇聚层，除第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>----------------------回程路由--基于nexttrace开源-----------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>0.37 ms 	AS197540 德国 黑森州 美因河畔法兰克福 netcup.de</span></span>
<span class="line"><span>1.15 ms 	AS1299 [TELIANET] 德国 巴伐利亚 纽伦堡 arelion.com</span></span>
<span class="line"><span>3.76 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>5.89 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>7.04 ms 	AS4134 [CHINANET-BB] 德国 黑森 美因河畔法兰克福 CT-POP chinatelecom.com.cn 电信</span></span>
<span class="line"><span>199.15 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 chinatelecom.com.cn</span></span>
<span class="line"><span>207.86 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 chinatelecom.com.cn</span></span>
<span class="line"><span>190.50 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 chinatelecom.com.cn</span></span>
<span class="line"><span>199.18 ms 	AS4134 [CHINANET-GD] 中国 广东 深圳 chinatelecom.com.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>1.53 ms 	AS197540 德国 黑森州 美因河畔法兰克福 netcup.de</span></span>
<span class="line"><span>0.65 ms 	AS1299 [TELIANET] 德国 巴伐利亚 纽伦堡 arelion.com</span></span>
<span class="line"><span>8.68 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>10.50 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>0.62 ms 	AS197540 德国 黑森州 美因河畔法兰克福 netcup.de</span></span>
<span class="line"><span>3.85 ms 	AS1299 [TELIANET] 德国 巴伐利亚 纽伦堡 arelion.com</span></span>
<span class="line"><span>3.60 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>5.63 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>4.52 ms 	AS1299 [ARELION-NET] 德国 黑森 美因河畔法兰克福 Telia-CM-Cust arelion.com</span></span>
<span class="line"><span>4.94 ms 	AS58453 [CMI-INT] 德国 黑森 美茵河畔法兰克福 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>116.20 ms 	AS58453 [CMI-INT] 德国 黑森 美茵河畔法兰克福 cmi.chinamobile.com</span></span>
<span class="line"><span>195.98 ms 	AS58453 [CMI-INT] 中国 广东 广州 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>174.51 ms 	AS9808 [CMNET] 中国 广东 广州 X-I chinamobileltd.com 移动</span></span>
<span class="line"><span>180.96 ms 	AS9808 [CMNET] 中国 广东 广州 I-C chinamobileltd.com 移动</span></span>
<span class="line"><span>159.50 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>162.04 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>164.16 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>162.02 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>---------------------自动更新测速节点列表--本脚本原创----------------------</span></span>
<span class="line"><span>位置		 上传速度	 下载速度	 延迟</span></span>
<span class="line"><span>Speedtest.net	 923.74Mbps	 974.56Mbps	 1.28ms</span></span>
<span class="line"><span>法兰克福	 2104.96Mbps	 2103.84Mbps	 6.98ms</span></span>
<span class="line"><span>中国香港	 146.14Mbps	 227.26Mbps	 174.52ms</span></span>
<span class="line"><span>联通上海5G	 0.46Mbps	 0.00Mbps	 265.91ms</span></span>
<span class="line"><span>电信Suzhou5G	 181.78Mbps	 138.64Mbps	 163.65ms</span></span>
<span class="line"><span>电信Zhenjiang5G	 0.66Mbps	 140.74Mbps	 251.26ms</span></span>
<span class="line"><span>移动Suzhou	 0.00Mbps	 0.20Mbps	 2.02ms</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span>总共花费      : 5 分 24 秒</span></span>
<span class="line"><span>时间          : Tue Feb 24 20:02:48 CST 2026</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[我抽空写了3个rspress插件]]></title>
            <link>https://www.tteam.icu/blog/dev/我抽空写了3个rspress插件</link>
            <guid isPermaLink="false">/blog/dev/我抽空写了3个rspress插件</guid>
            <pubDate>Sun, 01 Mar 2026 21:30:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="我抽空写了3个rspress插件"><a href="#我抽空写了3个rspress插件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>我抽空写了3个rspress插件<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>我之前提过把<a href="/blog/dev/笔记从vuepress迁移到rspress" class="rp-link">笔记从<code>vuepress</code>迁移到<code>rspress</code></a></p>
<h2 class="rp-toc-include" id="现状"><a href="#现状" class="rp-header-anchor rp-link" aria-hidden="true">#</a>现状</h2>
<h3 class="rp-toc-include" id="官方"><a href="#官方" class="rp-header-anchor rp-link" aria-hidden="true">#</a>官方</h3>
<p>在这么多月之后，<code>rspress</code>官方已经支持类似与<code>vuepress</code>的<code>@[code](./foo.js)</code>类似的语法了:</p>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>```file=&quot;../1212.js&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>所以我把我写的那个插件又迁移到官方的模式了</p>
<p><img src="https://img.tteam.icu/i/2026/03/01/cbce225b.webp" alt=""/></p>
<h3 class="rp-toc-include" id="我现在使用的库"><a href="#我现在使用的库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>我现在使用的库</h3>
<p><img src="https://img.tteam.icu/i/2026/03/01/2af16a01.webp" alt=""/></p>
<h4 class="rp-toc-include" id="自动侧边栏"><a href="#自动侧边栏" class="rp-header-anchor rp-link" aria-hidden="true">#</a>自动侧边栏</h4>
<p><a href="https://github.com/buyfakett/rspress-plugin-auto-sidebar" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p>
<p>只需要按规则定义好导航栏，就会自动搜索导航栏指定的目录，并自动生成侧边栏</p>
<p><img src="https://img.tteam.icu/i/2026/03/01/4fa09e73.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2026/03/01/a46dc8b8.webp" alt=""/></p>
<h4 class="rp-toc-include" id="giscus评论插件"><a href="#giscus评论插件" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>giscus</code>评论插件</h4>
<p><a href="https://github.com/buyfakett/rspress-plugin-giscus" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p>
<p>会在每篇文章下面增加<code>giscus</code>评论</p>
<p><img src="https://img.tteam.icu/i/2026/03/01/e3f0cee5.webp" alt=""/></p>
<h4 class="rp-toc-include" id="地图插件"><a href="#地图插件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>地图插件</h4>
<p><a href="https://github.com/buyfakett/rspress-plugin-map" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p>
<p>这个插件的灵感来自于<a href="https://github.com/kuole-o/hexo-tag-map" target="_blank" rel="noopener noreferrer" class="rp-link">hexo-tag-map</a>,让<code>rspress</code>支持各家地图</p>
<p>这个插件暂时还没用在我的网站中，打算未来等官方适配或者自己适配一下博客样式后接入吧，以下是现在的状态:</p>
<div class="rp-codeblock language-mdx"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="mdx"><code><span class="line"><span style="color:var(--shiki-foreground)">&lt;</span><span style="color:var(--shiki-token-string-expression)">rspress-map</span><span style="color:var(--shiki-token-function)"> type</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;gaode&quot;</span><span style="color:var(--shiki-token-function)"> lat</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;22.538718&quot;</span><span style="color:var(--shiki-token-function)"> lng</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;114.080723&quot;</span><span style="color:var(--shiki-foreground)"> /&gt;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="https://img.tteam.icu/i/2026/03/01/96c4312a.webp" alt=""/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[年度计划 2026]]></title>
            <link>https://www.tteam.icu/blog/plans/year/Y2026</link>
            <guid isPermaLink="false">/blog/plans/year/Y2026</guid>
            <pubDate>Mon, 19 Jan 2026 23:24:55 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="年度计划-2026"><a href="#年度计划-2026" class="rp-header-anchor rp-link" aria-hidden="true">#</a>年度计划 2026<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>这篇文章是我在新的一年的展望，还是希望自己的拖延症能减小一点</p>
<p>在博客里立了<code>flag</code>后，希望这里的大半都能实现</p>
<p>这篇文章也会持续新增<code>flag</code>，也会把完成的勾上</p>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled=""/> 尝试学习夸端APP框架</li>
</ul>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled=""/> 把<code>k8s</code>学习，并设计出一套<code>devops</code>方案，让自己容错率更大</li>
</ul>
<h2 class="rp-toc-include" id="构想的项目"><a href="#构想的项目" class="rp-header-anchor rp-link" aria-hidden="true">#</a>构想的项目</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled=""/> 用夸端APP框架写点自己用的APP</li>
</ul>
<h2 class="rp-toc-include" id="想去的地方"><a href="#想去的地方" class="rp-header-anchor rp-link" aria-hidden="true">#</a>想去的地方</h2>
<ul class="contains-task-list">
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 日本</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 云南</p>
</li>
</ul><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[年报 2025]]></title>
            <link>https://www.tteam.icu/blog/record/yearly/Y2025</link>
            <guid isPermaLink="false">/blog/record/yearly/Y2025</guid>
            <pubDate>Sun, 11 Jan 2026 23:24:55 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="year-2025"><a href="#year-2025" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Year 2025<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结</h2>
<p>在这一年，我去过成都、上海、广州、香港、澳门、厦门这几个地方
<code>开发</code>方面，<code>react</code>和<code>golang</code>技术栈更精通了
<code>运维</code>方面，对各种系统的配置文件、组件更熟系了，各种经验不断
<code>vps</code>方面，今年支出了约3k
<code>体重</code>方面，去年下降的20斤又涨回来了</p>
<h2 class="rp-toc-include" id="附录"><a href="#附录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>附录</h2>
<h3 class="rp-toc-include" id="github报告"><a href="#github报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>github</code>报告</h3>
<h4 class="rp-toc-include" id="年报视频"><a href="#年报视频" class="rp-header-anchor rp-link" aria-hidden="true">#</a>年报视频</h4>
<p><a href="https://www.bilibili.com/video/BV1wPiMBJEYj" target="_blank" rel="noopener noreferrer" class="rp-link">点我跳转</a></p>
<h4 class="rp-toc-include" id="贡献图"><a href="#贡献图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>贡献图</h4>
<p><img src="https://img.tteam.icu/i/2026/01/11/f785a180.webp" alt=""/></p>
<h3 class="rp-toc-include" id="wakatime报告"><a href="#wakatime报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>wakatime</code>报告</h3>
<p><a href="https://wakatime.com/a-look-back-at-2025/4767af51-0897-4e08-b59b-a51391cac892/sncxzbidnf" target="_blank" rel="noopener noreferrer" class="rp-link">点我跳转</a></p>
<h3 class="rp-toc-include" id="各大app报告"><a href="#各大app报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a>各大app报告</h3>
<h4 class="rp-toc-include" id="高德地图"><a href="#高德地图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>高德地图</h4>
<p><img src="https://img.tteam.icu/i/2026/01/11/c1cb0b92.webp" alt=""/></p>
<h4 class="rp-toc-include" id="网易云音乐"><a href="#网易云音乐" class="rp-header-anchor rp-link" aria-hidden="true">#</a>网易云音乐</h4>
<p><img src="https://img.tteam.icu/i/2026/01/11/8aa44d42.webp" alt=""/></p>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>我转岗运维2年了
已经干到了公司运维的二把手了
也在空余时间多学习和开发
希望在新的一年能够在开发和运维方面更进一步</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[自己写了个个人使用的图床]]></title>
            <link>https://www.tteam.icu/blog/dev/自己写了个个人使用的图床</link>
            <guid isPermaLink="false">/blog/dev/自己写了个个人使用的图床</guid>
            <pubDate>Sat, 29 Nov 2025 22:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="自己写了个个人使用的图床"><a href="#自己写了个个人使用的图床" class="rp-header-anchor rp-link" aria-hidden="true">#</a>自己写了个个人使用的图床<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="背景"><a href="#背景" class="rp-header-anchor rp-link" aria-hidden="true">#</a>背景</h2>
<p>之前调查过市面上的可以免费自建的图床服务，都不是很符合我的需求</p>
<p>之前用的图床是自建的<a href="https://github.com/icret/EasyImages2.0" target="_blank" rel="noopener noreferrer" class="rp-link">easyimage</a>，但是用这个图床有些痛点</p>
<ul>
<li>
<p>后台和图片的域名分离</p>
</li>
<li>
<p>不支持iphone的HEIC格式</p>
</li>
<li>
<p>配置和图片混在一起，而且需要高权限才能使用</p>
</li>
</ul>
<h2 class="rp-toc-include" id="实现"><a href="#实现" class="rp-header-anchor rp-link" aria-hidden="true">#</a>实现</h2>
<p>所以我乘着休息时间，使用golang+react写了一个图床服务，把之前的痛点都解决了</p>
<p>开源地址：<a href="https://github.com/buyfakett/easyimage-go-web" target="_blank" rel="noopener noreferrer" class="rp-link">前端</a>、<a href="https://github.com/buyfakett/easyimage-go" target="_blank" rel="noopener noreferrer" class="rp-link">后端</a></p>
<p>把之前的配置和缓存目录替换后，配置单个文件直接启动，可以直接平滑迁移</p>
<h2 class="rp-toc-include" id="快速部署"><a href="#快速部署" class="rp-header-anchor rp-link" aria-hidden="true">#</a>快速部署</h2>
<h3 class="rp-toc-include" id="docker-compose"><a href="#docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Docker compose</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    easyimage_go</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> buyfakett/easyimage_go</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> easyimage_go</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        network_mode</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> host</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            - </span><span style="color:var(--shiki-token-string-expression)">./config/config.yaml:/app/config.yaml:ro</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            - </span><span style="color:var(--shiki-token-string-expression)">./i:/app/i</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        command</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> --config=/app/config.yaml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="配置文件"><a href="#配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置文件</h3>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>server:</span></span>
<span class="line"><span>  port: 8080                    # 服务端口</span></span>
<span class="line"><span>  domain: http://localhost:8080 # 服务域名(用于拼接图片url)</span></span>
<span class="line"><span>  token: 123456                 # 鉴权token(用于鉴权)</span></span>
<span class="line"><span>image:</span></span>
<span class="line"><span>  uri: /i                       # 图片存储路径(相对路径)</span></span>
<span class="line"><span>  webp_quality: 100             # webp压缩质量(0-100)</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="项目截图"><a href="#项目截图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>项目截图</h2>
<p><img src="https://img.tteam.icu/i/2025/11/29/3c19a769.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/11/29/5d612700.webp" alt=""/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】hetzner]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】hetnzer</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】hetnzer</guid>
            <pubDate>Wed, 24 Sep 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="hetzner"><a href="#hetzner" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://hetzner.com/" target="_blank" rel="noopener noreferrer" class="rp-link">hetzner</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>Hetzner 是一家德国公司，在纽伦堡和法尔肯施泰因（均位于德国）以及芬兰赫尔辛基拥有并运营自己的高科技数据中心</p>
<p>人称欧洲的<code>阿里云</code></p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : Intel Xeon Processor (Skylake, IBRS, no TSX)</span></span>
<span class="line"><span> CPU 核心数        : 2</span></span>
<span class="line"><span> CPU 频率          : 2294.608 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 64.00 KB / L2: 8.00 MB / L3: 16.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span> 内存              : 215.50 MiB / 3.74 GiB</span></span>
<span class="line"><span> Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span> 硬盘空间          : 2.03 GiB / 37.24 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/sda1</span></span>
<span class="line"><span> 系统在线时间      : 0 days, 0 hour 2 min</span></span>
<span class="line"><span> 负载              : 0.40, 0.21, 0.08</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 13 (trixie) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 6.12.48+deb13-cloud-amd64</span></span>
<span class="line"><span> TCP加速方式       : cubic</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> IPV4 ASN          : AS24940 Hetzner Online GmbH</span></span>
<span class="line"><span> IPV4 位置         : Falkenstein / Saxony / DE</span></span>
<span class="line"><span> IPV6 ASN          : AS24940 Hetzner Online GmbH</span></span>
<span class="line"><span> IPV6 位置         : Falkenstein / Saxony / Germany</span></span>
<span class="line"><span> IPV6 子网掩码     : 64</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分: 		850 Scores</span></span>
<span class="line"><span> 2 线程测试(多核)得分: 		1680 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:		17470.73 MB/s</span></span>
<span class="line"><span> 单线程写测试:		13769.45 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作		写速度					读速度</span></span>
<span class="line"><span> 100MB-4K Block		22.6 MB/s (5525 IOPS, 4.63s)		32.9 MB/s (8029 IOPS, 3.19s)</span></span>
<span class="line"><span> 1GB-1M Block		908 MB/s (866 IOPS, 1.15s)		1.5 GB/s (1389 IOPS, 0.72s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 101.23 MB/s  (25.3k) | 1.12 GB/s    (17.5k)</span></span>
<span class="line"><span>Write      | 101.50 MB/s  (25.3k) | 1.13 GB/s    (17.6k)</span></span>
<span class="line"><span>Total      | 202.74 MB/s  (50.6k) | 2.25 GB/s    (35.2k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 1.65 GB/s     (3.2k) | 1.44 GB/s     (1.4k)</span></span>
<span class="line"><span>Write      | 1.74 GB/s     (3.4k) | 1.54 GB/s     (1.5k)</span></span>
<span class="line"><span>Total      | 3.40 GB/s     (6.6k) | 2.98 GB/s     (2.9k)</span></span>
<span class="line"><span>正在并发测试中，大概2~3分钟无输出，请耐心等待。。。</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP完整解锁Netflix，支持非自制剧的观看</span></span>
<span class="line"><span>NF所识别的IP地域信息：德国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的出口IP完整解锁Netflix，支持非自制剧的观看</span></span>
<span class="line"><span>NF所识别的IP地域信息：德国</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 德国法兰克福(FRA16S31)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 德国法兰克福(FRA15S37)</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前IPv4出口所在地区即将开通DisneyPlus</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>当前IPv4出口所在地区即将开通DisneyPlus</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:					IP Banned by Dazn</span></span>
<span class="line"><span> Disney+:				No (IP Banned By Disney+ 1)</span></span>
<span class="line"><span> Netflix:				Originals Only</span></span>
<span class="line"><span> YouTube Premium:			Yes (Region: DE)</span></span>
<span class="line"><span> Amazon Prime Video:			Yes (Region: DE)</span></span>
<span class="line"><span> TVBAnywhere+:				Yes</span></span>
<span class="line"><span> Spotify Registration:			No</span></span>
<span class="line"><span> OneTrust Region:			DE [Saxony]</span></span>
<span class="line"><span> iQyi Oversea Region:			DE</span></span>
<span class="line"><span> Bing Region:				DE (Risky)</span></span>
<span class="line"><span> Apple Region:				DE</span></span>
<span class="line"><span> YouTube CDN:				Frankfurt</span></span>
<span class="line"><span> Netflix Preferred CDN:			Vienna</span></span>
<span class="line"><span> ChatGPT:				Yes</span></span>
<span class="line"><span> Google Gemini:				No</span></span>
<span class="line"><span> Claude:				Yes</span></span>
<span class="line"><span> Wikipedia Editability:			Yes</span></span>
<span class="line"><span> Google Play Store:			Germany </span></span>
<span class="line"><span> Google Search CAPTCHA Free:		Yes</span></span>
<span class="line"><span> Steam Currency:			EUR</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:				No</span></span>
<span class="line"><span> ---Game---</span></span>
<span class="line"><span> SD Gundam G Generation Eternal:	No</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:					IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Disney+:				IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Netflix:				Originals Only</span></span>
<span class="line"><span> YouTube Premium:			Yes (Region: DE)</span></span>
<span class="line"><span> Amazon Prime Video:			IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> TVBAnywhere+:				IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Spotify Registration:			No</span></span>
<span class="line"><span> OneTrust Region:			DE [Saxony]</span></span>
<span class="line"><span> iQyi Oversea Region:			IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Bing Region:				DE (Risky)</span></span>
<span class="line"><span> Apple Region:				DE</span></span>
<span class="line"><span> YouTube CDN:				Frankfurt</span></span>
<span class="line"><span> Netflix Preferred CDN:			Vienna</span></span>
<span class="line"><span> ChatGPT:				Failed (Network Connection)</span></span>
<span class="line"><span> Google Gemini:				No</span></span>
<span class="line"><span> Claude:				Yes</span></span>
<span class="line"><span> Wikipedia Editability:			Yes</span></span>
<span class="line"><span> Google Play Store:			Germany </span></span>
<span class="line"><span> Google Search CAPTCHA Free:		Yes</span></span>
<span class="line"><span> Steam Currency:			IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:				IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> ---Game---</span></span>
<span class="line"><span> SD Gundam G Generation Eternal:	Failed (Network Connection)</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span>--------------------TikTok解锁--感谢lmc999的源脚本----------------------</span></span>
<span class="line"><span> Tiktok Region:		Failed</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | dkly数据库        [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 3 [8] </span></span>
<span class="line"><span>VPN得分(越低越好): 98 [8] </span></span>
<span class="line"><span>代理得分(越低越好): 91 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 100 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 65 [E] 0 [1]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3]</span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0016 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0.0006 (Low) [A] </span></span>
<span class="line"><span>威胁级别: low [9] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 95 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting [0 7 9 A] business [8] DataCenter/WebHosting/Transit [3] hosting - high probability [C]</span></span>
<span class="line"><span>公司类型: hosting [0 7 A] </span></span>
<span class="line"><span>是否云提供商: Yes [7] </span></span>
<span class="line"><span>是否数据中心: Yes [1 5 6 A C] No [0 8]</span></span>
<span class="line"><span>是否移动设备: No [5 A C] Yes [E]</span></span>
<span class="line"><span>是否代理: Yes [E] No [0 1 4 5 6 7 8 9 A C]</span></span>
<span class="line"><span>是否VPN: No [0 1 6 7 C] Yes [A E]</span></span>
<span class="line"><span>是否Tor: No [0 1 3 6 7 8 A C E] </span></span>
<span class="line"><span>是否Tor出口: No [1 7] </span></span>
<span class="line"><span>是否网络爬虫: No [9 A E] </span></span>
<span class="line"><span>是否匿名: No [1 6 7 8] </span></span>
<span class="line"><span>是否攻击者: No [7 8]</span></span>
<span class="line"><span>是否滥用者: No [7 8 A C E] </span></span>
<span class="line"><span>是否威胁: No [7 8 C] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C] </span></span>
<span class="line"><span>是否机器人: No [E] </span></span>
<span class="line"><span>DNS-黑名单: 315(Total_Check) 0(Clean) 9(Blacklisted) 25(Other) </span></span>
<span class="line"><span>IPV6:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>欺诈得分(越低越好): 8 [1] </span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3]</span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0016 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A]</span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: DataCenter/WebHosting/Transit [3] hosting [A]</span></span>
<span class="line"><span>公司类型: hosting [A] </span></span>
<span class="line"><span>是否数据中心: Yes [1 A] </span></span>
<span class="line"><span>是否移动设备: No [A] </span></span>
<span class="line"><span>是否代理: No [1 A] </span></span>
<span class="line"><span>是否VPN: No [1 A] </span></span>
<span class="line"><span>是否TorExit: No [1] </span></span>
<span class="line"><span>是否Tor出口: No [1] </span></span>
<span class="line"><span>是否网络爬虫: No [A] </span></span>
<span class="line"><span>是否匿名: No [1] </span></span>
<span class="line"><span>是否滥用者: No [A] </span></span>
<span class="line"><span>是否Bogon: No [A] </span></span>
<span class="line"><span>DNS-黑名单: 315(Total_Check) 0(Clean) 0(Blacklisted) 315(Other) </span></span>
<span class="line"><span>Google搜索可行性：NO</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✘     ✘     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Apple     ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>FastMail  ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ProtonMail✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MXRoute   ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Namecrane ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ZohoMail  ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Inbox_eu  ✘     ✘     ✔     ✘     ✘     ✘    </span></span>
<span class="line"><span>Free_fr   ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>-------------上游及三网回程--基于oneclickvirt/backtrace开源-------------</span></span>
<span class="line"><span>国家: DE 城市: Falkenstein 服务商: AS24940 Hetzner Online GmbH</span></span>
<span class="line"><span>      AS174             AS1299            AS2914            AS3320            AS3356      </span></span>
<span class="line"><span>      Cogent           Arelion             NTT               DTAG             Lumen       </span></span>
<span class="line"><span>   Tier1 Global      Tier1 Global      Tier1 Global      Tier1 Global      Tier1 Global   </span></span>
<span class="line"><span>      AS6453            AS6461            AS6762           AS33891      </span></span>
<span class="line"><span>       Tata              Zayo            Sparkle      Core-Backbone GmbH</span></span>
<span class="line"><span>   Tier1 Global      Tier1 Global      Tier1 Global         Direct      </span></span>
<span class="line"><span>北京电信v4 219.141.140.10  检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>北京联通v4 202.106.195.68  检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>北京移动v4 221.179.155.161          移动CMI    [普通线路] </span></span>
<span class="line"><span>上海电信v4 202.96.209.133           电信163    [普通线路] </span></span>
<span class="line"><span>上海联通v4 210.22.97.1     检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>上海移动v4 211.136.112.200          移动CMI    [普通线路] </span></span>
<span class="line"><span>广州电信v4 58.60.188.222            电信163    [普通线路] </span></span>
<span class="line"><span>广州联通v4 210.21.196.6             联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动v4 120.196.165.24           移动CMI    [普通线路] </span></span>
<span class="line"><span>成都电信v4 61.139.2.69              电信163    [普通线路] </span></span>
<span class="line"><span>成都联通v4 119.6.6.6       检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>成都移动v4 211.137.96.205           移动CMI    [普通线路] 移动CMIN2  [精品线路] </span></span>
<span class="line"><span>北京电信v6 2400:89c0:1053:3::69     电信163    [普通线路] </span></span>
<span class="line"><span>北京联通v6 2400:89c0:1013:3::54     检测不到回程路由节点的IPV6地址</span></span>
<span class="line"><span>北京移动v6 2409:8c00:8421:1303::55  移动CMIN2  [精品线路] 移动CMI    [普通线路] </span></span>
<span class="line"><span>上海电信v6 240e:e1:aa00:4000::24    电信163    [普通线路] </span></span>
<span class="line"><span>上海联通v6 2408:80f1:21:5003::a     检测不到回程路由节点的IPV6地址</span></span>
<span class="line"><span>上海移动v6 2409:8c1e:75b0:3003::26  移动CMIN2  [精品线路] 移动CMI    [普通线路] </span></span>
<span class="line"><span>广州电信v6 240e:97c:2f:3000::44     电信163    [普通线路] </span></span>
<span class="line"><span>广州联通v6 2408:8756:f50:1001::c    检测不到回程路由节点的IPV6地址</span></span>
<span class="line"><span>广州移动v6 2409:8c54:871:1001::12   移动CMIN2  [精品线路] 移动CMI    [普通线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，检测可能已越过汇聚层，除第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>-----------------------回程路由--基于nexttrace开源----------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>8.59 ms 	* RFC1918</span></span>
<span class="line"><span>4.29 ms 	AS24940 德国 萨克森自由州 法尔肯施泰因 hetzner.com</span></span>
<span class="line"><span>1.79 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>14.05 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>5.02 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>6.00 ms 	AS24940 [DE-HETZNER] 德国 黑森 美因河畔法兰克福 hetzner.com</span></span>
<span class="line"><span>6.52 ms 	AS24940 [DE-HETZNER] 德国 黑森 美因河畔法兰克福 hetzner.com</span></span>
<span class="line"><span>7.61 ms 	AS4134 德国 黑森州 美因河畔法兰克福 www.chinatelecom.com.cn</span></span>
<span class="line"><span>182.63 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>* ms 	AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn</span></span>
<span class="line"><span>* ms 	AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn</span></span>
<span class="line"><span>* ms 	AS134774 [CHINANET-GD] 中国 广东 深圳 chinatelecom.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>2.78 ms 	* RFC1918</span></span>
<span class="line"><span>0.61 ms 	AS24940 德国 萨克森自由州 法尔肯施泰因 hetzner.com</span></span>
<span class="line"><span>1.49 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>838.95 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>1.16 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>4.27 ms 	AS29802 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hivelocity.net</span></span>
<span class="line"><span>11.97 ms 	AS1299 [ARELION-NET] 德国 汉堡 汉堡 arelion.com</span></span>
<span class="line"><span>12.02 ms 	AS1299 [ARELION-NET] 德国 汉堡 汉堡 arelion.com</span></span>
<span class="line"><span>20.10 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>27.27 ms 	AS1299 [ARELION-NET] 德国 黑森州 美因河畔法兰克福 arelion.com</span></span>
<span class="line"><span>* ms 	AS4837 [CU169-BACKBONE] 中国 北京 chinaunicom.cn 联通</span></span>
<span class="line"><span>165.30 ms 	AS4837 [CU169-BACKBONE] 中国 北京 chinaunicom.cn 联通</span></span>
<span class="line"><span>* ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn 联通</span></span>
<span class="line"><span>185.72 ms 	AS17623 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>194.45 ms 	AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>2.55 ms 	* RFC1918</span></span>
<span class="line"><span>1.10 ms 	AS24940 德国 萨克森自由州 法尔肯施泰因 hetzner.com</span></span>
<span class="line"><span>1.62 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>1.21 ms 	AS24940 [DE-HETZNER] 德国 莱茵兰-普法尔茨州 法尔肯斯泰因 hetzner.com</span></span>
<span class="line"><span>5.59 ms 	AS24940 [DE-HETZNER] 德国 黑森 美因河畔法兰克福 hetzner.com</span></span>
<span class="line"><span>13.09 ms 	AS58453 [DE-CIX] 德国 黑森 美因河畔法兰克福 DE-CIX Frankfurt - China Mobile International - 100Gbps cmi.chinamobile.com</span></span>
<span class="line"><span>11.71 ms 	AS58453 [CMI-INT] 德国 黑森 美茵河畔法兰克福 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>231.19 ms 	AS58453 [CMI-INT] 德国 黑森 美因河畔法兰克福 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>226.62 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>220.63 ms 	AS9808 [CMNET] 中国 广东 广州 I-C chinamobileltd.com 移动</span></span>
<span class="line"><span>226.76 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>233.71 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>229.78 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置		 上传速度	 下载速度	 延迟</span></span>
<span class="line"><span>Speedtest.net	 903.49Mbps	 901.69Mbps	 924.51ms	</span></span>
<span class="line"><span>法兰克福	 1420.99Mbps	 2254.96Mbps	 6.20ms	</span></span>
<span class="line"><span>洛杉矶		 41.76Mbps	 128.92Mbps	 144.94ms	</span></span>
<span class="line"><span>联通上海5G	 0.05Mbps	 0.01Mbps	 548.45ms	</span></span>
<span class="line"><span>电信Suzhou5G	 89.05Mbps	 125.07Mbps	 169.85ms	</span></span>
<span class="line"><span>电信Zhenjiang5G	 0.22Mbps	 9.37Mbps	 357.14ms	</span></span>
<span class="line"><span>移动Suzhou	 0.40Mbps	 0.06Mbps	 530.79ms	</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 5 分 20 秒</span></span>
<span class="line"><span> 时间          : Tal Way 23  7:47:45 carra CST 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[rustfs是否可以替代minio]]></title>
            <link>https://www.tteam.icu/blog/ops/rustfs是否可以替代minio</link>
            <guid isPermaLink="false">/blog/ops/rustfs是否可以替代minio</guid>
            <pubDate>Thu, 14 Aug 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="rustfs是否可以替代minio"><a href="#rustfs是否可以替代minio" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>rustfs</code>是否可以替代<code>minio</code> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>从今年差不多年中开始，<code>minio</code>删除了大部分<code>webui</code>的代码，需要收费</p>
<p>当时我也啥都不知道，直接升级了，结果进去后才发现</p>
<p>虽然依旧可以使用mc去操作所有东西(我平时也经常用),但是没有<code>webui</code>多少有点不舒服</p>
<p>我部署在大盘鸡上，性能方面也是我比较看重的地方</p>
<p>这时候我发现了<code>rustfs</code>，我开始了测试</p>
<h2 class="rp-toc-include" id="ui"><a href="#ui" class="rp-header-anchor rp-link" aria-hidden="true">#</a>ui</h2>
<p>ui方面还不错</p>
<p><img src="https://img.tteam.icu/i/2025/08/14/p8smt9-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="性能测试"><a href="#性能测试" class="rp-header-anchor rp-link" aria-hidden="true">#</a>性能测试</h2>
<p>我测试了<code>300GB+</code>的数据，<code>minio</code>和<code>rustfs</code>之前互相传</p>
<p>机器为腾讯轻量云上海<code>2c2gswap4g</code>，使用<code>docker</code>部署<code>nginx</code>、<code>minio</code>和<code>rustfs</code>，数据盘1T挂载</p>
<p>使用rclone v1.70.3 debian 13.0 (64 bit) 6.12.41+deb13-amd64 (x86_64) AMD EPYC 7K62 48-Core Processor</p>
<p>使用命令<code>rclone sync -P --transfers 3 test:/test txy:/backup2</code></p>
<p><code>rustfs</code>出<code>minio</code>进</p>
<p><img src="https://img.tteam.icu/i/2025/08/14/p73yxe-3.webp" alt=""/></p>
<p><code>minio</code>出<code>rustfs</code>进</p>
<p><img src="https://img.tteam.icu/i/2025/08/14/p7zzrg-3.webp" alt=""/></p>
<p>内存方面相差非常大</p>
<h2 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结</h2>
<p><code>rustfs</code>完全兼容<code>minio</code>和<code>s3</code>，甚至命令行工具都使用<code>mc</code></p>
<p>性能观察下来还是很不错的</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[轻量化收集日志]]></title>
            <link>https://www.tteam.icu/blog/ops/轻量化收集日志</link>
            <guid isPermaLink="false">/blog/ops/轻量化收集日志</guid>
            <pubDate>Wed, 06 Aug 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="轻量化收集日志"><a href="#轻量化收集日志" class="rp-header-anchor rp-link" aria-hidden="true">#</a>轻量化收集日志<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="背景"><a href="#背景" class="rp-header-anchor rp-link" aria-hidden="true">#</a>背景</h2>
<p>最近在做一个项目，需要收集日志/埋点数据，需求是轻量化收集</p>
<p>正常我们的项目的埋点或者日志都是想方设法发送到生产端的<code>kafka</code>节点，但是<code>kafka</code>是<code>java</code>服务过于吃性能了</p>
<h2 class="rp-toc-include" id="方案"><a href="#方案" class="rp-header-anchor rp-link" aria-hidden="true">#</a>方案</h2>
<p>由研发让服务写到本地文件</p>
<p>运维使用<code>filebeat</code>发送到<code>redis</code>，然后在用<code>vector</code>消费入库</p>
<p>也就是在生产端只要运行<code>filebeat</code>和<code>redis</code>即可</p>
<h2 class="rp-toc-include" id="实现"><a href="#实现" class="rp-header-anchor rp-link" aria-hidden="true">#</a>实现</h2>
<p>我把实现放在了<a href="https://note.tteam.icu/ops/log/%E8%BD%BB%E9%87%8F%E5%8C%96%E6%94%B6%E9%9B%86%E4%B8%8E%E6%B6%88%E8%B4%B9.html" target="_blank" rel="noopener noreferrer" class="rp-link">这里</a></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[笔记从vuepress迁移到rspress]]></title>
            <link>https://www.tteam.icu/blog/dev/笔记从vuepress迁移到rspress</link>
            <guid isPermaLink="false">/blog/dev/笔记从vuepress迁移到rspress</guid>
            <pubDate>Thu, 31 Jul 2025 22:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="笔记从vuepress迁移到rspress"><a href="#笔记从vuepress迁移到rspress" class="rp-header-anchor rp-link" aria-hidden="true">#</a>笔记从<code>vuepress</code>迁移到<code>rspress</code> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p><a href="https://note.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">笔记站</a></p>
<p>我旧版笔记是用<code>vuepress</code>写的，由于<code>vuepress</code>的维护者不再维护，而且有些bug</p>
<p>我也尝试过<code>vitepress</code>，但是<code>vitepress</code>的编译速度也很慢，而且社区不活跃</p>
<p>编译速度也奇慢无比，所以我决定迁移到<code>rspress</code>上面</p>
<p><code>rspress</code>是用<code>rust</code>进行的，编译速度非常快，而且现阶段社区也很活跃</p>
<h2 class="rp-toc-include" id="迁移痛点"><a href="#迁移痛点" class="rp-header-anchor rp-link" aria-hidden="true">#</a>迁移痛点</h2>
<h3 class="rp-toc-include" id="code-group"><a href="#code-group" class="rp-header-anchor rp-link" aria-hidden="true">#</a>code-group</h3>
<p>需要把所有的语法迁移成&quot;<tab>&quot;</tab></p>
<h3 class="rp-toc-include" id="引用代码块"><a href="#引用代码块" class="rp-header-anchor rp-link" aria-hidden="true">#</a>引用代码块</h3>
<p>之前笔记大量用到<code>@[code](./foo.js)</code>的语法，用这种语法引入文件并且渲染成代码块，可以保持<code>markdown</code>文件的整洁</p>
<p>然而<code>rspress</code>原生并不支持这种语法, 于是我写了个插件<a href="https://github.com/buyfakett/rspress-plugin-code" target="_blank" rel="noopener noreferrer" class="rp-link">rspress-plugin-code</a>来支持</p>
<h3 class="rp-toc-include" id="自动生成侧边栏和导航栏"><a href="#自动生成侧边栏和导航栏" class="rp-header-anchor rp-link" aria-hidden="true">#</a>自动生成侧边栏和导航栏</h3>
<p>让ai把原来的代码进行重构了一下，完美实现了自动生成侧边栏和导航栏</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】cloudcone]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】cloudcone</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】cloudcone</guid>
            <pubDate>Tue, 29 Jul 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="cloudcone"><a href="#cloudcone" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://app.cloudcone.com/?ref=12869" target="_blank" rel="noopener noreferrer" class="rp-link">cloudcone</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>CloudCone 是一家美国的VPS服务提供商，成立于2017年，主营业务是基于KVM架构的VPS和独立服务器，位于洛杉矶的MultaCom机房。CloudCone以其按小时计费、随时删除服务器、定期备份等特点而闻名。</p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz</span></span>
<span class="line"><span> CPU 核心数        : 2</span></span>
<span class="line"><span> CPU 频率          : 2699.998 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 32.00 KB / L2: 256.00 KB / L3: 30.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span> 内存              : 188.07 MiB / 1.92 GiB</span></span>
<span class="line"><span> Swap              : 0 KiB / 1022.98 MiB</span></span>
<span class="line"><span> 硬盘空间          : 1.72 GiB / 117.01 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/vda1</span></span>
<span class="line"><span> 系统在线时间      : 0 days, 0 hour 5 min</span></span>
<span class="line"><span> 负载              : 1.54, 0.76, 0.33</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 12 (bookworm) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 6.1.0-31-amd64</span></span>
<span class="line"><span> TCP加速方式       : cubic</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> NAT类型           : Full Cone</span></span>
<span class="line"><span> IPV4 ASN          : AS35916 MULTACOM CORPORATION</span></span>
<span class="line"><span> IPV4 位置         : Los Angeles / California / US</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分: 		800 Scores</span></span>
<span class="line"><span> 2 线程测试(多核)得分: 		1579 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:		16061.89 MB/s</span></span>
<span class="line"><span> 单线程写测试:		14643.82 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作		写速度					读速度</span></span>
<span class="line"><span> 100MB-4K Block		14.3 MB/s (3485 IOPS, 7.35s)		39.5 MB/s (9646 IOPS, 2.65s)</span></span>
<span class="line"><span> 1GB-1M Block		240 MB/s (229 IOPS, 4.36s)		2.7 GB/s (2620 IOPS, 0.38s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 8.46 MB/s     (2.1k) | 120.05 MB/s   (1.8k)</span></span>
<span class="line"><span>Write      | 8.51 MB/s     (2.1k) | 120.68 MB/s   (1.8k)</span></span>
<span class="line"><span>Total      | 16.97 MB/s    (4.2k) | 240.74 MB/s   (3.7k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 147.88 MB/s    (288) | 186.21 MB/s    (181)</span></span>
<span class="line"><span>Write      | 155.74 MB/s    (304) | 198.61 MB/s    (193)</span></span>
<span class="line"><span>Total      | 303.62 MB/s    (592) | 384.83 MB/s    (374)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP完整解锁Netflix，支持非自制剧的观看</span></span>
<span class="line"><span>NF所识别的IP地域信息：美国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的网络可能没有正常配置IPv6，或者没有IPv6网络接入</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 美国  洛杉机(LAX17S56)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>Youtube在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前IPv4出口所在地区即将开通DisneyPlus</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>DisneyPlus在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:					IP Banned by Dazn</span></span>
<span class="line"><span> Disney+:				No (IP Banned By Disney+ 1)</span></span>
<span class="line"><span> Netflix:				Originals Only</span></span>
<span class="line"><span> YouTube Premium:			Yes (Region: US)</span></span>
<span class="line"><span> Amazon Prime Video:			Yes (Region: US)</span></span>
<span class="line"><span> TVBAnywhere+:				Yes</span></span>
<span class="line"><span> Spotify Registration:			Yes (Region: US)</span></span>
<span class="line"><span> OneTrust Region:			US [California]</span></span>
<span class="line"><span> iQyi Oversea Region:			US</span></span>
<span class="line"><span> Bing Region:				US (Risky)</span></span>
<span class="line"><span> Apple Region:				US</span></span>
<span class="line"><span> YouTube CDN:				Los Angeles, CA</span></span>
<span class="line"><span> Netflix Preferred CDN:			Los Angeles, CA</span></span>
<span class="line"><span> ChatGPT:				Yes</span></span>
<span class="line"><span> Google Gemini:				Yes (Region: USA)</span></span>
<span class="line"><span> Claude:				Yes</span></span>
<span class="line"><span> Wikipedia Editability:			No</span></span>
<span class="line"><span> Google Play Store:			United States </span></span>
<span class="line"><span> Google Search CAPTCHA Free:		Yes</span></span>
<span class="line"><span> Steam Currency:			USD</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:				No</span></span>
<span class="line"><span> ---Game---</span></span>
<span class="line"><span> SD Gundam G Generation Eternal:	No</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>--------------------TikTok解锁--感谢lmc999的源脚本----------------------</span></span>
<span class="line"><span> Tiktok Region:		【US】</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | dkly数据库        [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 0 [8] </span></span>
<span class="line"><span>VPN得分(越低越好): 100 [8] </span></span>
<span class="line"><span>代理得分(越低越好): 100 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 100 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 65 [E] 50 [1]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3] </span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0002 (Very Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0.0024 (Low) [A]</span></span>
<span class="line"><span>威胁级别: low [9] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2] 无记录数: 94 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: DataCenter/WebHosting/Transit [3] business [8] corporate [9] isp [A] hosting [0 7] hosting - moderate probability [C]</span></span>
<span class="line"><span>公司类型: hosting [0] isp [7 A]</span></span>
<span class="line"><span>是否云提供商: Yes [7] </span></span>
<span class="line"><span>是否数据中心: Yes [0 1 5 6] No [8 A C]</span></span>
<span class="line"><span>是否移动设备: No [5 A C] Yes [E]</span></span>
<span class="line"><span>是否代理: No [0 1 4 5 6 7 8 9 A C] Yes [E]</span></span>
<span class="line"><span>是否VPN: Yes [A E] No [0 1 6 7 C]</span></span>
<span class="line"><span>是否Tor: No [0 1 3 6 7 8 A C E] </span></span>
<span class="line"><span>是否Tor出口: No [1 7] </span></span>
<span class="line"><span>是否网络爬虫: No [9 A E] </span></span>
<span class="line"><span>是否匿名: No [1 6 7 8] </span></span>
<span class="line"><span>是否攻击者: No [7 8] </span></span>
<span class="line"><span>是否滥用者: No [7 8 A C E] </span></span>
<span class="line"><span>是否威胁: No [7 8 C] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C] </span></span>
<span class="line"><span>是否机器人: No [E] </span></span>
<span class="line"><span>DNS-黑名单: 314(Total_Check) 0(Clean) 5(Blacklisted) 19(Other) </span></span>
<span class="line"><span>Google搜索可行性：NO</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✔     ✔     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Apple     ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>FastMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ProtonMail✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Namecrane ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    </span></span>
<span class="line"><span>Free_fr   ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信v4 219.141.140.10           电信163    [普通线路] </span></span>
<span class="line"><span>北京联通v4 202.106.195.68           联通4837   [普通线路] </span></span>
<span class="line"><span>北京移动v4 221.179.155.161          移动CMI    [普通线路] </span></span>
<span class="line"><span>上海电信v4 202.96.209.133           电信163    [普通线路] </span></span>
<span class="line"><span>上海联通v4 210.22.97.1              联通4837   [普通线路] </span></span>
<span class="line"><span>上海移动v4 211.136.112.200          移动CMI    [普通线路] </span></span>
<span class="line"><span>广州电信v4 58.60.188.222            电信163    [普通线路] </span></span>
<span class="line"><span>广州联通v4 210.21.196.6             联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动v4 120.196.165.24           移动CMI    [普通线路] </span></span>
<span class="line"><span>成都电信v4 61.139.2.69              电信163    [普通线路] </span></span>
<span class="line"><span>成都联通v4 119.6.6.6                联通4837   [普通线路] </span></span>
<span class="line"><span>成都移动v4 211.137.96.205           移动CMI    [普通线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>-----------------------回程路由--基于nexttrace开源----------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>0.86 ms 	AS35916 美国 加利福尼亚 洛杉矶 multacom.com</span></span>
<span class="line"><span>0.95 ms 	AS35916 美国 加利福尼亚州 洛杉矶 multacom.com</span></span>
<span class="line"><span>0.61 ms 	AS2914 [NTTA-128] 美国 加利福尼亚 洛杉矶 gin.ntt.net</span></span>
<span class="line"><span>1.06 ms 	AS2914 [NTT-BACKBONE] 美国 加利福尼亚 洛杉矶 gin.ntt.net</span></span>
<span class="line"><span>13.23 ms 	AS4134 [CHINANET-US] 美国 加利福尼亚 圣克拉拉 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>155.09 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>155.96 ms 	AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>164.83 ms 	AS4134 [APNIC-AP] 中国 广东 深圳 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>0.95 ms 	AS35916 美国 加利福尼亚 洛杉矶 multacom.com</span></span>
<span class="line"><span>0.96 ms 	AS35916 美国 加利福尼亚州 洛杉矶 multacom.com</span></span>
<span class="line"><span>1.43 ms 	AS174 [COGENT-BONE] 美国 加利福尼亚 洛杉矶 cogentco.com</span></span>
<span class="line"><span>167.13 ms 	AS174 美国 加利福尼亚 洛杉矶 cogentco.com</span></span>
<span class="line"><span>233.32 ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn 联通</span></span>
<span class="line"><span>222.96 ms 	AS17816 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>194.28 ms 	AS17623 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>175.73 ms 	AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>0.78 ms 	AS35916 美国 加利福尼亚 洛杉矶 multacom.com</span></span>
<span class="line"><span>1.16 ms 	AS35916 美国 加利福尼亚州 洛杉矶 multacom.com</span></span>
<span class="line"><span>0.96 ms 	AS2914 [NTTA-128] 美国 加利福尼亚 洛杉矶 gin.ntt.net</span></span>
<span class="line"><span>0.67 ms 	AS2914 [NTT-BACKBONE] 美国 加利福尼亚 洛杉矶 gin.ntt.net</span></span>
<span class="line"><span>161.01 ms 	AS2914 [NTT-BACKBONE] 日本 东京都 东京 gin.ntt.net</span></span>
<span class="line"><span>161.71 ms 	AS2914 [NTT-BACKBONE] 日本 东京都 东京 gin.ntt.net</span></span>
<span class="line"><span>154.59 ms 	AS2914 [NTT-BACKBONE] 中国 香港 gin.ntt.net</span></span>
<span class="line"><span>209.48 ms 	AS2914 [NTT-GLOBAL] 中国 香港 gin.ntt.net</span></span>
<span class="line"><span>209.09 ms 	AS58453 [CMI-INT] 中国 香港 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>153.85 ms 	AS58453 [CMI-INT] 中国 广东 广州 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>168.07 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>168.27 ms 	AS9808 [CMNET] 中国 广东 广州 I-C chinamobileltd.com 移动</span></span>
<span class="line"><span>161.52 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>165.33 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>165.53 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置		 上传速度	 下载速度	 延迟</span></span>
<span class="line"><span>Speedtest.net	 843.95Mbps	 891.40Mbps	 991.24ms	</span></span>
<span class="line"><span>洛杉矶		 843.60Mbps	 749.20Mbps	 1.14ms	</span></span>
<span class="line"><span>法兰克福	 2.09Mbps	 28.00Mbps	 162.73ms	</span></span>
<span class="line"><span>联通太原	 7.00 Mbps	 0.00 Mbps	 345.57310.00311.00	</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 5 分 51 秒</span></span>
<span class="line"><span> 时间          : Tue Jul 29 02:06:09 UTC 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[反向代理DDNS域名]]></title>
            <link>https://www.tteam.icu/blog/other/反向代理DDNS域名</link>
            <guid isPermaLink="false">/blog/other/反向代理DDNS域名</guid>
            <pubDate>Tue, 29 Jul 2025 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="反向代理ddns域名"><a href="#反向代理ddns域名" class="rp-header-anchor rp-link" aria-hidden="true">#</a>反向代理DDNS域名<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开头"><a href="#开头" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开头</h2>
<p>网友在家里开了个<code>emby</code>影视站，使用<code>DDNS</code>域名访问</p>
<p>但是我家的网络、健身房的网络、流量卡都被跨网qos了，导致访问异常慢</p>
<p>于是我想到了在他网站的前面用另一个域名就做一层转发，就可以实现三网直连了</p>
<h2 class="rp-toc-include" id="正确配置"><a href="#正确配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>正确配置</h2>
<div class="rp-codeblock language-nginx"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="nginx"><code><span class="line"><span style="color:var(--shiki-token-keyword)">server</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  listen </span><span style="color:var(--shiki-token-constant)">443</span><span style="color:var(--shiki-foreground)"> ssl;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  server_name </span><span style="color:var(--shiki-foreground)">xxx;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_certificate </span><span style="color:var(--shiki-foreground)">/data/ssl/xxx/fullchain.pem;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_certificate_key </span><span style="color:var(--shiki-foreground)">/data/ssl/xxx/privkey.pem;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_session_timeout </span><span style="color:var(--shiki-token-constant)">5m</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_protocols </span><span style="color:var(--shiki-foreground)">TLSv1 TLSv1.1 TLSv1.2;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_ciphers </span><span style="color:var(--shiki-foreground)">ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  resolver </span><span style="color:var(--shiki-token-constant)">8.8.8.8</span><span style="color:var(--shiki-token-constant)"> 114.114.114.114</span><span style="color:var(--shiki-foreground)"> valid=10s;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  set </span><span style="color:var(--shiki-foreground)">$target </span><span style="color:var(--shiki-token-string-expression)">&quot;xxx&quot;</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  location</span><span style="color:var(--shiki-foreground)"> / {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_pass </span><span style="color:var(--shiki-foreground)">https://$target:65082;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_ssl_server_name </span><span style="color:var(--shiki-token-constant)">on</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">Host xxx;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Real-IP $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">REMOTE-HOST $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">Upgrade $http_upgrade;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="错误配置"><a href="#错误配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>错误配置</h2>
<p>我一开始就用我常用的方式进行转发，发现好像不能作用于<code>DDNS</code>域名</p>
<div class="rp-codeblock language-nginx"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="nginx"><code><span class="line"><span style="color:var(--shiki-token-keyword)">server</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  listen </span><span style="color:var(--shiki-token-constant)">443</span><span style="color:var(--shiki-foreground)"> ssl;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  server_name </span><span style="color:var(--shiki-foreground)">xxx;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_certificate </span><span style="color:var(--shiki-foreground)">/data/ssl/xxx/fullchain.pem;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_certificate_key </span><span style="color:var(--shiki-foreground)">/data/ssl/xxx/privkey.pem;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_session_timeout </span><span style="color:var(--shiki-token-constant)">5m</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_protocols </span><span style="color:var(--shiki-foreground)">TLSv1 TLSv1.1 TLSv1.2;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  ssl_ciphers </span><span style="color:var(--shiki-foreground)">ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  location</span><span style="color:var(--shiki-foreground)"> / {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_pass </span><span style="color:var(--shiki-foreground)">https://xxx:65082;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_ssl_server_name </span><span style="color:var(--shiki-token-constant)">on</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">Host xxx;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Real-IP $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">REMOTE-HOST $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_set_header </span><span style="color:var(--shiki-foreground)">Upgrade $http_upgrade;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[debian安装pve]]></title>
            <link>https://www.tteam.icu/blog/other/debian安装pve</link>
            <guid isPermaLink="false">/blog/other/debian安装pve</guid>
            <pubDate>Sun, 15 Jun 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="debian安装pve"><a href="#debian安装pve" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>debian</code>安装<code>pve</code> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>最近突发奇想，想在<code>mac</code>上面测试一些东西，要有纯外网环境</p>
<p>突然想到我又闲置的<code>vps</code>，系统又刚好是<code>debian</code>，我又想着<code>pve</code>就是基于<code>debian</code>的</p>
<p>我就在网上搜了一堆教程并尝试安装</p>
<p>发现网上的教程都有点久，最后在官网找到官方就有直接安装的<a href="https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm" target="_blank" rel="noopener noreferrer" class="rp-link">教程</a></p>
<p>其中最重要不要忽视的就是修改<code>/etc/hosts</code>文件，否则会导致用不了</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2025劳动节广州香港澳门行]]></title>
            <link>https://www.tteam.icu/blog/tour/2025劳动节广州香港澳门行</link>
            <guid isPermaLink="false">/blog/tour/2025劳动节广州香港澳门行</guid>
            <pubDate>Sun, 15 Jun 2025 22:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025劳动节广州香港澳门行"><a href="#2025劳动节广州香港澳门行" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025劳动节广州香港澳门行<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>这是一篇关于我在2025年五一劳动节出发去广州、香港、澳门、深圳游玩的经历</p>
<p>为什么我过年的时候去过一次这么快又要去了呢，因为泠鸢yousa的演唱会，所以又去了一次</p>
<p>以下是出行的装备，这次依旧还是一个包</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/yzhwy5-3.webp" alt="pocket3"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/yzvoqd-3.webp" alt="书包"/></p>
<h2 class="rp-toc-include" id="第一天"><a href="#第一天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一天</h2>
<p>在4月30号的时候请假早上飞深圳，住在华强北附近，这个酒店还不错，价格也挺实惠的，距离两个口岸都挺近</p>
<p><img src="https://img.tteam.icu/i/2025/05/30/qyko70-3.webp" alt="飞机餐"/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-z33mipvw8" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>先到酒店放了一下书包，然后就坐地铁去<code>东门老街</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-sun87dxh3" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>在那里逛了一圈，找了家椰子鸡吃了午饭，在里面点了个双人套餐，才100多还是很便宜的</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/zh9sv7-3.webp" alt="煲仔饭"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/zhbeb8-3.webp" alt="椰子鸡"/></p>
<p>吃的太撑了，需要走走消食，所以打算走回酒店，发现刚刚好路过华强北</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/zmibn3-3.webp" alt="华强北"/></p>
<p>然后再旁边的商场里买了听说是本地茶的<code>山月茶</code>，味道还行</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10gk1eh-3.webp" alt="山月茶"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10gu5bh-3.webp" alt="山月茶"/></p>
<p>然后在旁边的<code>美心西饼</code>买了点吃的当宵夜和第二天早饭</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10hg9s6-3.webp" alt="美心西饼"/></p>
<h2 class="rp-toc-include" id="第二天"><a href="#第二天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二天</h2>
<p>第二天起来就和k总约了在口岸见面，一起过岸</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10jydvr-3.webp" alt="罗湖口岸"/></p>
<p>过关前在换币的地方换了200港币和澳币</p>
<p>地铁站的时候看见了服务台，就想上去买一下一日通(因为过年的时候在九龙地铁站买过)，但是好像只能买八达通，那我也就直接买了八达通(小米手机不能用nfc开通)</p>
<p>我们一路坐地铁坐到了<code>尖东</code>，下车的时候刷了50多块，k总都要哭了</p>
<p>我们在香港游玩是和本地朋友这么好一起玩的，但是他当时还在路上，所以我们在<code>尖东</code>的服务台里买了一日通</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10q2z9m-3.webp" alt="尖东服务台"/></p>
<p>出了地铁站我们稍微逛了10分钟左右，香港的街景依旧是那么出片，随手拍就行</p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10qkwcr-3.webp" alt="香港街景"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10qy53m-3.webp" alt="香港街景"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/10rn740-3.webp" alt="香港街景"/></p>
<p>我们约在<code>红茶</code>见面并吃饭</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-cduk70ogz" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/02/11bird9-3.webp" alt="西多士"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/11bs5uf-3.webp" alt="菠萝包"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/11bv356-3.webp" alt="汉堡"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/02/11bwqjp-3.webp" alt="菜单"/></p>
<p>吃完饭后我们就去<code>坚尼地城</code>这个网红打卡点</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-mjrs14mj3" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/p09dck-3.webp" alt="坚尼地城"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/p0a9hz-3.webp" alt="坚尼地城"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/p0b4ac-3.webp" alt="坚尼地城"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/p0c9mz-3.webp" alt="坚尼地城"/></p>
<p>在<code>坚尼地城</code>拍完照后，我们就往<code>平顶山</code>的缆车方向去了</p>
<p>到了<code>平顶山</code>的缆车，发现队伍比过年来的时候还有长的时候，我们瞬间转头了</p>
<p>边走边聊的时候发现暂时没有什么地方可以去了，所以打算打车到<code>平顶山</code></p>
<p>结果到<code>平顶山</code>付完钱后发现，三个人平均分的话是比缆车更便宜的，而且不用排队</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-hr5gkjucc" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/pidlwk-3.webp" alt="维多利亚港"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/piem98-3.webp" alt="维多利亚港"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/pio0ia-3.webp" alt="平顶山"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/piounz-3.webp" alt="平顶山"/></p>
<p>从<code>平顶山</code>下来后就到了晚饭时间了，去了上次过年没去的<code>三不馆车仔面</code>，也是本地朋友推荐一起去的</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-mazvevf4c" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/pq0orm-3.webp" alt="三不馆车仔面"/></p>
<p>吃完晚饭我们就去了<code>维多利亚港</code>打卡</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-ob6ty6az5" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/qvjik8-3.webp" alt="维多利亚港"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/qvk27m-3.webp" alt="维多利亚港"/></p>
<h2 class="rp-toc-include" id="第三天"><a href="#第三天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三天</h2>
<p>今天由我一个人去澳门，早上先去吃了个麦当劳</p>
<p><img src="https://img.tteam.icu/i/2025/06/03/r407fm-3.webp" alt="麦当劳"/></p>
<p>吃完早饭就坐地铁到<code>欣奥</code>站，可以做大巴到港珠澳的口岸</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-twle2gy22" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>地铁坐到的时候还幸运的遇到了迪士尼地铁</p>
<p><img src="https://img.tteam.icu/i/2025/06/03/r67qcp-3.webp" alt="迪士尼地铁"/></p>
<p>到了澳门后，就坐发财车到了<code>新葡京</code>打卡</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-6e0khjd20" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/s5zx4z-3.webp" alt="新葡京"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/s6132v-3.webp" alt="新葡京"/></p>
<p>在去酒店的路上随便找了一家饭店吃饭</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-yc34u1fi1" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/vtj1ux-3.webp" alt="中天咖啡美食"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/vtjjlx-3.webp" alt="中天咖啡美食"/></p>
<p>在酒店放完东西后我就出去，澳门真的人太多了，100m走了1个小时，我在<code>大三巴</code>远远的拍了一张照片就走了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-gcax9wv8e" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/03/w90811-3.webp" alt="大三巴"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/xckm7i-3.webp" alt="市政府"/></p>
<p>晚饭依旧是麦当劳</p>
<p><img src="https://img.tteam.icu/i/2025/06/03/xcyc0q-3.webp" alt="麦当劳"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/xcz3s3-3.webp" alt="麦当劳"/></p>
<h2 class="rp-toc-include" id="第三天-1"><a href="#第三天-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三天</h2>
<p>早饭依旧没有悬念，还是麦当劳</p>
<p><img src="https://img.tteam.icu/i/2025/06/03/12yasfo-3.webp" alt="麦当劳"/></p>
<p>吃完早饭就走路去地铁站，路上的街景依旧好看</p>
<p><img src="https://img.tteam.icu/i/2025/06/03/1301lug-3.webp" alt="澳门街景"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/1307nt9-3.webp" alt="澳门街景"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/03/130k5lq-3.webp" alt="澳门街景"/></p>
<p>到了地铁站，被工作人员说要去服务台买单次票</p>
<p><img src="https://img.tteam.icu/i/2025/06/04/fufe4s-3.webp" alt="澳门地铁单次票"/></p>
<p>也是顺利进入地铁，准备去<code>威尼斯人</code></p>
<p><img src="https://img.tteam.icu/i/2025/06/04/ful8qb-3.webp" alt="澳门地铁"/></p>
<p>下地铁就下大雨了，但是有1km左右的路程，我只好躲进地铁旁的商店，结果发现是个挺有名的商场</p>
<p><img src="https://img.tteam.icu/i/2025/06/04/gt6nko-3.webp" alt="东翼广场"/></p>
<p>在躲雨的期间在商场里买了杯内地没有的星巴克</p>
<p><img src="https://img.tteam.icu/i/2025/06/04/xzims9-3.webp" alt="星巴克"/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-hxmujipvl" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>喝完星巴克后出去发现雨停了，那我继续走向<code>威尼斯人</code></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/vpk03b-3.webp" alt="威尼斯人"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/vpllf5-3.webp" alt="威尼斯人"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/vpo0uk-3.webp" alt="威尼斯人"/></p>
<p>在室内有那么样的“河”，还是挺震撼的</p>
<p>出来后旁边就是<code>伦敦人</code></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/vqsr3y-3.webp" alt="伦敦人"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/vr63tc-3.webp" alt="伦敦人"/></p>
<p>还有铁塔</p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zczmf5-3.webp" alt="铁塔"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zd2gzp-3.webp" alt="铁塔"/></p>
<p>最后去了<code>新濠影汇</code>逛了两圈就出澳了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-znz17n5vb" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/15/zfem4q-3.webp" alt="新濠影汇"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zg7c4c-3.webp" alt="新濠影汇"/></p>
<h2 class="rp-toc-include" id="第四天"><a href="#第四天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四天</h2>
<p>早上就又和k总见面去吃早饭了</p>
<p>和k总在他家附近local的集市逛了一下，买了点<code>烧腊</code>，然后吃了<code>肠粉</code>和<code>生滚粥</code></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-ri19m3faw" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/06/15/zgsfy6-3.webp" alt="鸡蛋肠粉"/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zh2thl-3.webp" alt="烧腊和生滚粥"/></p>
<p>吃完早饭稍微逛了一会就请客去吃中饭了</p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zmgi36-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zmi6iz-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zmk2vd-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zmlfzu-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zmmwsq-3.webp" alt=""/></p>
<p>我们吃完后又在个大商场逛了一圈就去演唱会了</p>
<p><img src="https://img.tteam.icu/i/2025/06/15/znmn1o-3.webp" alt="鸢宝痛车"/></p>
<p>鸟憨合影</p>
<p><img src="https://img.tteam.icu/i/2025/06/15/znvvay-3.webp" alt="鸟憨合影"/></p>
<p>毛怪合影</p>
<p><img src="https://img.tteam.icu/i/2025/06/15/zob476-3.webp" alt="毛怪合影"/></p>
<p>看完演唱会就和毛怪小伙伴们吃了夜宵分别了</p>
<p>我第五天就早起飞回家了，没啥记录了</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[linux用systemd运行二进制]]></title>
            <link>https://www.tteam.icu/blog/ops/linux用systemd运行二进制</link>
            <guid isPermaLink="false">/blog/ops/linux用systemd运行二进制</guid>
            <pubDate>Thu, 29 May 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="linux用systemd运行二进制"><a href="#linux用systemd运行二进制" class="rp-header-anchor rp-link" aria-hidden="true">#</a>linux用systemd运行二进制<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>最近买了台vps，1c512m,系统是debian</p>
<p>我准备在这台vps上运行未来我用<code>golang</code>写的项目的演示站</p>
<p>在别的服务器都是用docker运行，但是这台服务器cpu和内存的原因，我就想用系统来运行</p>
<h2 class="rp-toc-include" id="开始"><a href="#开始" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开始</h2>
<p>先将二进制文件上传到服务器并赋予执行权限</p>
<p>然后写入<code>systemd</code>文件，并运行即可</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/systemd/system/hertz_service.service</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[Unit]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">Description=hertz_service</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string)">[Service]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">ExecStart=/root/hertz_service --config=config.yaml</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">WorkingDirectory=/root/</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">Restart=always</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">RestartSec=10</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">KillSignal=SIGINT</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">SyslogIdentifier=hertz_service</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">User=root</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string)">[Install]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">WantedBy=multi-user.target</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> daemon-reload</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> hertz_service</span><span style="color:var(--shiki-token-string)"> --now</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="更新服务"><a href="#更新服务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>更新服务</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">app_full_path</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">/root/hertz_service</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">download_url</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">https://xxx/hertz_service</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -f</span><span style="color:var(--shiki-foreground)"> ${app_full_path}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-foreground)"> ${download_url} </span><span style="color:var(--shiki-token-string)">-O</span><span style="color:var(--shiki-foreground)"> ${app_full_path}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-foreground)"> ${app_full_path}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> hertz_service</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 22]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W21</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W21</guid>
            <pubDate>Sun, 25 May 2025 23:22:24 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-21"><a href="#2025-week-21" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 21<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>又是摸了好久的周报，那我就来总结一下近况</p>
<p>工作依旧是加班很严重</p>
<p>在51假期前我买了pocket3</p>
<p>五一黄金周请了一天年假，又去了趟深圳、香港、澳门、广州，和k总、这么好一起香港玩，之后又加上布哥哥一起去看鸟的演唱会</p>
<p>回来后jd上iphone16pro很便宜，我从一个很坚定的安卓档，转到了苹果了；是我过了那个折腾的年纪了吗（</p>
<p>在家里的pve里部署了istoreos作为旁路由,在上面跑了代理，但是好像iphone改了网关就没有wifi图标，也不是用旁路由上网了</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>在自己的vps们上部署了<a href="https://github.com/containrrr/watchtower" target="_blank" rel="noopener noreferrer" class="rp-link">watchtower</a>,在很早之前就刷到过这个服务，当时以为只能升级全部，现在刷到网上有人推荐后又仔细看了一下文档，可以通过传参来升级指定服务
由于入手了iphone，但是mac自带的电量显示似乎显示不了手机，于是下载了<a href="https://github.com/lihaoyun6/AirBattery" target="_blank" rel="noopener noreferrer" class="rp-link">AirBattery</a>还挺好用</p>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<code>golang</code>和<code>react</code>学习的差不多了(使用react的4-5个框架，发现都不好用，就直接用原生写了)
后续学完就去写点开源项目</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Debian 11 升级 Debian 12]]></title>
            <link>https://www.tteam.icu/blog/ops/Debian%2011%20升级%20Debian%2012</link>
            <guid isPermaLink="false">/blog/ops/Debian 11 升级 Debian 12</guid>
            <pubDate>Fri, 09 May 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="debian-11-升级-debian-12"><a href="#debian-11-升级-debian-12" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Debian 11 升级 Debian 12<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<p>最近买了台vps，<code>debian</code>系统最高只有11，而我<code>go</code>编译出来的二进制不能直接运行，需要升级到12</p>
<p>所以我网上查询了升级的方法，并成功升级</p>
<h2 class="rp-toc-include" id="更新系统"><a href="#更新系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>更新系统</h2>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> dist-upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> autoclean</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> autoremove</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>如果内核更新了，可以重启让最新的内核生效，也可以直接进行升级。</p>
<h2 class="rp-toc-include" id="升级系统"><a href="#升级系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>升级系统</h2>
<h3 class="rp-toc-include" id="首先更新-apt-源替换-bullseye-为-bookworm"><a href="#首先更新-apt-源替换-bullseye-为-bookworm" class="rp-header-anchor rp-link" aria-hidden="true">#</a>首先更新 <code>apt</code> 源，替换 <code>bullseye</code> 为 <code>bookworm</code>：</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/bullseye/bookworm/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/bullseye/bookworm/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/*.list</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>对于 Debian 12 以后的版本，所有 Debian 可以分发的打包的非自由固件二进制文件 (non-free)，比如某些驱动，都被转移到 Debian Archive 中的一个新组件，称为非自由固件 (non-free-firmware)。如果您从旧版的 Debian 升级，并且需要这些固件二进制文件，您应该更新您系统上的 <code>/etc/apt/sources.list</code>，以使用这个新组件 (<a href="https://wiki.debian.org/Firmware#Debian_12_.28bookworm.29_and_later" target="_blank" rel="noopener noreferrer" class="rp-link">来源</a>)：</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/non-free/non-free non-free-firmware/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="默认的系统-apt-源文件-etcaptsourceslist-应该是类似这样的"><a href="#默认的系统-apt-源文件-etcaptsourceslist-应该是类似这样的" class="rp-header-anchor rp-link" aria-hidden="true">#</a>默认的系统 <code>apt</code> 源文件 <code>/etc/apt/sources.list</code> 应该是类似这样的</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">deb</span><span style="color:var(--shiki-token-string)"> http://deb.debian.org/debian</span><span style="color:var(--shiki-token-string)"> bookworm</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-string)"> contrib</span><span style="color:var(--shiki-token-string)"> non-free</span><span style="color:var(--shiki-token-string)"> non-free-firmware</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">deb</span><span style="color:var(--shiki-token-string)"> http://security.debian.org/debian-security</span><span style="color:var(--shiki-token-string)"> bookworm-security</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-string)"> contrib</span><span style="color:var(--shiki-token-string)"> non-free</span><span style="color:var(--shiki-token-string)"> non-free-firmware</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">deb</span><span style="color:var(--shiki-token-string)"> http://deb.debian.org/debian</span><span style="color:var(--shiki-token-string)"> bookworm-updates</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-string)"> contrib</span><span style="color:var(--shiki-token-string)"> non-free</span><span style="color:var(--shiki-token-string)"> non-free-firmware</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="大部分-debian-的软件源配置文件使用传统的-one-line-style路径为-etcaptsourceslist但是对于容器镜像从-debian-12-开始其软件源配置文件变更为-deb822-格式路径为-etcaptsourceslistddebiansources参考"><a href="#大部分-debian-的软件源配置文件使用传统的-one-line-style路径为-etcaptsourceslist但是对于容器镜像从-debian-12-开始其软件源配置文件变更为-deb822-格式路径为-etcaptsourceslistddebiansources参考" class="rp-header-anchor rp-link" aria-hidden="true">#</a>大部分 Debian 的软件源配置文件使用传统的 One-Line-Style，路径为 <code>/etc/apt/sources.list</code>；但是对于容器镜像，从 Debian 12 开始，其软件源配置文件变更为 <code>DEB822</code> 格式，路径为 <code>/etc/apt/sources.list.d/debian.sources</code>（<a href="https://mirrors.help/debian/" target="_blank" rel="noopener noreferrer" class="rp-link">参考</a>）</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">Types:</span><span style="color:var(--shiki-token-string)"> deb</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">URIs:</span><span style="color:var(--shiki-token-string)"> https://deb.debian.org/debian</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Suites:</span><span style="color:var(--shiki-token-string)"> bookworm</span><span style="color:var(--shiki-token-string)"> bookworm-updates</span><span style="color:var(--shiki-token-string)"> bookworm-backports</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Components:</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-string)"> contrib</span><span style="color:var(--shiki-token-string)"> non-free</span><span style="color:var(--shiki-token-string)"> non-free-firmware</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Signed-By:</span><span style="color:var(--shiki-token-string)"> /usr/share/keyrings/debian-archive-keyring.gpg</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">Types:</span><span style="color:var(--shiki-token-string)"> deb</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">URIs:</span><span style="color:var(--shiki-token-string)"> http://security.debian.org/debian-security</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Suites:</span><span style="color:var(--shiki-token-string)"> bookworm-security</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Components:</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-string)"> contrib</span><span style="color:var(--shiki-token-string)"> non-free</span><span style="color:var(--shiki-token-string)"> non-free-firmware</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Signed-By:</span><span style="color:var(--shiki-token-string)"> /usr/share/keyrings/debian-archive-keyring.gpg</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><em>国内服务器可以替换 <code>deb.debian.org</code> 和 <code>security.debian.org</code> 为 <code>mirrors.tuna.tsinghua.edu.cn</code></em></p>
<p>然后我们再次执行更新系统：</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> dist-upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="更新后"><a href="#更新后" class="rp-header-anchor rp-link" aria-hidden="true">#</a>更新后</h2>
<h3 class="rp-toc-include" id="更新后删除不必要的软件和依赖"><a href="#更新后删除不必要的软件和依赖" class="rp-header-anchor rp-link" aria-hidden="true">#</a>更新后删除不必要的软件和依赖</h3>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>apt autoclean</span></span>
<span class="line"><span>apt autoremove -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="然后我们使用-reboot-命令重启系统耐心等待后查看最新的系统版本"><a href="#然后我们使用-reboot-命令重启系统耐心等待后查看最新的系统版本" class="rp-header-anchor rp-link" aria-hidden="true">#</a>然后我们使用 <code>reboot</code> 命令重启系统，耐心等待后，查看最新的系统版本</h3>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>root@debian ~ # cat /etc/debian_version </span></span>
<span class="line"><span>12.5</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>root@debian ~ # lsb_release -a</span></span>
<span class="line"><span>No LSB modules are available.</span></span>
<span class="line"><span>Distributor ID:	Debian</span></span>
<span class="line"><span>Description:	Debian GNU/Linux 12 (bookworm)</span></span>
<span class="line"><span>Release:	12</span></span>
<span class="line"><span>Codename:	bookworm</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>root@debian ~ # uname -a</span></span>
<span class="line"><span>Linux debian 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这时我们就已经更新到了最新的 Debian 12 Bookworm 和内核了。</p>
<p>Debian 11 Bullseye 升级 Debian 12 Bookworm</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】狐帝云]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】狐帝云</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】狐帝云</guid>
            <pubDate>Wed, 07 May 2025 20:31:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="狐帝云"><a href="#狐帝云" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://www.szhdy.com/aff/WVTPJNVJ" target="_blank" rel="noopener noreferrer" class="rp-link">狐帝云</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>狐帝云在五一假期推出了<code>香港19区8H8G</code>的永久鸡，只需510</p>
<p>我直接剁手入了，当我的jenkins agent编译节点</p>
<p>以下是性能评测</p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : AMD EPYC 7K62 48-Core Processor</span></span>
<span class="line"><span> CPU 核心数        : 8</span></span>
<span class="line"><span> CPU 频率          : 2595.124 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 512.00 KB / L2: 4.00 MB / L3: 192.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ✔ Enabled</span></span>
<span class="line"><span> 内存              : 794.33 MiB / 7.77 GiB</span></span>
<span class="line"><span> Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span> 硬盘空间          : 9.42 GiB / 39.21 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/vda1</span></span>
<span class="line"><span> 系统在线时间      : 0 days, 7 hour 32 min</span></span>
<span class="line"><span> 负载              : 0.07, 0.55, 0.48</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 11 (bullseye) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 5.10.0-14-cloud-amd64</span></span>
<span class="line"><span> TCP加速方式       : cubic</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> NAT类型           : Full Cone</span></span>
<span class="line"><span> IPV4 ASN          : AS137899 I LAYER LIMITED</span></span>
<span class="line"><span> IPV4 位置         : Tseung Kwan O / Sai Kung / HK</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分: 		1615 Scores</span></span>
<span class="line"><span> 8 线程测试(多核)得分: 		12741 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:		43321.67 MB/s</span></span>
<span class="line"><span> 单线程写测试:		19311.49 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作		写速度					读速度</span></span>
<span class="line"><span> 100MB-4K Block		64.0 MB/s (15.62 IOPS, 1.64s)		76.9 MB/s (18763 IOPS, 1.36s)</span></span>
<span class="line"><span> 1GB-1M Block		814 MB/s (776 IOPS, 1.29s)		2.7 GB/s (2539 IOPS, 0.39s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 213.19 MB/s  (53.2k) | 181.34 MB/s   (2.8k)</span></span>
<span class="line"><span>Write      | 213.75 MB/s  (53.4k) | 182.30 MB/s   (2.8k)</span></span>
<span class="line"><span>Total      | 426.94 MB/s (106.7k) | 363.64 MB/s   (5.6k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 500.46 MB/s    (977) | 784.52 MB/s    (766)</span></span>
<span class="line"><span>Write      | 527.05 MB/s   (1.0k) | 836.77 MB/s    (817)</span></span>
<span class="line"><span>Total      | 1.02 GB/s     (2.0k) | 1.62 GB/s     (1.5k)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP完整解锁Netflix，支持非自制剧的观看</span></span>
<span class="line"><span>NF所识别的IP地域信息：美国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的网络可能没有正常配置IPv6，或者没有IPv6网络接入</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 日本 东京(NRT20S05)</span></span>
<span class="line"><span>Youtube识别地域: 中国香港(HK)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>Youtube在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前IPv4出口所在地区即将开通DisneyPlus</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>DisneyPlus在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:					Yes (Region: US)</span></span>
<span class="line"><span> Disney+:				No</span></span>
<span class="line"><span> Netflix:				Yes (Region: US)</span></span>
<span class="line"><span> YouTube Premium:			Yes (Region: HK)</span></span>
<span class="line"><span> Amazon Prime Video:			Yes (Region: US)</span></span>
<span class="line"><span> TVBAnywhere+:				Yes</span></span>
<span class="line"><span> Spotify Registration:			No</span></span>
<span class="line"><span> OneTrust Region:			US [California]</span></span>
<span class="line"><span> iQyi Oversea Region:			US</span></span>
<span class="line"><span> Bing Region:				US</span></span>
<span class="line"><span> Apple Region:				US</span></span>
<span class="line"><span> YouTube CDN:				Tokyo</span></span>
<span class="line"><span> Netflix Preferred CDN:			Hong Kong</span></span>
<span class="line"><span> ChatGPT:				Yes</span></span>
<span class="line"><span> Google Gemini:				No</span></span>
<span class="line"><span> Claude:				No</span></span>
<span class="line"><span> Wikipedia Editability:			Yes</span></span>
<span class="line"><span> Google Play Store:			Hong Kong </span></span>
<span class="line"><span> Google Search CAPTCHA Free:		Yes</span></span>
<span class="line"><span> Steam Currency:			USD</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:				Yes</span></span>
<span class="line"><span> ---Game---</span></span>
<span class="line"><span> SD Gundam G Generation Eternal:	Yes</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------</span></span>
<span class="line"><span> Tiktok Region:		【US】</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | cheervision数据库 [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 45 [8] </span></span>
<span class="line"><span>VPN得分(越低越好): 0 [8] </span></span>
<span class="line"><span>代理得分(越低越好): 99 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 67 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 0 [1] 93 [E]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3] </span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0008 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A] </span></span>
<span class="line"><span>威胁级别: low [9] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 94 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting [0 7 A] corporate [9] DataCenter/WebHosting/Transit [3] unknown [C]</span></span>
<span class="line"><span>公司类型: hosting [0 7] business [A]</span></span>
<span class="line"><span>是否云提供商: Yes [7 D] </span></span>
<span class="line"><span>是否数据中心: No [5 6 8 C] Yes [0 1 A]</span></span>
<span class="line"><span>是否移动设备: No [5 A C] Yes [E]</span></span>
<span class="line"><span>是否代理: No [0 1 4 5 6 7 8 9 A C D] Yes [E]</span></span>
<span class="line"><span>是否VPN: Yes [E] No [0 1 6 7 A C D]</span></span>
<span class="line"><span>是否TorExit: No [1 7 D] </span></span>
<span class="line"><span>是否Tor出口: No [1 7 D] </span></span>
<span class="line"><span>是否网络爬虫: No [9 A E] </span></span>
<span class="line"><span>是否匿名: No [1 6 7 8 D] </span></span>
<span class="line"><span>是否攻击者: No [7 8 D] </span></span>
<span class="line"><span>是否滥用者: No [7 8 A C D] Yes [E]</span></span>
<span class="line"><span>是否威胁: No [7 8 C D] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C D] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C D] </span></span>
<span class="line"><span>是否机器人: No [E] </span></span>
<span class="line"><span>DNS-黑名单: 313(Total_Check) 0(Clean) 6(Blacklisted) 24(Other) </span></span>
<span class="line"><span>Google搜索可行性：NO</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✔     ✔     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Apple     ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>FastMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ProtonMail✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Namecrane ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    </span></span>
<span class="line"><span>Free_fr   ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信v4 219.141.140.10           电信CN2GIA [精品线路] 电信CTGNET [精品线路] </span></span>
<span class="line"><span>北京联通v4 202.106.195.68           联通4837   [普通线路] </span></span>
<span class="line"><span>北京移动v4 221.179.155.161 检测不到回程路由节点的IPV4地址</span></span>
<span class="line"><span>上海电信v4 202.96.209.133           电信CN2GIA [精品线路] 电信CTGNET [精品线路] </span></span>
<span class="line"><span>上海联通v4 210.22.97.1              联通4837   [普通线路] </span></span>
<span class="line"><span>上海移动v4 211.136.112.200          移动CMI    [普通线路] </span></span>
<span class="line"><span>广州电信v4 58.60.188.222            电信CN2GIA [精品线路] 电信CTGNET [精品线路] </span></span>
<span class="line"><span>广州联通v4 210.21.196.6             联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动v4 120.196.165.24           移动CMI    [普通线路] </span></span>
<span class="line"><span>成都电信v4 61.139.2.69              电信CN2GIA [精品线路] 电信CTGNET [精品线路] </span></span>
<span class="line"><span>成都联通v4 119.6.6.6                联通4837   [普通线路] </span></span>
<span class="line"><span>成都移动v4 211.137.96.205           移动CMI    [普通线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>---------------------回程路由--感谢fscarmen开源及PR---------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>3.26 ms 	AS137899 中国 香港 Cloudinnovation</span></span>
<span class="line"><span>3.28 ms 	* RFC1918</span></span>
<span class="line"><span>4.57 ms 	* 中国 香港 电信/CTGNet</span></span>
<span class="line"><span>4.93 ms 	* 中国 香港</span></span>
<span class="line"><span>13.36 ms 	* [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>17.25 ms 	* [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>15.78 ms 	AS4134 中国 广东 深圳 福田区 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>2.03 ms 	AS137899 中国 香港 Cloudinnovation</span></span>
<span class="line"><span>2.70 ms 	* RFC1918</span></span>
<span class="line"><span>4.34 ms 	AS10099 [CUG-BACKBONE] 中国 香港 chinaunicomglobal.com 联通</span></span>
<span class="line"><span>16.11 ms 	AS10099 [CUG-BACKBONE] 中国 香港 chinaunicomglobal.com 联通</span></span>
<span class="line"><span>9.49 ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn</span></span>
<span class="line"><span>8.91 ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn 联通</span></span>
<span class="line"><span>109.72 ms 	AS4837 [CU169-BACKBONE] 中国 广东 广州 chinaunicom.cn 联通</span></span>
<span class="line"><span>14.53 ms 	AS17816 [UNICOM-GD] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>16.24 ms 	AS17623 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>14.06 ms 	AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>2.27 ms 	AS137899 中国 香港 Cloudinnovation</span></span>
<span class="line"><span>3.68 ms 	* RFC1918</span></span>
<span class="line"><span>9.05 ms 	AS58453 [CMI-INT] 中国 广东 广州 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>8.67 ms 	AS9808 [CMNET] 中国 广东 广州 X-I chinamobileltd.com 移动</span></span>
<span class="line"><span>8.36 ms 	AS9808 [CMNET] 中国 广东 广州 I-C chinamobileltd.com 移动</span></span>
<span class="line"><span>10.39 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>27.96 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>13.43 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>11.33 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置		 上传速度	 下载速度	 延迟</span></span>
<span class="line"><span>Speedtest.net	 18.65Mbps	 18.79Mbps	 142.99153.00153.00ms	</span></span>
<span class="line"><span>中国香港	 18.61Mbps	 19.06Mbps	 4.799.009.00ms	</span></span>
<span class="line"><span>新加坡		 18.38Mbps	 18.63Mbps	 58.8459.0060.00ms	</span></span>
<span class="line"><span>电信浙江	 19.31Mbps	 18.90Mbps	 38.95174.0080.00ms	</span></span>
<span class="line"><span>电信浙江	 19.64Mbps	 19.06Mbps	 39.5142.00188.00ms	</span></span>
<span class="line"><span>移动杭州5G	 17.17Mbps	 19.07Mbps	 36.0287.0098.00ms	</span></span>
<span class="line"><span>移动Chengdu	 17.29Mbps	 19.02Mbps	 61.2464.0063.00ms	</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 7 分 40 秒</span></span>
<span class="line"><span> 时间          : Thu May  1 21:09:01 CST 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 14]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W14</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W14</guid>
            <pubDate>Thu, 03 Apr 2025 22:51:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-14"><a href="#2025-week-14" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 14<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p><a href="https://github.com/JOYCEQL/magic-resume" target="_blank" rel="noopener noreferrer" class="rp-link">magic-resume</a>简历生成网站(我目前最新的简历就是用这个写的)
<a href="https://github.com/ourongxing/newsnow" target="_blank" rel="noopener noreferrer" class="rp-link">newsnow</a>优雅阅读实时最热门新闻
<a href="https://github.com/pmndrs/zustand" target="_blank" rel="noopener noreferrer" class="rp-link">zustand</a>简单的<code>react</code>全局状态管理</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>编译了<a href="https://github.com/ttdockerfile/openresty-monitor-ubuntu" target="_blank" rel="noopener noreferrer" class="rp-link">openresty-monitor-ubuntu</a>，是<a href="https://github.com/vozlt/nginx-module-vts" target="_blank" rel="noopener noreferrer" class="rp-link">vts</a>和<code>nginx-lua-prometheus</code>和<a href="https://github.com/ADD-SP/ngx_waf" target="_blank" rel="noopener noreferrer" class="rp-link">ngx_waf</a>打进最新版<code>openresty</code>镜像中</p>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>周报鸽了差不多三个月，果然我还是太懒了
简单描述一下这几个月发生的事吧
过年7天特种兵旅游后，回家就开始了很严重的感冒，在去看<code>yousa</code>演唱会前一天还是平均半分钟咳嗽一次，所以在飞成都的前一晚10点下班去急症打了一针补救一下，效果很好
第二天上完班后在家睡了一觉后第二天4点起床就赶去机场飞成都了，当天晚上看完演唱会，第二天下午又特种兵飞回来了
回来后又是天天加班，真的感觉生活没有啥兴趣了。。。
于是就和主管提出了想要润的想法，和主管聊了好久最终还是留下来了
我也是想过自己到底想要什么，我是真正喜欢这个行业这个岗位才做的运维，我反对的是天天加班，反对的是天天到家还要处理活，反对的是在家无偿加班到凌晨第二天还要为了全勤去上班
我觉得我自己还是很容易满足的，其实只要有个朝九晚六的班，现在的工资真的对我来说足够了
但是从小到大的“自卑”，现在大环境确实不好，再加上爸妈很不支持我出去闯让我还在这个岗位坚守着，但是我真的有点坚持不下去了。。。
虽然我知道我这个是理由，但是这也是我这么长时间没写周报的原因之一，到家只能躺在床上刷着抖音，甚至都看不进去抖音
我本身是一个特别喜欢及时回消息的人，工作把我改成了看到消息都要等会再回的人</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[关于我的homeserver]]></title>
            <link>https://www.tteam.icu/blog/other/关于我的homeserver</link>
            <guid isPermaLink="false">/blog/other/关于我的homeserver</guid>
            <pubDate>Fri, 14 Mar 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="关于我的homeserver"><a href="#关于我的homeserver" class="rp-header-anchor rp-link" aria-hidden="true">#</a>关于我的<code>homeserver</code> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>先大致介绍一下我家里的<code>homeserver</code>, 我家里有两台机器, 一台是绿联云<code>DXP4800</code>作为<code>NAS</code>, 一台是零刻<code>EP12 pro</code></p>
<h2 class="rp-toc-include" id="系统篇"><a href="#系统篇" class="rp-header-anchor rp-link" aria-hidden="true">#</a>系统篇</h2>
<p>零刻<code>EP12 pro</code>安装<code>PVE</code>系统当计算节点跑服务</p>
<p><img src="https://img.tteam.icu/i/2025/03/14/sacs7y-3.webp" alt="pve截图"/></p>
<p>绿联云<code>DXP4800</code>作为存储节点存备份</p>
<p><img src="https://img.tteam.icu/i/2025/03/14/t0gy0g-3.webp" alt="NAS截图"/></p>
<h2 class="rp-toc-include" id="服务篇"><a href="#服务篇" class="rp-header-anchor rp-link" aria-hidden="true">#</a>服务篇</h2>
<p>由于之前使用相册服务，感觉<a href="https://mtmt.tech/" target="_blank" rel="noopener noreferrer" class="rp-link">MT Photos</a>还挺好用的，所以直接购买了永久，服务部署在<code>NAS</code>上</p>
<p>在<code>PVE</code>的<code>linux</code>虚拟机里安装了<code>MT</code>的ai服务、代理服务、自动化服务等</p>
<p><img src="https://img.tteam.icu/i/2025/03/15/nm7rzb-3.webp" alt="server1"/></p>
<p><img src="https://img.tteam.icu/i/2025/03/15/nmd127-3.webp" alt="server2"/></p>
<p>然后再所有的<code>linux</code>服务器上都安装了<a href="https://github.com/prometheus/node_exporter" target="_blank" rel="noopener noreferrer" class="rp-link">node_exporter</a>,来监控服务器</p>
<h2 class="rp-toc-include" id="网络篇"><a href="#网络篇" class="rp-header-anchor rp-link" aria-hidden="true">#</a>网络篇</h2>
<p>这一篇是相对详细的，因为这套网络可以供大家参考</p>
<h3 class="rp-toc-include" id="代理"><a href="#代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>代理</h3>
<p>程序员平常要上<code>github</code>等网站想要快速，那必不可免的就需要代理</p>
<p>我使用的代理是基于<a href="https://github.com/go-gost/gost" target="_blank" rel="noopener noreferrer" class="rp-link">gost</a>,我自己平常是<a href="https://note.tteam.icu/docs/ops/vpn/gost.html" target="_blank" rel="noopener noreferrer" class="rp-link">这样使用</a>的</p>
<p>这套东西经过了几年的验证没有被封过，还是相对安全的，当然局限性就是需要在局域网内有机器专门用来解密</p>
<h3 class="rp-toc-include" id="外部访问"><a href="#外部访问" class="rp-header-anchor rp-link" aria-hidden="true">#</a>外部访问</h3>
<p>在我的<a href="https://www.tteam.icu/urls#cloud-servers" target="_blank" rel="noopener noreferrer" class="rp-link">小鸡</a>中随便挑选一个<code>vps</code></p>
<p>先在<code>vps</code>上启动一个<code>nginx</code>，把<code>*.xxx.com</code>反向代理到本地的<code>20000</code>端口，然后使用<code>frp</code>把家里的虚拟机的<code>80</code>端口穿透到这台<code>vps</code>的<code>20000</code>端口</p>
<p>在家里的虚拟机中启动一个<code>nginx</code>,把需要用的服务反向代理到<code>80</code>端口即可</p>
<p>后续要新增服务，只要在家里的虚拟机中增加<code>nginx</code>配置即可</p>
<p>网络架构示意图：</p>
<p><img src="https://img.tteam.icu/i/2025/03/15/o2dwkz-3.webp" alt="网络架构示意图"/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】搬瓦工]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】搬瓦工</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】搬瓦工</guid>
            <pubDate>Tue, 11 Mar 2025 10:31:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="搬瓦工"><a href="#搬瓦工" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://bandwagonhost.com/aff.php?aff=54032" target="_blank" rel="noopener noreferrer" class="rp-link">搬瓦工</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>搬瓦工隶属于加拿大 IT7 Networks 旗下，从 2004 年开始，IT7 Networks 便开始提供虚拟主机、VPS、独立服务器等服务。搬瓦工的英文名为 BandwagonHost，由于发音类似搬瓦工（BanWaGong），于是国人喜欢亲切的将其称为搬瓦工。</p>
<p>搬瓦工属于国内最有名的<code>vps</code></p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : AMD EPYC-Genoa Processor</span></span>
<span class="line"><span> CPU 核心数        : 2</span></span>
<span class="line"><span> CPU 频率          : 2794.748 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 64.00 KB / L2: 2.00 MB / L3: 32.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span> 内存              : 221.33 MiB / 2.00 GiB</span></span>
<span class="line"><span> Swap              : 0 KiB / 1024.00 MiB</span></span>
<span class="line"><span> 硬盘空间          : 2.67 GiB / 39.83 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/sda2</span></span>
<span class="line"><span> 系统在线时间      : 0 days, 0 hour 7 min</span></span>
<span class="line"><span> 负载              : 0.77, 0.38, 0.18</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 12 (bookworm) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 6.1.0-9-amd64</span></span>
<span class="line"><span> TCP加速方式       : bbr</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> NAT类型           : Full Cone</span></span>
<span class="line"><span> IPV4 ASN          : AS25820 IT7 Networks Inc</span></span>
<span class="line"><span> IPV4 位置         : Los Angeles / California / US</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分:          1637 Scores</span></span>
<span class="line"><span> 2 线程测试(多核)得分:          3239 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:          43780.71 MB/s</span></span>
<span class="line"><span> 单线程写测试:          19797.49 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作               写速度                                  读速度</span></span>
<span class="line"><span> 100MB-4K Block         22.6 MB/s (5528 IOPS, 4.63s)            25.1 MB/s (6136 IOPS, 4.17s)</span></span>
<span class="line"><span> 1GB-1M Block           1.4 GB/s (1352 IOPS, 0.74s)             2.4 GB/s (2249 IOPS, 0.44s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 167.35 MB/s  (41.8k) | 1.12 GB/s    (17.5k)</span></span>
<span class="line"><span>Write      | 167.79 MB/s  (41.9k) | 1.12 GB/s    (17.6k)</span></span>
<span class="line"><span>Total      | 335.14 MB/s  (83.7k) | 2.24 GB/s    (35.1k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 1.44 GB/s     (2.8k) | 2.00 GB/s     (1.9k)</span></span>
<span class="line"><span>Write      | 1.52 GB/s     (2.9k) | 2.14 GB/s     (2.0k)</span></span>
<span class="line"><span>Total      | 2.97 GB/s     (5.8k) | 4.15 GB/s     (4.0k)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP可以使用Netflix，但仅可看Netflix自制剧</span></span>
<span class="line"><span>NF所识别的IP地域信息：美国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的网络可能没有正常配置IPv6，或者没有IPv6网络接入</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 美国  洛杉机(LAX31S13)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>Youtube在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前IPv4出口所在地区即将开通DisneyPlus</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>DisneyPlus在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:                                  Failed (Error: )</span></span>
<span class="line"><span> Disney+:                               No (IP Banned By Disney+ 1)</span></span>
<span class="line"><span> Netflix:                               Originals Only</span></span>
<span class="line"><span> YouTube Premium:                       Yes (Region: US)</span></span>
<span class="line"><span> Amazon Prime Video:                    Yes (Region: US)</span></span>
<span class="line"><span> TVBAnywhere+:                          Yes</span></span>
<span class="line"><span> Spotify Registration:                  No</span></span>
<span class="line"><span> OneTrust Region:                       US [California]</span></span>
<span class="line"><span> iQyi Oversea Region:                   US</span></span>
<span class="line"><span> Bing Region:                           US (Risky)</span></span>
<span class="line"><span> Apple Region:                          US</span></span>
<span class="line"><span> YouTube CDN:                           Los Angeles, CA</span></span>
<span class="line"><span> Netflix Preferred CDN:                 Los Angeles, CA</span></span>
<span class="line"><span> ChatGPT:                               Yes</span></span>
<span class="line"><span> Google Gemini:                         Yes (Region: USA)</span></span>
<span class="line"><span> Claude:                                Yes</span></span>
<span class="line"><span> Wikipedia Editability:                 No</span></span>
<span class="line"><span> Google Play Store:                     United States </span></span>
<span class="line"><span> Google Search CAPTCHA Free:            Yes</span></span>
<span class="line"><span> Steam Currency:                        USD</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:                                No</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------</span></span>
<span class="line"><span> Tiktok Region:         【US】</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | cheervision数据库 [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 0 [8] </span></span>
<span class="line"><span>VPN得分(越低越好): 100 [8]</span></span>
<span class="line"><span>代理得分(越低越好): 100 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 100 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 65 [E] 0 [1]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3] </span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0022 (Low) [A]</span></span>
<span class="line"><span>公司滥用得分(越低越好): 0.0034 (Low) [A] </span></span>
<span class="line"><span>威胁级别: low [9 B] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 94 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: unknown [C] hosting [0 7 9] DataCenter/WebHosting/Transit [3] business [8] isp [A]</span></span>
<span class="line"><span>公司类型: hosting [0] business [7 A]</span></span>
<span class="line"><span>是否云提供商: Yes [7 D] </span></span>
<span class="line"><span>是否数据中心: No [1 8 C] Yes [0 5 6 A]</span></span>
<span class="line"><span>是否移动设备: Yes [E] No [5 A C]</span></span>
<span class="line"><span>是否代理: Yes [5 E] No [0 1 4 6 7 8 9 A B C D]</span></span>
<span class="line"><span>是否VPN: No [0 1 C] Yes [6 7 A D E]</span></span>
<span class="line"><span>是否Tor: No [0 1 3 6 7 8 A B C D E] </span></span>
<span class="line"><span>是否Tor出口: No [1 7 D] </span></span>
<span class="line"><span>是否网络爬虫: No [9 A B E] </span></span>
<span class="line"><span>是否匿名: No [1 8] Yes [6 7 D]</span></span>
<span class="line"><span>是否攻击者: No [7 8 D] </span></span>
<span class="line"><span>是否滥用者: No [7 8 A C D E] </span></span>
<span class="line"><span>是否威胁: No [7 8 C D] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C D] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C D] </span></span>
<span class="line"><span>是否机器人: No [E] </span></span>
<span class="line"><span>DNS-黑名单: 313(Total_Check) 0(Clean) 6(Blacklisted) 17(Other) </span></span>
<span class="line"><span>Google搜索可行性：NO</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✔     ✔     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Apple     ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>FastMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ProtonMail✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Namecrane ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    </span></span>
<span class="line"><span>Free_fr   ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信 219.141.140.10  电信CN2GIA [精品线路] </span></span>
<span class="line"><span>北京联通 202.106.195.68  电信CN2GIA [精品线路] 联通4837   [普通线路] </span></span>
<span class="line"><span>北京移动 221.179.155.161 移动CMIN2  [精品线路] </span></span>
<span class="line"><span>上海电信 202.96.209.133  电信CN2GIA [精品线路] </span></span>
<span class="line"><span>上海联通 210.22.97.1     电信CN2GIA [精品线路] 联通4837   [普通线路] </span></span>
<span class="line"><span>上海移动 211.136.112.200 移动CMIN2  [精品线路] </span></span>
<span class="line"><span>广州电信 58.60.188.222   电信CN2GIA [精品线路] </span></span>
<span class="line"><span>广州联通 210.21.196.6    电信CN2GIA [精品线路] 联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动 120.196.165.24  移动CMIN2  [精品线路] </span></span>
<span class="line"><span>成都电信 61.139.2.69     电信CN2GIA [精品线路] </span></span>
<span class="line"><span>成都联通 119.6.6.6       电信CN2GIA [精品线路] 联通4837   [普通线路] </span></span>
<span class="line"><span>成都移动 211.137.96.205  移动CMIN2  [精品线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>---------------------回程路由--感谢fscarmen开源及PR---------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>0.59 ms         AS25820 美国 加利福尼亚州 洛杉矶 it7.net</span></span>
<span class="line"><span>145.47 ms       * [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>151.55 ms       * [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>155.32 ms       * [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>156.50 ms       * [CN2-BackBone] 中国 广东 广州 chinatelecom.cn 电信</span></span>
<span class="line"><span>152.76 ms       AS4134 中国 广东 佛山市 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>152.81 ms       AS4134 中国 广东 深圳 福田区 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>        </span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>0.66 ms         AS25820 美国 加利福尼亚州 洛杉矶 it7.net</span></span>
<span class="line"><span>126.80 ms       AS58807 [CMIN2-NET] 美国 加利福尼亚 洛杉矶 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>126.66 ms       AS58807 [CMIN2-NET] 中国 上海 cmi.chinamobile.com 移动</span></span>
<span class="line"><span>126.23 ms       AS9808 [CMNET] 中国 上海 chinamobileltd.com 移动</span></span>
<span class="line"><span>126.41 ms       AS9808 [CMNET] 中国 上海 chinamobileltd.com 移动</span></span>
<span class="line"><span>130.16 ms       AS9808 [CMNET] 中国 上海 chinamobileltd.com</span></span>
<span class="line"><span>148.92 ms       AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动</span></span>
<span class="line"><span>171.19 ms       AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动</span></span>
<span class="line"><span>174.37 ms       AS9808 [CMNET] 中国 北京 chinamobileltd.com 移动</span></span>
<span class="line"><span>173.77 ms       AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置             上传速度        下载速度        延迟     丢包率</span></span>
<span class="line"><span>Speedtest.net    8903.77 Mbps    8051.40 Mbps    0.59     0.0%</span></span>
<span class="line"><span>洛杉矶           940.88 Mbps     939.68 Mbps     1.18     0.0%</span></span>
<span class="line"><span>联通上海5G       1861.70 Mbps    2267.66 Mbps    175.51   0.0%</span></span>
<span class="line"><span>联通Beijing      576.01 Mbps     1172.36 Mbps    159.54   0.0%</span></span>
<span class="line"><span>电信Suzhou5G     1406.15 Mbps    2012.21 Mbps    136.38   NULL</span></span>
<span class="line"><span>电信浙江         634.16 Mbps     1850.29 Mbps    139.47   NULL</span></span>
<span class="line"><span>移动Chengdu      1360.22 Mbps    837.18 Mbps     169.17   NULL</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 6 分 5 秒</span></span>
<span class="line"><span> 时间          : Mon Mar 10 19:39:47 PDT 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[openresty使用ngx_waf]]></title>
            <link>https://www.tteam.icu/blog/ops/openresty使用ngx_waf</link>
            <guid isPermaLink="false">/blog/ops/openresty使用ngx_waf</guid>
            <pubDate>Wed, 26 Feb 2025 23:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="openresty使用ngx_waf"><a href="#openresty使用ngx_waf" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>openresty</code>使用<code>ngx_waf</code> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="介绍ngx_waf"><a href="#介绍ngx_waf" class="rp-header-anchor rp-link" aria-hidden="true">#</a>介绍<code>ngx_waf</code></h2>
<h3 class="rp-toc-include" id="为什么选择-ngx_waf"><a href="#为什么选择-ngx_waf" class="rp-header-anchor rp-link" aria-hidden="true">#</a>为什么选择 <a href="https://github.com/ADD-SP/ngx_waf" target="_blank" rel="noopener noreferrer" class="rp-link">ngx_waf</a></h3>
<ul>
<li>基础防护：如 IP 或 IP 网段的黑白名单、URI 黑白名单和请求体黑名单等。</li>
<li>使用简单：配置文件和规则文件书写简单，可读性强。</li>
<li>高性能：使用高效的 IP 检查算法和缓存机制。</li>
<li>高级防护：兼容 <a href="https://github.com/SpiderLabs/ModSecurity" target="_blank" rel="noopener noreferrer" class="rp-link">ModSecurity</a>，因此你可以使用<a href="https://owasp.org/www-project-modsecurity-core-rule-set/" target="_blank" rel="noopener noreferrer" class="rp-link">开放式网络应用安全项目（OWASP）® 的核心规则库</a>。</li>
<li>友好爬虫验证：支持验证 Google、Bing、Baidu 和 Yandex 的爬虫并自动放行，避免错误拦截。</li>
<li>验证码：支持三种验证码：hCaptcha、reCAPTCHAv2 和 reCAPTCHAv3。</li>
</ul>
<h3 class="rp-toc-include" id="功能"><a href="#功能" class="rp-header-anchor rp-link" aria-hidden="true">#</a>功能</h3>
<ul>
<li>兼容 <a href="https://github.com/SpiderLabs/ModSecurity" target="_blank" rel="noopener noreferrer" class="rp-link">ModSecurity</a>。此功能仅限最新的 Current 版本。</li>
<li>SQL 注入防护（Powered By <a href="https://github.com/libinjection/libinjection" target="_blank" rel="noopener noreferrer" class="rp-link">libinjection</a>）。</li>
<li>XSS 攻击防护（Powered By <a href="https://github.com/libinjection/libinjection" target="_blank" rel="noopener noreferrer" class="rp-link">libinjection</a>）。</li>
<li>支持 IPV4 和 IPV6。</li>
<li>支持开启验证码（CAPTCHA)，支持 <a href="https://www.hcaptcha.com/" target="_blank" rel="noopener noreferrer" class="rp-link">hCaptcha</a>、<a href="https://developers.google.com/recaptcha" target="_blank" rel="noopener noreferrer" class="rp-link">reCAPTCHAv2</a> 和 <a href="https://developers.google.com/recaptcha" target="_blank" rel="noopener noreferrer" class="rp-link">reCAPTCHAv3</a>。此功能仅限最新的 Current 版本。</li>
<li>支持识别友好爬虫（如 BaiduSpider）并自动放行（基于 User-Agent 和 IP 的识别）。此功能仅限最新的 Current 版本。</li>
<li>CC 防御，超出限制后自动拉黑对应 IP 一段时间。</li>
<li>IP 黑白名单，同时支持类似 <code>192.168.0.0/16</code> 和 <code>fe80::/10</code>，即支持点分十进制和冒号十六进制表示法和网段划分。</li>
<li>POST 黑名单。</li>
<li>URL 黑白名单</li>
<li>查询字符串（Query String）黑名单。</li>
<li>UserAgent 黑名单。</li>
<li>Cookie 黑名单。</li>
<li>Referer 黑白名单。</li>
</ul>
<h2 class="rp-toc-include" id="打包"><a href="#打包" class="rp-header-anchor rp-link" aria-hidden="true">#</a>打包</h2>
<h3 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h3>
<p><code>openresty</code>天生支持<code>lua</code>，线上的日志是有<code>lua</code>做处理</p>
<p>线上有不同的<code>vpc</code>，每个环境都要做到快速部署，故把模块都打进<code>docker</code>中</p>
<p>本文章主要讲的是<a href="https://github.com/ADD-SP/ngx_waf" target="_blank" rel="noopener noreferrer" class="rp-link">ngx_waf</a>，但其实不止这个模块，一共有：</p>
<ul>
<li><a href="https://github.com/ADD-SP/ngx_waf" target="_blank" rel="noopener noreferrer" class="rp-link">ngx_waf</a>最新版(非tls版)</li>
<li><a href="https://github.com/vozlt/nginx-module-vts" target="_blank" rel="noopener noreferrer" class="rp-link">nginx-module-vts</a></li>
<li><a href="https://github.com/knyar/nginx-lua-prometheus" target="_blank" rel="noopener noreferrer" class="rp-link">nginx-lua-prometheus</a></li>
</ul>
<p><a href="https://github.com/ttdockerfile/openresty-monitor-ubuntu" target="_blank" rel="noopener noreferrer" class="rp-link">打包镜像</a></p>
<h2 class="rp-toc-include" id="使用"><a href="#使用" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用</h2>
<h2 class="rp-toc-include" id="监控"><a href="#监控" class="rp-header-anchor rp-link" aria-hidden="true">#</a>监控</h2>
<h3 class="rp-toc-include" id="http模块配置"><a href="#http模块配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>http模块配置</h3>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>vhost_traffic_status_zone;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="开启服务"><a href="#开启服务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开启服务</h3>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>server {</span></span>
<span class="line"><span>    listen 9145;</span></span>
<span class="line"><span>    # 给日志模板使用的变量</span></span>
<span class="line"><span>    set $resp_body &quot;&quot;;</span></span>
<span class="line"><span>    set $resp_cookies &quot;&quot;;</span></span>
<span class="line"><span>    location /metrics {</span></span>
<span class="line"><span>        content_by_lua_block {</span></span>
<span class="line"><span>            metric_connections:set(ngx.var.connections_reading, {&quot;reading&quot;})</span></span>
<span class="line"><span>            metric_connections:set(ngx.var.connections_waiting, {&quot;waiting&quot;})</span></span>
<span class="line"><span>            metric_connections:set(ngx.var.connections_writing, {&quot;writing&quot;})</span></span>
<span class="line"><span>            prometheus:collect()</span></span>
<span class="line"><span>        }</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    location /status {</span></span>
<span class="line"><span>        vhost_traffic_status_display;</span></span>
<span class="line"><span>        vhost_traffic_status_display_format html;</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span></span></span>
<span class="line"><span>}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="ngx_waf"><a href="#ngx_waf" class="rp-header-anchor rp-link" aria-hidden="true">#</a>ngx_waf</h2>
<p><a href="https://add-sp.github.io/ngx_waf-docs/zh-cn/" target="_blank" rel="noopener noreferrer" class="rp-link">文档地址</a></p>
<p>我使用到这个模块里的最主要的就是<code>waf_captcha</code>，这个是人机验证功能</p>
<p>由于自带的页面太难看了，所以我做了一个<a href="https://github.com/ttdockerfile/openresty-monitor-ubuntu/blob/master/assets/CAPTCHA.html" target="_blank" rel="noopener noreferrer" class="rp-link">界面</a></p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>waf_captcha on prov=hCaptcha file=/data/res/CAPTCHA.html secret=xxx;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2025春节广州香港行]]></title>
            <link>https://www.tteam.icu/blog/tour/2025春节广州香港行</link>
            <guid isPermaLink="false">/blog/tour/2025春节广州香港行</guid>
            <pubDate>Mon, 10 Feb 2025 19:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025春节广州香港行"><a href="#2025春节广州香港行" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025春节广州香港行<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>这是一篇关于我在2025年初一出发去广州、香港、深圳游玩的经历</p>
<h2 class="rp-toc-include" id="第一天"><a href="#第一天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一天</h2>
<p>前一天晚上在跨年，但是需要4点半起床去赶飞机所以只睡了2个半小时</p>
<p>飞机餐味道还不错</p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fkvsv6-3.webp" alt="飞机餐"/></p>
<p><img src="https://img.tteam.icu/i/2025/01/30/flrxej-3.webp" alt="飞机"/></p>
<p>下飞机后坐上地铁发现充电宝充不进去电，然而手机快关机了</p>
<p>赶紧导航到有小米之家的目的地，光速买入一个充电宝，然后去商场的楼上吃了顿潮汕牛肉</p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fm50cc-3.webp" alt="潮发潮汕牛肉店"/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-ipxknhq3g" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>一起边聊边逛了沙面岛，永庆坊，人民公园</p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fm6h5k-3.webp" alt="永庆坊"/></p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fmsv8h-3.webp" alt="永庆坊"/></p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fmutci-3.webp" alt="永庆坊"/></p>
<p>最后在正佳广场吃完饭，吃了粥底火锅</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-j3ygyhs6v" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/01/30/fn8zmh-3.webp" alt="粥底火锅"/></p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fngijg-3.webp" alt="粥底火锅"/></p>
<p>由于第二天还要逛顺德，所以酒店定在了顺德，吃完晚饭后立马就花了2小时到酒店休息了</p>
<p>最后发一下第一天战绩</p>
<p><img src="https://img.tteam.icu/i/2025/01/30/fignda-3.webp" alt="小米运动截图"/></p>
<h2 class="rp-toc-include" id="第二天"><a href="#第二天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二天</h2>
<p>10点出门后出发走去<code>金榜上街</code>，路上拍了张对面的老房子，这样的风景在我家那里不常见</p>
<p><img src="https://img.tteam.icu/i/2025/02/01/12foqjk-3.webp" alt=""/></p>
<p>还是一条比较有韵味的店(不过我没有拍照)</p>
<p>按着小红薯说的进了一家店吃了<code>双皮奶</code>和<code>水牛奶</code>，味道确实比平常吃的奶味更重，不过也只有一点点罢了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-sqhias6jz" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/01/12aar7z-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/01/129xygq-3.webp" alt=""/></p>
<p>半个小时逛完了<code>金榜上街</code>，在<code>金榜</code>公交车站坐公交车去<code>顺峰山公园</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-da89npxou" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/01/12jkaks-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/5guw6-3.webp" alt=""/></p>
<p>总体来说是个风景优美的地方，类似于<code>西湖</code></p>
<p>逛完<code>顺峰山公园</code>就做了两个半小时地铁回<code>广州</code>，把自己的包放在酒店</p>
<p>放完后又和群友一起去了北京路逛，吃了路边的糖水铺</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-8mo51wswo" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/9t5uy-3.webp" alt=""/></p>
<p>逛完后就出发去广州塔了</p>
<p>广州塔商场里有<code>影石</code>专卖店，想买<code>insta360</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-or5y7fooz" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/az63p-3.webp" alt=""/></p>
<p>逛完广州塔后就立马回酒店，早点睡觉准备第三天早起吃早茶了</p>
<h2 class="rp-toc-include" id="第三天"><a href="#第三天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三天</h2>
<p>第二天一早就前往吃早茶了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-kkpi4zvpd" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/f6scck-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/f6tk2j-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/f6rm1e-3.webp" alt=""/></p>
<p>吃完早茶就去了<code>动漫星城</code>逛了一下</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-trqdyz54t" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/f9pgbn-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/f9qpfn-3.webp" alt=""/></p>
<p>接着我们去<code>广铁博物馆</code>逛了，顺便搞了点文创</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-uwbx1o8h2" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>好多<code>m记</code>啊~</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/faxhzl-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/faz3g4-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fb0fy3-3.webp" alt=""/></p>
<p>文创集章</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fc0bso-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fc168q-3.webp" alt=""/></p>
<p>然后去<code>天河公园</code>逛了，群友拍风景，我拍群友，我们都拍到了自己想要的</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-mivkm2vhv" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/fdqj9p-3.webp" alt=""/></p>
<p>在回家的时候看到了很讽刺的场景，名字叫不加班xxx，但是24小时经营</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/ff8745-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="第四天"><a href="#第四天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四天</h2>
<p>早上五点半就起床，从广州南做高铁到香港西九龙站了</p>
<p>三个需要检查的地方都很顺利的过了，差不多20分钟就出关了</p>
<p>和群友会和后就去了<code>圆方</code>吃主播严选</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-868njtrkl" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/02/fv8z7z-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fmp19q-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fmpxoi-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fmqt2d-3.webp" alt=""/></p>
<p>然后我们就去逛了街景还有海边</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fi6oeg-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/firt6g-3.webp" alt=""/></p>
<p>港交所</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fjc2xe-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fjz6l2-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/02/fllgxf-3.webp" alt=""/></p>
<p>去<code>bakehouse</code>买了点蛋挞</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/gmilx2-3.webp" alt=""/></p>
<p>傍晚就回酒店了，前台态度还不错</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-riufezv8h" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>吹风机焊死在抽屉里，即节省了空间，又防止蒸汽导致短路</p>
<p><img src="https://img.tteam.icu/i/2025/02/02/gk7m07-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="第五天"><a href="#第五天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五天</h2>
<p>群友在昨天离别后和别的朋友又玩了一个通宵</p>
<p>所以早上只有我一个人逛了</p>
<p>早上去了<code>油麻地</code>和<code>旺角</code>，也去了<code>油麻地警署</code>，不过人太多就在马路对面拍了一张</p>
<p><img src="https://img.tteam.icu/i/2025/02/04/uqytj8-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/ur4439-3.webp" alt=""/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-5guewox5k" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/04/vjfjcu-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vjo4bs-3.webp" alt=""/></p>
<p>下午和群友集合后去了<code>港大</code>，又是一个未曾谋面的母校</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-x5hmrp1pj" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/04/vktpiu-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vkwszg-3.webp" alt=""/></p>
<p>本来想去<code>平顶山</code>的，结果到了后发现至少排队两个小时，就直接转头走了</p>
<p>我们就准备做游轮回<code>尖沙咀</code>了</p>
<p>这就幸运的遇到了m记的痛船</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-b6mk16ga7" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/04/voyz9o-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vnq7fw-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vnuxdd-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/voet4t-3.webp" alt=""/></p>
<p>觉得时间还早，就去打卡了一下<code>重庆大厦</code></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-bgw2bqkgk" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/04/vq6vac-3.webp" alt=""/></p>
<p>最后离岗前去吃了一下<code>烧鹅</code>，这个太油了，我们就吃了几块就不吃了</p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vr8ppi-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/04/vr9u2j-3.webp" alt=""/></p>
<p>最后做地铁离港了，花了我40多</p>
<h2 class="rp-toc-include" id="第六天"><a href="#第六天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第六天</h2>
<p>今天早上准备好出门后下雨，又立马回酒店躲了雨，等了几小时后出门了</p>
<p>坐地铁到了<code>海上世界</code>，我去的时候船被挡住了，没有开放，只有远远的拍了几张</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-dmofqktep" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/10/z10hoj-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/10/z0r2vm-3.webp" alt=""/></p>
<p>随后去了<code>深圳湾公园</code>，有很多人骑车</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-gidta3s7s" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>看到有个大爷拿着望远镜在隔岸看香港，我也随着他的视线拍了一张</p>
<p><img src="https://img.tteam.icu/i/2025/02/10/z6kbgl-3.webp" alt=""/></p>
<p>然后我花了几个小时完整的走完了<code>深圳湾公园</code>,然后坐着港铁回酒店了</p>
<p><img src="https://img.tteam.icu/i/2025/02/10/z85g6h-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="第七天"><a href="#第七天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第七天</h2>
<p>今天是最后一天，晚上就要坐着飞机回家了，所以起床迟了点</p>
<p>然后去了<code>快乐港湾</code>，这里有摩天轮，还可以近距离欣赏飞机落地</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-r2286ilm6" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2025/02/10/za4qmr-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2025/02/10/za5ve8-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="最后"><a href="#最后" class="rp-header-anchor rp-link" aria-hidden="true">#</a>最后</h2>
<p>这次春节七天出行只背了一个包，在广州的三天酒店都是不同的地方</p>
<p>所以说我基本在外面都是背着包的，真的是太累了</p>
<p>所以在第七天的下午感觉开始有点感冒了，12点到家立马吃药，到现在1周了，还是经常咳嗽</p>
<p>下次出行还是得把酒店定在一起，真的是太后悔了~~</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 07]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W06</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W06</guid>
            <pubDate>Sun, 09 Feb 2025 16:27:46 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-06"><a href="#2025-week-06" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 06<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p><a href="https://github.com/Arman19941113/dnd-resume" target="_blank" rel="noopener noreferrer" class="rp-link">dnd-resume</a>简历生成网站
<a href="https://github.com/DavidHDev/react-bits" target="_blank" rel="noopener noreferrer" class="rp-link">react-bits</a>react动画库</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>家里服务器搭建了<a href="https://github.com/home-assistant/core" target="_blank" rel="noopener noreferrer" class="rp-link">home-assistant</a>，未来可以换苹果全家桶，可以方便接入米家全套智能家具
<a href="https://github.com/appwrite/appwrite" target="_blank" rel="noopener noreferrer" class="rp-link">appwrite</a>应该可以方便开发阶段部署服务</p>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>出去特种兵旅游了7天，12点到家第二天需要上班
第七天开始感冒，第二天立马发烧，除了上班，下班真的没有精力了，好累啊
要稍微休息一下，下周还要特种兵去成都看演唱会
最近完全不想学习开发方面的东西，都是<code>github</code>上看到好的项目就<code>star</code>，没有继续看下去的动力
等下周看完演唱会，休息差不多后开始学习吧</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[年度计划 2025]]></title>
            <link>https://www.tteam.icu/blog/plans/year/Y2025</link>
            <guid isPermaLink="false">/blog/plans/year/Y2025</guid>
            <pubDate>Sat, 01 Feb 2025 23:24:55 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="年度计划-2025"><a href="#年度计划-2025" class="rp-header-anchor rp-link" aria-hidden="true">#</a>年度计划 2025<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>这篇文章是我在新的一年的展望，还是希望自己的拖延症能减小一点</p>
<p>在博客里立了<code>flag</code>后，希望这里的大半都能实现</p>
<p>这篇文章也会持续新增<code>flag</code>，也会把完成的勾上</p>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<ul class="contains-task-list">
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 把<code>golang</code>学习下去，并且开发至少1-2个自己构想的开源项目</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 精进<code>react</code>，用原生<code>react</code>开发学习，并使用ts开发项目</p>
</li>
</ul>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled=""/> 把<code>k8s</code>学习，并设计出一套<code>devops</code>方案，让自己容错率更大</li>
</ul>
<h2 class="rp-toc-include" id="构想的项目"><a href="#构想的项目" class="rp-header-anchor rp-link" aria-hidden="true">#</a>构想的项目</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled="" checked=""/> 用<code>golang</code>重构<code>nacos</code>的配置文件模块，兼容接口，并开发更好用的功能给公司内部和自己开发使用</li>
</ul>
<h2 class="rp-toc-include" id="想去的地方"><a href="#想去的地方" class="rp-header-anchor rp-link" aria-hidden="true">#</a>想去的地方</h2>
<ul class="contains-task-list">
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 日本</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 香港</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 广深</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 澳门</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 云南</p>
</li>
</ul>
<h2 class="rp-toc-include" id="其他"><a href="#其他" class="rp-header-anchor rp-link" aria-hidden="true">#</a>其他</h2>
<p><del>- [ ] 购入<code>insta360</code>开始拍摄<code>vlog</code>，让自己能在外面拿的出相机</del></p>
<ul class="contains-task-list">
<li class="task-list-item">
<p><input type="checkbox" disabled="" checked=""/> 购入<code>pocket 3</code>开始拍摄<code>vlog</code>，让自己能在外面拿的出相机</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 持续往博客里放入周报，总结每一周大概发生的事情和想做的事情</p>
</li>
<li class="task-list-item">
<p><input type="checkbox" disabled=""/> 精进自己的同时开始找对象</p>
</li>
</ul><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 04]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W04</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W04</guid>
            <pubDate>Sun, 26 Jan 2025 19:45:50 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-04"><a href="#2025-week-04" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 04<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
增加网站更新日志界面、更多项目界面，修改404界面，移动Navbar中部分链接</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>看到了<a href="https://github.com/cloudwego/hertz" target="_blank" rel="noopener noreferrer" class="rp-link">hertz</a>，是字节开源的<code>golang</code>的<code>http</code>框架，未来可以试试</p>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>这周是春节的前一周，这周要连上7天班，而且最近公司搞出了24小时值班，真的是太累了
最近都没有动力学习<code>golang</code>，只是一直在修改<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>
我感觉现在写前端比后端的能力更强了
下周就是春节，我初一就准备出去旅游了，下周的周报大概率要鸽了，到时候等着我的游记~</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 03]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W03</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W03</guid>
            <pubDate>Sun, 19 Jan 2025 23:46:52 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-03"><a href="#2025-week-03" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 03<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
拆分了工作经历组件，增加了工作的项目经验
未来想尝试一下<a href="https://github.com/TabbyML/tabby" target="_blank" rel="noopener noreferrer" class="rp-link">tabby</a>，是个可以自托管的ai代码生成工具</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>把<code>jenkins</code>的<code>agent</code>功能研究并跑通了，打包成<a href="https://github.com/ttdockerfile/jenkins-build2" target="_blank" rel="noopener noreferrer" class="rp-link">docker</a>可以一键启动了主要修改点为：主程序重构、新增<code>agent</code>
重新尝试了<a href="https://github.com/AdguardTeam/AdGuardHome" target="_blank" rel="noopener noreferrer" class="rp-link">AdGuardHome</a>搭建在vps上，尝试在代理层面消除油管app的广告，但似乎失败了；我另一个vps是<a href="https://blog.tteam.icu/vps/%E3%80%90vps%E6%B5%8B%E8%AF%84%E3%80%91VKVM/" target="_blank" rel="noopener noreferrer" class="rp-link">VKVM</a>的他似乎是也是用<code>DNS</code>实现的广告拦截，不清楚它是怎么做的
尝试了<a href="https://github.com/meeb/tubesync" target="_blank" rel="noopener noreferrer" class="rp-link">tubesync</a>，是个自动下载油管视频的服务，主要可以解决我在app端看视频的情况下有广告的痛点，它可以自动下载某个博主或者某个播放列表
未来准备好好的学习一下k8s，增加一下自己的容错率</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 02]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W02</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W02</guid>
            <pubDate>Sun, 12 Jan 2025 23:42:27 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-02"><a href="#2025-week-02" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 02<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
重构了图片页面，加载更流畅
封装了BackTop组件，让他有进度条
尝试了<a href="https://www.deepseek.com/" target="_blank" rel="noopener noreferrer" class="rp-link">deepseek</a>，通过<code>Cline</code>接入<code>vscode</code>，感觉还行</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>尝试了<a href="https://github.com/hunshcn/gh-proxy" target="_blank" rel="noopener noreferrer" class="rp-link">gh-proxy</a>，搭建后可以开ip白名单给国内的vps用</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】claw爪云]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】爪云</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】爪云</guid>
            <pubDate>Thu, 09 Jan 2025 20:31:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="claw爪云"><a href="#claw爪云" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://claw.cloud/" target="_blank" rel="noopener noreferrer" class="rp-link">claw爪云</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>爪云作为<del><code>阿里云</code>的母公司</del>，稳定性方面还是不用担心的</p>
<p>今天推出了7刀1年的vps，我立刻就买来测试了</p>
<p>我选择了日本，ssh秒连，和国内感觉差不多</p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : Intel(R) Xeon(R) Platinum</span></span>
<span class="line"><span> CPU 核心数        : 1</span></span>
<span class="line"><span> CPU 频率          : 2500.002 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 32.00 KB / L2: 1.00 MB / L3: 33.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span> 内存              : 151.35 MiB / 923.82 MiB</span></span>
<span class="line"><span> Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span> 硬盘空间          : 1.03 GiB / 19.52 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/vda1</span></span>
<span class="line"><span> 系统在线时间      : 0 days, 0 hour 4 min</span></span>
<span class="line"><span> 负载              : 0.97, 0.30, 0.10</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 12 (bookworm) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 6.1.0-28-cloud-amd64</span></span>
<span class="line"><span> TCP加速方式       : bbr</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> NAT类型           : Full Cone</span></span>
<span class="line"><span> IPV4 ASN          : AS45102 Alibaba (US) Technology Co., Ltd.</span></span>
<span class="line"><span> IPV4 位置         : Tokyo / Tokyo / JP</span></span>
<span class="line"><span> IPV6 ASN          : AS45102 Alibaba</span></span>
<span class="line"><span> IPV6 位置         : Tokyo / Tokyo / Japan</span></span>
<span class="line"><span> IPV6 子网掩码     : 128</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分:          1007 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:          5478.02 MB/s</span></span>
<span class="line"><span> 单线程写测试:          4839.90 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作               写速度                                  读速度</span></span>
<span class="line"><span> 100MB-4K Block         31.4 MB/s (7659 IOPS, 3.34s)            48.2 MB/s (11777 IOPS, 2.17s)</span></span>
<span class="line"><span> 1GB-1M Block           232 MB/s (221 IOPS, 4.53s)              209 MB/s (199 IOPS, 5.02s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 20.67 MB/s    (5.1k) | 96.30 MB/s    (1.5k)</span></span>
<span class="line"><span>Write      | 20.68 MB/s    (5.1k) | 96.80 MB/s    (1.5k)</span></span>
<span class="line"><span>Total      | 41.36 MB/s   (10.3k) | 193.10 MB/s   (3.0k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 92.10 MB/s     (179) | 91.54 MB/s      (89)</span></span>
<span class="line"><span>Write      | 96.99 MB/s     (189) | 97.64 MB/s      (95)</span></span>
<span class="line"><span>Total      | 189.09 MB/s    (368) | 189.18 MB/s    (184)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP可以使用Netflix，但仅可看Netflix自制剧</span></span>
<span class="line"><span>NF所识别的IP地域信息：美国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的出口IP可以使用Netflix，但仅可看Netflix自制剧</span></span>
<span class="line"><span>NF所识别的IP地域信息：新加坡</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 日本 东京(NRT20S05)</span></span>
<span class="line"><span>Youtube识别地域: 日本(JP)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 日本 东京(NRT20S05)</span></span>
<span class="line"><span>Youtube识别地域: 日本(JP)</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前出口所在地区解锁DisneyPlus</span></span>
<span class="line"><span>区域：JP 区</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>当前出口所在地区解锁DisneyPlus</span></span>
<span class="line"><span>区域：JP 区</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:                                  Failed (Error: )</span></span>
<span class="line"><span> Disney+:                               No (IP Banned By Disney+ 1)</span></span>
<span class="line"><span> Netflix:                               Originals Only</span></span>
<span class="line"><span> YouTube Premium:                       Yes (Region: JP)</span></span>
<span class="line"><span> Amazon Prime Video:                    Yes (Region: JP)</span></span>
<span class="line"><span> TVBAnywhere+:                          Yes</span></span>
<span class="line"><span> Spotify Registration:                  Yes (Region: JP)</span></span>
<span class="line"><span> OneTrust Region:                       JP [Tokyo]</span></span>
<span class="line"><span> iQyi Oversea Region:                   JP</span></span>
<span class="line"><span> Bing Region:                           JP</span></span>
<span class="line"><span> YouTube CDN:                           Tokyo</span></span>
<span class="line"><span> Netflix Preferred CDN:                 Tokyo</span></span>
<span class="line"><span> ChatGPT:                               Yes</span></span>
<span class="line"><span> Google Gemini:                         Yes (Region: JPN)</span></span>
<span class="line"><span> Wikipedia Editability:                 No</span></span>
<span class="line"><span> Google Play Store:                     Japan </span></span>
<span class="line"><span> Google Search CAPTCHA Free:            Yes</span></span>
<span class="line"><span> Steam Currency:                        JPY</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:                                No</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:                                  IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Disney+:                               IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Netflix:                               Originals Only</span></span>
<span class="line"><span> YouTube Premium:                       Yes (Region: JP)</span></span>
<span class="line"><span> Amazon Prime Video:                    IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> TVBAnywhere+:                          IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Spotify Registration:                  Yes (Region: JP)</span></span>
<span class="line"><span> OneTrust Region:                       JP [Tokyo]</span></span>
<span class="line"><span> iQyi Oversea Region:                   IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> Bing Region:                           JP</span></span>
<span class="line"><span> YouTube CDN:                           Tokyo</span></span>
<span class="line"><span> Netflix Preferred CDN:                 Osaka</span></span>
<span class="line"><span> ChatGPT:                               Failed (Network Connection)</span></span>
<span class="line"><span> Google Gemini:                         Yes (Region: JPN)</span></span>
<span class="line"><span> Wikipedia Editability:                 No</span></span>
<span class="line"><span> Google Play Store:                     Japan </span></span>
<span class="line"><span> Google Search CAPTCHA Free:            Yes</span></span>
<span class="line"><span> Steam Currency:                        IPv6 Is Not Currently Supported</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:                                IPv6 Is Not Currently Supported</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span>---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------</span></span>
<span class="line"><span> Tiktok Region:         【JP】</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | cheervision数据库 [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 0 [8]</span></span>
<span class="line"><span>VPN得分(越低越好): 100 [8] </span></span>
<span class="line"><span>代理得分(越低越好): 100 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 100 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 0 [1] 65 [E]</span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3] </span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0011 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0.0008 (Low) [A] </span></span>
<span class="line"><span>威胁级别: low [9 B] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 94 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: DataCenter/WebHosting/Transit [3] hosting [0 7 9 A] business [8] hosting ASN [C]</span></span>
<span class="line"><span>公司类型: hosting [0 7 A] </span></span>
<span class="line"><span>是否云提供商: Yes [7 D] </span></span>
<span class="line"><span>是否数据中心: Yes [0 1 5 6 A C] No [8]</span></span>
<span class="line"><span>是否移动设备: Yes [E] No [5 A C]</span></span>
<span class="line"><span>是否代理: No [0 1 4 5 6 7 8 9 A B C D] Yes [E]</span></span>
<span class="line"><span>是否VPN: No [0 1 6 7 C D] Yes [A E]</span></span>
<span class="line"><span>是否TorExit: No [1 7 D] </span></span>
<span class="line"><span>是否Tor出口: No [1 7 D] </span></span>
<span class="line"><span>是否网络爬虫: No [9 A B E] </span></span>
<span class="line"><span>是否匿名: No [1 6 7 8 D] </span></span>
<span class="line"><span>是否攻击者: No [7 8 D] </span></span>
<span class="line"><span>是否滥用者: No [7 8 A C D E] </span></span>
<span class="line"><span>是否威胁: No [7 8 C D] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C D] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C D] </span></span>
<span class="line"><span>是否机器人: No [E] </span></span>
<span class="line"><span>DNS-黑名单: 314(Total_Check) 0(Clean) 4(Blacklisted) 23(Other) </span></span>
<span class="line"><span>IPV6:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>欺诈得分(越低越好): 13 [1] </span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3]</span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0011 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A] </span></span>
<span class="line"><span>威胁级别: low [B] </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting [A] DataCenter/WebHosting/Transit [3]</span></span>
<span class="line"><span>公司类型: hosting [A] </span></span>
<span class="line"><span>是否云提供商: Yes [D]</span></span>
<span class="line"><span>是否数据中心: Yes [1 A] </span></span>
<span class="line"><span>是否移动设备: No [A] </span></span>
<span class="line"><span>是否代理: No [1 A B D] </span></span>
<span class="line"><span>是否VPN: No [1 A D] </span></span>
<span class="line"><span>是否TorExit: No [1 D] </span></span>
<span class="line"><span>是否Tor出口: No [1 D] </span></span>
<span class="line"><span>是否网络爬虫: No [A B] </span></span>
<span class="line"><span>是否匿名: No [1 D] </span></span>
<span class="line"><span>是否攻击者: No [D] </span></span>
<span class="line"><span>是否滥用者: No [A D] </span></span>
<span class="line"><span>是否威胁: No [D] </span></span>
<span class="line"><span>是否中继: No [D] </span></span>
<span class="line"><span>是否Bogon: No [A D] </span></span>
<span class="line"><span>Google搜索可行性：YES</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✘     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✘     ✔     ✘     ✘     ✔     ✘    </span></span>
<span class="line"><span>AOL       ✘     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✘     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✘     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信 219.141.140.10  电信163    [普通线路] </span></span>
<span class="line"><span>北京联通 202.106.195.68  联通4837   [普通线路] </span></span>
<span class="line"><span>北京移动 221.179.155.161 移动CMI    [普通线路] </span></span>
<span class="line"><span>上海电信 202.96.209.133  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海联通 210.22.97.1     检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海移动 211.136.112.200 检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>广州电信 58.60.188.222   检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>广州联通 210.21.196.6    联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动 120.196.165.24  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>成都电信 61.139.2.69     电信163    [普通线路] </span></span>
<span class="line"><span>成都联通 119.6.6.6       联通4837   [普通线路] </span></span>
<span class="line"><span>成都移动 211.137.96.205  移动CMI    [普通线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>---------------------回程路由--感谢fscarmen开源及PR---------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自ipip.net或nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>        </span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>52.37 ms        * DOD</span></span>
<span class="line"><span>1.30 ms         * RFC1918</span></span>
<span class="line"><span>3.67 ms         * [BBIXINTLNET] 日本 东京都 东京 BBTEC-Peer</span></span>
<span class="line"><span>169.96 ms       AS17676 [BBTEC] 中国 北京 BBTEC-CU-Peer softbank.jp</span></span>
<span class="line"><span>180.11 ms       AS4837 [CU169-BACKBONE] 中国 北京 chinaunicom.cn</span></span>
<span class="line"><span>175.04 ms       AS17816 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>207.93 ms       AS17623 [APNIC-AP] 中国 广东 深圳 chinaunicom.cn 联通</span></span>
<span class="line"><span>174.43 ms       AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>1.05 ms         * DOD</span></span>
<span class="line"><span>1.96 ms         * RFC1918</span></span>
<span class="line"><span>3.18 ms         * [BBIXINTLNET] 日本 东京都 东京</span></span>
<span class="line"><span>3.56 ms         AS17676 [BBTEC] 日本 东京都 东京 softbank.jp</span></span>
<span class="line"><span>60.84 ms        AS58453 [CMI-INT] 中国 香港 cmi.chinamobile.com</span></span>
<span class="line"><span>62.10 ms        AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>62.34 ms        AS9808 [CMNET] 中国 广东 广州 I-C chinamobileltd.com 移动</span></span>
<span class="line"><span>65.91 ms        AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>67.83 ms        AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>66.63 ms        AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置             上传速度        下载速度        延迟     丢包率</span></span>
<span class="line"><span>日本东京         207.08 Mbps     202.54 Mbps     4.12     2.1%</span></span>
<span class="line"><span>中国香港         237.87 Mbps     415.27 Mbps     54.38    0.0%</span></span>
<span class="line"><span>联通上海5G       216.33 Mbps     213.29 Mbps     174.17   0.0%</span></span>
<span class="line"><span>联通WuXi         230.47 Mbps     226.23 Mbps     176.44   0.0%</span></span>
<span class="line"><span>电信浙江         207.07 Mbps     204.38 Mbps     41.11    NULL</span></span>
<span class="line"><span>移动杭州5G       208.87 Mbps     222.10 Mbps     41.88    0.0%</span></span>
<span class="line"><span>移动Fujian       315.72 Mbps     409.42 Mbps     87.40    NULL</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 8 分 2 秒</span></span>
<span class="line"><span> 时间          : Thu Jan  9 09:15:09 UTC 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】VKVM]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】VKVM</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】VKVM</guid>
            <pubDate>Thu, 09 Jan 2025 18:31:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="vkvm"><a href="#vkvm" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://www.vkvm.info/aff/DSJLPDTA" target="_blank" rel="noopener noreferrer" class="rp-link">VKVM</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>这台服务器是我在<code>VKVM</code>暑假优惠的时候买的，299一年，三网都是顶级线路</p>
<p>缺点是经常被攻击</p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz</span></span>
<span class="line"><span> CPU 核心数        : 2</span></span>
<span class="line"><span> CPU 频率          : 2299.996 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 32.00 KB / L2: 256.00 KB / L3: 45.00 MB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ✔ Enabled</span></span>
<span class="line"><span> 内存              : 1.21 GiB / 3.84 GiB</span></span>
<span class="line"><span> Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span> 硬盘空间          : 14.40 GiB / 39.21 GiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/vda1</span></span>
<span class="line"><span> 系统在线时间      : 21 days, 0 hour 51 min</span></span>
<span class="line"><span> 负载              : 0.96, 0.31, 0.14</span></span>
<span class="line"><span> 系统              : Debian GNU/Linux 12 (bookworm) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 6.1.0-28-cloud-amd64</span></span>
<span class="line"><span> TCP加速方式       : bbr</span></span>
<span class="line"><span> 虚拟化架构        : KVM</span></span>
<span class="line"><span> NAT类型           : Inconclusive</span></span>
<span class="line"><span> IPV4 ASN          : AS215269 LAZYCLOUD LTD</span></span>
<span class="line"><span> IPV4 位置         : Los Angeles / California / US</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分:          704 Scores</span></span>
<span class="line"><span> 2 线程测试(多核)得分:          1548 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:          14682.70 MB/s</span></span>
<span class="line"><span> 单线程写测试:          11269.64 MB/s</span></span>
<span class="line"><span>------------------磁盘dd读写测试--感谢lemonbench开源--------------------</span></span>
<span class="line"><span> -&gt; 磁盘IO测试中 (4K Block/1M Block, Direct Mode)</span></span>
<span class="line"><span> 测试操作               写速度                                  读速度</span></span>
<span class="line"><span> 100MB-4K Block         8.9 MB/s (2168 IOPS, 11.81s)            8.9 MB/s (2169 IOPS, 11.80s)</span></span>
<span class="line"><span> 1GB-1M Block           554 MB/s (528 IOPS, 1.89s)              1.0 GB/s (966 IOPS, 1.03s)</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 8.11 MB/s     (2.0k) | 130.65 MB/s   (2.0k)</span></span>
<span class="line"><span>Write      | 8.14 MB/s     (2.0k) | 131.34 MB/s   (2.0k)</span></span>
<span class="line"><span>Total      | 16.25 MB/s    (4.0k) | 261.99 MB/s   (4.0k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 637.80 MB/s   (1.2k) | 541.65 MB/s    (528)</span></span>
<span class="line"><span>Write      | 671.69 MB/s   (1.3k) | 577.72 MB/s    (564)</span></span>
<span class="line"><span>Total      | 1.30 GB/s     (2.5k) | 1.11 GB/s     (1.0k)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP完整解锁Netflix，支持非自制剧的观看</span></span>
<span class="line"><span>NF所识别的IP地域信息：美国</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的网络可能没有正常配置IPv6，或者没有IPv6网络接入</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Youtube Video Server</span></span>
<span class="line"><span>视频缓存节点地域: 美国  洛杉机(LAX31S13)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>Youtube在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前出口所在地区解锁DisneyPlus</span></span>
<span class="line"><span>区域：US 区</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>当前出口所在地区解锁DisneyPlus</span></span>
<span class="line"><span>区域：US 区</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:                                  Yes (Region: US)</span></span>
<span class="line"><span> Disney+:                               Yes (Region: US)</span></span>
<span class="line"><span> Netflix:                               Yes (Region: US)</span></span>
<span class="line"><span> YouTube Premium:                       Yes (Region: US)</span></span>
<span class="line"><span> Amazon Prime Video:                    Yes (Region: GB)</span></span>
<span class="line"><span> TVBAnywhere+:                          Yes</span></span>
<span class="line"><span> Spotify Registration:                  Yes (Region: US)</span></span>
<span class="line"><span> OneTrust Region:                       US [California]</span></span>
<span class="line"><span> iQyi Oversea Region:                   GB</span></span>
<span class="line"><span> Bing Region:                           US</span></span>
<span class="line"><span> YouTube CDN:                           Los Angeles, CA</span></span>
<span class="line"><span> Netflix Preferred CDN:                 [LAZYCLOUD LTD] in [Singapore]</span></span>
<span class="line"><span> ChatGPT:                               Yes</span></span>
<span class="line"><span> Google Gemini:                         Yes (Region: CHN)</span></span>
<span class="line"><span> Wikipedia Editability:                 Yes</span></span>
<span class="line"><span> Google Play Store:                     China </span></span>
<span class="line"><span> Google Search CAPTCHA Free:            Yes</span></span>
<span class="line"><span> Steam Currency:                        USD</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:                                Yes</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------</span></span>
<span class="line"><span> Tiktok Region:         Failed</span></span>
<span class="line"><span>-------------IP质量检测--基于oneclickvirt/securityCheck使用-------------</span></span>
<span class="line"><span>数据仅作参考，不代表100%准确，如果和实际情况不一致请手动查询多个数据库比对</span></span>
<span class="line"><span>以下为各数据库编号，输出结果后将自带数据库来源对应的编号</span></span>
<span class="line"><span>ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]</span></span>
<span class="line"><span>ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]</span></span>
<span class="line"><span>ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | cheervision数据库 [D] | ipqualityscore数据库 [E]</span></span>
<span class="line"><span>IPV4:</span></span>
<span class="line"><span>安全得分:</span></span>
<span class="line"><span>声誉(越高越好): 0 [2] </span></span>
<span class="line"><span>信任得分(越高越好): 3 [8]</span></span>
<span class="line"><span>VPN得分(越低越好): 96 [8] </span></span>
<span class="line"><span>代理得分(越低越好): 100 [8] </span></span>
<span class="line"><span>社区投票-无害: 0 [2] </span></span>
<span class="line"><span>社区投票-恶意: 0 [2] </span></span>
<span class="line"><span>威胁得分(越低越好): 94 [8] </span></span>
<span class="line"><span>欺诈得分(越低越好): 0 [1] </span></span>
<span class="line"><span>滥用得分(越低越好): 0 [3] </span></span>
<span class="line"><span>ASN滥用得分(越低越好): 0.0007 (Low) [A] </span></span>
<span class="line"><span>公司滥用得分(越低越好): 0 (Very Low) [A] </span></span>
<span class="line"><span>威胁级别: low [9 B] </span></span>
<span class="line"><span>黑名单记录统计:(有多少黑名单网站有记录):</span></span>
<span class="line"><span>无害记录数: 0 [2]  恶意记录数: 0 [2]  可疑记录数: 0 [2]  无记录数: 94 [2]  </span></span>
<span class="line"><span>安全信息:</span></span>
<span class="line"><span>使用类型: hosting - high probability [C] hosting [0 7 9 A] DataCenter/WebHosting/Transit [3] business [8]</span></span>
<span class="line"><span>公司类型: isp [7 A] business [0]</span></span>
<span class="line"><span>是否云提供商: Yes [7 D] </span></span>
<span class="line"><span>是否数据中心: No [0 5 6 8 A C] Yes [1]</span></span>
<span class="line"><span>是否移动设备: No [5 A C] </span></span>
<span class="line"><span>是否代理: No [0 1 4 5 6 7 8 9 A B C D] </span></span>
<span class="line"><span>是否VPN: No [0 1 6 7 A C D] </span></span>
<span class="line"><span>是否Tor: No [0 1 3 6 7 8 A B C D] </span></span>
<span class="line"><span>是否Tor出口: No [1 7 D]</span></span>
<span class="line"><span>是否网络爬虫: No [9 A B] </span></span>
<span class="line"><span>是否匿名: No [1 6 7 8 D] </span></span>
<span class="line"><span>是否攻击者: No [7 8 D] </span></span>
<span class="line"><span>是否滥用者: No [7 8 A C D] </span></span>
<span class="line"><span>是否威胁: No [7 8 C D] </span></span>
<span class="line"><span>是否中继: No [0 7 8 C D] </span></span>
<span class="line"><span>是否Bogon: No [7 8 A C D] </span></span>
<span class="line"><span>Google搜索可行性：YES</span></span>
<span class="line"><span>-------------邮件端口检测--基于oneclickvirt/portchecker开源-------------</span></span>
<span class="line"><span>Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS</span></span>
<span class="line"><span>LocalPort ✔     ✔     ✔     ✔     ✔     ✔    </span></span>
<span class="line"><span>QQ        ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>163       ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sohu      ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yandex    ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Gmail     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>Outlook   ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Office365 ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>MailRU    ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>AOL       ✔     ✔     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>GMX       ✔     ✘     ✔     ✘     ✔     ✘    </span></span>
<span class="line"><span>Sina      ✔     ✘     ✘     ✘     ✘     ✘    </span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信 219.141.140.10  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>北京联通 202.106.195.68  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>北京移动 221.179.155.161 检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海电信 202.96.209.133  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海联通 210.22.97.1     检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海移动 211.136.112.200 检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>广州电信 58.60.188.222   检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>广州联通 210.21.196.6    检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>广州移动 120.196.165.24  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>成都电信 61.139.2.69     检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>成都联通 119.6.6.6       检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>成都移动 211.137.96.205  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>---------------------回程路由--感谢fscarmen开源及PR---------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自ipip.net或nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>158.01 ms       AS4134 中国 广东 深圳 福田区 www.chinatelecom.com.cn 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>167.56 ms       AS17623 中国 广东 深圳 宝安区 chinaunicom.cn 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>153.70 ms       AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置             上传速度        下载速度        延迟     丢包率</span></span>
<span class="line"><span>Speedtest.net    286.21 Mbps     283.49 Mbps     0.79     0.0%</span></span>
<span class="line"><span>洛杉矶           286.50 Mbps     283.48 Mbps     0.83     0.0%</span></span>
<span class="line"><span>日本东京         267.67 Mbps     279.73 Mbps     106.59   0.3%</span></span>
<span class="line"><span>联通上海5G       13.79 Mbps      316.38 Mbps     146.99   0.0%</span></span>
<span class="line"><span>联通WuXi         149.04 Mbps     279.60 Mbps     147.71   0.0%</span></span>
<span class="line"><span>电信浙江         256.48 Mbps     190.95 Mbps     141.71   NULL</span></span>
<span class="line"><span>电信浙江         253.49 Mbps     194.22 Mbps     147.04   NULL</span></span>
<span class="line"><span>移动Fujian       128.34 Mbps     255.23 Mbps     148.18   NULL</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 7 分 9 秒</span></span>
<span class="line"><span> 时间          : Thu Jan  9 17:17:51 CST 2025</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[语雀服务崩了后谈]]></title>
            <link>https://www.tteam.icu/blog/ops/语雀服务崩了后谈</link>
            <guid isPermaLink="false">/blog/ops/语雀服务崩了后谈</guid>
            <pubDate>Tue, 07 Jan 2025 09:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="语雀服务崩了后谈"><a href="#语雀服务崩了后谈" class="rp-header-anchor rp-link" aria-hidden="true">#</a>语雀服务崩了后谈<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="该文章为补档并发布在别的地方写于20231025"><a href="#该文章为补档并发布在别的地方写于20231025" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>该文章为补档，并发布在别的地方，写于2023/10/25</strong></h2>
<p>语雀服务在23号崩了10小时左右这件事，在程序员节（好像已经过了）想聊聊这个事情
说个笑话：语雀服务崩了后，运维的脚本都存在语雀里拿不出来，所以才崩了那么久（不是）
现在程序员的现状：开发完一个项目就把大多数人给优化掉或者转岗（写个交接文档算好了的），然后新接手的人员又不能很快的熟悉项目（我认为这是最主要的原因，虽然语雀官方发文说是旧存储的问题）
通过这个事情我们可以知道即便是大厂，也不能保证服务的高可用，所以重要的数据大家一定要备份啊！！！不能只存网盘啊！！！正确的备份方式是321存储法：3个副本、2个不同备份介质、1个异地灾备中心
乘着这个事，我今天上班也和开发同事聊了5分钟，出现了这个事情后天也在搞新的笔记方案：markdown+vuepress+git+自动部署在自己的服务器上供自己随时随地访问，相对来说已经挺安全了，做到了本地+服务器+github三地备份
目前我自己存储笔记的方法是，把所有图片存在自己的服务器，然后笔记和开源项目的文档存git（每次都推送到自己搭的git，由服务器分发到码云和github，然后出发github的自动化自动打包成静态文件推送到docs分支，然后github自动更新部署静态文件+把静态文件同步到码云），这套逻辑看起来很复杂，其实搭建起来还挺简单的，且做到了本地+自己服务器+两个git同步，且可以随时随地访问
关于大文件的存储我和我那个同事家里都自己搭nas（通过网络访问的硬盘，可以理解成本地化的阿里网盘）来存储数据</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[年报 2024]]></title>
            <link>https://www.tteam.icu/blog/record/yearly/Y2024</link>
            <guid isPermaLink="false">/blog/record/yearly/Y2024</guid>
            <pubDate>Mon, 06 Jan 2025 23:24:55 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="year-2024"><a href="#year-2024" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Year 2024<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结</h2>
<p>在这一年，我去过重庆、成都、上海、厦门这几个地方
<code>开发</code>方面，<code>python</code>语言更精通了，新学习了<code>react</code>技术栈，<code>golang</code>算是刚刚开始学
<code>运维</code>方面，对各种系统的配置文件、组件更熟系了，各种经验不断
<code>vps</code>方面，今年支出了约3k
<code>体重</code>方面，下降了20斤
<del><code>恋爱</code>方面，还是母单</del></p>
<h2 class="rp-toc-include" id="附录"><a href="#附录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>附录</h2>
<h3 class="rp-toc-include" id="github报告"><a href="#github报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>github</code>报告</h3>
<h4 class="rp-toc-include" id="年报视频"><a href="#年报视频" class="rp-header-anchor rp-link" aria-hidden="true">#</a>年报视频</h4>
<p><a href="https://www.bilibili.com/video/BV1dCr3YqE9F" target="_blank" rel="noopener noreferrer" class="rp-link">点我跳转</a></p>
<h4 class="rp-toc-include" id="贡献图"><a href="#贡献图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>贡献图</h4>
<p><img src="https://img.tteam.icu/i/2025/01/06/oxu874-3.webp" alt=""/></p>
<h3 class="rp-toc-include" id="wakatime报告"><a href="#wakatime报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>wakatime</code>报告</h3>
<p><img src="https://img.tteam.icu/i/2025/01/06/ny4wmh-3.webp" alt=""/></p>
<h3 class="rp-toc-include" id="各大app报告"><a href="#各大app报告" class="rp-header-anchor rp-link" aria-hidden="true">#</a>各大app报告</h3>
<h4 class="rp-toc-include" id="高德地图"><a href="#高德地图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>高德地图</h4>
<p><img src="https://img.tteam.icu/i/2025/01/06/p44t02-3.webp" alt=""/></p>
<h4 class="rp-toc-include" id="网易云音乐"><a href="#网易云音乐" class="rp-header-anchor rp-link" aria-hidden="true">#</a>网易云音乐</h4>
<p><img src="https://img.tteam.icu/i/2025/01/06/p4hex5-3.webp" alt=""/></p>
<h4 class="rp-toc-include" id="哔哩哔哩"><a href="#哔哩哔哩" class="rp-header-anchor rp-link" aria-hidden="true">#</a>哔哩哔哩</h4>
<p><img src="https://img.tteam.icu/i/2025/01/06/p4lems-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="碎碎念"><a href="#碎碎念" class="rp-header-anchor rp-link" aria-hidden="true">#</a>碎碎念</h2>
<p>我是在2024年1月2日转岗成运维
到写这篇文章的时候已经正好整整一年了
在运维上岗后，学到的运维的知识特别多，最主要的是运维的经验
经验对于运维来说是特别重要的
希望在新的一年能够在开发和运维方面更进一步</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2025 Week 01]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2025/W01</link>
            <guid isPermaLink="false">/blog/record/weekly/2025/W01</guid>
            <pubDate>Sun, 05 Jan 2025 23:24:55 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2025-week-01"><a href="#2025-week-01" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2025 Week 01<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
图片界面改为从api获取图片，增加了图片
给博客加上了评论系统,使用的是<a href="https://github.com/utterance/utterances" target="_blank" rel="noopener noreferrer" class="rp-link">utterances</a>
给<code>github</code>主页加上了自动展示博客文章给你,使用的是<a href="https://github.com/gautamkrishnar/blog-post-workflow" target="_blank" rel="noopener noreferrer" class="rp-link">blog-post-workflow</a></p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>用<code>ansible</code>实现自动化控制<code>windows</code>上线服务
尝试使用了<a href="https://github.com/prometheus-community/windows_exporter" target="_blank" rel="noopener noreferrer" class="rp-link">windows_exporter</a>来监控<code>windows</code>服务器</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2024 Week 52]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2024/W52</link>
            <guid isPermaLink="false">/blog/record/weekly/2024/W52</guid>
            <pubDate>Sun, 29 Dec 2024 20:44:20 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2024-week-52"><a href="#2024-week-52" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2024 Week 52<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
增加git参数、使用<a href="https://github.com/nfl/react-helmet" target="_blank" rel="noopener noreferrer" class="rp-link">react-helmet</a>往<code>head</code>里增加js和meta
尝试了一下<a href="https://www.cursor.com/" target="_blank" rel="noopener noreferrer" class="rp-link">cursor</a>,感觉还是挺好用的
调研了一下<code>golang</code>的框架,最终选择了<a href="https://github.com/gogf/gf" target="_blank" rel="noopener noreferrer" class="rp-link">GoFrame</a>作为我学<code>golang</code>后的第一个框架</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>尝试了一下<a href="https://note.tteam.icu/docs/ops/service/ansible.html" target="_blank" rel="noopener noreferrer" class="rp-link">ansible</a>控制<code>Windows</code>
走了一下<code>ELK</code>的流程，整体体验下来确实挺耗性能的，啥都没入就差不多占用8G内存了，确实不如我们基于<code>clickhouse</code>的日志系统</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[cloudflare 加载git信息]]></title>
            <link>https://www.tteam.icu/blog/dev/cloudflare加载git信息</link>
            <guid isPermaLink="false">/blog/dev/cloudflare加载git信息</guid>
            <pubDate>Fri, 27 Dec 2024 18:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="cloudflare加载git信息"><a href="#cloudflare加载git信息" class="rp-header-anchor rp-link" aria-hidden="true">#</a>cloudflare加载git信息<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>我之前会把<code>git</code>的信息获取到后塞到<code>head</code>中</p>
<p>把<a href="https://note.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">笔记</a>、<a href="https://blog.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">博客</a>和<a href="https://www.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">关于我</a>从<code>jenkins</code>自动化迁移到<code>cloudflare</code>后发现获取git的参数有问题</p>
<p><code>cloudflare</code>编译的结果git分支会显示<code>HEAD</code>，git提交数永远显示<code>1</code></p>
<h2 class="rp-toc-include" id="开始"><a href="#开始" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开始</h2>
<p>经过我一系列的测试，发现在构建命令前增加几个命令即可</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> fetch</span><span style="color:var(--shiki-token-string)"> --unshallow</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> git</span><span style="color:var(--shiki-token-string)"> fetch</span><span style="color:var(--shiki-token-string)"> origin</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> git</span><span style="color:var(--shiki-token-string)"> checkout</span><span style="color:var(--shiki-token-string)"> main</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> git</span><span style="color:var(--shiki-token-string)"> pull</span><span style="color:var(--shiki-token-string)"> origin</span><span style="color:var(--shiki-token-string)"> main</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="附录"><a href="#附录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>附录</h2>
<h3 class="rp-toc-include" id="获取git参数"><a href="#获取git参数" class="rp-header-anchor rp-link" aria-hidden="true">#</a>获取git参数</h3>
<div class="rp-codeblock language-js"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="js"><code><span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> fs</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;fs&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-foreground)"> { </span><span style="color:var(--shiki-token-constant)">execSync</span><span style="color:var(--shiki-foreground)"> } </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;child_process&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> path</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;path&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">function</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(date) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">    date</span><span style="color:var(--shiki-token-function)">.setUTCHours</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCHours</span><span style="color:var(--shiki-foreground)">() </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-token-constant)"> 8</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> year</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> date</span><span style="color:var(--shiki-token-function)">.getUTCFullYear</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> month</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCMonth</span><span style="color:var(--shiki-foreground)">() </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-token-constant)"> 1</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> day</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCDate</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> hours</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCHours</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> minutes</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCMinutes</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> seconds</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCSeconds</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    return</span><span style="color:var(--shiki-token-string-expression)"> `</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">year</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">-</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">month</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">-</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">day</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-keyword)"> ${</span><span style="color:var(--shiki-foreground)">hours</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">:</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">minutes</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">:</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">seconds</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 哈希</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> gitHash</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-parse --short HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 分支</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> gitBranch</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-parse --abbrev-ref HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 提交时间</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitDateStr</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git log -1 --format=%cd&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitDate</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-keyword)">new</span><span style="color:var(--shiki-token-function)"> Date</span><span style="color:var(--shiki-foreground)">(commitDateStr));</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取构建时间</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> buildTime</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-keyword)">new</span><span style="color:var(--shiki-token-function)"> Date</span><span style="color:var(--shiki-foreground)">());</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 提交次数</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitCount</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-list --count HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> buildInfo</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    buildTime</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    gitBranch</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    gitHash</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    commitCount</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    commitDate</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">};</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 确保目录存在</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> outputDir</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> path</span><span style="color:var(--shiki-token-function)">.join</span><span style="color:var(--shiki-foreground)">(__dirname</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;../default_data&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">if</span><span style="color:var(--shiki-foreground)"> (</span><span style="color:var(--shiki-token-keyword)">!</span><span style="color:var(--shiki-token-constant)">fs</span><span style="color:var(--shiki-token-function)">.existsSync</span><span style="color:var(--shiki-foreground)">(outputDir)) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">    fs</span><span style="color:var(--shiki-token-function)">.mkdirSync</span><span style="color:var(--shiki-foreground)">(outputDir</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> { recursive</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> true</span><span style="color:var(--shiki-foreground)"> });</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 写入为 JavaScript 文件，包含 const 变量</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> jsContent</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> `export const buildInfo = </span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-token-constant)">JSON</span><span style="color:var(--shiki-token-function)">.stringify</span><span style="color:var(--shiki-foreground)">(buildInfo</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-constant)"> null</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-constant)"> 2</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">;`</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-constant)">fs</span><span style="color:var(--shiki-token-function)">.writeFileSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">path</span><span style="color:var(--shiki-token-function)">.join</span><span style="color:var(--shiki-foreground)">(outputDir</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;buildInfo.js&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> jsContent);</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">console</span><span style="color:var(--shiki-token-function)">.log</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;构建信息已保存为 JavaScript 文件:&#x27;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> buildInfo);</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="react中注入"><a href="#react中注入" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>react</code>中注入</h3>
<div class="rp-codeblock language-jsx"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="jsx"><code><span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-function)"> App</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> () </span><span style="color:var(--shiki-token-keyword)">=&gt;</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    // 判断当前环境是生产环境还是开发环境</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> isProduction</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> process</span><span style="color:var(--shiki-foreground)">.</span><span style="color:var(--shiki-token-constant)">env</span><span style="color:var(--shiki-foreground)">.</span><span style="color:var(--shiki-token-constant)">NODE_ENV</span><span style="color:var(--shiki-token-keyword)"> ===</span><span style="color:var(--shiki-token-string-expression)"> &#x27;production&#x27;</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    return</span><span style="color:var(--shiki-foreground)"> (</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        &lt;&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            {isProduction </span><span style="color:var(--shiki-token-keyword)">&amp;&amp;</span><span style="color:var(--shiki-foreground)"> (</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                &lt;</span><span style="color:var(--shiki-token-constant)">Helmet</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    {</span><span style="color:var(--shiki-token-comment)">/* 动态注入构建信息到 &lt;head&gt; */</span><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    &lt;</span><span style="color:var(--shiki-token-string-expression)">meta</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;git-hash&quot;</span><span style="color:var(--shiki-token-function)"> content</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">{</span><span style="color:var(--shiki-token-constant)">buildInfo</span><span style="color:var(--shiki-foreground)">.gitHash}/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    &lt;</span><span style="color:var(--shiki-token-string-expression)">meta</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;git-branch&quot;</span><span style="color:var(--shiki-token-function)"> content</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">{</span><span style="color:var(--shiki-token-constant)">buildInfo</span><span style="color:var(--shiki-foreground)">.gitBranch}/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    &lt;</span><span style="color:var(--shiki-token-string-expression)">meta</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;commit-date&quot;</span><span style="color:var(--shiki-token-function)"> content</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">{</span><span style="color:var(--shiki-token-constant)">buildInfo</span><span style="color:var(--shiki-foreground)">.commitDate}/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    &lt;</span><span style="color:var(--shiki-token-string-expression)">meta</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;commit-count&quot;</span><span style="color:var(--shiki-token-function)"> content</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">{</span><span style="color:var(--shiki-token-constant)">buildInfo</span><span style="color:var(--shiki-foreground)">.commitCount}/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                    &lt;</span><span style="color:var(--shiki-token-string-expression)">meta</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;build-time&quot;</span><span style="color:var(--shiki-token-function)"> content</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">{</span><span style="color:var(--shiki-token-constant)">buildInfo</span><span style="color:var(--shiki-foreground)">.buildTime}/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                &lt;/</span><span style="color:var(--shiki-token-constant)">Helmet</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            )}</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        &lt;/&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    )</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="vuepress中注入"><a href="#vuepress中注入" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>vuepress</code>中注入</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">//</span><span style="color:var(--shiki-token-string)"> 如果是生产环境，则注入构建信息到</span><span style="color:var(--shiki-token-string)"> head</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">let</span><span style="color:var(--shiki-token-string)"> headConfig</span><span style="color:var(--shiki-token-string)"> =</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;author&#x27;</span><span style="color:var(--shiki-foreground)">, content: author}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;description&#x27;</span><span style="color:var(--shiki-foreground)">, content: description}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">];</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">//</span><span style="color:var(--shiki-token-string)"> 如果是</span><span style="color:var(--shiki-token-string)"> build，就不打印</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">if</span><span style="color:var(--shiki-foreground)"> (</span><span style="color:var(--shiki-token-function)">process.env.NODE_ENV</span><span style="color:var(--shiki-token-string)"> ===</span><span style="color:var(--shiki-token-string-expression)"> &#x27;production&#x27;</span><span style="color:var(--shiki-foreground)">) {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    headConfig</span><span style="color:var(--shiki-token-string)"> =</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ..</span><span style="color:var(--shiki-token-string)">.headConfig,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;git-branch&#x27;</span><span style="color:var(--shiki-foreground)">, content: buildInfo.gitBranch}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;git-commit-sha&#x27;</span><span style="color:var(--shiki-foreground)">, content: buildInfo.gitHash}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;git-commit-time&#x27;</span><span style="color:var(--shiki-foreground)">, content: buildInfo.commitDate}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;git-commit-count&#x27;</span><span style="color:var(--shiki-foreground)">, content: buildInfo.commitCount}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;build-time&#x27;</span><span style="color:var(--shiki-foreground)">, content: buildInfo.buildTime}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;meta&#x27;</span><span style="color:var(--shiki-foreground)">, {name: </span><span style="color:var(--shiki-token-string-expression)">&#x27;time-zone&#x27;</span><span style="color:var(--shiki-foreground)">, content: timeZone}]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        [</span><span style="color:var(--shiki-token-string-expression)">&#x27;script&#x27;</span><span style="color:var(--shiki-foreground)">, {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            src: </span><span style="color:var(--shiki-token-string-expression)">&#x27;https://umami.tteam.icu/script.js&#x27;</span><span style="color:var(--shiki-foreground)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            async: </span><span style="color:var(--shiki-token-string-expression)">&#x27;async&#x27;</span><span style="color:var(--shiki-foreground)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            defer: </span><span style="color:var(--shiki-token-string-expression)">&#x27;defer&#x27;</span><span style="color:var(--shiki-foreground)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">            &#x27;data-website-id&#x27;</span><span style="color:var(--shiki-foreground)">: </span><span style="color:var(--shiki-token-string-expression)">&#x27;6e757c22-77d9-495a-85b6-d2cbd2efcbb3&#x27;</span><span style="color:var(--shiki-foreground)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        }]</span><span style="color:var(--shiki-token-function)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    ];</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">//</span><span style="color:var(--shiki-token-string)"> 然后在配置中填入变量</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="hexo中注入"><a href="#hexo中注入" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>hexo</code>中注入</h3>
<p>在<code>hexo</code>中有点特殊，需要用官方的<a href="https://hexo.io/zh-cn/api/injector.html" target="_blank" rel="noopener noreferrer" class="rp-link">Injector</a></p>
<p>把获取脚本放入<code>cmd</code>目录即可实现</p>
<div class="rp-codeblock language-js"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="js"><code><span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> fs</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;fs&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-foreground)"> { </span><span style="color:var(--shiki-token-constant)">execSync</span><span style="color:var(--shiki-foreground)"> } </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;child_process&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> path</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> require</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;path&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">function</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(date) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">    date</span><span style="color:var(--shiki-token-function)">.setUTCHours</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCHours</span><span style="color:var(--shiki-foreground)">() </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-token-constant)"> 8</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> year</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> date</span><span style="color:var(--shiki-token-function)">.getUTCFullYear</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> month</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCMonth</span><span style="color:var(--shiki-foreground)">() </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-token-constant)"> 1</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> day</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCDate</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> hours</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCHours</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> minutes</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCMinutes</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    const</span><span style="color:var(--shiki-token-constant)"> seconds</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> String</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">date</span><span style="color:var(--shiki-token-function)">.getUTCSeconds</span><span style="color:var(--shiki-foreground)">())</span><span style="color:var(--shiki-token-function)">.padStart</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">2</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;0&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    return</span><span style="color:var(--shiki-token-string-expression)"> `</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">year</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">-</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">month</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">-</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">day</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-keyword)"> ${</span><span style="color:var(--shiki-foreground)">hours</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">:</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">minutes</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">:</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">seconds</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 哈希</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> gitHash</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-parse --short HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 分支</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> gitBranch</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-parse --abbrev-ref HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 提交时间</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitDateStr</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git log -1 --format=%cd&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitDate</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-keyword)">new</span><span style="color:var(--shiki-token-function)"> Date</span><span style="color:var(--shiki-foreground)">(commitDateStr));</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取构建时间</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> buildTime</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> convertTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-keyword)">new</span><span style="color:var(--shiki-token-function)"> Date</span><span style="color:var(--shiki-foreground)">());</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 获取 Git 提交次数</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> commitCount</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-function)"> execSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;git rev-list --count HEAD&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-function)">.toString</span><span style="color:var(--shiki-foreground)">()</span><span style="color:var(--shiki-token-function)">.trim</span><span style="color:var(--shiki-foreground)">();</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> buildInfo</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    buildTime</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    gitBranch</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    gitHash</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    commitCount</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    commitDate</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">};</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// 确保目录存在</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> outputDir</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> path</span><span style="color:var(--shiki-token-function)">.join</span><span style="color:var(--shiki-foreground)">(__dirname</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;../scripts&#x27;</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">if</span><span style="color:var(--shiki-foreground)"> (</span><span style="color:var(--shiki-token-keyword)">!</span><span style="color:var(--shiki-token-constant)">fs</span><span style="color:var(--shiki-token-function)">.existsSync</span><span style="color:var(--shiki-foreground)">(outputDir)) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">    fs</span><span style="color:var(--shiki-token-function)">.mkdirSync</span><span style="color:var(--shiki-foreground)">(outputDir</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> { recursive</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> true</span><span style="color:var(--shiki-foreground)"> });</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">const</span><span style="color:var(--shiki-token-constant)"> jsContent</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> `hexo.extend.injector.register(&#x27;head_begin&#x27;, &#x27;&lt;meta name=&quot;git-branch&quot; content=&quot;</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">gitBranch</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;&gt;&#x27;, &#x27;default&#x27;);</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">hexo.extend.injector.register(&#x27;head_begin&#x27;, &#x27;&lt;meta name=&quot;git-commit-sha&quot; content=&quot;</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">gitHash</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;&gt;&#x27;, &#x27;default&#x27;);</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">hexo.extend.injector.register(&#x27;head_begin&#x27;, &#x27;&lt;meta name=&quot;git-commit-time&quot; content=&quot;</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">commitDate</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;&gt;&#x27;, &#x27;default&#x27;);</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">hexo.extend.injector.register(&#x27;head_begin&#x27;, &#x27;&lt;meta name=&quot;git-commit-count&quot; content=&quot;</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">commitCount</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;&gt;&#x27;, &#x27;default&#x27;);</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">hexo.extend.injector.register(&#x27;head_begin&#x27;, &#x27;&lt;meta name=&quot;build-time&quot; content=&quot;</span><span style="color:var(--shiki-token-keyword)">${</span><span style="color:var(--shiki-foreground)">buildTime</span><span style="color:var(--shiki-token-keyword)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;&gt;&#x27;, &#x27;default&#x27;);`</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-constant)">fs</span><span style="color:var(--shiki-token-function)">.writeFileSync</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-constant)">path</span><span style="color:var(--shiki-token-function)">.join</span><span style="color:var(--shiki-foreground)">(outputDir</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &#x27;gitData.js&#x27;</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> jsContent);</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">console</span><span style="color:var(--shiki-token-function)">.log</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;构建信息:&#x27;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> buildInfo);</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2024 Week 51]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2024/W51</link>
            <guid isPermaLink="false">/blog/record/weekly/2024/W51</guid>
            <pubDate>Sun, 22 Dec 2024 23:07:25 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2024-week-51"><a href="#2024-week-51" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2024 Week 51<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把<a href="https://www.tteam.icu/" target="_blank" rel="noopener noreferrer" class="rp-link">网站主页</a>完善了一下：
增加水印、返回顶部和wakatime更新时间
至此网站主页开发基本完工
接下来计划继续熟系<code>golang</code>，然后做一个类似于<code>nacos</code>的配置文件管理后台</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>比<code>du</code>命令更好用的<a href="https://github.com/bootandy/dust" target="_blank" rel="noopener noreferrer" class="rp-link">dust</a>
尝试了在<code>鲲鹏架构</code>服务器上编译<code>Chromium</code>，但是没有成功，具体过程<a href="https://blog.tteam.icu/dev/%E9%B2%B2%E9%B9%8F%E7%BC%96%E8%AF%91Chromium/" target="_blank" rel="noopener noreferrer" class="rp-link">详见</a>
接下来想要熟系一下<code>ELK</code>的日志管理系统，因为发现很多公司现在用的还是这套日志管理系统</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[鲲鹏编译Chromium]]></title>
            <link>https://www.tteam.icu/blog/dev/鲲鹏编译Chromium</link>
            <guid isPermaLink="false">/blog/dev/鲲鹏编译Chromium</guid>
            <pubDate>Fri, 20 Dec 2024 20:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="鲲鹏编译chromium"><a href="#鲲鹏编译chromium" class="rp-header-anchor rp-link" aria-hidden="true">#</a>鲲鹏编译Chromium<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>鲲鹏的服务器似乎和别的<code>arm</code>架构都不一样，使用线上别人的二进制是直接跑不起来
这里记录一下自己编译的过程
服务器使用华为云上海<code>8C32G</code>鲲鹏架构服务器，镜像用的是<code>ubuntu</code>
代理是自己准备的用<code>gost</code>中转<code>socks5</code></p>
<h2 class="rp-toc-include" id="代理准备"><a href="#代理准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>代理准备</h2>
<p>由于我用的是gost先要准备gost，但是官方编译的不支持，需要自己编译</p>
<h3 class="rp-toc-include" id="环境准备"><a href="#环境准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>环境准备</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://golang.google.cn/dl/go1.23.4.linux-arm64.tar.gz</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -rf</span><span style="color:var(--shiki-token-string)"> /usr/local/go</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> tar</span><span style="color:var(--shiki-token-string)"> -C</span><span style="color:var(--shiki-token-string)"> /usr/local</span><span style="color:var(--shiki-token-string)"> -xzf</span><span style="color:var(--shiki-token-string)"> go1.23.4.linux-arm64.tar.gz</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> PATH</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$PATH:/usr/local/go/bin</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">go</span><span style="color:var(--shiki-token-string)"> env</span><span style="color:var(--shiki-token-string)"> -w</span><span style="color:var(--shiki-token-string)"> GOPROXY=https://mirrors.aliyun.com/goproxy/,direct</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="开始编译"><a href="#开始编译" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开始编译</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> clone</span><span style="color:var(--shiki-token-string)"> https://github.com/go-gost/gost.git</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> gost/cmd/gost</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">go</span><span style="color:var(--shiki-token-string)"> build</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="代理配置"><a href="#代理配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>代理配置</h2>
<p>git配置</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> config</span><span style="color:var(--shiki-token-string)"> --global</span><span style="color:var(--shiki-token-string)"> http.proxy</span><span style="color:var(--shiki-token-string-expression)"> &#x27;socks5://127.0.0.1:1080&#x27;</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> config</span><span style="color:var(--shiki-token-string)"> --global</span><span style="color:var(--shiki-token-string)"> https.proxy</span><span style="color:var(--shiki-token-string-expression)"> &#x27;socks5://127.0.0.1:1080&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 关闭代理</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> config</span><span style="color:var(--shiki-token-string)"> --global</span><span style="color:var(--shiki-token-string)"> --unset</span><span style="color:var(--shiki-token-string)"> http.proxy</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> config</span><span style="color:var(--shiki-token-string)"> --global</span><span style="color:var(--shiki-token-string)"> --unset</span><span style="color:var(--shiki-token-string)"> https.proxy</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>终端代理</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> polipo</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>配置<code>/etc/polipo/config</code></p>
<div class="rp-codeblock language-ini"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="ini"><code><span class="line"><span style="color:var(--shiki-token-keyword)">logSyslog</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> true:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">logFile</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> &quot;/var/log/polipo/polipo.log&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">socksParentProxy</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> &quot;127.0.0.1:1080&quot;</span><span style="color:var(--shiki-token-comment)">  #这是socks代理的地址和端口</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">socksProxyType</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> socks5</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">chunkHighMark</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 50331648</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">objectHighMark</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 16384</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">serverMaxSlots</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 64</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">serverSlots</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 16</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">serverSlots1</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 32</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 我们最后要使用这个地址作为代理，它会去走SSR的代理</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">proxyAddress</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> &quot;127.0.0.1&quot;</span><span style="color:var(--shiki-token-comment)"> #这是本代理的地址端口 </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">proxyPort</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 8123</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">service</span><span style="color:var(--shiki-token-string)"> polipo</span><span style="color:var(--shiki-token-string)"> restart</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> http_proxy</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;http://127.0.0.1:8123&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> https_proxy</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;http://127.0.0.1:8123&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="换源"><a href="#换源" class="rp-header-anchor rp-link" aria-hidden="true">#</a>换源</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="克隆"><a href="#克隆" class="rp-header-anchor rp-link" aria-hidden="true">#</a>克隆</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> git</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> wget</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /data/chrome/ChromePwn</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /data/chrome/ChromePwn</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> clone</span><span style="color:var(--shiki-token-string)"> https://chromium.googlesource.com/chromium/tools/depot_tools.git</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> PATH</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;$PATH:/data/chrome/ChromePwn/depot_tools&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">source</span><span style="color:var(--shiki-token-string)"> ~/.bashrc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> /data/chrome/Chromium</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /data/chrome/Chromium</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fetch</span><span style="color:var(--shiki-token-string)"> --nohooks</span><span style="color:var(--shiki-token-string)"> chromium</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 断开后继续下载</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">gclient</span><span style="color:var(--shiki-token-string)"> sync</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>在最后似乎有一步<code>Syncing projects</code>特别慢,于是我直接换到新加坡的服务器，下载速度达30MB/s,一个上午白费···</p>
<p>克隆完后文件夹一共大小为<code>95G</code></p>
<h2 class="rp-toc-include" id="编译"><a href="#编译" class="rp-header-anchor rp-link" aria-hidden="true">#</a>编译</h2>
<p>编译高版本<code>python</code></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> build-essential</span><span style="color:var(--shiki-token-string)"> zlib1g-dev</span><span style="color:var(--shiki-token-string)"> libncurses5-dev</span><span style="color:var(--shiki-token-string)"> libgdbm-dev</span><span style="color:var(--shiki-token-string)"> libnss3-dev</span><span style="color:var(--shiki-token-string)"> libssl-dev</span><span style="color:var(--shiki-token-string)"> libreadline-dev</span><span style="color:var(--shiki-token-string)"> libffi-dev</span><span style="color:var(--shiki-token-string)"> curl</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">tar</span><span style="color:var(--shiki-token-string)"> -xf</span><span style="color:var(--shiki-token-string)"> Python-3.11.5.tgz</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> Python-3.11.5</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">./configure</span><span style="color:var(--shiki-token-string)"> --enable-optimizations</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">make</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-constant)"> 7</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cp</span><span style="color:var(--shiki-token-string)"> python</span><span style="color:var(--shiki-token-string)"> /usr/bin/python3.11</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -f</span><span style="color:var(--shiki-token-string)"> /usr/bin/python3</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">ln</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> /usr/bin/python3.11</span><span style="color:var(--shiki-token-string)"> /usr/bin/python3</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> src</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">./build/install-build-deps.sh</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">gclient</span><span style="color:var(--shiki-token-string)"> runhooks</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">gn</span><span style="color:var(--shiki-token-string)"> gen</span><span style="color:var(--shiki-token-string)"> out/Default</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>运行最后一行命令后，把64G内存都占满了，暂时没有办法继续了</p>
<h2 class="rp-toc-include" id="遇到的报错"><a href="#遇到的报错" class="rp-header-anchor rp-link" aria-hidden="true">#</a>遇到的报错</h2>
<p>报错</p>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>gn.py: Could not find gn executable at: [&#x27;/data/chrome/Chromium/src/buildtools/linux64/gn/gn&#x27;, &#x27;/data/chrome/Chromium/src/buildtools/linux64/gn&#x27;]</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>解决</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> buildtools/linux64</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cp</span><span style="color:var(--shiki-token-string)"> -Rf</span><span style="color:var(--shiki-token-string)">  /data/chrome/ChromePwn/depot_tools/*</span><span style="color:var(--shiki-token-string)"> buildtools/linux64/</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[周记 2024 Week 50]]></title>
            <link>https://www.tteam.icu/blog/record/weekly/2024/W50</link>
            <guid isPermaLink="false">/blog/record/weekly/2024/W50</guid>
            <pubDate>Sun, 15 Dec 2024 22:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="2024-week-50"><a href="#2024-week-50" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2024 Week 50<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开发方面"><a href="#开发方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开发方面</h2>
<p>把网站主页完善了一下：
新增了<code>项目</code>模块，封装字节的<code>Card</code>组件，传入json自动增加
完善了fooder中的依赖
增加了<a href="https://github.com/aidenybai/react-scan" target="_blank" rel="noopener noreferrer" class="rp-link">react-scan</a>来监控网站的性能
完善根路径的手机端适配
增加了<code>图片</code>模块，使用瀑布流实现，并使用懒加载</p>
<p>在<code>obsidian</code>中增加周报模版，准备开始写周报：
使用<a href="https://github.com/liamcain/obsidian-periodic-notes" target="_blank" rel="noopener noreferrer" class="rp-link">Periodic Notes</a>来自动生成模板
调研了一下是否可以实现从<code>小米运动健康APP</code>中获取数据做图表，但似乎小米没有开放api
然后又调研了一下是否可以实现获取过去一周的天气做图标，理论上可以实现，后续尝试</p>
<h2 class="rp-toc-include" id="运维方面"><a href="#运维方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>运维方面</h2>
<p>部署了<a href="https://github.com/eclipse-mosquitto/mosquitto" target="_blank" rel="noopener noreferrer" class="rp-link">MQTT</a>单机版测试，后续需要研究一下集群
<a href="https://github.com/AutoMQ/automq" target="_blank" rel="noopener noreferrer" class="rp-link">automq</a>是一个<code>kafka</code>的替代方案，似乎性能很好，后续可以尝试部署
<a href="https://github.com/cloudflare/pingora" target="_blank" rel="noopener noreferrer" class="rp-link">pingora</a>是<code>Cloud flare</code>用<code>Rust</code>开发的<code>nginx</code>替代品，但是似乎每次修改都需要重新编译，后续可以研究
准备研究一下nginx做dns，<a href="https://www.f5.com/company/blog/nginx/dns-service-discovery-nginx-plus" target="_blank" rel="noopener noreferrer" class="rp-link">参考</a></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[cloudflare pages钉钉通知]]></title>
            <link>https://www.tteam.icu/blog/dev/cf-pages通知</link>
            <guid isPermaLink="false">/blog/dev/cf-pages通知</guid>
            <pubDate>Sat, 30 Nov 2024 13:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="cloudflare-pages钉钉通知"><a href="#cloudflare-pages钉钉通知" class="rp-header-anchor rp-link" aria-hidden="true">#</a>cloudflare pages钉钉通知<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="开始"><a href="#开始" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开始</h2>
<p>我的纯静态网站<a href="https://blog.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">博客</a>、<a href="https://www.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">关于我</a>、<a href="https://note.tteam.icu" target="_blank" rel="noopener noreferrer" class="rp-link">笔记</a>等网站都用cf的pages来编译和部署</p>
<p>但是我发现cf没有集成通知功能, 编译完成/失败, 我都不知道</p>
<p>接下来我就在网上找了有没有类似的功能, 找到了<a href="https://github.com/arddluma/cloudflare-pages-slack-notification" target="_blank" rel="noopener noreferrer" class="rp-link">cloudflare-pages-slack-notification</a></p>
<p>但是经过测试后, 发现不能支持钉钉webhook, 所以我在这个仓库基础上二开并翻译了一下</p>
<p><a href="https://github.com/buyfakett/cloudflare-pages-dingding-webhook" target="_blank" rel="noopener noreferrer" class="rp-link">项目地址</a></p>
<h2 class="rp-toc-include" id="配置"><a href="#配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置</h2>
<h3 class="rp-toc-include" id="github"><a href="#github" class="rp-header-anchor rp-link" aria-hidden="true">#</a>github</h3>
<p>原理是github的workflows自动检测cf的状态来推送</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> dingding_webhook</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">on</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> push</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">jobs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  build</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    runs-on</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ubuntu-latest</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    steps</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">uses</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> actions/checkout@v3</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Await CF Pages and send Slack notification</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        id</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> cf-pages</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        uses</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> buyfakett/cloudflare-pages-dingding-webhook@v2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        with</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # Uncomment these two lines if you wish to use the Global API Key (Not recommended!)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # accountEmail: ${{ secrets.CF_ACCOUNT_EMAIL  }}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # apiKey: ${{ secrets.CF_API_KEY  }}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # Use an API token (Recommended!)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          apiToken</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${{ secrets.CF_API_TOKEN }}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          accountId</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${{ secrets.CF_ACC_ID  }}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # CloudFlare Pages project name</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          project</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${{ secrets.CF_PAGES_PROJECT  }}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          dingWebHookKey</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${{ secrets.DING_WEBHOOK_KEY }}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">          # Add this if you want GitHub Deployments (see below)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          githubToken</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${{ secrets.GITHUB_TOKEN }}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="机密说明"><a href="#机密说明" class="rp-header-anchor rp-link" aria-hidden="true">#</a>机密说明</h3>
<p>CF_API_TOKEN: Cloudflare API 令牌。<a href="https://dash.cloudflare.com/profile/api-tokens" target="_blank" rel="noopener noreferrer" class="rp-link">如何创建 Cloudflare API 令牌</a></p>
<p>CF_ACC_ID: CloudFlare 帐户 ID。（访问 <a href="https://dash.cloudflare.com/" target="_blank" rel="noopener noreferrer" class="rp-link">Cloudflare 的仪表板</a>，您将在 URL 中找到帐户 ID）</p>
<p>CF_PAGES_PROJECT: CloudFlare Pages 项目名称。（你可以在<a href="https://dash.cloudflare.com/%7Byour_account_id%7D/workers-and-pages" target="_blank" rel="noopener noreferrer" class="rp-link">这里</a> 找到它）</p>
<p>DING_WEBHOOK_KEY: 钉钉中创建WEBHOOK机器人, 关键字填入<code>项目</code></p>
<h2 class="rp-toc-include" id="通知截图"><a href="#通知截图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>通知截图</h2>
<p><img src="https://img.tteam.icu/i/2024/11/30/itqdxp-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/30/lyaat9-3.webp" alt=""/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“关于我”编写]]></title>
            <link>https://www.tteam.icu/blog/dev/“关于我”编写</link>
            <guid isPermaLink="false">/blog/dev/“关于我”编写</guid>
            <pubDate>Sun, 24 Nov 2024 19:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="关于我编写"><a href="#关于我编写" class="rp-header-anchor rp-link" aria-hidden="true">#</a>“关于我”编写<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>在这周, 我开始了“关于我”的编写</p>
<p>使用的技术栈是<code>react</code>、<code>Tailwind CSS</code>、<code>Magic UI</code>以及<code>Cloudflare</code>的自动部署</p>
<p>当然也没有离开<code>chatGPT</code>的帮助</p>
<p>这是我第一次写<code>react</code>，也是第一次使用<code>Tailwind CSS</code>, 经过了gpt的帮助, 写的还是很舒服的</p>
<p>接下来我就来分享一下编写的过程吧~</p>
<h1 class="rp-toc-include" id="部署方面"><a href="#部署方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>部署方面<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>最开始, 包括本站, 编译和访问完全使用及<code>Cloudflare</code>的<code>pages</code>功能, 图床使用部署的+小黄云</p>
<p>然后使用<code>umami</code>进行访问统计</p>
<h1 class="rp-toc-include" id="编写方面"><a href="#编写方面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>编写方面<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="主页"><a href="#主页" class="rp-header-anchor rp-link" aria-hidden="true">#</a>主页</h2>
<h3 class="rp-toc-include" id="头像模块"><a href="#头像模块" class="rp-header-anchor rp-link" aria-hidden="true">#</a>头像模块</h3>
<p>使用到的是<code>Magic UI</code>的<code>Orbiting Circles</code>组件</p>
<h3 class="rp-toc-include" id="语言使用模块"><a href="#语言使用模块" class="rp-header-anchor rp-link" aria-hidden="true">#</a>语言使用模块</h3>
<p>我使用的是<code>wakatime</code>的<code>API</code>获取编程语言使用时间</p>
<p>我新开了一个仓库, 使用py每天去调用api, 然后生成json文件, 放在cf上</p>
<p><img src="https://img.tteam.icu/i/2024/11/24/z9n29e-3.webp" alt=""/></p>
<p>在<code>关于我</code>的编译阶段, 先度调用上面爬到的数据放在本地, 也写了调用接口</p>
<p><img src="https://img.tteam.icu/i/2024/11/24/zavb61-3.webp" alt=""/></p>
<p>用户在访问的时候，默认显示我放在本地的数据, 在接口返回后, 替换掉原来在页面上的数据</p>
<h3 class="rp-toc-include" id="工作经历模块"><a href="#工作经历模块" class="rp-header-anchor rp-link" aria-hidden="true">#</a>工作经历模块</h3>
<p>我使用的是<code>Magic UI</code>的<code>Neon Gradient Card</code>组件</p>
<h3 class="rp-toc-include" id="项目模块"><a href="#项目模块" class="rp-header-anchor rp-link" aria-hidden="true">#</a>项目模块</h3>
<p>使用字节的<code>卡片</code>功能</p>
<h2 class="rp-toc-include" id="工具页"><a href="#工具页" class="rp-header-anchor rp-link" aria-hidden="true">#</a>工具页</h2>
<p>使用自己封装的组件</p>
<h2 class="rp-toc-include" id="链接页"><a href="#链接页" class="rp-header-anchor rp-link" aria-hidden="true">#</a>链接页</h2>
<p>使用字节的<code>卡片</code>功能</p>
<h2 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结</h2>
<p>使用<code>react</code>编写简单的ui界面, 没有用到复杂的js, 对于我来说还是写的很舒服的</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【vps测评】servarica]]></title>
            <link>https://www.tteam.icu/blog/vps/【vps测评】servarica</link>
            <guid isPermaLink="false">/blog/vps/【vps测评】servarica</guid>
            <pubDate>Mon, 11 Nov 2024 20:31:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="servarica"><a href="#servarica" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="https://clients.servarica.com/aff.php?aff=917" target="_blank" rel="noopener noreferrer" class="rp-link">servarica</a> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="简介"><a href="#简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>简介</h2>
<p>servaRICA是一家加拿大主机商,2010年成立,主要提供VPS,有SSD和HDD存储型。</p>
<p>存在时间很长, 所以还是比较放心的</p>
<p>我对比了网上几乎所有的vps网站的<code>大盘鸡</code>,发现这个网站的价格是最便宜的,所以选择了这个网站, 重要的是也不限流量</p>
<p>我自己是已经买这家已经大半年了, 最开始买的是5刀的2T硬盘, 最近升级到8.5刀3.5T, 硬盘虽然是“石头盘”, 但是放备份还是很不错的</p>
<p>就按我自己来说, 我在上面跑了录播机、pt, 还有<a href="https://blog.tteam.icu/ops/%E3%80%90%E5%AE%9E%E7%94%A8%E7%9A%84docker%E5%B0%8F%E6%8A%80%E5%B7%A7%E3%80%91minio(%E8%87%AA%E5%BB%BAoss)/" target="_blank" rel="noopener noreferrer" class="rp-link">minio</a></p>
<h2 class="rp-toc-include" id="测评"><a href="#测评" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测评</h2>
<p>总体来说是一台用来存备份等重要数据的大盘鸡</p>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>---------------------基础信息查询--感谢所有开源项目---------------------</span></span>
<span class="line"><span> CPU 型号          : Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz</span></span>
<span class="line"><span> CPU 核心数        : 2</span></span>
<span class="line"><span> CPU 频率          : 2600.064 MHz</span></span>
<span class="line"><span> CPU 缓存          : L1: 0.00 KB / L2: 0.00 KB / L3: 0.00 KB</span></span>
<span class="line"><span> AES-NI指令集      : ✔ Enabled</span></span>
<span class="line"><span> VM-x/AMD-V支持    : ❌ Disabled</span></span>
<span class="line"><span> 内存              : 623.75 MiB / 1.77 GiB</span></span>
<span class="line"><span> Swap              : [ no swap partition or swap file detected ]</span></span>
<span class="line"><span> 硬盘空间          : 1.27 TiB / 1.96 TiB</span></span>
<span class="line"><span> 启动盘路径        : /dev/mapper/centos-root</span></span>
<span class="line"><span> 系统在线时间      : 41 days, 1 hour 3 min</span></span>
<span class="line"><span> 负载              : 0.59, 0.72, 0.45</span></span>
<span class="line"><span> 系统              : CentOS Linux 7 (Core) (x86_64)</span></span>
<span class="line"><span> 架构              : x86_64 (64 Bit)</span></span>
<span class="line"><span> 内核              : 3.10.0-1160.108.1.el7.x86_64</span></span>
<span class="line"><span> TCP加速方式       : cubic</span></span>
<span class="line"><span> 虚拟化架构        : Xen Hypervisor</span></span>
<span class="line"><span> NAT类型           : Port Restricted Cone</span></span>
<span class="line"><span> IPV4 ASN          : AS26832 Rica Web Services</span></span>
<span class="line"><span> IPV4 位置         : Montréal / Quebec / CA</span></span>
<span class="line"><span>----------------------CPU测试--通过sysbench测试-------------------------</span></span>
<span class="line"><span> -&gt; CPU 测试中 (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 1 线程测试(单核)得分: 		1094 Scores</span></span>
<span class="line"><span> 2 线程测试(多核)得分: 		2093 Scores</span></span>
<span class="line"><span>---------------------内存测试--感谢lemonbench开源-----------------------</span></span>
<span class="line"><span> -&gt; 内存测试 Test (Fast Mode, 1-Pass @ 5sec)</span></span>
<span class="line"><span> 单线程读测试:		19933.58 MB/s</span></span>
<span class="line"><span> 单线程写测试:		13399.01 MB/s</span></span>
<span class="line"><span>---------------------磁盘fio读写测试--感谢yabs开源----------------------</span></span>
<span class="line"><span>Block Size | 4k            (IOPS) | 64k           (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 36.85 MB/s    (9.2k) | 220.42 MB/s   (3.4k)</span></span>
<span class="line"><span>Write      | 36.95 MB/s    (9.2k) | 221.58 MB/s   (3.4k)</span></span>
<span class="line"><span>Total      | 73.80 MB/s   (18.4k) | 442.01 MB/s   (6.9k)</span></span>
<span class="line"><span>           |                      |                     </span></span>
<span class="line"><span>Block Size | 512k          (IOPS) | 1m            (IOPS)</span></span>
<span class="line"><span>  ------   | ---            ----  | ----           ---- </span></span>
<span class="line"><span>Read       | 256.03 MB/s    (500) | 259.73 MB/s    (253)</span></span>
<span class="line"><span>Write      | 269.63 MB/s    (526) | 277.03 MB/s    (270)</span></span>
<span class="line"><span>Total      | 525.66 MB/s   (1.0k) | 536.76 MB/s    (523)</span></span>
<span class="line"><span>------------流媒体解锁--基于oneclickvirt/CommonMediaTests开源-----------</span></span>
<span class="line"><span>以下测试的解锁地区是准确的，但是不是完整解锁的判断可能有误，这方面仅作参考使用</span></span>
<span class="line"><span>----------------Netflix-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>您的出口IP可以使用Netflix，但仅可看Netflix自制剧</span></span>
<span class="line"><span>NF所识别的IP地域信息：加拿大</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>您的网络可能没有正常配置IPv6，或者没有IPv6网络接入</span></span>
<span class="line"><span>----------------Youtube-----------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>连接方式: Google Global CacheCDN (ISP Cooperation)</span></span>
<span class="line"><span>ISP运营商: BEANFLDCA</span></span>
<span class="line"><span>视频缓存节点地域: YYZ(YYZ2)</span></span>
<span class="line"><span>Youtube识别地域: 加拿大(CA)</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>Youtube在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>---------------DisneyPlus---------------</span></span>
<span class="line"><span>[IPV4]</span></span>
<span class="line"><span>当前出口所在地区解锁DisneyPlus</span></span>
<span class="line"><span>区域：CA 区</span></span>
<span class="line"><span>[IPV6]</span></span>
<span class="line"><span>DisneyPlus在您的出口IP所在的国家不提供服务</span></span>
<span class="line"><span>解锁Netflix，Youtube，DisneyPlus上面和下面进行比较，不同之处自行判断</span></span>
<span class="line"><span>----------------流媒体解锁--感谢RegionRestrictionCheck开源--------------</span></span>
<span class="line"><span> 以下为IPV4网络测试，若无IPV4网络则无输出</span></span>
<span class="line"><span>============[ Multination ]============</span></span>
<span class="line"><span> Dazn:					Yes (Region: CA)</span></span>
<span class="line"><span> Disney+:				No (IP Banned By Disney+ 1)</span></span>
<span class="line"><span> Netflix:				Originals Only</span></span>
<span class="line"><span> YouTube Premium:			Yes (Region: CA)</span></span>
<span class="line"><span> Amazon Prime Video:			Yes (Region: CA)</span></span>
<span class="line"><span> TVBAnywhere+:				Yes</span></span>
<span class="line"><span> Spotify Registration:			Yes (Region: CA)</span></span>
<span class="line"><span> Instagram Licensed Audio:		Failed (Network Connection)</span></span>
<span class="line"><span> OneTrust Region:			CA [Quebec]</span></span>
<span class="line"><span> iQyi Oversea Region:			CA</span></span>
<span class="line"><span> Bing Region:				CA</span></span>
<span class="line"><span> YouTube CDN:				[BEANFLDCA] in [Toronto, ON]</span></span>
<span class="line"><span> Netflix Preferred CDN:			[Beanfield Technologies] in [Toronto, ON]</span></span>
<span class="line"><span> ChatGPT:				Yes</span></span>
<span class="line"><span> Google Gemini:				Yes (Region: CAN)</span></span>
<span class="line"><span> Wikipedia Editability:			No</span></span>
<span class="line"><span> Google Search CAPTCHA Free:		Yes</span></span>
<span class="line"><span> Steam Currency:			CAD</span></span>
<span class="line"><span> ---Forum---</span></span>
<span class="line"><span> Reddit:				No</span></span>
<span class="line"><span>=======================================</span></span>
<span class="line"><span> 以下为IPV6网络测试，若无IPV6网络则无输出</span></span>
<span class="line"><span>---------------TikTok解锁--感谢lmc999的源脚本及fscarmen PR--------------</span></span>
<span class="line"><span> Tiktok Region:		【CA】</span></span>
<span class="line"><span>----------------三网回程--基于oneclickvirt/backtrace开源----------------</span></span>
<span class="line"><span>北京电信 219.141.140.10  电信163    [普通线路] </span></span>
<span class="line"><span>北京联通 202.106.195.68  联通4837   [普通线路] </span></span>
<span class="line"><span>北京移动 221.179.155.161 移动CMI    [普通线路] </span></span>
<span class="line"><span>上海电信 202.96.209.133  检测不到回程路由节点的IP地址</span></span>
<span class="line"><span>上海联通 210.22.97.1     联通4837   [普通线路] </span></span>
<span class="line"><span>上海移动 211.136.112.200 移动CMI    [普通线路] 移动CMIN2  [精品线路] </span></span>
<span class="line"><span>广州电信 58.60.188.222   电信163    [普通线路] </span></span>
<span class="line"><span>广州联通 210.21.196.6    联通4837   [普通线路] </span></span>
<span class="line"><span>广州移动 120.196.165.24  移动CMI    [普通线路] </span></span>
<span class="line"><span>成都电信 61.139.2.69     电信163    [普通线路] </span></span>
<span class="line"><span>成都联通 119.6.6.6       联通4837   [普通线路] </span></span>
<span class="line"><span>成都移动 211.137.96.205  移动CMI    [普通线路] </span></span>
<span class="line"><span>准确线路自行查看详细路由，本测试结果仅作参考</span></span>
<span class="line"><span>同一目标地址多个线路时，可能检测已越过汇聚层，除了第一个线路外，后续信息可能无效</span></span>
<span class="line"><span>---------------------回程路由--感谢fscarmen开源及PR---------------------</span></span>
<span class="line"><span>依次测试电信/联通/移动经过的地区及线路，核心程序来自ipip.net或nexttrace，请知悉!</span></span>
<span class="line"><span>广州电信 58.60.188.222</span></span>
<span class="line"><span>0.34 ms  AS26832  加拿大, 魁北克省, 蒙特利尔, servarica.com</span></span>
<span class="line"><span>1.07 ms  AS174  加拿大, 魁北克省, 蒙特利尔, cogentco.com</span></span>
<span class="line"><span>70.56 ms  AS174  英国, 塞夫顿都会自治市, cogentco.com</span></span>
<span class="line"><span>76.03 ms  AS174  英国, 斯劳, cogentco.com</span></span>
<span class="line"><span>76.46 ms  AS174  英国, 伦敦, cogentco.com</span></span>
<span class="line"><span>77.39 ms  AS174  英国, 伦敦, cogentco.com</span></span>
<span class="line"><span>253.58 ms  AS4134  中国, 广东, 广州, chinatelecom.com.cn, 电信</span></span>
<span class="line"><span>250.50 ms  AS4134  中国, 广东, 深圳, chinatelecom.com.cn, 电信</span></span>
<span class="line"><span>255.14 ms  AS4134  中国, 广东, 深圳, chinatelecom.com.cn, 电信</span></span>
<span class="line"><span>广州联通 210.21.196.6</span></span>
<span class="line"><span>0.39 ms  AS26832  加拿大, 魁北克省, 蒙特利尔, servarica.com</span></span>
<span class="line"><span>1.21 ms  AS21949  加拿大, 魁北克省, 蒙特利尔, beanfield.com</span></span>
<span class="line"><span>0.73 ms  AS21949  加拿大, 魁北克省, 蒙特利尔, beanfield.com</span></span>
<span class="line"><span>0.60 ms  AS3356  美国, 纽约州, 纽约, level3.com</span></span>
<span class="line"><span>14.92 ms  AS3356  美国, 纽约州, 纽约, level3.com</span></span>
<span class="line"><span>71.10 ms  AS3356  美国, 加利福尼亚州, 洛杉矶, level3.com</span></span>
<span class="line"><span>343.30 ms  AS3356  美国, 加利福尼亚州, 洛杉矶, level3.com</span></span>
<span class="line"><span>351.99 ms  AS4837  中国, 广东, 广州, chinaunicom.com, 联通</span></span>
<span class="line"><span>270.59 ms  AS4837  中国, 广东, 广州, chinaunicom.com, 联通</span></span>
<span class="line"><span>301.29 ms  AS17816  中国, 广东, 深圳, chinaunicom.com, 联通</span></span>
<span class="line"><span>312.17 ms  AS17623  中国, 广东, 深圳, chinaunicom.com, 联通</span></span>
<span class="line"><span>338.40 ms  AS17623  中国, 广东, 深圳, chinaunicom.com, 联通</span></span>
<span class="line"><span>广州移动 120.196.165.24</span></span>
<span class="line"><span>0.67 ms 	AS26832 [RWS] 加拿大 魁北克省 蒙特利尔 kitcom.net</span></span>
<span class="line"><span>1.17 ms 	AS174 [COGENT-BONE] 加拿大 魁北克 蒙特利尔 cogentco.com</span></span>
<span class="line"><span>71.46 ms 	AS174 [COGENT-BONE] 英国 默西赛德郡 南码头 cogentco.com</span></span>
<span class="line"><span>76.12 ms 	AS174 [COGENT-BONE] 英国 英格兰 斯劳 cogentco.com</span></span>
<span class="line"><span>76.06 ms 	AS174 [COGENT-BONE] 英国 英格兰 斯劳 cogentco.com</span></span>
<span class="line"><span>75.93 ms 	AS174 [COGENT-149] 英国 伯克郡 斯劳 Cogent-CMI-Peer cogentco.com</span></span>
<span class="line"><span>77.97 ms 	AS58453 [CMI-INT] 英国 英格兰 伦敦 cmi.chinamobile.com</span></span>
<span class="line"><span>254.51 ms 	AS58453 [CMI-INT] 中国 香港 cmi.chinamobile.com</span></span>
<span class="line"><span>254.20 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>254.34 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>369.00 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>266.69 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>266.13 ms 	AS9808 [CMNET] 中国 广东 广州 chinamobileltd.com 移动</span></span>
<span class="line"><span>272.04 ms 	AS56040 [APNIC-AP] 中国 广东 深圳 gd.10086.cn 移动</span></span>
<span class="line"><span>--------------------自动更新测速节点列表--本脚本原创--------------------</span></span>
<span class="line"><span>位置		 上传速度	 下载速度	 延迟	  丢包率</span></span>
<span class="line"><span>Speedtest.net	 277.28 Mbps	 9152.49 Mbps	 1.20	  0.0%</span></span>
<span class="line"><span>联通WuXi	 144.13 Mbps	 2835.73 Mbps	 253.45	  0.0%</span></span>
<span class="line"><span>		 271.72 Mbps	 9348.30 Mbps	 0.39	  0.0%</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span>
<span class="line"><span> 总共花费      : 6 分 57 秒</span></span>
<span class="line"><span> 时间          : kam leq 15 10:34:26 saaku CST 2024</span></span>
<span class="line"><span>------------------------------------------------------------------------</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的docker小技巧】minio(自建oss)]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的docker小技巧】minio(自建oss)</link>
            <guid isPermaLink="false">/blog/ops/【实用的docker小技巧】minio(自建oss)</guid>
            <pubDate>Mon, 11 Nov 2024 20:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="minio自建oss"><a href="#minio自建oss" class="rp-header-anchor rp-link" aria-hidden="true">#</a>minio(自建oss)<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p><a href="https://www.minio.org.cn/docs/minio/container/operations/monitoring/metrics-and-alerts.html#minio-metrics-and-alerts" target="_blank" rel="noopener noreferrer" class="rp-link">官方文档</a></p>
<p><a href="https://github.com/minio/minio" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p>
<p>这是一个开源、免费的、兼容AWS S3的存储服务，可以用来存储文件，比如图片、视频等。</p>
<p>在家用场景，我们一般往上放备份</p>
<h2 class="rp-toc-include" id="启动"><a href="#启动" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动</h2>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> minio</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> minio</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   --network=host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   --name</span><span style="color:var(--shiki-token-string)"> minio</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   --restart=always</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -v</span><span style="color:var(--shiki-token-string)"> /etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -v</span><span style="color:var(--shiki-token-string)"> /etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -v</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data:/data</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -e</span><span style="color:var(--shiki-token-string-expression)"> &quot;MINIO_ROOT_USER=root&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -e</span><span style="color:var(--shiki-token-string-expression)"> &quot;MINIO_ROOT_PASSWORD=password&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   -e</span><span style="color:var(--shiki-token-string-expression)"> &quot;MINIO_BROWSER_REDIRECT_URL=http://s3.xxxwahotdog.top&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">   minio/minio</span><span style="color:var(--shiki-token-string)"> server</span><span style="color:var(--shiki-token-string)"> /data</span><span style="color:var(--shiki-token-string)"> --console-address</span><span style="color:var(--shiki-token-string-expression)"> &quot;:9001&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 国内镜像国内镜像registry.cn-hangzhou.aliyuncs.com/buyfakett/minio</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-nginx"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="nginx"><code><span class="line"><span style="color:var(--shiki-token-keyword)">upstream</span><span style="color:var(--shiki-foreground)"> minio_s3 {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    least_conn</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    server</span><span style="color:var(--shiki-foreground)"> 192.168.1.1:9000;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">upstream</span><span style="color:var(--shiki-foreground)"> minio_console {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    least_conn</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    server</span><span style="color:var(--shiki-foreground)"> 192.168.1.1:9001;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">server</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    listen </span><span style="color:var(--shiki-token-constant)">      80</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    server_name </span><span style="color:var(--shiki-foreground)"> test.com;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    access_log </span><span style="color:var(--shiki-foreground)">/data/logs/nginx/json_minioSubnet.log json;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # Allow special characters in headers</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ignore_invalid_headers </span><span style="color:var(--shiki-token-constant)">off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # Allow any size file to be uploaded.</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # Set to a value such as 1000m; to restrict file size to a specific value</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    client_max_body_size </span><span style="color:var(--shiki-token-constant)">0</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # Disable buffering</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_buffering </span><span style="color:var(--shiki-token-constant)">off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    proxy_request_buffering </span><span style="color:var(--shiki-token-constant)">off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    location</span><span style="color:var(--shiki-foreground)"> / {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">Host $http_host;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Real-IP $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-Proto $scheme;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_connect_timeout </span><span style="color:var(--shiki-token-constant)">3600</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_http_version </span><span style="color:var(--shiki-token-constant)">1.1</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">Connection </span><span style="color:var(--shiki-token-string-expression)">&quot;&quot;</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        chunked_transfer_encoding </span><span style="color:var(--shiki-token-constant)">off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_pass </span><span style="color:var(--shiki-foreground)">http://minio_s3; </span><span style="color:var(--shiki-token-comment)"># This uses the upstream directive definition to load balance</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    location</span><span style="color:var(--shiki-foreground)"> /minio/ui/ {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        rewrite</span><span style="color:var(--shiki-token-string-expression)"> ^/minio/ui/(.*) /$</span><span style="color:var(--shiki-foreground)">1 </span><span style="color:var(--shiki-token-keyword)">break</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">Host $http_host;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Real-IP $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-Forwarded-Proto $scheme;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">X-NginX-Proxy </span><span style="color:var(--shiki-token-constant)">true</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # This is necessary to pass the correct IP to be hashed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        real_ip_header </span><span style="color:var(--shiki-foreground)">X-Real-IP;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_connect_timeout </span><span style="color:var(--shiki-token-constant)">3600</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # To support websockets in MinIO versions released after January 2023</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_http_version </span><span style="color:var(--shiki-token-constant)">1.1</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">Upgrade $http_upgrade;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_set_header </span><span style="color:var(--shiki-foreground)">Connection </span><span style="color:var(--shiki-token-string-expression)">&quot;upgrade&quot;</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # Uncomment the following line to set the Origin request to an empty string</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # proxy_set_header Origin &#x27;&#x27;;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        chunked_transfer_encoding </span><span style="color:var(--shiki-token-constant)">off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        proxy_pass </span><span style="color:var(--shiki-foreground)">http://minio_console; </span><span style="color:var(--shiki-token-comment)"># This uses the upstream directive definition to load balance</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="linux挂载"><a href="#linux挂载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>linux挂载</h2>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-comment)"># apt install -y s3fs</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># yum install -y epel-release s3fs-fuse</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;access_key:secret_key&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /data/minio-config/passwd</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">chmod</span><span style="color:var(--shiki-token-constant)"> 600</span><span style="color:var(--shiki-token-string)"> /data/minio-config/passwd</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">/usr/bin/s3fs</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">bucke</span><span style="color:var(--shiki-foreground)">t</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)"> /data/minio/test</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> passwd_file=/data/minio-config/passwd</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> url=https://xxx.top</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> use_path_request_style</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="监控"><a href="#监控" class="rp-header-anchor rp-link" aria-hidden="true">#</a>监控</h2>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 下载mc并生成token</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://dl.min.io/client/mc/release/linux-amd64/mc</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> /usr/local/bin/mc</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> /usr/local/bin/mc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mc</span><span style="color:var(--shiki-token-string)"> alias</span><span style="color:var(--shiki-token-string)"> set</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">ALIA</span><span style="color:var(--shiki-foreground)">S</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">YOUR-S3-ENDPOIN</span><span style="color:var(--shiki-foreground)">T</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">YOUR-ACCESS-KE</span><span style="color:var(--shiki-foreground)">Y</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">YOUR-SECRET-KE</span><span style="color:var(--shiki-foreground)">Y</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)"> --api</span><span style="color:var(--shiki-token-string)"> s3v4</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mc</span><span style="color:var(--shiki-token-string)"> admin</span><span style="color:var(--shiki-token-string)"> prometheus</span><span style="color:var(--shiki-token-string)"> generate</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">ALIA</span><span style="color:var(--shiki-foreground)">S</span><span style="color:var(--shiki-token-keyword)">&gt;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><code>grafana</code>中导入<code>13502</code></p>
<h2 class="rp-toc-include" id="权限管理"><a href="#权限管理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>权限管理</h2>
<p>我们还可以权限管理, 我这里演示的是名为<code>test</code>桶的所有权限</p>
<div class="rp-codeblock language-json"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="json"><code><span class="line"><span style="color:var(--shiki-foreground)">{</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  &quot;Version&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;2012-10-17&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  &quot;Statement&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Effect&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;Allow&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Action&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:GetBucketLocation&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:ListBucket&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:ListBucketMultipartUploads&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      ]</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Resource&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;arn:aws:s3:::test&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Effect&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;Allow&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Action&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:PutObject&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:GetObject&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:DeleteObject&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:ListMultipartUploadParts&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        &quot;s3:AbortMultipartUpload&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      ]</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;Resource&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;arn:aws:s3:::test/*&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  ]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】rss订阅]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】rss订阅</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】rss订阅</guid>
            <pubDate>Sun, 10 Nov 2024 21:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="rss订阅"><a href="#rss订阅" class="rp-header-anchor rp-link" aria-hidden="true">#</a>rss订阅<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>RSS是站点用来和其他站点之间共享内容的一种简易方式（也叫聚合内容 Really Simple Syndication）。通常在时效性比较强的内容上使用RSS订阅能更快速获取信息，网站提供RSS输出，有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件（例如SharpReader,NewzCrawler,FeedDemon），在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。</p>
<h2 class="rp-toc-include" id="rsshub"><a href="#rsshub" class="rp-header-anchor rp-link" aria-hidden="true">#</a>rsshub</h2>
<p><a href="https://docs.rsshub.app/zh/guide/" target="_blank" rel="noopener noreferrer" class="rp-link">官方文档</a></p>
<h3 class="rp-toc-include" id="启动"><a href="#启动" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    rsshub</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        stdin_open</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> rsshub</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            - </span><span style="color:var(--shiki-token-string-expression)">1200:1200</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> diygod/rsshub</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="miniflux"><a href="#miniflux" class="rp-header-anchor rp-link" aria-hidden="true">#</a>miniflux</h2>
<p><a href="https://github.com/miniflux/v2" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p>
<p>让服务端来拉取rss和保存rss订阅</p>
<h3 class="rp-toc-include" id="启动-1"><a href="#启动-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;3&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  db</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> postgres:14</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> miniflux-db</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">POSTGRES_USER=miniflux</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">POSTGRES_PASSWORD=password</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">POSTGRES_DB=miniflux</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./data:/var/lib/postgresql/data</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    healthcheck</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      test</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&quot;CMD&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;pg_isready&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;-U&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;miniflux&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 10s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      start_period</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 30s</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  miniflux</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> miniflux/miniflux:2.1.3</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> miniflux-web</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;8120:8080&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    depends_on</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">db</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">DATABASE_URL=postgres://miniflux:password@miniflux-db/miniflux?sslmode=disable</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">RUN_MIGRATIONS=1</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">CREATE_ADMIN=1</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">ADMIN_USERNAME=admin</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">ADMIN_PASSWORD=password</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="fluent-reader"><a href="#fluent-reader" class="rp-header-anchor rp-link" aria-hidden="true">#</a>fluent-reader</h2>
<p>rss查看器, 在微软商店和苹果商店都可以搜索</p>
<p><a href="https://github.com/yang991178/fluent-reader" target="_blank" rel="noopener noreferrer" class="rp-link">开源地址</a></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[厦门游记]]></title>
            <link>https://www.tteam.icu/blog/tour/2024厦门游记</link>
            <guid isPermaLink="false">/blog/tour/2024厦门游记</guid>
            <pubDate>Mon, 04 Nov 2024 09:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="厦门游记"><a href="#厦门游记" class="rp-header-anchor rp-link" aria-hidden="true">#</a>厦门游记<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>这是一篇关于我在暑假初, 配妹妹去厦门一起旅游的记录; 碰巧, 我朋友也想去, 我就把我的经历记录下来了</p>
<p>众所周知, 我是一个毛怪, 对厦门有独特的情感, 想去了好几年了, 终于乘着妹妹想出去玩, 我就推荐了厦门</p>
<p>我的行程是6月30-7月3, 在不久之前, 央视刚刚点名批评过厦门, 这也使得我定的住宿便宜了很多(ps: 和各路司机聊了一下, 私聊商家可以更便宜)</p>
<h2 class="rp-toc-include" id="第一天"><a href="#第一天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一天</h2>
<p>我和妹妹做了8小时的高铁, 铁锭到达了厦门北</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/11bz9ll-3.webp" alt=""/></p>
<p>下了高铁后我们立即做地铁到达了第一家酒店, 由于我的计划是第二天上鼓浪屿, 所以定的酒店距离厦鼓码头1km多</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-jlgzkfa55" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>酒店楼上的风景</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/1251zoa-3.webp" alt=""/></p>
<p>酒店送的小点心</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/125mys0-3.webp" alt=""/></p>
<p>在酒店充了会电, 就和妹妹一起去憨强推的<code>野草莓</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-q8a3789rp" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2024/11/04/12bkt7g-3.webp" alt=""/></p>
<p>由于野草莓距离海很久, 和妹妹取了号后, 就去海边拍拍拍了</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12csgjv-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12d9w7p-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12dclzf-3.webp" alt=""/></p>
<p>排了将近1小时, 就到我们了, 和妹妹点了这些菜, 大家猜猜这些菜多少钱</p>
<p>这个烤鸡巨好吃, 我当时吃的快哭出来了</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12e4bn2-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12e5xmf-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12ej2bh-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12eldje-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12eo0ou-3.webp" alt=""/></p>
<p>答案揭晓, 只要155！！！我和妹妹吃的超级撑</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12fpwa0-3.webp" alt=""/></p>
<p>我们两个吃完就打车去演武大桥了, 和预想的一样, 这里堵得肥肠厉害</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-lvrzg6lhu" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>切片组合影处打卡</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12hh24p-3.webp" alt=""/></p>
<p>好漂亮的落日</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12jvk38-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12k2ju9-3.webp" alt=""/></p>
<p>双子塔！！</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12l105g-3.webp" alt=""/></p>
<p>我超, 葱！</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12krlbv-3.webp" alt=""/></p>
<p>夜晚的沙坡尾</p>
<p><img src="https://img.tteam.icu/i/2024/11/04/12kpq0s-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="第二天"><a href="#第二天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二天</h2>
<p>出发去<code>厦鼓码头</code>了, 酒店出来的天桥上就有厦门的市花<code>三角梅</code>了</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/zd7fqb-3.webp" alt=""/></p>
<p>我们提前一天在<code>屿见厦门</code>买了鼓浪屿的双人经典游套餐, 但是由于妹妹没到18周岁, 所有到了现场发现不能兑换, 重新买了</p>
<p>而且大家注意需要提前兑换, 到现场后兑换基本没票了, 我们当时是运气好, 兑换上了</p>
<p>风景太好辣！！！</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10i3k7y-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10i4vyw-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10i64tj-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10i7ll3-3.webp" alt=""/></p>
<p>到岛上也是拍拍拍</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10iuck8-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10ivyrc-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/05/10j7yjq-3.webp" alt=""/></p>
<p>对我来说, 我当然是要去<code>相机博物馆</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-mn75hywn2" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2024/11/05/129r8cq-3.webp" alt=""/></p>
<p>当然也要去打卡把主播“吓一跳”的, 抹香鲸xxx</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/128m59q-3.webp" alt=""/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-vf4f69hx0" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>下午就下岛后还遇到了哭笑不得的事, <code>开禾路口站</code>分BRT和公交, 我默认上了BRT, 结果发现和地图上不一样</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/12ja11y-3.webp" alt=""/></p>
<p>第二家酒店; 妹妹说太累了, 就在酒店休息了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-3mxqh48kv" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>到酒店我感觉还很早, 问了思思还能赶进关店前到达, 我就直接去打卡<code>野台风</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-3r5z5bn2x" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2024/11/05/12mco1v-3.webp" alt=""/></p>
<p>太好喝了, 直接点了两杯, 然后打包一杯给妹妹</p>
<p><img src="https://img.tteam.icu/i/2024/11/05/12mbpc9-3.webp" alt=""/></p>
<p>我个人特别i, 老板直接上来问我“你是hanser的粉丝吗”, 被老板的直球吓了一跳</p>
<p>后面也和老板聊起来了</p>
<p>把打包的咖啡送到酒店后, 我就看时间还早, 就去把公众号上的<code>鹭江夜游</code>给坐了</p>
<p>在船上坐一个多小时, 吹着咸咸的海风, 真的很舒服</p>
<h2 class="rp-toc-include" id="第三天"><a href="#第三天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三天</h2>
<p>今天是我一个人玩的一天, 妹妹说昨天太累了, 要在酒店里休息</p>
<p>第一站就是<code>芋包嫂</code></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-75b4ye1t2" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>个人比较挑食, 所以不怎么喜欢</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/vt8j7q-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/vt9eco-3.webp" alt=""/></p>
<p>沙坡尾真是太漂亮了, 就是太晒了</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x56w85-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x58de2-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x59kqt-3.webp" alt=""/></p>
<p>沙坡尾入口的舒芙蕾也是特别好吃, 真的是入口即化</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x6dkii-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x6epn9-3.webp" alt=""/></p>
<p>在沙坡尾的旁边, 就是猫街, 因为我肚子吃撑了, 所以就没去吃憨推荐的<code>助屋</code>了</p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-24yjxawap" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2024/11/06/x8pwta-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x8qxj0-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x8sd2n-3.webp" alt=""/></p>
<p>猫街还是很短的, 从猫街走出来就是双子塔了</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/x8zy96-3.webp" alt=""/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-6xb78guoz" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p>当天是<code>BW</code>周边申请的第一天, 三点收到了最后一次测试的需求, 想着附件也没什么坐的地方, 就直接打车二顾<code>野台风</code>了</p>
<p>在店里点了一杯<code>野台轰</code></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/xcax9a-3.webp" alt=""/></p>
<p>在店里坐完测试, 抢完周边(我是第一个抢到的), 诶嘿嘿~</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/zd33s5-3.webp" alt=""/></p>
<p>抢完后, 打包了杯咖啡就去<code>海上世界</code>了, 旁边就是海沧大桥</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/z9243l-3.webp" alt=""/></p>
<div class="map-box" style="margin:0.8rem 0 1.6rem 0"><div id="map-rla9wq20u" style="max-width:100%;height:400px;display:block;margin:0 auto;z-index:1;border-radius:5px"></div></div>
<p><img src="https://img.tteam.icu/i/2024/11/06/yz7wjf-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/yz8uda-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/yz9fns-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/yza3g0-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/yzapnt-3.webp" alt=""/></p>
<p>在海上世界随便进了一家餐厅, 坐下发现了可以观赏鱼, 深度似乎是到1楼的, 丸辣, 钱包要遭殃了</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/z123v2-3.webp" alt=""/></p>
<p>我就点了一点吃的</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/z2yv8g-3.webp" alt=""/></p>
<p>吃完后又买了点面包就回酒店了</p>
<h2 class="rp-toc-include" id="第四天"><a href="#第四天" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四天</h2>
<p>第二天睡得有点晚, 和妹妹又来海上世界了, 吃了饭看了风景(今天的天气好好)</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/za744m-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/za818i-3.webp" alt=""/></p>
<p><img src="https://img.tteam.icu/i/2024/11/06/za8wol-3.webp" alt=""/></p>
<p>吃完饭就打车去机场回家了</p>
<p><img src="https://img.tteam.icu/i/2024/11/06/zantuq-3.webp" alt=""/></p>
<h1 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>厦门是一个很美丽/惬意的城市, 而且可以来很多次</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[linux技巧合集]]></title>
            <link>https://www.tteam.icu/blog/ops/快速脚本合集</link>
            <guid isPermaLink="false">/blog/ops/快速脚本合集</guid>
            <pubDate>Sat, 26 Oct 2024 22:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="linux技巧合集"><a href="#linux技巧合集" class="rp-header-anchor rp-link" aria-hidden="true">#</a>linux技巧合集<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="最大20个文件"><a href="#最大20个文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>最大20个文件</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">du</span><span style="color:var(--shiki-token-string)"> -h</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sort</span><span style="color:var(--shiki-token-string)"> -rh</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> head</span><span style="color:var(--shiki-token-string)"> -20</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">find</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-string)"> -type</span><span style="color:var(--shiki-token-string)"> f</span><span style="color:var(--shiki-token-string)"> -exec</span><span style="color:var(--shiki-token-string)"> du</span><span style="color:var(--shiki-token-string)"> -sb</span><span style="color:var(--shiki-token-string)"> {}</span><span style="color:var(--shiki-token-string)"> +</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> awk</span><span style="color:var(--shiki-token-string-expression)"> &#x27;{ size_gb = $1 / (1024*1024*1024); printf &quot;%.2fGB\t%s\n&quot;, size_gb, $2 }&#x27;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sort</span><span style="color:var(--shiki-token-string)"> -nr</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> head</span><span style="color:var(--shiki-token-string)"> -n</span><span style="color:var(--shiki-token-constant)"> 20</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="快速命令"><a href="#快速命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>快速命令</h2>
<h3 class="rp-toc-include" id="查看去掉注释和空行"><a href="#查看去掉注释和空行" class="rp-header-anchor rp-link" aria-hidden="true">#</a>查看去掉注释和空行</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">grep</span><span style="color:var(--shiki-token-string)"> -Ev</span><span style="color:var(--shiki-token-string-expression)"> &#x27;^\s*($|#|;)&#x27;</span><span style="color:var(--shiki-token-string)"> example.conf</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="单行改密码"><a href="#单行改密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>单行改密码</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">passw</span><span style="color:var(--shiki-foreground)">d</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> passwd</span><span style="color:var(--shiki-token-string)"> root</span><span style="color:var(--shiki-token-string)"> --stdin</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="删除30天前文件"><a href="#删除30天前文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>删除30天前文件</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">find</span><span style="color:var(--shiki-token-string)"> /data/app/tmp</span><span style="color:var(--shiki-token-string)"> -mtime</span><span style="color:var(--shiki-token-string)"> +30</span><span style="color:var(--shiki-token-string)"> -name</span><span style="color:var(--shiki-token-string-expression)"> &quot;*.flv&quot;</span><span style="color:var(--shiki-token-string)"> -exec</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> -Rf</span><span style="color:var(--shiki-token-string)"> {}</span><span style="color:var(--shiki-foreground)"> \;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="关闭swap"><a href="#关闭swap" class="rp-header-anchor rp-link" aria-hidden="true">#</a>关闭swap</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sed</span><span style="color:var(--shiki-token-string)"> -ri</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/.*swap.*/#&amp;/&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/fstab</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> swapoff</span><span style="color:var(--shiki-token-string)"> -a</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="随机密码"><a href="#随机密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>随机密码</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-foreground)">PASSWORD</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$(</span><span style="color:var(--shiki-token-function)">base64</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)"> /dev/urandom</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> head</span><span style="color:var(--shiki-token-string)"> -c16</span><span style="color:var(--shiki-foreground)">); </span><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;$PASSWORD&quot;</span><span style="color:var(--shiki-foreground)">; </span><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string)"> -n</span><span style="color:var(--shiki-token-string-expression)"> &quot;$PASSWORD&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sha1sum</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> tr</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string-expression)"> &#x27;-&#x27;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> xxd</span><span style="color:var(--shiki-token-string)"> -r</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sha1sum</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> tr</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string-expression)"> &#x27;-&#x27;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="当前目录修改字符串"><a href="#当前目录修改字符串" class="rp-header-anchor rp-link" aria-hidden="true">#</a>当前目录修改字符串</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-keyword)">for</span><span style="color:var(--shiki-foreground)"> file </span><span style="color:var(--shiki-token-keyword)">in</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">ls</span><span style="color:var(--shiki-foreground)">); </span><span style="color:var(--shiki-token-keyword)">do</span><span style="color:var(--shiki-token-function)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/nmg/sz/g&#x27;</span><span style="color:var(--shiki-token-string-expression)"> &quot;$file&quot;</span><span style="color:var(--shiki-foreground)">; </span><span style="color:var(--shiki-token-keyword)">done</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="docker-build构建使用http代理"><a href="#docker-build构建使用http代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Docker Build构建使用http代理</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> build</span><span style="color:var(--shiki-token-string)"> --build-arg</span><span style="color:var(--shiki-token-string)"> https_proxy=127.0.0.1:8088</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="yum保存rpm"><a href="#yum保存rpm" class="rp-header-anchor rp-link" aria-hidden="true">#</a>yum保存rpm</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> yum-utils</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 保存主软件包</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yumdownloader</span><span style="color:var(--shiki-token-string)"> telnet</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 保存主软件包和所有依赖</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">repotrack</span><span style="color:var(--shiki-token-string)"> telnet</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> localinstall</span><span style="color:var(--shiki-token-string)"> telnet.rpm</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="htpasswd-密码"><a href="#htpasswd-密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>htpasswd 密码</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-foreground)">USERNAME</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">muen-admin</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">PASSWORD</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$(</span><span style="color:var(--shiki-token-function)">base64</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)"> /dev/urandom</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> head</span><span style="color:var(--shiki-token-string)"> -c16</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;USERNAME:$USERNAME,PASSWORD:$PASSWORD&quot;</span><span style="color:var(--shiki-foreground)">;</span><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> --rm</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--entrypoint </span><span style="color:var(--shiki-token-string)">htpasswd</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">httpd:alpine \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-mbn $USERNAME $PASSWORD </span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)"> nginx.htpasswd</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># -mbn Force MD5 encryption</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># -Bbn Force bcrypt encryption</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="ssh代理"><a href="#ssh代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>ssh代理</h2>
<h3 class="rp-toc-include" id="原生ssh"><a href="#原生ssh" class="rp-header-anchor rp-link" aria-hidden="true">#</a>原生ssh</h3>
<p>没必要用到frp的时候，或者需要双保险的时候，可以用到ssh代理</p>
<p>会监听<code>22</code>端口</p>
<p>注：远程机器上如果<code>/etc/ssh/sshd_config</code>的<code>GatewayPorts</code>的值不是<code>yes</code>则远程机器只会监听<code>127.0.0.1</code>，只能本机访问</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">ssh</span><span style="color:var(--shiki-token-string)"> -NfL</span><span style="color:var(--shiki-token-string)"> remote_port:localhost:local_port</span><span style="color:var(--shiki-token-string)"> user@remote_server</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">ssh</span><span style="color:var(--shiki-token-string)"> -NfL</span><span style="color:var(--shiki-token-string)"> *:16000:192.168.1.1:3020</span><span style="color:var(--shiki-token-string)"> root@xx.xx.xx.xx</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="自动重连"><a href="#自动重连" class="rp-header-anchor rp-link" aria-hidden="true">#</a>自动重连</h3>
<p><code>-M</code>后面传<code>0</code>就是随机在远程主机上<code>32768-65535</code>开一个端口来监听，如果传自定义值就是指定端口监听</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">Tip</div><div class="rp-callout__content"><p>注：还是会监听<code>22</code>端口</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> autossh</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">autossh</span><span style="color:var(--shiki-token-string)"> -M</span><span style="color:var(--shiki-token-constant)"> 0</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string-expression)"> &quot;ServerAliveInterval 30&quot;</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string-expression)"> &quot;ServerAliveCountMax 3&quot;</span><span style="color:var(--shiki-token-string)"> -NfR</span><span style="color:var(--shiki-token-string)"> *:11000:172.168.1.1:6061</span><span style="color:var(--shiki-token-string)"> root@172.168.1.1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="docker清理"><a href="#docker清理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>docker清理</h2>
<h3 class="rp-toc-include" id="清理镜像"><a href="#清理镜像" class="rp-header-anchor rp-link" aria-hidden="true">#</a>清理镜像</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> image</span><span style="color:var(--shiki-token-string)"> prune</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-foreground)"> </span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="显示当前占用磁盘空间的-docker-资源"><a href="#显示当前占用磁盘空间的-docker-资源" class="rp-header-anchor rp-link" aria-hidden="true">#</a>显示当前占用磁盘空间的 Docker 资源</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> system</span><span style="color:var(--shiki-token-string)"> df</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="清理构建缓存"><a href="#清理构建缓存" class="rp-header-anchor rp-link" aria-hidden="true">#</a>清理构建缓存</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> builder</span><span style="color:var(--shiki-token-string)"> prune</span><span style="color:var(--shiki-token-string)"> -a</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="删除未被使用的容器网络和数据卷等其他资源"><a href="#删除未被使用的容器网络和数据卷等其他资源" class="rp-header-anchor rp-link" aria-hidden="true">#</a>删除未被使用的容器、网络和数据卷等其他资源</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> system</span><span style="color:var(--shiki-token-string)"> prune</span><span style="color:var(--shiki-token-string)"> -a</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="rsync断点续传"><a href="#rsync断点续传" class="rp-header-anchor rp-link" aria-hidden="true">#</a>rsync断点续传</h2>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">cmd_status</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">while</span><span style="color:var(--shiki-foreground)"> [ ${cmd_status} </span><span style="color:var(--shiki-token-keyword)">!=</span><span style="color:var(--shiki-token-constant)"> 0</span><span style="color:var(--shiki-foreground)"> ]; </span><span style="color:var(--shiki-token-keyword)">do</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># rsync -rP -e &quot;ssh -i /root/test.pem&quot; /data/app/ 192.168.1.1:/data/app/</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 1M/s</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># yum install nc -y</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># apt install -y netcat-openbsd</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 老版本 nc -x</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># rsync -rP --bwlimit=1024 --rsh=&quot;ssh -o ProxyCommand=&#x27;nc -x x.x.x.x:44066 %h %p&#x27;&quot; ${des_dir}/ root@${ip}:${src_dir}/${sync_file}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 新版本 nc --proxy-type socks5 --proxy ${ip}:${port}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># rsync -rP --bwlimit=1024 --rsh=&quot;ssh -o ProxyCommand=&#x27;nc --proxy-type socks5 --proxy-auth username:password --proxy x.x.x.x:44066 %h %p&#x27;&quot; ${des_dir}/ root@${ip}:${src_dir}/${sync_file}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rsync</span><span style="color:var(--shiki-token-string)"> -rP</span><span style="color:var(--shiki-token-string)"> --bwlimit=1024</span><span style="color:var(--shiki-token-string)"> --rsh=</span><span style="color:var(--shiki-token-string-expression)">&quot;ssh&quot;</span><span style="color:var(--shiki-token-string)">  /data/baksvn/20200906</span><span style="color:var(--shiki-token-string)"> root@172.31.37.123:/data/baksvn/</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">cmd_status</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$?</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">done</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">Tip</div><div class="rp-callout__content"><p>
如果要使用其他用户传输: <code>rsync -e &#x27;ssh -l &lt;user&gt;&#x27;</code></p></div></div>
<h2 class="rp-toc-include" id="代理相关"><a href="#代理相关" class="rp-header-anchor rp-link" aria-hidden="true">#</a>代理相关</h2>
<h3 class="rp-toc-include" id="curl使用代理"><a href="#curl使用代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a><code>curl</code>使用代理</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># socks5代理</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -x</span><span style="color:var(--shiki-token-string)"> socks5h://user:xxx@192.168.1.1:1080</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="脚本格式"><a href="#脚本格式" class="rp-header-anchor rp-link" aria-hidden="true">#</a>脚本格式</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 需要用到dos2unix包</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">find</span><span style="color:var(--shiki-token-string)"> .</span><span style="color:var(--shiki-token-string)"> -wholename</span><span style="color:var(--shiki-token-string-expression)"> &quot;*.sh&quot;</span><span style="color:var(--shiki-token-string)"> -exec</span><span style="color:var(--shiki-token-string)"> dos2unix</span><span style="color:var(--shiki-token-string)"> {}</span><span style="color:var(--shiki-foreground)"> \;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="测试相关"><a href="#测试相关" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测试相关</h2>
<h3 class="rp-toc-include" id="测速"><a href="#测速" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测速</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> epel-release</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> iperf3</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 默认端口 5201</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 服务端</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">iperf3</span><span style="color:var(--shiki-token-string)"> -s</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 客户端</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 上传</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">iperf3</span><span style="color:var(--shiki-token-string)"> -c</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">server_i</span><span style="color:var(--shiki-foreground)">p</span><span style="color:var(--shiki-token-keyword)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 下载</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">iperf3</span><span style="color:var(--shiki-token-string)"> -c</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">server_i</span><span style="color:var(--shiki-foreground)">p</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)"> -R</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[prometheus监控]]></title>
            <link>https://www.tteam.icu/blog/ops/prometheus</link>
            <guid isPermaLink="false">/blog/ops/prometheus</guid>
            <pubDate>Fri, 26 Jan 2024 09:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="prometheus"><a href="#prometheus" class="rp-header-anchor rp-link" aria-hidden="true">#</a>prometheus<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="架构图"><a href="#架构图" class="rp-header-anchor rp-link" aria-hidden="true">#</a>架构图</h2>
<p><img src="https://img.tteam.icu/i/2024/10/26/ytxcm5-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="prometheus-server"><a href="#prometheus-server" class="rp-header-anchor rp-link" aria-hidden="true">#</a>prometheus-server</h2>
<h4 class="rp-toc-include" id="configprometheusyml"><a href="#configprometheusyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/prometheus.yml</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">global</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  scrape_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)">     60s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  evaluation_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 60s</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">rule_files</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-string-expression)">&quot;/usr/local/prometheus/rules/*.rules&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">scrape_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;prometheus&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    static_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&quot;127.0.0.1:9090&quot;</span><span style="color:var(--shiki-foreground)">]</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="setupsh"><a href="#setupsh" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;Asia/Shanghai&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">chown</span><span style="color:var(--shiki-token-string)"> -R</span><span style="color:var(--shiki-token-constant)"> 65534.65534</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">9090</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> prometheus</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> prometheus</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --net</span><span style="color:var(--shiki-token-string)"> host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">prometheus</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config/:/etc/prometheus/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data/:/prometheus/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/groups/:/usr/local/prometheus/groups/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/rules/:/usr/local/prometheus/rules/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">prom/prometheus:v2.46.0 \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--config.file=/etc/prometheus/prometheus.yml \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.console.libraries=/etc/prometheus/console_libraries \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.console.templates=/etc/prometheus/consoles \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--storage.tsdb.path=/prometheus \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--storage.tsdb.retention.time=60d \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.enable-admin-api</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="exporter"><a href="#exporter" class="rp-header-anchor rp-link" aria-hidden="true">#</a>exporter</h2>
<h3 class="rp-toc-include" id="postgres_exporter"><a href="#postgres_exporter" class="rp-header-anchor rp-link" aria-hidden="true">#</a>postgres_exporter</h3>
<h4 class="rp-toc-include" id="单个数据库"><a href="#单个数据库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>单个数据库</h4>
<h5 class="rp-toc-include" id="setupsh-1"><a href="#setupsh-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h5>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">start_pg_exporter</span><span style="color:var(--shiki-token-punctuation)">()</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_host</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$1</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$2</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_user</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$3</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_password</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$4</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">exporter_port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">$5</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> postgresql-exporter-</span><span style="color:var(--shiki-foreground)">${exporter_port}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> postgresql-exporter-</span><span style="color:var(--shiki-foreground)">${exporter_port}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-p ${exporter_port}</span><span style="color:var(--shiki-token-string)">:9187</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">postgresql-exporter-</span><span style="color:var(--shiki-foreground)">${exporter_port} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">DATA_SOURCE_NAME=</span><span style="color:var(--shiki-token-string-expression)">&quot;postgresql://${pg_user}:${pg_password}@${pg_host}:${pg_port}/postgres?sslmode=disable&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">wrouesnel/postgres_exporter</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">pgid</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;hdy-nmg-server-001&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_host</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;10.0.18.2&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;5432&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_user</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;postgres&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">pg_password</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">exporter_port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">13101</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">start_pg_exporter</span><span style="color:var(--shiki-foreground)"> ${pg_host} ${pg_port} ${pg_user} ${pg_password} ${exporter_port}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="配置增加"><a href="#配置增加" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-comment)">  # hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;hdy-nmg-server-001&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    static_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;127.0.0.1:13101&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> postgresql</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="多个数据库"><a href="#多个数据库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>多个数据库</h4>
<h5 class="rp-toc-include" id="setupsh-2"><a href="#setupsh-2" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h5>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> config/</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> config/postgres_exporter.yml</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">auth_modules:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  hdy-nmg-server-001:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    type: userpass</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    userpass:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      username: postgres</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      password: NoKgWU</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    options:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      sslmode: disable</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  aliyun-hz-server-master:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    type: userpass</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    userpass:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      username: postgres</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      password: 9VczV</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    options:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      sslmode: disable</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> postgresql-exporter</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> postgresql-exporter</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --net=host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">postgresql-exporter</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config/:/etc/postgres-exporter/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">quay.io/prometheuscommunity/postgres-exporter \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--config.file </span><span style="color:var(--shiki-token-string)">/etc/postgres-exporter/postgres_exporter.yml</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.listen-address=:13101</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="配置增加-1"><a href="#配置增加-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;postgresql-exporter&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 15s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 10s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    file_sd_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">files</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/postgresql/*.json&#x27;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/postgresql/*.yml&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    metrics_path</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> /probe</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    relabel_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">__address__</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_target</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">instance</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_auth_module</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __address__</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        replacement</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;10.0.18.2:13101&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="groupspostgresqlpostgresqlyml"><a href="#groupspostgresqlpostgresqlyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>groups/postgresql/postgresql.yml</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;10.0.18.2:5432&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    saltid</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    comment</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;hdy-nmg-server-001&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;47.xxx.xxx.xxx:5432&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    saltid</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    comment</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;aliyun-hz-server-master&quot;</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="mysql_exporter"><a href="#mysql_exporter" class="rp-header-anchor rp-link" aria-hidden="true">#</a>mysql_exporter</h3>
<h4 class="rp-toc-include" id="单个数据库-1"><a href="#单个数据库-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>单个数据库</h4>
<h5 class="rp-toc-include" id="setupsh-3"><a href="#setupsh-3" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h5>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># hdy-nmg-server-001</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">10309</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> .my.cnf</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[client]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">user=root</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">password=</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/.my.cnf:/config/.my.cnf</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">prom/mysqld-exporter:v0.15.0 \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.listen-address=:${</span><span style="color:var(--shiki-token-function)">port}</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--config.my-cnf=</span><span style="color:var(--shiki-token-string-expression)">&quot;/config/.my.cnf&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="配置增加-2"><a href="#配置增加-2" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-comment)">  # hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;mysql&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    static_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;127.0.0.1:10309&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> mysql</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="多个数据库-1"><a href="#多个数据库-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>多个数据库</h4>
<h5 class="rp-toc-include" id="setupsh-4"><a href="#setupsh-4" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h5>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># hdy-nmg-server-001</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">10309</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> .my.cnf</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[hdy-nmg-server-001]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">user=root</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">password=</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[aliyun-hz-server-master]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">user=root</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">password=</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> mysqld-exporte-</span><span style="color:var(--shiki-foreground)">${port} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/.my.cnf:/config/.my.cnf</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">prom/mysqld-exporter:v0.15.0 \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.listen-address=:${</span><span style="color:var(--shiki-token-function)">port}</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--config.my-cnf=</span><span style="color:var(--shiki-token-string-expression)">&quot;/config/.my.cnf&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="配置增加-3"><a href="#配置增加-3" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;mysql-exporter&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 15s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 10s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    file_sd_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">files</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/mysql/*.json&#x27;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/mysql/*.yml&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    metrics_path</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> /probe</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    relabel_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">__address__</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_target</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">instance</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_auth_module</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __address__</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        replacement</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;10.0.18.2:10309&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h5 class="rp-toc-include" id="groupsmysqlmysqlyml"><a href="#groupsmysqlmysqlyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>groups/mysql/mysql.yml</h5>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;10.0.18.2:3306&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    saltid</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    comment</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;hdy-nmg-server-001&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;47.xxx.xxx.xxx:3306&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    saltid</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> aliyun-hz-server-master</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    comment</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;aliyun-hz-server-master&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="blackbox_exporter"><a href="#blackbox_exporter" class="rp-header-anchor rp-link" aria-hidden="true">#</a>blackbox_exporter</h3>
<h4 class="rp-toc-include" id="setupsh-5"><a href="#setupsh-5" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> blackbox_exporter</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> blackbox_exporter</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --restart=always</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -p</span><span style="color:var(--shiki-token-string)"> 9115:9115</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --name</span><span style="color:var(--shiki-token-string)"> blackbox_exporter</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -v</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config:/config</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -v</span><span style="color:var(--shiki-token-string)"> /etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -v</span><span style="color:var(--shiki-token-string)"> /etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  quay.io/prometheus/blackbox-exporter:latest</span><span style="color:var(--shiki-token-string)"> --config.file=/config/blackbox.yml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="configblackboxyml"><a href="#configblackboxyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/blackbox.yml</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">modules</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">  # 通用get</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  http_2xx</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    prober</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> http</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 35s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    http</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      valid_http_versions</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&quot;HTTP/1.1&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;HTTP/2.0&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      valid_status_codes</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> []  </span><span style="color:var(--shiki-token-comment)"># Defaults to 2xx</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      method</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> GET</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      preferred_ip_protocol</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;ip4&quot;</span><span style="color:var(--shiki-token-comment)"> # defaults to &quot;ip6&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      ip_protocol_fallback</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> false</span><span style="color:var(--shiki-token-comment)">  # no fallback to &quot;ip6&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">  # 无参post</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  http_post_2xx</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    prober</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> http</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 35s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    http</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      method</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> POST</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      headers</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        Content-Type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> application/json</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="配置增加-4"><a href="#配置增加-4" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">job_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;blackbox-exporter&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 60s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    scrape_timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 35s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    file_sd_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">files</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/blackbox/*.json&#x27;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)">&#x27;/usr/local/prometheus/groups/blackbox/*.yml&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    metrics_path</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> /probe</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    relabel_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">__address__</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_target</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">module</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __param_module</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">source_labels</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string)">address</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> address</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">target_label</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> __address__</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        replacement</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;127.0.0.1:9115&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="groupsblackboxblackboxyml"><a href="#groupsblackboxblackboxyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>groups/blackbox/blackbox.yml</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;http://10.0.18.2:8008/api/video_type/list&quot;</span><span style="color:var(--shiki-foreground)"> ]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  labels</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    module</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;http_2xx&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    address</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;http://10.0.18.2:8008/api/video_type/list&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    instance</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;wx-video&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="grafana"><a href="#grafana" class="rp-header-anchor rp-link" aria-hidden="true">#</a>grafana</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">3000</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> data/</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-constant)"> 777</span><span style="color:var(--shiki-token-string)"> data/</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chown</span><span style="color:var(--shiki-token-string)"> -R</span><span style="color:var(--shiki-token-constant)"> 472.472</span><span style="color:var(--shiki-token-string)"> data/</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> grafana</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> grafana</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name=grafana</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data/:/var/lib/grafana/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-p ${port}</span><span style="color:var(--shiki-token-string)">:3000</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">grafana/grafana:10.0.3</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="数据源"><a href="#数据源" class="rp-header-anchor rp-link" aria-hidden="true">#</a>数据源</h3>
<p>添加<code>Prometheus</code>，修改<code>HTTP</code>中的<code>url</code>为<code>http://10.0.18.2:9090</code></p>
<h3 class="rp-toc-include" id="仪表盘"><a href="#仪表盘" class="rp-header-anchor rp-link" aria-hidden="true">#</a>仪表盘</h3>
<p>在<code>https://grafana.com/grafana/dashboards/</code>中寻找模板</p>
<p>推荐模板：</p>
<ul>
<li>
<p>postgres:<a href="https://grafana.com/grafana/dashboards/9628-postgresql-database/" target="_blank" rel="noopener noreferrer" class="rp-link">https://grafana.com/grafana/dashboards/9628-postgresql-database/</a></p>
</li>
<li>
<p>mysql:<a href="https://grafana.com/grafana/dashboards/7362-mysql-overview/" target="_blank" rel="noopener noreferrer" class="rp-link">https://grafana.com/grafana/dashboards/7362-mysql-overview/</a></p>
</li>
</ul>
<p>在mysql的仪表盘中可以添加一个监控项</p>
<p><code>mysql_version_info{instance=&quot;$host&quot;}</code></p>
<p><code>options</code>中选择<code>instant</code>，<code>legend</code>填写<code>{{version}}</code></p>
<p>右侧选择<code>stat</code>,<code>Text mode</code>选择<code>Name</code></p>
<h2 class="rp-toc-include" id="推送"><a href="#推送" class="rp-header-anchor rp-link" aria-hidden="true">#</a>推送</h2>
<h3 class="rp-toc-include" id="prometheus-webhook-dingtalk"><a href="#prometheus-webhook-dingtalk" class="rp-header-anchor rp-link" aria-hidden="true">#</a>prometheus-webhook-dingtalk</h3>
<h4 class="rp-toc-include" id="configconfigyml"><a href="#configconfigyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/config.yml</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-comment)"># Request timeout</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 5s</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># Customizable templates path</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">templates</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-string-expression)">templates/alertmanager-dingtalk.tmpl</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  webhook</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # 运维内部群机器人</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    url</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> https://oapi.dingtalk.com/robot/send?access_token=1adaa314f6d04b7</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # secret for signature</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    secret</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> SEC9e23</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    message</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      text</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;{{ template &quot;dingtalk.to.message&quot; . }}&#x27;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="templatesalertmanager-dingtalktmpl"><a href="#templatesalertmanager-dingtalktmpl" class="rp-header-anchor rp-link" aria-hidden="true">#</a>templates/alertmanager-dingtalk.tmpl</h4>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>{{ define &quot;dingtalk.to.message&quot; }}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>{{- if gt (len .Alerts.Firing) 0 -}}</span></span>
<span class="line"><span>{{- range $index, $alert := .Alerts -}}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>=========  **监控告警** =========  </span></span>
<span class="line"><span></span></span>
<span class="line"><span>**告警程序:**     Alertmanager  </span></span>
<span class="line"><span>**告警类型:**    {{ $alert.Labels.alertname }}    </span></span>
<span class="line"><span>**告警级别:**    {{ $alert.Labels.severity }}    </span></span>
<span class="line"><span>**告警状态:**    {{ .Status }}    </span></span>
<span class="line"><span>**故障主机:**    {{ $alert.Labels.instance }} {{ $alert.Labels.device }}    </span></span>
<span class="line"><span>**告警主题:**    {{ .Annotations.summary }}     </span></span>
<span class="line"><span>**告警详情:**    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}    </span></span>
<span class="line"><span>**告警图形:**    [📈]({{ .GeneratorURL }})   </span></span>
<span class="line"><span>**主机标签:**    {{ range .Labels.SortedPairs  }}  &lt;/br&gt; [{{ .Name }}: {{ .Value | markdown | html }} ]</span></span>
<span class="line"><span>{{- end }} &lt;/br&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>**故障时间:**    {{ $alert.StartsAt.Local.Format &quot;2006-01-02 15:04:05&quot; }}     </span></span>
<span class="line"><span></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></span></span>
<span class="line"><span>{{- if gt (len .Alerts.Resolved) 0 -}}</span></span>
<span class="line"><span>{{- range $index, $alert := .Alerts -}}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>========= 告警恢复 =========  </span></span>
<span class="line"><span>**告警程序:**     Alertmanager   </span></span>
<span class="line"><span>**告警主题:**    {{ $alert.Annotations.summary }}  </span></span>
<span class="line"><span>**告警主机:**    {{ .Labels.instance }}   </span></span>
<span class="line"><span>**告警类型:**    {{ .Labels.alertname }}  </span></span>
<span class="line"><span>**告警级别:**    {{ $alert.Labels.severity }}   </span></span>
<span class="line"><span>**告警状态:**    {{   .Status }}    </span></span>
<span class="line"><span>**告警详情:**    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}        </span></span>
<span class="line"><span>**告警图形:**    [📈]({{ .GeneratorURL }})   </span></span>
<span class="line"><span>**故障时间:**    {{ $alert.StartsAt.Local.Format &quot;2006-01-02 15:04:05&quot; }}     </span></span>
<span class="line"><span>**恢复时间:**    {{ $alert.EndsAt.Local.Format &quot;2006-01-02 15:04:05&quot; }}   </span></span>
<span class="line"><span></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><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="setupsh-6"><a href="#setupsh-6" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">version</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;v2.1.0&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> prometheus-webhook-dingtalk</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> prometheus-webhook-dingtalk</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">prometheus-webhook-dingtalk</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config/:/etc/prometheus-webhook-dingtalk/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/templates/:/prometheus-webhook-dingtalk/templates/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">timonwong/prometheus-webhook-dingtalk:${</span><span style="color:var(--shiki-token-function)">version}</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.listen-address=:8060 \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.enable-ui \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--web.enable-lifecycle \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--config.file=/etc/prometheus-webhook-dingtalk/config.yml \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--log.level=info \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--log.format=logfmt \</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="alertmanager"><a href="#alertmanager" class="rp-header-anchor rp-link" aria-hidden="true">#</a>alertmanager</h3>
<h4 class="rp-toc-include" id="configalertmanageryml"><a href="#configalertmanageryml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/alertmanager.yml</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">global</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">  # 每2分钟检查一次是否恢复</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  resolve_timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 2m</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># route用来设置报警的分发策略</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">route</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  receiver</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;ops-dingtalk&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  group_by</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;...&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  group_wait</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 3s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  group_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 1m</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  repeat_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 5m</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  routes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">receiver</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;ops-dingtalk&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      group_by</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&#x27;...&#x27;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 等待时间，如果同一个组有新的告警会被合并到同一个消息内</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      group_wait</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 3s</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 异常持续报警间隔时间为 group_interval + repeat_interval 总和</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # group_interval 相同的Group之间发送告警通知的时间间隔</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      group_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 1m</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 一条成功发送的告警，在最终发送通知之前的等待时间</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      repeat_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 5m</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      matchers</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">severity=~&quot;^信息$|^警告$|^一般严重$|^严重$|^灾难$|^测试模板$&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">receivers</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;ops-dingtalk&#x27;</span><span style="color:var(--shiki-foreground)">  </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    webhook_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-keyword)">send_resolved</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        url</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;http://10.0.18.2:8060/dingtalk/webhook/send&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        max_alerts</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 0</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="templatesalertmanager-emailtmpl"><a href="#templatesalertmanager-emailtmpl" class="rp-header-anchor rp-link" aria-hidden="true">#</a>templates/alertmanager-email.tmpl</h4>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>#########基于alertmanager官方模板修改，内容可删减#########</span></span>
<span class="line"><span></span></span>
<span class="line"><span>{{ define &quot;__alertmanager&quot; }}Alertmanager{{ end }}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>{{ define &quot;__subject&quot; }}[{{ .Status | toUpper }}{{ if eq .Status &quot;firing&quot; }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join &quot; &quot; }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join &quot; &quot; }}{{ end }}){{ end }}{{ end }}</span></span>
<span class="line"><span>{{ define &quot;__description&quot; }}{{ end }}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>{{ define &quot;email.to.html&quot; }}</span></span>
<span class="line"><span>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></span>
<span class="line"><span>&lt;!--</span></span>
<span class="line"><span>Style and HTML derived from https://github.com/mailgun/transactional-email-templates</span></span>
<span class="line"><span></span></span>
<span class="line"><span>The MIT License (MIT)</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Copyright (c) 2014 Mailgun</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Permission is hereby granted, free of charge, to any person obtaining a copy</span></span>
<span class="line"><span>of this software and associated documentation files (the &quot;Software&quot;), to deal</span></span>
<span class="line"><span>in the Software without restriction, including without limitation the rights</span></span>
<span class="line"><span>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span></span>
<span class="line"><span>copies of the Software, and to permit persons to whom the Software is</span></span>
<span class="line"><span>furnished to do so, subject to the following conditions:</span></span>
<span class="line"><span></span></span>
<span class="line"><span>The above copyright notice and this permission notice shall be included in all</span></span>
<span class="line"><span>copies or substantial portions of the Software.</span></span>
<span class="line"><span></span></span>
<span class="line"><span>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></span>
<span class="line"><span>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></span>
<span class="line"><span>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></span>
<span class="line"><span>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></span>
<span class="line"><span>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></span>
<span class="line"><span>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></span>
<span class="line"><span>SOFTWARE.</span></span>
<span class="line"><span>--&gt;</span></span>
<span class="line"><span>&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>&lt;head style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot; /&gt;</span></span>
<span class="line"><span>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot; /&gt;</span></span>
<span class="line"><span>&lt;title style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;{{ template &quot;__subject&quot; . }}&lt;/title&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>&lt;/head&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>&lt;body itemscope=&quot;&quot; itemtype=&quot;http://schema.org/EmailMessage&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; height: 100%; line-height: 1.6em; width: 100% !important; background-color: #f6f6f6; margin: 0; padding: 0;&quot; bgcolor=&quot;#f6f6f6&quot;&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>&lt;table style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;&quot; bgcolor=&quot;#f6f6f6&quot;&gt;</span></span>
<span class="line"><span>  &lt;div style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 0;&quot;&gt;</span></span>
<span class="line"><span>    &lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;&quot; bgcolor=&quot;#fff&quot;&gt;</span></span>
<span class="line"><span>      &lt;tr style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>        &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #E6522C; margin: 0; padding: 20px;&quot; align=&quot;center&quot; bgcolor=&quot;#E6522C&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>          发生 {{ .Alerts | len }}  个 {{ range .GroupLabels.SortedPairs }}</span></span>
<span class="line"><span>                {{ .Value }}</span></span>
<span class="line"><span>          {{ end }} 告警 ！！请尽快处理</span></span>
<span class="line"><span>        &lt;/td&gt;</span></span>
<span class="line"><span>      &lt;/tr&gt;</span></span>
<span class="line"><span>      &lt;tr style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>        &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 10px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>          &lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>            &lt;tr border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>            &lt;/tr&gt;</span></span>
<span class="line"><span>          &lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>            &lt;tr style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;告警名称&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;告警级别&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;实例&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;所属系统&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;厂商&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;触发时间&lt;/strong&gt;</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td width=&quot;50px&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: middle; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot; &gt;</span></span>
<span class="line"><span>                &lt;strong&gt;说明&lt;/strong&gt; </span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>            &lt;/tr&gt;</span></span>
<span class="line"><span>            {{ range .Alerts.Firing }}</span></span>
<span class="line"><span>            &lt;tr style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>               &lt;!-- {{ .Labels.alertname }} --&gt;</span></span>
<span class="line"><span>                {{ .Labels.severity }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{ .Status }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{ .Labels.instance }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{ .Labels.ownningsystem }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{ .Labels.company }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{  .StartsAt.Format &quot;2006-01-02 15:04:05&quot;  }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>              &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 3 3 3px;&quot; valign=&quot;top&quot;&gt;</span></span>
<span class="line"><span>                {{ .Annotations.description  }}</span></span>
<span class="line"><span>              &lt;/td&gt;</span></span>
<span class="line"><span>            &lt;/tr&gt;</span></span>
<span class="line"><span>            {{ end }}</span></span>
<span class="line"><span>          &lt;/table&gt;</span></span>
<span class="line"><span>        &lt;/td&gt;</span></span>
<span class="line"><span>      &lt;/tr&gt;</span></span>
<span class="line"><span>      &lt;/table&gt;</span></span>
<span class="line"><span>    &lt;/table&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    &lt;div style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;&quot;&gt;</span></span>
<span class="line"><span>      &lt;table width=&quot;100%&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>        &lt;tr style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;&quot;&gt;</span></span>
<span class="line"><span>          &lt;td style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; text-align: center; color: #999; margin: 0; padding: 0 0 20px;&quot; align=&quot;center&quot; valign=&quot;top&quot;&gt;&lt;a href=&quot;{{ .ExternalURL }}&quot; style=&quot;font-family: &#x27;Helvetica Neue&#x27;, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;&quot;&gt;Sent by {{ template &quot;__alertmanager&quot; . }}&lt;/a&gt;&lt;/td&gt;</span></span>
<span class="line"><span>        &lt;/tr&gt;</span></span>
<span class="line"><span>      &lt;/table&gt;</span></span>
<span class="line"><span>    &lt;/div&gt;&lt;/div&gt;</span></span>
<span class="line"><span>&lt;/table&gt;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>&lt;/body&gt;</span></span>
<span class="line"><span>&lt;/html&gt;</span></span>
<span class="line"><span>{{ end }}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="setupsh-7"><a href="#setupsh-7" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;Asia/Shanghai&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">9093</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> alertmanager</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> alertmanager</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> alertmanager</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/templates/:/etc/alertmanager/templates/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">prom/alertmanager:v0.26.0</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="配置增加-5"><a href="#配置增加-5" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置增加</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">alerting</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  alertmanagers</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">static_configs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">targets</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&#x27;10.0.18.2:9093&#x27;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[saltstack]]></title>
            <link>https://www.tteam.icu/blog/ops/saltstack</link>
            <guid isPermaLink="false">/blog/ops/saltstack</guid>
            <pubDate>Fri, 26 Jan 2024 09:56:12 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="安装saltstack"><a href="#安装saltstack" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装saltstack<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p><a href="https://docs.saltstack.cn/ref/states/all/index.html" target="_blank" rel="noopener noreferrer" class="rp-link">旧文档</a></p>
<p><a href="https://docs.saltproject.io/en/latest/topics/tutorials/gitfs.html#installing-dependencies" target="_blank" rel="noopener noreferrer" class="rp-link">新文档</a></p>


























<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>服务器</th><th>主机名</th><th>ip</th><th>身份</th><th>软件包</th></tr></thead><tbody><tr><td>centos7</td><td>xue1</td><td>192.168.70.75</td><td>master</td><td>salt-master</td></tr><tr><td>centos7</td><td>xue2</td><td>192.168.70.76</td><td>minion</td><td>salt-minion</td></tr></tbody></table></div>
<h1 class="rp-toc-include" id="命令"><a href="#命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>命令<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h2 class="rp-toc-include" id="安装"><a href="#安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 安装saltstack存储库和密钥</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rpm</span><span style="color:var(--shiki-token-string)"> --import</span><span style="color:var(--shiki-token-string)"> https://repo.saltproject.io/py3/redhat/7/x86_64/3003/SALTSTACK-GPG-KEY.pub</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://repo.saltproject.io/py3/redhat/7/x86_64/3003.repo</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/yum.repos.d/salt.repo</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 清缓存</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> clean</span><span style="color:var(--shiki-token-string)"> all</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> makecache</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> salt-master</span><span style="color:var(--shiki-token-comment)"> # 主控端安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> salt-ssh</span><span style="color:var(--shiki-token-comment)"> # salt-ssh安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> salt-minion</span><span style="color:var(--shiki-token-comment)"> # 受控端安装</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 受控端需要修改(注意:后面需要有一个空格)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> /etc/salt/minion</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 受控端设置</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 主控端ip</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">master:</span><span style="color:var(--shiki-token-constant)"> 192.168.70.75</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 受控端的名字(自定义)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">id:</span><span style="color:var(--shiki-token-string)"> xue2</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 主控端设置（取消注释，默认salt脚本路径和复制文件的路径）</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">file_roots:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  base:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> /srv/salt/</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 在主控端可以看有多少请求(主控端需要开启4505和4506端口)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt-key</span><span style="color:var(--shiki-token-string)"> -L</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 接受需要的受控端</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt-key</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string-expression)"> &quot;xue*&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 接受以后可以测试有没有成功</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt</span><span style="color:var(--shiki-token-string-expression)"> &quot;xue*&quot;</span><span style="color:var(--shiki-token-string)"> test.ping</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">//salt-key常用选项</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -L</span><span style="color:var(--shiki-token-string)">      //列出所有公钥信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -a</span><span style="color:var(--shiki-token-string)"> minion</span><span style="color:var(--shiki-token-string)">    //接受指定minion等待认证的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -A</span><span style="color:var(--shiki-token-string)">      //接受所有minion等待认证的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -r</span><span style="color:var(--shiki-token-string)"> minion</span><span style="color:var(--shiki-token-string)">    //拒绝指定minion等待认证的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -R</span><span style="color:var(--shiki-token-string)">      //拒绝所有minion等待认证的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -f</span><span style="color:var(--shiki-token-string)"> minion</span><span style="color:var(--shiki-token-string)">   //显示指定key的指纹信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -F</span><span style="color:var(--shiki-token-string)">      //显示所有key的指纹信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -d</span><span style="color:var(--shiki-token-string)"> minion</span><span style="color:var(--shiki-token-string)">   //删除指定minion的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -D</span><span style="color:var(--shiki-token-string)">      //删除所有minion的key</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -y</span><span style="color:var(--shiki-token-string)">      //自动回答yes</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">//语法：salt</span><span style="color:var(--shiki-foreground)"> [options] </span><span style="color:var(--shiki-token-string-expression)">&#x27;&lt;target&gt;&#x27;</span><span style="color:var(--shiki-token-keyword)"> &lt;function</span><span style="color:var(--shiki-token-function)">&gt;</span><span style="color:var(--shiki-foreground)"> [arguments]</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">//常用的options</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    --version</span><span style="color:var(--shiki-token-string)">       //查看saltstack的版本号</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    --versions-report</span><span style="color:var(--shiki-token-string)">   //查看saltstack以及依赖包的版本号</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -h</span><span style="color:var(--shiki-token-string)">      //查看帮助信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -c</span><span style="color:var(--shiki-token-string)"> CONFIG_DIR</span><span style="color:var(--shiki-token-string)">   //指定配置文件目录</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">默认为/etc/salt/</span><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -t</span><span style="color:var(--shiki-token-string)"> TIMEOUT</span><span style="color:var(--shiki-token-string)">      //指定超时时间</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">默认是5s</span><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    --async</span><span style="color:var(--shiki-token-string)">     //异步执行</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -v</span><span style="color:var(--shiki-token-string)">      //verbose模式，详细显示执行过程</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    --username</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">USERNAME</span><span style="color:var(--shiki-token-function)">     //指定外部认证用户名</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    --password</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">PASSWORD</span><span style="color:var(--shiki-token-function)">     //指定外部认证密码</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    --log-file</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">LOG_FILE</span><span style="color:var(--shiki-token-function)">     //指定日志记录文件</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    </span></span>
<span class="line"><span style="color:var(--shiki-token-function)">//常用target参数</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -E</span><span style="color:var(--shiki-token-string)">      //正则匹配</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -L</span><span style="color:var(--shiki-token-string)">      //列表匹配</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -S</span><span style="color:var(--shiki-token-string)">      //CIDR匹配网段</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -G</span><span style="color:var(--shiki-token-string)">      //grains匹配</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    --grain-pcre</span><span style="color:var(--shiki-token-string)">    //grains加正则匹配</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -N</span><span style="color:var(--shiki-token-string)">      //组匹配</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -R</span><span style="color:var(--shiki-token-string)">      //范围匹配</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -C</span><span style="color:var(--shiki-token-string)">      //综合匹配（指定多个匹配）</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -I</span><span style="color:var(--shiki-token-string)">      //pillar值匹配</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="编写"><a href="#编写" class="rp-header-anchor rp-link" aria-hidden="true">#</a>编写</h2>
<p>具体格式可以参考<a href="https://docs.saltstack.cn/ref/states/all/index.html" target="_blank" rel="noopener noreferrer" class="rp-link">官方文档</a></p>
<p>vi /data/salt/test.sls 创建测试文件</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#创建文件夹（注意file.directory前面两个空格，-前面4个，-后面1个，True前面1个,最后三行可以指定用户、组、权限）</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">/data/logs/:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  file.directory:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> makedirs:</span><span style="color:var(--shiki-token-string)"> True</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> user:</span><span style="color:var(--shiki-token-string)"> fred</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> group:</span><span style="color:var(--shiki-token-string)"> users</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> mode:</span><span style="color:var(--shiki-token-constant)"> 755</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#删除/data这个目录和下面的所有文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">del:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  file.absent:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> name:</span><span style="color:var(--shiki-token-string)"> /data/</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#上传单文件到受控端(主控端写相对路径，上传到受控端的绝对路径)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">upload:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  file.managed:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> name:</span><span style="color:var(--shiki-token-string)"> /data/app/1.txt</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> source:</span><span style="color:var(--shiki-token-string)"> salt://1.txt</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> mode:</span><span style="color:var(--shiki-token-constant)"> 644</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#上传目录到受控端(主控端写相对路径，上传到受控端的绝对路径，include_empty空目录也要上传)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#exclude_pat来排除文件，在E@后面跟正则表达式</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#watch可以监视某个有没有执行成功</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">upload_res:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  file.recurse:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> name:</span><span style="color:var(--shiki-token-string)"> /data/data/</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> source:</span><span style="color:var(--shiki-token-string)"> salt://data/</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> dir_mode:</span><span style="color:var(--shiki-token-constant)"> 755</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> file_mode:</span><span style="color:var(--shiki-token-constant)"> 644</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> exclude_pat:</span><span style="color:var(--shiki-token-string)"> E@</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">.svn</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">setup-v3.sh</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">setup.sh</span><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> include_empty:</span><span style="color:var(--shiki-token-string)"> True</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> watch:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> file:</span><span style="color:var(--shiki-token-string)"> upload</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h1 class="rp-toc-include" id="salt使用git为服务端"><a href="#salt使用git为服务端" class="rp-header-anchor rp-link" aria-hidden="true">#</a>salt使用git为服务端<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<h3 class="rp-toc-include" id="使用最新的tls版目前为30065"><a href="#使用最新的tls版目前为30065" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用最新的tls版(目前为3006.5)</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 新版本的salt自带python</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rpm</span><span style="color:var(--shiki-token-string)"> --import</span><span style="color:var(--shiki-token-string)"> https://repo.saltproject.io/salt/py3/redhat/7/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://repo.saltproject.io/salt/py3/redhat/7/x86_64/3006.repo</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/yum.repos.d/salt.repo</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt</span><span style="color:var(--shiki-token-string)"> -V</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">Salt Version</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          Salt</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 3006.5</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Python Version</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        Python</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 3.10.13 (main, Nov 15 2023, 04:34:27) [GCC 11.2.0]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Dependency Versions</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          cffi</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1.16.0</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      cherrypy</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unknown</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      dateutil</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 2.8.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">     docker-py</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">         gitdb</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">     gitpython</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        Jinja2</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 3.1.2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       libgit2</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1.7.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  looseversion</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1.0.2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      M2Crypto</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          Mako</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       msgpack</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1.0.2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  msgpack-pure</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  mysql-python</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">     packaging</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 22.0</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">     pycparser</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 2.21</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      pycrypto</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  pycryptodome</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 3.9.8</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        pygit2</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1.13.3</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  python-gnupg</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 0.4.8</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        PyYAML</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 6.0.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">         PyZMQ</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 23.2.0</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        relenv</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 0.14.2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">         smmap</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Not Installed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       timelib</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 0.2.4</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       Tornado</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 4.5.3</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">           ZMQ</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 4.3.4</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">System Versions</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          dist</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> centos 7.9.2009 Core</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        locale</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> utf-8</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       machine</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> x86_64</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       release</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 3.10.0-1160.71.1.el7.x86_64</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        system</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Linux</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">       version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> CentOS Linux 7.9.2009 Core</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="安装pygit2"><a href="#安装pygit2" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装pygit2</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> python-pygit2</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt-pip</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> pygit2</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="需要在master中配置"><a href="#需要在master中配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>需要在master中配置</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">fileserver_backend</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-comment)">												# 当前配置为git和本地都用，两边有文件时优先使用git</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-string-expression)">gitfs</span><span style="color:var(--shiki-token-comment)">														# 需要在这里写出来才能用</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-string-expression)">roots</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_provider</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> pygit2</span><span style="color:var(--shiki-token-comment)">                                          # 配置salt的文件服务器为pygit2</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_ssl_verify</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> False</span><span style="color:var(--shiki-token-comment)">											# 是否校验ssl(主配置)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_update_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 120</span><span style="color:var(--shiki-token-comment)">										# 间隔多少s去拉git(主配置)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_user</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> test</span><span style="color:var(--shiki-token-comment)">												# git的账号(主配置)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_password</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> test</span><span style="color:var(--shiki-token-comment)">											# git的密码(主配置)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_insecure_auth</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> True</span><span style="color:var(--shiki-token-comment)">										# 默认False情况下，Salt将不会通过HTTP（非HTTPS）远程进行身份验证(主配置)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">gitfs_remotes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  - </span><span style="color:var(--shiki-token-keyword)">http://xx.xx.xx.xx:8080/root/saltstack.git</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-comment)">					# git地址</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">user</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> root</span><span style="color:var(--shiki-token-comment)">												# git的账号(子配置)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">password</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> password</span><span style="color:var(--shiki-token-comment)">										# git的密码(子配置)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">ssl_verify</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> False</span><span style="color:var(--shiki-token-comment)">											# 是否校验ssl(子配置)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">update_interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 30</span><span style="color:var(--shiki-token-comment)">										# 间隔多少s去拉git(子配置)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">base</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> master</span><span style="color:var(--shiki-token-comment)">												# 分支(子配置)</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="配置git钩子gitlab为例"><a href="#配置git钩子gitlab为例" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置git钩子(gitlab为例)</h3>
<p>在<code>/data/salt/</code>新建<code>update_fileserver.sls</code>文件，可以按照上面的来填写目录和文件名</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">update_fileserver</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  runner.fileserver.update</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="在master中配置"><a href="#在master中配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在master中配置</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">reactor:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  -</span><span style="color:var(--shiki-token-string-expression)"> &#x27;salt/fileserver/gitfs/update&#x27;</span><span style="color:var(--shiki-token-string)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    -</span><span style="color:var(--shiki-token-string)"> /data/salt/update_fileserver.sls</span><span style="color:var(--shiki-token-comment)">							# 此配置可以按照上面的来填写目录和文件名</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="配置gitlab钩子"><a href="#配置gitlab钩子" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置gitlab钩子</h4>
<p>15.11 及更高的版本可能在hooks目录</p>
<p>15.10 及更早的版本(当前公司为这个配置)</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 管理中心-&gt;项目-&gt;saltstack-&gt;找到Gitaly相对路径</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 在服务端中找到对应路径(容器内目录需要加上/var/opt/gitlab/git-data/repositories)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> custom_hooks</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> cd</span><span style="color:var(--shiki-token-string)"> custom_hooks</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> touch</span><span style="color:var(--shiki-token-string)"> post-receive</span><span style="color:var(--shiki-token-string)"> chmod</span><span style="color:var(--shiki-token-string)"> a+x</span><span style="color:var(--shiki-token-string)"> post-receive</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> post-receive</span><span style="color:var(--shiki-token-comment)">			# 注：下面的脚本最开始的那行最好在容器内执行which python3来填写</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-python"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="python"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/opt/gitlab/embedded/bin/python3</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">import</span><span style="color:var(--shiki-foreground)"> logging</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">import</span><span style="color:var(--shiki-foreground)"> time</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">import</span><span style="color:var(--shiki-foreground)"> paramiko</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">class</span><span style="color:var(--shiki-token-function)"> SSHClient</span><span style="color:var(--shiki-foreground)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    &quot;&quot;&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    :param host:     string      ip</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    :param password: string     密码</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    :param port: string     端口</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    :param username: string     用户名</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    &quot;&quot;&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> __init__</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> host</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> str</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-parameter)">                 password</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> str</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> None</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> port</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> int</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> username</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> str</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-token-string-expression)"> &#x27;root&#x27;</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">host </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> host</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">port </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> port</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">username </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> username</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">password </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> password</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> paramiko</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">SSHClient</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">set_missing_host_key_policy</span><span style="color:var(--shiki-token-punctuation)">(paramiko.</span><span style="color:var(--shiki-token-function)">AutoAddPolicy</span><span style="color:var(--shiki-token-punctuation)">())</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">connect</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> connect</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">connect</span><span style="color:var(--shiki-token-punctuation)">(self.host, port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-punctuation)">self.port, username</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-punctuation)">self.username, password</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-punctuation)">self.password)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> execute_command</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> command</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;即将执行命令: </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">command</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        stdin</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> stdout</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> stderr </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">exec_command</span><span style="color:var(--shiki-token-punctuation)">(command)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        output </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> stdout</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">read</span><span style="color:var(--shiki-token-punctuation)">().</span><span style="color:var(--shiki-token-function)">decode</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;utf-8&#x27;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        error </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> stderr</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">read</span><span style="color:var(--shiki-token-punctuation)">().</span><span style="color:var(--shiki-token-function)">decode</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;utf-8&#x27;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        exit_code </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> stdout</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">channel</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">recv_exit_status</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;执行结果:</span><span style="color:var(--shiki-token-punctuation)">\n</span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">output</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        if</span><span style="color:var(--shiki-foreground)"> error</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">error</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;执行错误:</span><span style="color:var(--shiki-token-punctuation)">\n</span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">error</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;退出代码: </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">exit_code</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        return</span><span style="color:var(--shiki-token-punctuation)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">            &#x27;stdout&#x27;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> output</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">            &#x27;stderr&#x27;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> error</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">            &#x27;exit_code&#x27;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> exit_code</span></span>
<span class="line"><span style="color:var(--shiki-token-punctuation)">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> execute_commands</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> commands</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        results </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> []</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        for</span><span style="color:var(--shiki-foreground)"> command </span><span style="color:var(--shiki-token-keyword)">in</span><span style="color:var(--shiki-foreground)"> commands</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            result </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">execute_command</span><span style="color:var(--shiki-token-punctuation)">(command)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            results</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">append</span><span style="color:var(--shiki-token-punctuation)">(result)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        return</span><span style="color:var(--shiki-foreground)"> results</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> upload_and_execute_script</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> local_path</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> remote_path</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------开始脚本文件----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">open_sftp</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">put</span><span style="color:var(--shiki-token-punctuation)">(local_path, remote_path)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------上传脚本结束----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # 确保脚本是可执行的</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">execute_command</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&#x27;chmod +x </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&#x27;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">execute_command</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;sed -i &#x27;s/</span><span style="color:var(--shiki-token-punctuation)">\r</span><span style="color:var(--shiki-token-string-expression)">//&#x27; </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # 执行脚本</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        command_result </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">execute_command</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&#x27;/bin/bash </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">&#x27;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        return</span><span style="color:var(--shiki-foreground)"> command_result</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> upload_file</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> local_path</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> remote_path</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------开始上传文件----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">open_sftp</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">put</span><span style="color:var(--shiki-token-punctuation)">(local_path, remote_path)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------上传文件结束----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> download_file</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> remote_path</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> local_path</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------开始下载文件----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">open_sftp</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">get</span><span style="color:var(--shiki-token-punctuation)">(remote_path, local_path)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-string-expression)">&quot;----------------下载文件结束----------------&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> wait_for_file</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> remote_path</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-parameter)"> timeout</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)">300</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        start_time </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> time</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">time</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        i </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 0</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        while</span><span style="color:var(--shiki-foreground)"> time</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">time</span><span style="color:var(--shiki-token-punctuation)">()</span><span style="color:var(--shiki-token-keyword)"> -</span><span style="color:var(--shiki-foreground)"> start_time </span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-foreground)"> timeout</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            sftp </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">open_sftp</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            i </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> i </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-token-constant)"> 1</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">            try</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">stat</span><span style="color:var(--shiki-token-punctuation)">(remote_path)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;当前为第</span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">i</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">次尝试，文件 </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)"> 存在，可以执行下一步操作。&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">                return</span><span style="color:var(--shiki-token-constant)"> True</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">            except</span><span style="color:var(--shiki-token-constant)"> FileNotFoundError</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">info</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;当前为第</span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">i</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)">次尝试，文件 </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)"> 不存在，等待...&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                sftp</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">                time</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">sleep</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-constant)">5</span><span style="color:var(--shiki-token-punctuation)">)</span><span style="color:var(--shiki-token-comment)">  # 休眠5秒，可以根据需要调整休眠时间</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">        logging</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">error</span><span style="color:var(--shiki-token-punctuation)">(</span><span style="color:var(--shiki-token-keyword)">f</span><span style="color:var(--shiki-token-string-expression)">&quot;超时：等待文件 </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">remote_path</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)"> 超过 </span><span style="color:var(--shiki-token-constant)">{</span><span style="color:var(--shiki-token-punctuation)">timeout</span><span style="color:var(--shiki-token-constant)">}</span><span style="color:var(--shiki-token-string-expression)"> 秒。&quot;</span><span style="color:var(--shiki-token-punctuation)">)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        return</span><span style="color:var(--shiki-token-constant)"> False</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    def</span><span style="color:var(--shiki-token-function)"> close</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-parameter)">self</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        self</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">client</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">if</span><span style="color:var(--shiki-token-constant)"> __name__</span><span style="color:var(--shiki-token-keyword)"> ==</span><span style="color:var(--shiki-token-string-expression)"> &quot;__main__&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    host </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &#x27;172.168.2.255&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    password </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &#x27;password&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    ssh </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-function)"> SSHClient</span><span style="color:var(--shiki-token-punctuation)">(host, password)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    command </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &#x27;salt-call event.fire_master update salt/fileserver/gitfs/update&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    result_single </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> ssh</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">execute_command</span><span style="color:var(--shiki-token-punctuation)">(command)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    ssh</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">close</span><span style="color:var(--shiki-token-punctuation)">()</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h1 class="rp-toc-include" id="salt-ssh"><a href="#salt-ssh" class="rp-header-anchor rp-link" aria-hidden="true">#</a>salt-ssh<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># target的信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    host:</span><span style="color:var(--shiki-token-comment)">        # 远端主机的ip地址或者dns域名</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    port:</span><span style="color:var(--shiki-token-comment)">        # ssh端口</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    user:</span><span style="color:var(--shiki-token-comment)">        # 登录的用户</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    sudo:</span><span style="color:var(--shiki-token-comment)">        # 可以通过sudo</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    priv:</span><span style="color:var(--shiki-token-comment)">        # ssh秘钥的文件路径</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    tty:</span><span style="color:var(--shiki-token-comment)">         # 如果设置了sudo，设置这个参数为true</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    timeout:</span><span style="color:var(--shiki-token-comment)">     # 当建立链接时等待响应时间的秒数</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 可选的部分</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    passwd:</span><span style="color:var(--shiki-token-comment)">      # 用户密码,如果不使用此选项，则默认使用秘钥方式</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    minion_opts:</span><span style="color:var(--shiki-token-comment)"> # minion的位置路径</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    thin_dir:</span><span style="color:var(--shiki-token-comment)">    # target系统的存储目录，默认是/tmp/salt-&lt;hash&gt;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    cmd_umask:</span><span style="color:var(--shiki-token-comment)">   # 使用salt-call命令的umask值</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    </span></span>
<span class="line"><span style="color:var(--shiki-token-function)">hdy-xg-server-001:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  host:</span><span style="color:var(--shiki-token-constant)"> 154</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  port:</span><span style="color:var(--shiki-token-constant)"> 22</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  user:</span><span style="color:var(--shiki-token-string)"> root</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  sudo:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  passwd:</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  tty:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  timeout:</span><span style="color:var(--shiki-token-constant)"> 60</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 可能需要py3</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">salt-ssh</span><span style="color:var(--shiki-token-string)"> -r</span><span style="color:var(--shiki-token-string-expression)"> &#x27;hdy-xg-server-001&#x27;</span><span style="color:var(--shiki-token-string-expression)"> &#x27;yum -y install python3&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> ~/.ssh/config</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">StrictHostKeyChecking</span><span style="color:var(--shiki-token-string)"> no</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[日志系统]]></title>
            <link>https://www.tteam.icu/blog/ops/日志系统</link>
            <guid isPermaLink="false">/blog/ops/日志系统</guid>
            <pubDate>Fri, 26 Jan 2024 09:55:34 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="日志系统"><a href="#日志系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>日志系统<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>架构图</p>
<p><img src="https://img.tteam.icu/i/2024/11/10/10fmkdi-3.webp" alt=""/></p>
<h2 class="rp-toc-include" id="clickhouse"><a href="#clickhouse" class="rp-header-anchor rp-link" aria-hidden="true">#</a>clickhouse</h2>
<h3 class="rp-toc-include" id="setupsh"><a href="#setupsh" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;Asia/Shanghai&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> clickhouse</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> clickhouse</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> clickhouse</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--network </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-m </span><span style="color:var(--shiki-token-string)">4g</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--add-host </span><span style="color:var(--shiki-token-string)">localhost:10.0.18.2</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">TZ=</span><span style="color:var(--shiki-token-string-expression)">&#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--ulimit </span><span style="color:var(--shiki-token-string)">nofile=262144:262144</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data:/var/lib/clickhouse</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config:/etc/clickhouse-server</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/initdb:/docker-entrypoint-initdb.d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/log:/var/log/clickhouse-server</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">clickhouse/clickhouse-server:23.12-alpine</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># --volume=$(pwd)/scripts/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh \</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># docker logs -f clickhouse-server</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 证书需要自己生成</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># openssl req -subj &quot;/CN=localhost&quot; -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout $(pwd)/config/server.key -out $(pwd)/config/server.crt</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="设置密码"><a href="#设置密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>设置密码</h3>
<p>在<code>users.xml</code>中的<code>password</code>中输入明文</p>
<h3 class="rp-toc-include" id="nginx建表"><a href="#nginx建表" class="rp-header-anchor rp-link" aria-hidden="true">#</a>nginx建表</h3>
<div class="rp-codeblock language-sql"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="sql"><code><span class="line"><span style="color:var(--shiki-token-keyword)">SET</span><span style="color:var(--shiki-foreground)"> allow_experimental_object_type</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)">1</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">CREATE</span><span style="color:var(--shiki-token-keyword)"> TABLE</span><span style="color:var(--shiki-token-function)"> log</span><span style="color:var(--shiki-foreground)">.ngxlog</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">(</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `create_time`</span><span style="color:var(--shiki-token-keyword)"> DateTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-foreground)">),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `kafka_offset`</span><span style="color:var(--shiki-foreground)"> UInt64,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `query_params_imsi`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `query_params_imei`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `query_params_hsman`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `query_params_hstype`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `query_params_exttype`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_time_local`</span><span style="color:var(--shiki-foreground)"> String,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_upstream_addr`</span><span style="color:var(--shiki-foreground)"> String,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_uri`</span><span style="color:var(--shiki-foreground)"> String,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_status`</span><span style="color:var(--shiki-foreground)"> UInt16,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_host`</span><span style="color:var(--shiki-foreground)"> String,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `mcc`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `hostname`</span><span style="color:var(--shiki-foreground)"> String,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `message`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_query_string`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_upstream_response_time`</span><span style="color:var(--shiki-foreground)"> Float32,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `nginx_request_time`</span><span style="color:var(--shiki-foreground)"> Float32</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">ENGINE </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> MergeTree</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">PARTITION</span><span style="color:var(--shiki-token-keyword)"> BY</span><span style="color:var(--shiki-foreground)"> toYYYYMMDD(create_time)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">ORDER BY</span><span style="color:var(--shiki-foreground)"> create_time</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">TTL create_time </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-foreground)"> toIntervalDay(</span><span style="color:var(--shiki-token-constant)">180</span><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">SETTINGS index_granularity </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 1024</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="服务建表"><a href="#服务建表" class="rp-header-anchor rp-link" aria-hidden="true">#</a>服务建表</h3>
<div class="rp-codeblock language-sql"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="sql"><code><span class="line"><span style="color:var(--shiki-token-keyword)">CREATE</span><span style="color:var(--shiki-token-keyword)"> TABLE</span><span style="color:var(--shiki-token-function)"> log</span><span style="color:var(--shiki-foreground)">.applog_test</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">(</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `app_name`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `app_type`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `hostname`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `logver`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `create_time`</span><span style="color:var(--shiki-token-keyword)"> DateTime</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-string-expression)">&#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-foreground)">),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `container_name`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `kafka_offset`</span><span style="color:var(--shiki-foreground)"> UInt64,</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `log_level`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `message`</span><span style="color:var(--shiki-foreground)"> Nullable(String),</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    `object`</span><span style="color:var(--shiki-foreground)"> Nullable(String)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">ENGINE </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> MergeTree</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">PARTITION</span><span style="color:var(--shiki-token-keyword)"> BY</span><span style="color:var(--shiki-foreground)"> toYYYYMMDD(create_time)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">ORDER BY</span><span style="color:var(--shiki-foreground)"> create_time</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">TTL create_time </span><span style="color:var(--shiki-token-keyword)">+</span><span style="color:var(--shiki-foreground)"> toIntervalDay(</span><span style="color:var(--shiki-token-constant)">7</span><span style="color:var(--shiki-foreground)">)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">SETTINGS index_granularity </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 1024</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="clickvisual"><a href="#clickvisual" class="rp-header-anchor rp-link" aria-hidden="true">#</a>clickvisual</h2>
<h3 class="rp-toc-include" id="setupsh-1"><a href="#setupsh-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">clickvisual_version</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">1.0.0-rc3</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> clickvisual</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> clickvisual</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --net</span><span style="color:var(--shiki-token-string)"> host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">clickvisual</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">EGO_CONFIG_PATH=/clickvisual/config/docker.toml</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">EGO_LOG_WRITER=stderr</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config:/clickvisual/config/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">clickvisual/clickvisual:${</span><span style="color:var(--shiki-token-function)">clickvisual_version}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># -p 19001:19001 \</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># -p 19006:19006 \</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="连接数据库"><a href="#连接数据库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>连接数据库</h3>
<p>在<code>docker.toml</code>中修改mysql的配置</p>
<h2 class="rp-toc-include" id="kafka"><a href="#kafka" class="rp-header-anchor rp-link" aria-hidden="true">#</a>kafka</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">9092</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">container_name</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;kafka-${port}&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-foreground)"> ${container_name}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-foreground)"> ${container_name}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--hostname $(</span><span style="color:var(--shiki-token-function)">hostname</span><span style="color:var(--shiki-foreground)">) \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--add-host $(</span><span style="color:var(--shiki-token-function)">hostname</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">:10.0.18.2</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name ${container_name} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config-</span><span style="color:var(--shiki-foreground)">${port}</span><span style="color:var(--shiki-token-string)">/run.sh:/run.sh</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data-standalone:/data</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">NODE_ID=</span><span style="color:var(--shiki-token-string-expression)">&quot;1001&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">LISTENERS=</span><span style="color:var(--shiki-token-string-expression)">&quot;PRIVATE://:9092,CONTROLLER://:9093,PUBLIC://:9094&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">ADVERTISED_LISTENERS=</span><span style="color:var(--shiki-token-string-expression)">&quot;PRIVATE://10.0.18.2:9092&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">registry.cn-hangzhou.aliyuncs.com/buyfakett/kafka-standalone:2.13-2.8.0</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 配置通过 run.sh 重写</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="kafka-map"><a href="#kafka-map" class="rp-header-anchor rp-link" aria-hidden="true">#</a>kafka-map</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    -p</span><span style="color:var(--shiki-token-string)"> 8087:8080</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    -v</span><span style="color:var(--shiki-token-string)"> ./data:/usr/local/kafka-map/data</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    -e</span><span style="color:var(--shiki-token-string)"> DEFAULT_USERNAME=buyfakett</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    -e</span><span style="color:var(--shiki-token-string)"> DEFAULT_PASSWORD=</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    --name</span><span style="color:var(--shiki-token-string)"> kafka-map</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    --restart</span><span style="color:var(--shiki-token-string)"> always</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    dushixiang/kafka-map:v1.3.3</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="redpandadata-console"><a href="#redpandadata-console" class="rp-header-anchor rp-link" aria-hidden="true">#</a>redpandadata-console</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">##################</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 用于kafka查看</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 部分功能收费如登录功能</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># https://docs.redpanda.com/current/get-started/</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">####################################################</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">port</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">9096</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> -f</span><span style="color:var(--shiki-token-string)"> redpandadata-console-</span><span style="color:var(--shiki-foreground)">${port}</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> --network=host</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name </span><span style="color:var(--shiki-token-string)">redpandadata-console-</span><span style="color:var(--shiki-foreground)">${port} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">KAFKA_BROKERS=10.0.18.2:9092</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">SERVER_LISTENPORT=</span><span style="color:var(--shiki-foreground)">${port} \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">docker.redpanda.com/redpandadata/console:v2.3.3</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="filebeat"><a href="#filebeat" class="rp-header-anchor rp-link" aria-hidden="true">#</a>filebeat</h2>
<h3 class="rp-toc-include" id="setupsh-2"><a href="#setupsh-2" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &#x27;Asia/Shanghai&#x27;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/timezone</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> filebeat</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> filebeat</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-m </span><span style="color:var(--shiki-token-string)">1024M</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name=filebeat \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--hostname=$(hostname) \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--user</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">root</span><span style="color:var(--shiki-token-function)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--volume=</span><span style="color:var(--shiki-token-string-expression)">&quot;$(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-token-string-expression)">)/config/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro&quot;</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/data/logs/:/data/logs/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">./filebeat/registry/:/usr/share/filebeat/data/registry/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">docker.elastic.co/beats/filebeat:7.0.0 </span><span style="color:var(--shiki-token-string)">filebeat</span><span style="color:var(--shiki-token-string)"> -e</span><span style="color:var(--shiki-token-string)"> -strict.perms=false</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#setup -E setup.kibana.host=kibana:5601 \</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#-E output.elasticsearch.hosts=[&quot;elasticsearch:9200&quot;]</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#docker exec -it filebeat /bin/bash</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#docker logs --tail=200 -f filebeat</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="configfilebeatdockeryml"><a href="#configfilebeatdockeryml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/filebeat.docker.yml</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">filebeat.config</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  modules</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    path</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ${path.config}/modules.d/*.yml</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    reload.enabled</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">processors</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">add_cloud_metadata</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> ~</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">filebeat.inputs</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">- </span><span style="color:var(--shiki-token-keyword)">type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> log</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  paths</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-string-expression)">/data/logs/nginx/json_*.log</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  fields</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;test_nginxlog&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      saltid</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> hdy-nmg-server-001</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      appType</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      env</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> test</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      object</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;未分类&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  fields_under_root</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">output.kafka</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">  # initial brokers for reading cluster metadata</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  hosts</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&quot;10.0.18.2:9092&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">  # message topic selection + partitioning</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  topics</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    - </span><span style="color:var(--shiki-token-keyword)">topic</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)">  &quot;test_nginxlog&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      when.contains</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        type</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;test_nginxlog&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  partition.round_robin</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    reachable_only</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  required_acks</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  compression</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> gzip</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  max_message_bytes</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1000000</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="vector"><a href="#vector" class="rp-header-anchor rp-link" aria-hidden="true">#</a>vector</h2>
<h3 class="rp-toc-include" id="setupsh-3"><a href="#setupsh-3" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> vector</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> vector</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> vector</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart=always \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--net </span><span style="color:var(--shiki-token-string)">host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/timezone:/etc/timezone:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/etc/localtime:/etc/localtime:ro</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/config/:/etc/vector/conf.d/</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v $(</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">/data/:/var/lib/vector</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">timberio/vector:0.33.0-alpine </span><span style="color:var(--shiki-token-string)">--config-dir</span><span style="color:var(--shiki-token-string)"> /etc/vector/conf.d/</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># reload</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># docker kill --signal=HUP vector</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="configvectortoml"><a href="#configvectortoml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/vector.toml</h3>
<div class="rp-codeblock language-toml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="toml"><code><span class="line"><span style="color:var(--shiki-foreground)">data_dir </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;/var/lib/vector&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">timezone </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;Asia/Shanghai&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[api]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">enabled</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)">true</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">address</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;0.0.0.0:8686&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="configngxlogtoml"><a href="#configngxlogtoml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/ngxlog.toml</h3>
<div class="rp-codeblock language-toml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="toml"><code><span class="line"><span style="color:var(--shiki-foreground)">[sources.ngxlog_source]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">type </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;kafka&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">bootstrap_servers </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;10.0.18.2:9092&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">group_id </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;vector-clickhouse-hdy-nmg-server-001&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">topics </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;test_nginxlog&quot;</span><span style="color:var(--shiki-foreground)"> ]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">offset_key </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;kafka_offset&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">decoding</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">codec </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;json&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">auto_offset_reset </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;earliest&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[transforms.ngxlog_trans]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">type</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;remap&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">inputs</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)">[</span><span style="color:var(--shiki-token-string-expression)">&quot;ngxlog_source&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">source</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&#x27;&#x27;&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx 日志并添加 &quot;nginx_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.message_parsed = object(parse_json(.message) ?? {}) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.message_parsed = map_keys(.message_parsed, recursive: false) -&gt; |key| { &quot;nginx_&quot; + key }</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., .message_parsed)</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx_query_string 字段并添加 &quot;query_params_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.query_params = parse_query_string(.nginx_query_string) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., map_keys(.query_params) -&gt; |key| { &quot;query_params_&quot; + key })</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx_request_body 字段并添加 &quot;nginx_request_body_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.nginx_request_body = object(parse_json(.nginx_request_body) ?? {}) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., map_keys(.nginx_request_body) -&gt; |key| { &quot;nginx_request_body_&quot; + key })</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx_resp_body 字段并添加 &quot;nginx_resp_body_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.nginx_resp_body = object(parse_json(.nginx_resp_body) ?? {}) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., map_keys(.nginx_resp_body) -&gt; |key| { &quot;nginx_resp_body_&quot; + key })</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx_resp_body 的 data 字段并添加 &quot;nginx_resp_body_data_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.nginx_resp_body_data = object(.nginx_resp_body.data) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., map_keys(.nginx_resp_body_data) -&gt; |key| { &quot;nginx_resp_body_data_&quot; + key })</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 解析 nginx_http_Authorization 字段并解密添加 &quot;auth_message_&quot; 前缀</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.auth_message_encode = split(.nginx_http_Authorization, &quot;.&quot;)[1] ?? &quot;&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.auth_message_encode_length = length(.auth_message_encode) ?? 0</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.auth_message_mod = mod(.auth_message_encode_length, 4)</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">if (.auth_message_mod == 1) {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        .auth_message_encode = .auth_message_encode + &quot;===&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">} else if (.auth_message_mod == 2) {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        .auth_message_encode = .auth_message_encode + &quot;==&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">} else if (.auth_message_mod == 3) {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        .auth_message_encode = .auth_message_encode + &quot;=&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">} else if (.auth_message_mod == 0) {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        .auth_message_encode = .auth_message_encode</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.auth_message_decode,.err.auth_message_decode = decode_base64(.auth_message_encode)</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.auth_message = object(parse_json(.auth_message_decode) ?? {}) ?? {}</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">. = merge(., map_keys(.auth_message) -&gt; |key| { &quot;auth_message_&quot; + key })</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 时间字段解析</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.create_time = parse_timestamp(.nginx_time_local,format: &quot;%d/%b/%Y:%H:%M:%S %z&quot;) ?? now()</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 主机名</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.hostname = .saltid</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># mcc 解析</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">.mcc = chunks(.query_params_imsi, 3)[0] ?? null</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">&#x27;&#x27;&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[sinks.ngxlog_clickhouse_sink]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">type </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;clickhouse&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">inputs </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-foreground)"> [ </span><span style="color:var(--shiki-token-string-expression)">&quot;ngxlog_trans&quot;</span><span style="color:var(--shiki-foreground)"> ]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 数据库配置</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">endpoint </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;http://10.0.18.2:8123&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">database </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;log&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">table </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;ngxlog_test&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">healthcheck</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">enabled </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">auth</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">strategy </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;basic&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">auth</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">user </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;default&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">auth</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">password </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;kOob87lU&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 批量入库</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">batch</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">max_bytes </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 10000000</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">batch</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">max_events </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 1000</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">batch</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">timeout_secs </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 3</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 缓存</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># buffer.type = &quot;disk&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># buffer.max_size = 1024000000</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 内存缓存</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">buffer</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">type </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;memory&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">buffer</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">max_events </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> 1000</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 缓存满了之后，block/drop_newest</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">buffer</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-foreground)">when_full </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;block&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 压缩格式</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">compression </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)"> &quot;gzip&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 默认false，时间格式自动解析 RFC3339/ISO 8601</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">date_time_best_effort </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 自动丢弃多余字段</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">skip_unknown_fields </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="configapplogtoml"><a href="#configapplogtoml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>config/applog.toml</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-foreground)">[</span><span style="color:var(--shiki-token-string)">sources.source_applog_test</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">type = &quot;kafka&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">bootstrap_servers = &quot;10.0.18.2:9092&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">group_id = &quot;vector-loki-hdy-nmg-server-001&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">topics = [ &quot;log&quot; ]</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">offset_key = &quot;kafka_offset&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">decoding.codec = &quot;json&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">auto_offset_reset = &quot;earliest&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[</span><span style="color:var(--shiki-token-string)">sinks.sink_loki_applog</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">type = &quot;loki&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">inputs = [ &quot;source_applog_test&quot; ]</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">endpoint = &quot;http://10.0.18.2:3100&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">healthcheck.enabled = true</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">encoding.codec = &quot;raw_message&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">batch.max_bytes = 1000000</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">batch.max_events = 100000</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">batch.timeout_secs = 1</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">buffer.type = &quot;memory&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">buffer.max_events = 1000</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">buffer.when_full = &quot;block&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">compression = &quot;gzip&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">labels.&quot;object&quot; = &quot;{{ .object }}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">labels.&quot;appName&quot; = &quot;{{ .appName }}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">labels.&quot;containerName&quot; = &quot;{{ .containerName }}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">labels.&quot;hostname&quot; = &quot;{{ .hostname }}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">labels.&quot;logver&quot; = &quot;{{ .logver }}&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="loki"><a href="#loki" class="rp-header-anchor rp-link" aria-hidden="true">#</a>loki</h2>
<h3 class="rp-toc-include" id="setupsh-4"><a href="#setupsh-4" class="rp-header-anchor rp-link" aria-hidden="true">#</a>setup.sh</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  loki</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> loki</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> grafana/loki:2.4.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/etc/timezone:/etc/timezone</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/etc/localtime:/etc/localtime</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./config/loki-config.yaml:/etc/config/loki-config.yaml</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./loki-data:/loki/data</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;3100:3100&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    command</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> -config.file=/etc/config/loki-config.yaml -target=all,table-manager</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    logging</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      driver</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;json-file&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      options</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        max-size</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;10m&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        max-file</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    deploy</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      resources</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        limits</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          cpus</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &#x27;3&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          memory</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 4G</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
            <category>ops</category>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】docker配合syslog]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】docker配合syslog</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】docker配合syslog</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:40 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="docker配合syslog"><a href="#docker配合syslog" class="rp-header-anchor rp-link" aria-hidden="true">#</a>docker配合syslog<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>可以访问我的码云,初始化服务器脚本，里面集成了一键配置<a href="https://gitee.com/buyfakett/centos7_initialization" target="_blank" rel="noopener noreferrer" class="rp-link">https://gitee.com/buyfakett/centos7_initialization</a></p>
<p>需要安装docker-ce才能用，用yum安装的不能安装！！！</p>
<h2 class="rp-toc-include" id="配置syslog"><a href="#配置syslog" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置syslog</h2>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>vi /etc/rsyslog.conf</span></span>
<span class="line"><span></span></span>
<span class="line"><span>#把tcp两行注释去掉</span></span>
<span class="line"><span>$ModLoad imtcp</span></span>
<span class="line"><span>$InputTCPServerRun 514</span></span>
<span class="line"><span></span></span>
<span class="line"><span>systemctl restart rsyslog</span></span>
<span class="line"><span>systemctl status rsyslog</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="给docker配置rsyslog"><a href="#给docker配置rsyslog" class="rp-header-anchor rp-link" aria-hidden="true">#</a>给docker配置rsyslog</h2>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>cat /etc/docker/daemon.json</span></span>
<span class="line"><span>{</span></span>
<span class="line"><span>  &quot;registry-mirrors&quot;: [</span></span>
<span class="line"><span>    &quot;https://pee6w651.mirror.aliyuncs.com&quot;</span></span>
<span class="line"><span>  ],</span></span>
<span class="line"><span>  &quot;data-root&quot;: &quot;/data/data-docker&quot;,</span></span>
<span class="line"><span>  &quot;log-driver&quot;: &quot;syslog&quot;,</span></span>
<span class="line"><span>  &quot;log-opts&quot;: {</span></span>
<span class="line"><span>    &quot;syslog-address&quot;: &quot;tcp://127.0.0.1:514&quot;,</span></span>
<span class="line"><span>    &quot;tag&quot;: &quot;docker/{{.Name}},&quot;</span></span>
<span class="line"><span>   }</span></span>
<span class="line"><span>}</span></span>
<span class="line"><span>data-root  #指定镜像容器存放的位置</span></span>
<span class="line"><span>log-driver #创建一个日志处理的服务</span></span>
<span class="line"><span>log-opts   #日志服务的参数</span></span>
<span class="line"><span>  syslog-address  #tcp 公网ip</span></span>
<span class="line"><span>  tag             #日志存放的位置,具体路径在模板处设置</span></span>
<span class="line"><span>                    </span></span>
<span class="line"><span>systemctl restart docker</span></span>
<span class="line"><span>systemctl status docker</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="创建一个rsyslog模板"><a href="#创建一个rsyslog模板" class="rp-header-anchor rp-link" aria-hidden="true">#</a>创建一个rsyslog模板</h2>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>cd /etc/rsyslog.d</span></span>
<span class="line"><span>#新建模板</span></span>
<span class="line"><span>vi rule.conf</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>#最开始要添加这些</span></span>
<span class="line"><span># #011替换成tab</span></span>
<span class="line"><span>$EscapeControlCharactersOnReceive off</span></span>
<span class="line"><span># 删除日志首位空格,只保留原日志</span></span>
<span class="line"><span>$template CleanMsgFormat,&quot;%msg:2:$%\n&quot;</span></span>
<span class="line"><span></span></span>
<span class="line"><span></span></span>
<span class="line"><span>#### bind ####</span></span>
<span class="line"><span># 定义 bind 日志模版</span></span>
<span class="line"><span>### 拦截全部docker日志</span></span>
<span class="line"><span>$template docker,&quot;data/logs/docker/%syslogtag:F,44:1%/%$YEAR%-%$MONTH%-%$DAY%.log&quot;</span></span>
<span class="line"><span>if $syslogtag contains &#x27;docker&#x27; then ?docker;CleanMsgFormat</span></span>
<span class="line"><span>&amp; ~</span></span>
<span class="line"><span>#&amp; stop 类似于java 的break</span></span>
<span class="line"><span></span></span>
<span class="line"><span>#### nginx ####</span></span>
<span class="line"><span>$template nginx,&quot;/data/logs/nginx/%programname%-%timereported:0:10:date-rfc3339%-%HOSTNAME%.log&quot;</span></span>
<span class="line"><span>if $programname startswith &#x27;nginx&#x27; then ?nginx;CleanMsgFormat</span></span>
<span class="line"><span>&amp; stop</span></span>
<span class="line"><span>systemctl restart rsyslog</span></span>
<span class="line"><span>systemctl status rsyslog</span></span>
<span class="line"><span>$template bind,&quot;/data/logs/......&quot;</span></span>
<span class="line"><span> # 日志的绝对路径 和 daemon.json中的 tag参数 拼接 的路径为 日志具体存放地址</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="将模板放到docker的配置上"><a href="#将模板放到docker的配置上" class="rp-header-anchor rp-link" aria-hidden="true">#</a>将模板放到docker的配置上</h2>
<h2 class="rp-toc-include" id="日志自动压缩自动删除"><a href="#日志自动压缩自动删除" class="rp-header-anchor rp-link" aria-hidden="true">#</a>日志自动压缩+自动删除</h2>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>#放在/data/logs/docker/这一层</span></span>
<span class="line"><span>cat del_gz.sh </span></span>
<span class="line"><span>#!/bin/bash</span></span>
<span class="line"><span>find /data/logs/ -mtime +3 -name &quot;*.gz&quot; -exec rm -rf {} \;</span></span>
<span class="line"><span></span></span>
<span class="line"><span></span></span>
<span class="line"><span>gzip_log.sh </span></span>
<span class="line"><span>#!/bin/bash</span></span>
<span class="line"><span></span></span>
<span class="line"><span>for day in 1;</span></span>
<span class="line"><span>do</span></span>
<span class="line"><span>find /data/logs/ -name `date -d &quot;${day} days ago&quot; +%Y-%m-%d`*.log -type f -exec gzip {} \;</span></span>
<span class="line"><span>done</span></span>
<span class="line"><span>crontab -e</span></span>
<span class="line"><span>0 12 * * * /bin/sh -x /data/logs/docker/gzip_log.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】用kplayer循环视频直播]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】用kplayer循环视频直播</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】用kplayer循环视频直播</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:40 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><blockquote>
<h2 class="rp-toc-include" id="1介绍"><a href="#1介绍" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.介绍</h2>
</blockquote>
<p>b站有很多直播活动需要你直播就可以会给你贝壳（软妹币）</p>
<p>可以用<a href="https://github.com/bytelang/kplayer-go" target="_blank" rel="noopener noreferrer" class="rp-link">kplayer</a>来循环1-n个视频</p>
<blockquote>
<h2 class="rp-toc-include" id="2项目展示"><a href="#2项目展示" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.项目展示</h2>
</blockquote>
<h4 class="rp-toc-include" id="ffmpeg"><a href="#ffmpeg" class="rp-header-anchor rp-link" aria-hidden="true">#</a>ffmpeg</h4>
<h5 class="rp-toc-include" id="ffmpeg是一套可以用来记录转换数字音频视频并能将其转化为流的开源计算机程序几乎所有的流媒体都是基于ffmpeg做的"><a href="#ffmpeg是一套可以用来记录转换数字音频视频并能将其转化为流的开源计算机程序几乎所有的流媒体都是基于ffmpeg做的" class="rp-header-anchor rp-link" aria-hidden="true">#</a>ffmpeg是一套可以用来记录、转换数字音频、视频，并能将其转化为流的开源计算机程序，几乎所有的流媒体都是基于ffmpeg做的</h5>
<h4 class="rp-toc-include" id="kplayer"><a href="#kplayer" class="rp-header-anchor rp-link" aria-hidden="true">#</a>kplayer</h4>
<h5 class="rp-toc-include" id="kplayer为你提供最小化成本搭建视频推流功能的工具最优的推流方案obs或其他软件依赖与xwindow或图形化界面的需要不适合在服务端与云服务器上进行部署kplayer无需依赖图形化界面您可以使用任意一款你喜欢的发行版本即可实现多视频资源无缝推流的方案"><a href="#kplayer为你提供最小化成本搭建视频推流功能的工具最优的推流方案obs或其他软件依赖与xwindow或图形化界面的需要不适合在服务端与云服务器上进行部署kplayer无需依赖图形化界面您可以使用任意一款你喜欢的发行版本即可实现多视频资源无缝推流的方案" class="rp-header-anchor rp-link" aria-hidden="true">#</a>kplayer为你提供最小化成本搭建视频推流功能的工具，最优的推流方案OBS或其他软件依赖与xWindow或图形化界面的需要，不适合在服务端与云服务器上进行部署。KPlayer无需依赖图形化界面，您可以使用任意一款你喜欢的发行版本即可实现多视频资源无缝推流的方案。</h5>
<p>github项目地址：<a href="https://github.com/bytelang/kplayer-go" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/bytelang/kplayer-go</a></p>
<blockquote>
<h2 class="rp-toc-include" id="3环境准备"><a href="#3环境准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.环境准备</h2>
</blockquote>
<ul>
<li>服务器：本期使用的是<a href="https://cloud.tencent.com/product/lighthouse?fromSource=gwzcw.1293314.1293314.1293314&amp;cps_key=923faf881f7f4f42d8bb30f7a5c32918" target="_blank" rel="noopener noreferrer" class="rp-link">良心云</a>轻量云服务器</li>
<li>系统：centos7.9</li>
<li>最好安装有宝塔面板，以便后面的自动任务</li>
<li>默认root用户登录</li>
</ul>
<blockquote>
<h2 class="rp-toc-include" id="4开始搭建"><a href="#4开始搭建" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.开始搭建</h2>
</blockquote>
<h4 class="rp-toc-include" id="服务器初始设置"><a href="#服务器初始设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>服务器初始设置</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #先把服务器的包更新一下，然后安装docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #启动docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #把docker设置为开机启动</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="安装kplayer"><a href="#安装kplayer" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装kplayer</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> /data/kplayer</span><span style="color:var(--shiki-token-comment)"> #创建安装目录</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /data/kplayer</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> get.kplayer.net</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-comment)"> #安装kplayer</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">vi</span><span style="color:var(--shiki-token-string)"> config.json</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-json"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="json"><code><span class="line"><span style="color:var(--shiki-foreground)">{</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    &quot;version&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;2.0.0&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    &quot;resource&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        &quot;lists&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">            &quot;/data/kplayer/1.mp4&quot;</span><span style="color:var(--shiki-token-comment)"> //这里填循环地址，可多视频</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        ]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    &quot;play&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;play_model&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;loop&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    &quot;encode&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;video_width&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> 1920</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;video_height&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> 1080</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;video_fps&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> 24</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      &quot;bit_rate&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-constant)"> 2000</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    &quot;output&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        &quot;lists&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-foreground)"> [</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            {</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">                &quot;path&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;&quot;</span><span style="color:var(--shiki-token-comment)"> //这里填直播地址</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">            }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">        ]</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>打开你想要直播平台的开播设置，这里以b站为例<a href="https://link.bilibili.com/p/center/index?spm_id_from=333.1007.0.0#/my-room/start-live" target="_blank" rel="noopener noreferrer" class="rp-link">链接</a></p>
<p>点击开始直播就会有一个服务器地址和一个串流秘钥</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kaok9n-3.webp" alt="image-20220524122651450"/></p>
<p>复制你的服务器地址和串流秘钥一起填进config.json终端path里（组合填进）</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kb5y8l-3.webp" alt="image-20220524122805713"/></p>
<p>设置好后文件目录是这样的</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kg08la-3.webp" alt="image-20220524123619520"/></p>
<p>用这条命令启动直播</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /data/kplayer</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> ./kplayer</span><span style="color:var(--shiki-token-string)"> play</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>可以保存成一个.sh脚本，想要直播的时候bash一下就好了，或者想我一样设置一个快捷命令</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kfj005-3.webp" alt="image-20220524123539008"/></p>
<p>如果显示erpo就是有一个kplayer在运行</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kbd29v-3.webp" alt="image-20220524122839095"/></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">kill</span><span style="color:var(--shiki-token-constant)"> 20273</span><span style="color:var(--shiki-token-comment)"> #填pid</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>再次运行命令显示info就成功了</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kbth98-3.webp" alt="image-20220524122916006"/></p>
<p>进入直播间可以确认一下</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/khocpq-3.webp" alt="image-20220524123859776"/></p>
<p>这是我直播的数据，直播一段时间会被掐掉，需要重新开启直播</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kicmz2-3.webp" alt="image-20220524124012928"/></p>
<p>开启直播的时候把串流秘钥复制一下，编辑config.json吧?和后面的替换掉然后运行命令就好了</p>
<p><img src="https://img.tteam.icu/i/2022/05/24/kaok9n-3.webp" alt="image-20220524122651450"/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的docker小技巧】aria下载]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的docker小技巧】aria下载</link>
            <guid isPermaLink="false">/blog/ops/【实用的docker小技巧】aria下载</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><p>aria下载器</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker run -d \</span></span>
<span class="line"><span>--name ariang \</span></span>
<span class="line"><span>--restart unless-stopped \</span></span>
<span class="line"><span>-p 16880:6880 \</span></span>
<span class="line"><span>p3terx/ariang</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker run -d \</span></span>
<span class="line"><span>--name aria2 \</span></span>
<span class="line"><span>--restart unless-stopped \</span></span>
<span class="line"><span>-e PUID=$UID \</span></span>
<span class="line"><span>-e PGID=$GID \</span></span>
<span class="line"><span>-e UMASK_SET=022 \</span></span>
<span class="line"><span>-e RPC_SECRET=prc_password \#这里为连接的密码</span></span>
<span class="line"><span>-e RPC_PORT=6800 \</span></span>
<span class="line"><span>-e LISTEN_PORT=6888 \</span></span>
<span class="line"><span>-p 16800:6800 \</span></span>
<span class="line"><span>-p 16888:6888 \</span></span>
<span class="line"><span>-p 16888:6888/udp \</span></span>
<span class="line"><span>-v /data/docker/aria2/config:/config \</span></span>
<span class="line"><span>-v /data/docker/aria2/downloads:/downloads \</span></span>
<span class="line"><span>p3terx/aria2-pro</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>连接用prc_password</p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的docker小技巧】bililive-go录播]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的docker小技巧】bililive-go录播</link>
            <guid isPermaLink="false">/blog/ops/【实用的docker小技巧】bililive-go录播</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker run --restart=always -v /data/bililive:/etc/bililive-go -v /data/bililive:/srv/bililive -p 8085:8080 -d chigusa/bililive-go</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>配置文件config.yml</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>rpc:</span></span>
<span class="line"><span>  enable: true</span></span>
<span class="line"><span>  bind: :8080</span></span>
<span class="line"><span>debug: false</span></span>
<span class="line"><span>interval: 20</span></span>
<span class="line"><span>out_put_path: /srv/bililive</span></span>
<span class="line"><span>feature:</span></span>
<span class="line"><span>  use_native_flv_parser: false</span></span>
<span class="line"><span>live_rooms:</span></span>
<span class="line"><span>- https://live.bilibili.com/255</span></span>
<span class="line"><span>out_put_tmpl: &quot;&quot;</span></span>
<span class="line"><span>video_split_strategies:</span></span>
<span class="line"><span>  on_room_name_changed: false</span></span>
<span class="line"><span>  max_duration: 0s</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的docker小技巧】jellyfin影视]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的docker小技巧】jellyfin影视</link>
            <guid isPermaLink="false">/blog/ops/【实用的docker小技巧】jellyfin影视</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><p>默认端口是8096</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker run -d \</span></span>
<span class="line"><span> --name jellyfin \</span></span>
<span class="line"><span> --net=host \</span></span>
<span class="line"><span> -v /data/jellyfin/config:/config \</span></span>
<span class="line"><span> -v /data/jellyfin/cache:/cache \</span></span>
<span class="line"><span> -v /data/docker/bililive/moves:/moves \</span></span>
<span class="line"><span> --restart=unless-stopped \</span></span>
<span class="line"><span> jellyfin/jellyfin</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的docker小技巧】部署docker]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的docker小技巧】部署docker</link>
            <guid isPermaLink="false">/blog/ops/【实用的docker小技巧】部署docker</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><p>以centos7.*为例</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>#更新yum包</span></span>
<span class="line"><span>yum update -y</span></span>
<span class="line"><span>#下载docker</span></span>
<span class="line"><span>yum intall -y docker</span></span>
<span class="line"><span>#启动docker</span></span>
<span class="line"><span>systemctl start docker                                                          </span></span>
<span class="line"><span>#开机自启docker</span></span>
<span class="line"><span>systemctl enable docker</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>如果运行容器的时候忘记设置开机自启就可以执行下面</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker update --restart=always 容器名或者ID</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>和容器同用网络</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>--net=host</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>换阿里云源</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>vi /etc/docker/daemon.json</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>{&quot;registry-mirrors&quot;: [&quot;https://pee6w651.mirror.aliyuncs.com&quot;]}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>安装docker-compose</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose</span></span>
<span class="line"><span>chmod +x /usr/local/bin/docker-compose</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】frp内网穿透]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】frp内网穿透</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】frp内网穿透</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><p>一键脚本github地址：<a href="https://github.com/MvsCode/frps-onekey" target="_blank" rel="noopener noreferrer" class="rp-link"></a><a href="https://github.com/MvsCode/frps-onekey" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/MvsCode/frps-onekey</a>
安装</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>wget https://code.aliyun.com/MvsCode/frps-onekey/raw/master/install-frps.sh -O ./install-frps.sh</span></span>
<span class="line"><span>chmod 700 ./install-frps.sh</span></span>
<span class="line"><span>./install-frps.sh install</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>本地客户端frpc配置</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>[common]</span></span>
<span class="line"><span>server_addr = ip</span></span>
<span class="line"><span>server_port = 端口</span></span>
<span class="line"><span>token = </span></span>
<span class="line"><span></span></span>
<span class="line"><span>[name]</span></span>
<span class="line"><span>type = tcp</span></span>
<span class="line"><span>local_ip = 本地ip</span></span>
<span class="line"><span>local_port = 本地端口</span></span>
<span class="line"><span>remote_port = 外网端口</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后win启动命令</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>frpc.exe -c ./frpc.ini</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>用docker运行</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>docker run -d --network host --name frpc --restart=always -v /data/docker/frpc/frpc.ini:/frp/frpc.ini stilleshan/frpc</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】录播bililive-go+bypy+Jellyfin]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】录播bililive-go+bypy+Jellyfin</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】录播bililive-go+bypy+Jellyfin</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><blockquote>
<h2 class="rp-toc-include" id="1介绍"><a href="#1介绍" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.介绍</h2>
</blockquote>
<p>平常喜欢看直播的小伙伴肯定知道，一旦错过了直播，一般就没有地方可以看了</p>
<p>虽然有些up主自己会放出直播录像或者有自己的录播组，但是都不及时</p>
<p>这期就用<a href="https://github.com/hr3lxphr6j/bililive-go" target="_blank" rel="noopener noreferrer" class="rp-link">bililive-go</a>+<a href="https://github.com/houtianze/bypy" target="_blank" rel="noopener noreferrer" class="rp-link">bypy</a>+<a href="https://jellyfin.org/" target="_blank" rel="noopener noreferrer" class="rp-link">Jellyfin</a>来搭建我平时录播的方法（这个方法亦可以在自己家的nas上，访问速度更快）</p>
<blockquote>
<h2 class="rp-toc-include" id="2项目展示"><a href="#2项目展示" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.项目展示</h2>
</blockquote>
<h4 class="rp-toc-include" id="bililive-go"><a href="#bililive-go" class="rp-header-anchor rp-link" aria-hidden="true">#</a>bililive-go</h4>
<h5 class="rp-toc-include" id="是我用过最好用的录播工具没有之一而且有docker一键部署肥肠方便"><a href="#是我用过最好用的录播工具没有之一而且有docker一键部署肥肠方便" class="rp-header-anchor rp-link" aria-hidden="true">#</a>是我用过最好用的录播工具（没有之一），而且有docker一键部署，肥肠方便</h5>
<p>github项目地址：<a href="https://github.com/hr3lxphr6j/bililive-go" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/hr3lxphr6j/bililive-go</a></p>
<p>docker项目地址：<a href="https://hub.docker.com/r/chigusa/bililive-go" target="_blank" rel="noopener noreferrer" class="rp-link">https://hub.docker.com/r/chigusa/bililive-go</a>
<img src="https://img.tteam.icu/i/2022/05/18/r0aoep-3.webp" alt="image-20220518163306081"/></p>
<h4 class="rp-toc-include" id="bypy"><a href="#bypy" class="rp-header-anchor rp-link" aria-hidden="true">#</a>bypy</h4>
<h5 class="rp-toc-include" id="这是一个开源上传或下载百度云百度网盘的python客户端"><a href="#这是一个开源上传或下载百度云百度网盘的python客户端" class="rp-header-anchor rp-link" aria-hidden="true">#</a>这是一个开源上传或下载百度云/百度网盘的python客户端</h5>
<p>github项目地址：<a href="https://github.com/houtianze/bypy" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/houtianze/bypy</a></p>
<h4 class="rp-toc-include" id="jellyfin"><a href="#jellyfin" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Jellyfin</h4>
<h5 class="rp-toc-include" id="家里有nas的都知道这是最有名的媒体中心之一而且也有docker版一键部署"><a href="#家里有nas的都知道这是最有名的媒体中心之一而且也有docker版一键部署" class="rp-header-anchor rp-link" aria-hidden="true">#</a>家里有nas的都知道，这是最有名的媒体中心之一（而且也有docker版，一键部署）</h5>
<p>项目官网：<a href="https://jellyfin.org/" target="_blank" rel="noopener noreferrer" class="rp-link">https://jellyfin.org/</a></p>
<blockquote>
<h2 class="rp-toc-include" id="3环境准备"><a href="#3环境准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.环境准备</h2>
</blockquote>
<ul>
<li>服务器：本期使用的是<a href="https://cloud.tencent.com/product/lighthouse?fromSource=gwzcw.1293314.1293314.1293314&amp;cps_key=923faf881f7f4f42d8bb30f7a5c32918" target="_blank" rel="noopener noreferrer" class="rp-link">良心云</a>轻量云服务器</li>
<li>系统：centos7.9</li>
<li>最好安装有宝塔面板，以便后面的自动任务</li>
<li>默认root用户登录</li>
</ul>
<blockquote>
<h2 class="rp-toc-include" id="4开始搭建"><a href="#4开始搭建" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.开始搭建</h2>
</blockquote>
<h4 class="rp-toc-include" id="服务器初始设置"><a href="#服务器初始设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>服务器初始设置</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">yum</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #先把服务器的包更新一下，然后安装docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #启动docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-comment)"> #把docker设置为开机启动</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="安装bililive-go"><a href="#安装bililive-go" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装bililive-go</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive</span><span style="color:var(--shiki-token-comment)"> #创建安装目录</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">vi</span><span style="color:var(--shiki-token-string)"> config.yml</span><span style="color:var(--shiki-token-comment)"> #以前的版本可能有bug，不知道现在有没有，最好先把配置文件新建好</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">rpc:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  enable:</span><span style="color:var(--shiki-token-constant)"> true</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  bind:</span><span style="color:var(--shiki-token-string)"> :8080</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">debug:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">interval:</span><span style="color:var(--shiki-token-constant)"> 20</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">out_put_path:</span><span style="color:var(--shiki-token-string)"> /srv/bililive</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">feature:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  use_native_flv_parser:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">live_rooms:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">-</span><span style="color:var(--shiki-token-string)"> https://live.bilibili.com/2343216</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">out_put_tmpl:</span><span style="color:var(--shiki-token-string-expression)"> &quot;&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">video_split_strategies:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  on_room_name_changed:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  max_duration:</span><span style="color:var(--shiki-token-string)"> 0s</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> --restart=always</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive:/etc/bililive-go</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive:/srv/bililive</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> 8080:8080</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> chigusa/bililive-go</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>其中两个挂载出来的地址可以填同一个，一个是录播地址，一个是config的路径，外部端口可以改任意端口</p>
<p>搭建完以后用ip:端口访问</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/ly54jq-3.webp" alt="image-20220518132711415"/></p>
<p>这是搭建成功的画面</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/lzan2h-3.webp" alt="image-20220518132905339"/></p>
<p>可以添加房间，也可以停止监控，设置好以后必须要保存设置，不然重启docker后配置就还原了</p>
<h4 class="rp-toc-include" id="安装bypy"><a href="#安装bypy" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装bypy</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">pip</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> bypy</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">bypy</span><span style="color:var(--shiki-token-string)"> info</span><span style="color:var(--shiki-token-comment)"> #按照提示授权</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="安装jellyfin"><a href="#安装jellyfin" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装jellyfin</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> jellyfin</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> --net=host</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> /data/jellyfin/config:/config</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> /data/jellyfin/cache:/cache</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive/moves:/moves</span><span style="color:var(--shiki-foreground)"> \ </span><span style="color:var(--shiki-token-string)">#这里填录播的地址</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --restart</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string)">unless-stopped</span><span style="color:var(--shiki-token-function)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"> jellyfin/jellyfin</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>安装好以后用ip:8096访问网页版，按照提示一步步安装</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/m6feo2-3.webp" alt="image-20220518134103122"/></p>
<p>点击控制台</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/m75yza-3.webp" alt="image-20220518134227025"/></p>
<p>添加媒体库</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/m7p4nv-3.webp" alt="image-20220518134316676"/></p>
<p>注意要把实时监控打开，把下面的获取元信息全部关闭然后返回首页</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/m8hk8z-3.webp" alt="image-20220518134449198"/></p>
<p>推荐设置加入日期降序，这样最新的录播就在最前面了</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/m9fgmp-3.webp" alt="image-20220518134607595"/></p>
<p>右下角还可以设置码率和播放速度</p>
<h4 class="rp-toc-include" id="设置自动上传和删除录播"><a href="#设置自动上传和删除录播" class="rp-header-anchor rp-link" aria-hidden="true">#</a>设置自动上传和删除录播</h4>
<p>在宝塔里先设置上传脚本</p>
<div class="rp-codeblock language-sh"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="sh"><code><span class="line"><span style="color:var(--shiki-token-function)">bypy</span><span style="color:var(--shiki-token-string)"> upload</span><span style="color:var(--shiki-token-string)"> --processes</span><span style="color:var(--shiki-token-string)"> /data/docker/bililive/moves</span><span style="color:var(--shiki-token-string)"> /moves</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="https://img.tteam.icu/i/2022/05/18/pr6mp4-3.webp" alt="image-20220518155728787"/></p>
<p>删除五天前录播节省空间</p>
<p><img src="https://img.tteam.icu/i/2022/05/18/prwjz5-3.webp" alt="image-20220518155850565"/></p><!--/$-->]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[【实用的服务器小技巧】我的世界服务器]]></title>
            <link>https://www.tteam.icu/blog/ops/【实用的服务器小技巧】我的世界服务器</link>
            <guid isPermaLink="false">/blog/ops/【实用的服务器小技巧】我的世界服务器</guid>
            <pubDate>Tue, 22 Aug 2023 16:11:39 GMT</pubDate>
            <content:encoded><![CDATA[<!--$--><h1 class="rp-toc-include" id="安装java17"><a href="#安装java17" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装java17<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>cd /usr/local</span></span>
<span class="line"><span>wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz</span></span>
<span class="line"><span>tar -zxvf jdk-17_linux-x64_bin.tar.gz</span></span>
<span class="line"><span>mv jdk-17.0.3.1 java</span></span>
<span class="line"><span>rm -f jdk-17_linux-x64_bin.tar.gz</span></span>
<span class="line"><span>vim /etc/profile</span></span>
<span class="line"><span></span></span>
<span class="line"><span>export JAVA_HOME=/usr/local/java</span></span>
<span class="line"><span>export JRE_HOME=${JAVA_HOME}/jre</span></span>
<span class="line"><span>export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib</span></span>
<span class="line"><span>export PATH=${JAVA_HOME}/bin:$PATH</span></span>
<span class="line"><span></span></span>
<span class="line"><span>source /etc/profile</span></span>
<span class="line"><span>java -version</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h1 class="rp-toc-include" id="安装核心"><a href="#安装核心" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装核心<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>核心可以在minecraftwiki中下载
核心上传到/data/minecraft/目录，然后把核心重命名为server.jar</p>
<p>创建脚本start.sh</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>vi start.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>cd /data/minecraft</span></span>
<span class="line"><span>java -Xms1G -Xmx12G -jar /data/minecraft/server.jar nogui</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>把eula.txt中的false改成true
#可以用这个包创建虚拟连接</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>yum intall -y screen</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>server.properties示例</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>view-distance=10</span></span>
<span class="line"><span>max-build-height=256</span></span>
<span class="line"><span>server-ip=</span></span>
<span class="line"><span>level-seed=</span></span>
<span class="line"><span>allow-nether=true</span></span>
<span class="line"><span>enable-command-block=true#是否开启命令方块</span></span>
<span class="line"><span>server-port=25565#端口</span></span>
<span class="line"><span>gamemode=0#模式</span></span>
<span class="line"><span>enable-rcon=false</span></span>
<span class="line"><span>op-permission-level=4#op等级</span></span>
<span class="line"><span>enable-query=false</span></span>
<span class="line"><span>prevent-proxy-connections=false</span></span>
<span class="line"><span>generator-settings=</span></span>
<span class="line"><span>resource-pack=</span></span>
<span class="line"><span>player-idle-timeout=0</span></span>
<span class="line"><span>level-name=world</span></span>
<span class="line"><span>motd=A Minecraft Server#显示</span></span>
<span class="line"><span>force-gamemode=false</span></span>
<span class="line"><span>hardcore=false</span></span>
<span class="line"><span>white-list=false#白名单</span></span>
<span class="line"><span>broadcast-console-to-ops=true</span></span>
<span class="line"><span>pvp=true#是否开启pvp</span></span>
<span class="line"><span>spawn-npcs=true</span></span>
<span class="line"><span>generate-structures=true</span></span>
<span class="line"><span>spawn-animals=true</span></span>
<span class="line"><span>snooper-enabled=true</span></span>
<span class="line"><span>difficulty=1</span></span>
<span class="line"><span>network-compression-threshold=256</span></span>
<span class="line"><span>level-type=DEFAULT</span></span>
<span class="line"><span>spawn-monsters=true</span></span>
<span class="line"><span>max-tick-time=60000</span></span>
<span class="line"><span>enforce-whitelist=false</span></span>
<span class="line"><span>use-native-transport=true</span></span>
<span class="line"><span>max-players=20#最多人数</span></span>
<span class="line"><span>resource-pack-sha1=</span></span>
<span class="line"><span>spawn-protection=16</span></span>
<span class="line"><span>online-mode=false#正版验证</span></span>
<span class="line"><span>allow-flight=false</span></span>
<span class="line"><span>max-world-size=29999984</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="#49cd37" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content:encoded>
        </item>
    </channel>
</rss>