<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>未雨绸缪</title><link>https://7boe.top/</link><atom:link href="https://7boe.top/rss.xml" rel="self" type="application/rss+xml"/><description>未雨绸缪</description><generator>Halo v2.23.1</generator><language>zh-cn</language><image><url>https://oss.7boe.top/2024/03/11/65ee77dac4869.png</url><title>未雨绸缪</title><link>https://7boe.top/</link></image><lastBuildDate>Wed, 15 Apr 2026 05:40:02 GMT</lastBuildDate><item><title><![CDATA[福建8日旅游计划]]></title><link>https://7boe.top/archives/212</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E7%A6%8F%E5%BB%BA8%E6%97%A5%E6%97%85%E6%B8%B8%E8%AE%A1%E5%88%92&amp;url=/archives/212" width="1" height="1" alt="" style="opacity:0;">
<h1 id="为期8天福建旅游计划">为期8天福建旅游计划</h1>
<blockquote>
 <p>本文以及旅游参考使用 GPT5 安排</p>
</blockquote>
<hr>
<p>暂定计划</p>
<h1 id="8天先福州后宁德含平潭海岛古城的轻松线">8天｜先福州、后宁德（含平潭）——海岛＋古城的轻松线</h1>
<blockquote>
 <p>逻辑：先在福州慢游并插入<strong>平潭</strong>（海岛+海蚀地貌+蓝眼泪季节性），再北上到**宁德（霞浦/太姥山/福鼎）**看滩涂与山海奇观；城际尽量早班高铁，晚间回城休息。</p>
</blockquote>
<hr>
<h2 id="行程一览">行程一览</h2>
<h3 id="d1抵达福州--三坊七巷--上下杭夜游">D1｜抵达福州 → 三坊七巷 &amp; 上下杭夜游</h3>
<ul>
 <li>入住老城（东街口/三坊七巷一带），下午逛<strong>三坊七巷</strong>，晚逛<strong>上下杭</strong>，闽菜尝鲜。</li>
 <li>住：福州老城步行可达区。</li>
</ul>
<h3 id="d2福州城线鼓山涌泉寺--闽江夜景">D2｜福州城线：鼓山·涌泉寺 → 闽江夜景</h3>
<ul>
 <li>早登<strong>鼓山</strong>（可步行/索道），游<strong>涌泉寺</strong>；傍晚回城，台江/闽江畔夜景。</li>
 <li>住：福州。</li>
</ul>
<h3 id="d3福州--平潭高铁3060min北部生态廊道">D3｜福州 → 平潭（高铁30–60min）｜北部生态廊道</h3>
<ul>
 <li>早动车赴<strong>平潭</strong>，中午轻装骑行<strong>北部生态廊道</strong>，看<strong>长江澳风车田</strong>、<strong>龙凤头沙滩</strong>、<strong>海坛古城</strong>夜景。</li>
 <li>住：平潭（坛南湾/龙凤头海滨民宿或海坛古城边）。</li>
</ul>
<h3 id="d4平潭环岛--傍晚回福州">D4｜平潭环岛 → 傍晚回福州</h3>
<ul>
 <li>上午走<strong>坛南湾</strong>或延伸小众岬角；如遇月份/海况合适可夜间守候**“蓝眼泪”**（季节性）。</li>
 <li>下午或傍晚动车回<strong>福州</strong>，晚间自由活动。</li>
 <li>住：福州。</li>
</ul>
<h3 id="d5福州--宁德霞浦高铁约1h滩涂日落踩点">D5｜福州 → 宁德霞浦（高铁约1h）｜滩涂日落踩点</h3>
<ul>
 <li>早班动车赴<strong>霞浦</strong>，中午入住县城或<strong>三沙镇</strong>（上岛更近）。下午踩点<strong>北岐/小皓/东壁</strong>等机位，拍日落。</li>
 <li>住：霞浦（摄影/上岛优先选三沙；拍滩涂优先选县城）。</li>
</ul>
<h3 id="d6霞浦日出-可选四礵列岛西洋岛">D6｜霞浦日出 →（可选）四礵列岛/西洋岛</h3>
<ul>
 <li>凌晨守<strong>北岐</strong>日出；若海况良好、船班正常，走<strong>四礵列岛</strong>（断崖草甸海蚀地貌/渔排），不稳则改<strong>西洋岛</strong>或加拍<strong>东壁/小皓</strong>。</li>
 <li>住：霞浦或三沙。</li>
</ul>
<h3 id="d7太姥山或福鼎海线加餐--晚回福州留宁德">D7｜太姥山或福鼎海线加餐 → 晚回福州/留宁德</h3>
<ul>
 <li>早赴<strong>太姥山</strong>（福鼎方向，花岗岩“石蛋地貌”峰丛徒步），或走<strong>沙埕港—台山列岛</strong>海蚀线（风浪视情况）。</li>
 <li>傍晚可直接回<strong>福州</strong>（次日更方便返程），或留在<strong>宁德/霞浦</strong>。</li>
 <li>住：福州 或 霞浦/福鼎（看第二天出发地）。</li>
</ul>
<h3 id="d8返程">D8｜返程</h3>
<ul>
 <li>视航班/高铁时间收尾；如住福州，上午老城咖啡/手信。</li>
</ul>
<hr>
<h2 id="住哪里更省心">住哪里更省心</h2>
<ul>
 <li><strong>福州</strong>：<strong>三坊七巷—东街口</strong>或<strong>上下杭</strong>附近，Citywalk＋觅食方便。</li>
 <li><strong>平潭</strong>：<strong>坛南湾/龙凤头</strong>（步行到沙滩），或住<strong>海坛古城</strong>便于夜景与餐饮。</li>
 <li><strong>霞浦</strong>：上岛/三沙方向建议住<strong>三沙镇</strong>；拍滩涂建议住<strong>县城</strong>（去北岐/花竹机位快）。</li>
 <li><strong>太姥山/福鼎</strong>：游太姥山住<strong>山门镇</strong>更省转场时间。</li>
</ul>
<hr>
<h2 id="城际交通速查建议早班">城际交通速查（建议早班）</h2>
<ul>
 <li><strong>福州 ↔ 平潭</strong>：最快约 <strong>28–35 分钟</strong>，常规 <strong>35–60 分钟</strong>；班次密集。</li>
 <li><strong>福州 ↔ 霞浦</strong>：常见 <strong>~50–65 分钟</strong>（部分车次~1–1.5h）；全天多班。</li>
 <li><strong>霞浦 ↔ 太姥山/福鼎</strong>：区间短，常见十几至数十分钟级别（至<strong>太姥山站</strong>多班）。</li>
 <li><strong>霞浦 ↔ 福州（回程）</strong>：均值约 <strong>~53 分钟</strong>，多班可选。</li>
</ul>
<blockquote>
 <p>订票时注意“福州/福州南”“霞浦/太姥山/福鼎”等站名区分；节假日尽量抢早班与返程保底票。</p>
</blockquote>
<hr>
<h2 id="必备tips">必备Tips</h2>
<ul>
 <li><strong>平潭“蓝眼泪”</strong>：更偏向 <strong>4–6月</strong>与特定海况/黑夜少光害条件，属自然现象不保证出现；夜间注意保暖与安全。</li>
 <li><strong>霞浦滩涂摄影</strong>：关注<strong>潮汐表+日出日落</strong>，<strong>北岐/花竹/小皓/东壁</strong>等机位清晨或黄昏更出片；请提早占位。</li>
 <li><strong>上岛（四礵/西洋等）</strong>：船班受风浪影响大，多为<strong>早班为主</strong>；务必前一日向<strong>码头/民宿</strong>确认；如停航即时切换滩涂/山线B计划。</li>
 <li><strong>装备</strong>：防晒、防风、溯溪/防滑鞋、头灯（早出晚归）、薄冲锋衣；拍摄带广角＋长焦。</li>
 <li><strong>饮食</strong>：三沙/沙埕等渔港海鲜性价比高；老城试闽菜、鱼丸、肉燕等。</li>
</ul>
<hr>
<h2 id="建议预算粗略人rmb">建议预算（粗略/人·RMB）</h2>
<ul>
 <li><strong>高铁</strong>：福州⇄平潭单程约¥40–80；福州⇄霞浦约¥50–90；霞浦⇄太姥山/福鼎约¥15–40（以当日票价为准）。</li>
 <li><strong>住宿</strong>：县城/渔村¥200–450；老城/精品¥300–700；海岛旺季浮动较大。</li>
 <li><strong>船票</strong>：离岸小岛通常<strong>百元上下</strong>，以当日公告为准。</li>
</ul>
<hr>
<h2 id="一键换挡按天气与兴趣微调">一键换挡（按天气与兴趣微调）</h2>
<ul>
 <li><strong>海岛感拉满</strong>：D3–D4平潭+晚守蓝眼泪（季节）→ D6四礵，D7太姥山轻装徒步。</li>
 <li><strong>轻松不赶</strong>：保留D2城线、D3去、D4回的平潭节奏；宁德段以滩涂日出+太姥山为主，不上远海岛。</li>
 <li><strong>摄影优先</strong>：霞浦住县城，连拍<strong>北岐日出＋小皓日落</strong>；平潭选风车田/长江澳的日落机位。</li>
</ul>]]></description><guid isPermaLink="false">/archives/212</guid><dc:creator>Celia</dc:creator><pubDate>Mon, 25 Aug 2025 03:52:09 GMT</pubDate></item><item><title><![CDATA[TNTCloud机场评测]]></title><link>https://7boe.top/archives/211</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=TNTCloud%E6%9C%BA%E5%9C%BA%E8%AF%84%E6%B5%8B&amp;url=/archives/211" width="1" height="1" alt="" style="opacity:0;">
<h4 id="关于机场">关于机场</h4>
<p>TNTCloud
 <br>
 全IEPL专线，不限速
 <br>
 原生IP解锁Chatgpt，Tiktok</p>
<h4 id="套餐详情">套餐详情</h4>
<p>注册连接 带<a href="https://www.tntyun.cc/#/register?code=UAadgNpi">aff</a>
 <br>
 季付 30/月 流量60G
 <br>
 月付 20/月 流量110G
 <br>
 月份 40/月 流量220G
 <br>
 不限制设备数量。
 <br>
 等等 套装只是叠加流量 重置流量费用根据套餐也会变贵
 <br>
 所有套餐不限速无倍
 <br>
 客户端支持 ： Clash Clash Meta Singbox v2rayn</p>
<p>节点数量目前观察 51个节点
 <br>
 覆盖地区
 <br>
 香港，台湾，新加坡，日本，美国，德国</p>
<h4 id="测速详情">测速详情</h4>
<p>实际下载速度非常快
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2025%2F05%2F12%2F68215c817fd98.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/211</guid><dc:creator>Celia</dc:creator><category>机场测速</category><pubDate>Mon, 12 May 2025 02:34:06 GMT</pubDate></item><item><title><![CDATA[Deepseek-R1 私有部署]]></title><link>https://7boe.top/archives/210</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Deepseek-R1%20%E7%A7%81%E6%9C%89%E9%83%A8%E7%BD%B2&amp;url=/archives/210" width="1" height="1" alt="" style="opacity:0;">
<h3 id="deepseek-linux本地部署">Deepseek linux本地部署</h3>
<h4 id="下载">下载</h4>
<ul>
 <li>系统环境
  <br>
  debian12</li>
</ul>
<p><a href="https://ollama.com/download">https://ollama.com/download</a></p>
<p>系统中执行</p>
<pre><code>curl -fsSL https://ollama.com/install.sh | sh
</code></pre>
<h4 id="驱动">驱动</h4>
<p><strong>安装依赖</strong></p>
<pre><code>apt intstall build-essential linux-headers
</code></pre>
<p>因为默认会安装开源驱动 所以需要屏蔽掉
 <br>
 <code>vim /etc/modprobe.d/nvidia-installer-disable-nouveau.conf</code>写入</p>
<pre><code>blacklist nouveau
options nouveau modeset=0
</code></pre>
<p>更新 initramfs：
 <br>
 日志中显示 update-initramfs 命令未能正确运行。你需要手动更新 initramfs，以确保禁用 Nouveau 的设置生效。</p>
<p><code>sudo update-initramfs -u</code>
 <br>
 如果你使用的是 dracut（某些发行版，如 CentOS、RHEL 等），你需要使用以下命令：
 <br>
 <code>sudo dracut --force</code></p>
<pre><code>lsmod | grep nouveau
sudo rmmod nouveau
</code></pre>
<p><strong>重启后开始安装NVIDIA驱动</strong>
 <br>
 官网查找到对应的显卡以及系统驱动
 <br>
 <a href="https://www.nvidia.com/zh-tw/geforce/drivers/">https://www.nvidia.com/zh-tw/geforce/drivers/</a>
 <br>
 运行文件 根据需要进行安装build后会去安装签名 要提前关闭BIOS中安全启动</p>
<pre><code>bash NVIDIA-*****.run
</code></pre>
<p>安装完成后的验证</p>
<pre><code>nvidia-smi 
</code></pre>
<p>能看见显卡型号和显存即可</p>
<h4 id="ollama启动">OLLAMA启动</h4>
<p><a href="https://ollama.com/library/deepseek-r1">https://ollama.com/library/deepseek-r1</a>
 <br>
 找到对应参数
 <br>
 用命令拉去</p>
<pre><code>ollama run deepseek-r1:8b
root@deepseek:~# ollama list
NAME              ID              SIZE      MODIFIED     
deepseek-r1:8b    28f8fd6cdc67    4.9 GB    27 hours ago 
</code></pre>
<p>对话框CTRL+D后并不会关闭。我们只需要工具调用接口即可。
 <br>
 <a href="https://cherry-ai.com/">https://cherry-ai.com/</a></p>
<p>调整ollama允许外网访问
 <br>
 写入</p>
<pre><code>vim /etc/systemd/sytem/ollama.service
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
</code></pre>
<p>重启</p>
<pre><code>systemctl restart ollama
</code></pre>
<p>查看11434端口能不能外网访问即可</p>
<h4 id="软件配置">软件配置</h4>
<p>cherry studio为例
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2025%2F02%2F06%2F67a45628c671a.png&amp;size=m" alt="">
 <br>
 写入那个接口ip端口或者配置的域名，然后他会识别出接口中可用的模型
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2025%2F02%2F06%2F67a456c437041.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/210</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><category>网站搭建</category><pubDate>Thu, 6 Feb 2025 06:29:32 GMT</pubDate></item><item><title><![CDATA[Acme脚本使用]]></title><link>https://7boe.top/archives/209</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Acme%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8&amp;url=/archives/209" width="1" height="1" alt="" style="opacity:0;">
<h4 id="acme证书脚本使用">Acme证书脚本使用</h4>
<blockquote>
 <p>通常我们使用这个脚本都是用来给服务器上域名下发证书，本文章记录证书申请以及自动续签，和下发方式。</p>
</blockquote>
<h5 id="acme安装">Acme安装</h5>
<ol>
 <li>脚本</li>
</ol>
<pre><code>curl https://get.acme.sh | sh -s email=my@example.com 
</code></pre>
<p>改脚本会自动安装到家目录里的.acme.sh 邮箱修改为自己的，这样到期能自动提醒</p>
<h5 id="颁发使用">颁发使用</h5>
<ol>
 <li>单域名</li>
</ol>
<pre><code>acme.sh --issue -d example.com -w /home/wwwroot/example.com
</code></pre>
<ol start="2">
 <li>多域名</li>
</ol>
<pre><code>acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
</code></pre>
<ol start="3">
 <li>证书安装使用
  <br>
  <strong>nginx</strong></li>
</ol>
<pre><code>acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"
</code></pre>
<p>安装到指定位置 nginx内ssl配置文件制定上面文件</p>
<h5 id="使用阿里云域名api自动签发证书">使用阿里云域名API自动签发证书</h5>
<blockquote>
 <p>当你的网站http页面没有东西的时候，他下发会失败，这是证书http验证特性，所以采用dns验证，例如你的域名上在阿里上</p>
</blockquote>
<pre><code>export Ali_Key="&lt;key&gt;"
export Ali_Secret="&lt;secret&gt;"
</code></pre>
<p>写入在阿里上的key 也可以写入bashrc 然后申请证书。</p>
<pre><code>./acme.sh --issue --dns dns_ali -d example.com -d *.example.com
</code></pre>
<h5 id="更新续签">更新续签</h5>
<p><strong>一般来讲你不需要对证书手动更新，他会在crontabl里面自动执行检查更新</strong></p>
<p>如果你需要手动更新证书</p>
<pre><code>acme.sh --renew -d example.com --force
</code></pre>
<p>停止续订证书</p>
<pre><code>acme.sh --remove -d example.com [--ecc]
</code></pre>
<p>脚本更新</p>
<pre><code>acme.sh --upgrade --auto-upgrade
</code></pre>]]></description><guid isPermaLink="false">/archives/209</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><pubDate>Tue, 7 Jan 2025 03:44:08 GMT</pubDate></item><item><title><![CDATA[OpenClash使用]]></title><link>https://7boe.top/archives/208</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=OpenClash%E4%BD%BF%E7%94%A8&amp;url=/archives/208" width="1" height="1" alt="" style="opacity:0;">
<h2 id="openwrt安装openclash配置和分流">OPENWRT安装openclash配置和分流</h2>
<blockquote>
 <p>有一段时间没有写博客了，工作原因耽误了一段世界，同时也花了点时间去观摩了别人的博客，去学习别人是如何把一个文章写好。文章内容的核心，配图，代码块，以及后续博客的一个分享方向。思考了很久....
  <br>
  懒罢了</p>
</blockquote>
<h2 id="安装openclash">安装openclash</h2>
<p>安装这里不用过多赘述，GITHUb直接搜也可以，为了方便直接贴连接 <a href="https://github.com/vernesong/OpenClash">OPENCLASH</a>
 <br>
 直接到<a href="https://github.com/vernesong/OpenClash/releases">release</a>页面</p>
<ul>
 <li>注意事项</li>
 <li>请先安装好这些依赖:
  <br>
  <strong>iptables</strong></li>
</ul>
<pre><code>opkg update
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base
</code></pre>
<p><strong>nftables</strong></p>
<pre><code>opkg update
opkg install coreutils-nohup bash dnsmasq-full curl ca-certificates ipset ip-full libcap libcap-bin ruby ruby-yaml kmod-t
</code></pre>
<h2 id="配置">配置</h2>
<p>上面安装完成之后刷新一下或者退出重新登录OPENWRT
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e54080fc6b.png&amp;size=m" alt=""></p>
<blockquote>
 <p>这里参照我的配置，目前应该算是最优的选项了，DNS方面我这里是吧WAN的DNS给默认了，不使用223.5.5.5这种公网dns了，是运营商DNS,原因是解析更快。OPENWRT里面的dns要开重定向到dnsmsq，不然访问网站有时候回ssl错误。</p>
</blockquote>
<p>截图了的配置是重要的，其他没截图的都是次要配置，根据自己喜好配置。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e54e2879b8.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e54e20dfb9.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e54e195965.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e54e2c6979.png&amp;size=m" alt=""></p>
<p>DNS追加，这里的配置我是全关掉了，意思是需要在你的机场节点配置文件里面要不要再加dns，用来替换开启clash时候的本机dns的。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e55ec384cc.png&amp;size=m" alt="">
 <br>
 三个里面都关掉。</p>
<p>切换灵敏度这里是指这个节点的延迟和最好的那个节点之间的延迟差距大于100ms他就去切换。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e565bb1607.png&amp;size=m" alt=""></p>
<p>针对dns和fakeip
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e57027e57c.png&amp;size=m" alt=""></p>
<p>MATE
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e57899bf5b.png&amp;size=m" alt=""></p>
<p>订阅
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e57f5033fc.png&amp;size=m" alt=""></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e58520afa2.png&amp;size=m" alt=""></p>
<h2 id="使用方式">使用方式</h2>
<p>总的来讲和你使用clash是一样的原理。只是这种上网方式没人会一直去登录来回调整节点。
 <br>
 规则设置
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e5960917f9.png&amp;size=m" alt="">
 <br>
 具体分流 --Netflix
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e59f792e8e.png&amp;size=m" alt=""></p>
<h2 id="分流">分流</h2>
<p>这里分流规则可以使用模版网站去生成
 <br>
 <a href="https://acl4ssr-sub.github.io/">ACLSSR4</a>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e5a6f269a4.png&amp;size=m" alt="">
 <br>
 具体的文本解释就是命中规则然后去代理或者直连。</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e5b1bc07cc.png&amp;size=m" alt=""></p>
<h2 id="注意事项与踩坑">注意事项与踩坑</h2>
<p>DNS重定向,网站访问有问题，开启这个。
 <br>
 其实是目前OPENWRT上的dns都是这个dnsmsq在管理，而clash上面的是转发dnsmsq，这里是要和他对接上。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F10%2F27%2F671e5b6e5be72.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/208</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><category>软路由</category><category>技术分类</category><pubDate>Sun, 27 Oct 2024 15:27:08 GMT</pubDate></item><item><title><![CDATA[Docker 镜像加速器搭建]]></title><link>https://7boe.top/archives/206</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Docker%20%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E5%99%A8%E6%90%AD%E5%BB%BA&amp;url=/archives/206" width="1" height="1" alt="" style="opacity:0;">
<h2 id="docker-镜像加速器搭建">Docker 镜像加速器搭建</h2>
<p><strong>引言</strong></p>
<blockquote>
 <p>最近因为国内网络不佳，docker镜像一直拉取不下来，所有很多docker镜像加速器也失效了，所有可以使用反向代理的方式代理docker的镜像源仓库。</p>
</blockquote>
<h3 id="需求环境">需求环境</h3>
<table>
 <thead>
  <tr>
   <th>机器位置</th>
   <th>带宽要求</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>香港阿里云</td>
   <td>1000M</td>
  </tr>
 </tbody>
</table>
<p><strong>阿里云理论带宽给的是2000M实际高峰期最高也只能跑到1000M</strong></p>
<h3 id="搭建方式">搭建方式</h3>
<p>采用docker容器的方式跑一个代理镜像
 <br>
 <code>docker-compose</code></p>
<pre><code>services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    environment:
      REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io  # 上游源
      REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: inmemory # 内存缓存
    volumes:
      - ./data:/var/lib/registry
</code></pre>
<p><strong>位置是存放docker的一个缓存，硬盘较小的话就定期清理</strong></p>
<h3 id="使用方法">使用方法</h3>
<p><strong>写入配置文件</strong></p>
<pre><code>cat &lt;&lt;EOF &gt; /etc/docker/daemon.json 
&gt; {
  "registry-mirrors": ["https://docker.7boe.top"]
}
&gt; EOF
</code></pre>
<p>拉去时候代入域名例如</p>
<pre><code>docker pull docker.7boe.top/mysql
</code></pre>
<h3 id="我的架构">我的架构</h3>
<p><strong>入站采用阿里云DNS负载均衡分配到服务器
  <br> 命中后端缓存直接返回，没有就去dockerhub拉取再返回</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F06%2F22%2F6676a928a8b8a.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/206</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><pubDate>Sat, 22 Jun 2024 10:41:29 GMT</pubDate></item><item><title><![CDATA[K8s命令使用 （持续更新中）]]></title><link>https://7boe.top/archives/207</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=K8s%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%20%EF%BC%88%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0%E4%B8%AD%EF%BC%89&amp;url=/archives/207" width="1" height="1" alt="" style="opacity:0;">
<h1 id="k8s常用命令">k8s常用命令</h1>
<p><strong>kubectl命令补全</strong></p>
<pre><code>yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source &lt;(kubectl completion bash)
echo "source &lt;(kubectl completion bash)" &gt;&gt; ~/.bashrc
</code></pre>
<p><strong>token</strong></p>
<pre><code>kubeadm token create --print-join-command
</code></pre>
<h2 id="常用命令类">常用命令类</h2>
<ol>
 <li>
  <p><strong>查看集群信息</strong>:</p>
  <pre><code class="language-bash">kubectl cluster-info
</code></pre>
 </li>
 <li>
  <p><strong>获取所有namespace中的资源列表</strong>:</p>
  <pre><code class="language-bash">kubectl get all --all-namespaces
</code></pre>
 </li>
 <li>
  <p><strong>获取特定资源的列表</strong> (如Pods, Services, Deployments等):</p>
  <pre><code class="language-bash">kubectl get pods
kubectl get services
kubectl get deployments
</code></pre>
 </li>
 <li>
  <p><strong>创建资源</strong> (使用YAML文件):</p>
  <pre><code class="language-bash">kubectl apply -f &lt;filename.yaml&gt;
</code></pre>
 </li>
 <li>
  <p><strong>查看资源详细信息</strong>:</p>
  <pre><code class="language-bash">kubectl describe pod &lt;pod-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>删除资源</strong>:</p>
  <pre><code class="language-bash">kubectl delete -f &lt;filename.yaml&gt;
kubectl delete pod &lt;pod-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>编辑资源</strong> (在默认编辑器中打开):</p>
  <pre><code class="language-bash">kubectl edit deployment &lt;deployment-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>查看Pod日志</strong>:</p>
  <pre><code class="language-bash">kubectl logs &lt;pod-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>执行Pod内的命令</strong> (如进入容器内部):</p>
  <pre><code class="language-bash">kubectl exec -it &lt;pod-name&gt; -- /bin/bash
</code></pre>
 </li>
 <li>
  <p><strong>端口转发Pod端口到本地机器</strong>:</p>
  <pre><code class="language-bash">kubectl port-forward pod/&lt;pod-name&gt; &lt;local-port&gt;:&lt;pod-port&gt;
</code></pre>
 </li>
 <li>
  <p><strong>获取集群节点列表</strong>:</p>
  <pre><code class="language-bash">kubectl get nodes
</code></pre>
 </li>
 <li>
  <p><strong>Scale deployments</strong> (改变副本数量):</p>
  <pre><code class="language-bash">kubectl scale deployment &lt;deployment-name&gt; --replicas=&lt;num-replicas&gt;
</code></pre>
 </li>
 <li>
  <p><strong>滚动更新Deployment的镜像</strong>:</p>
  <pre><code class="language-bash">kubectl set image deployment/&lt;deployment-name&gt; &lt;container-name&gt;=&lt;image&gt;:&lt;tag&gt;
</code></pre>
 </li>
 <li>
  <p><strong>将新的Kubernetes配置文件应用到资源</strong>:</p>
  <pre><code class="language-bash">kubectl apply -f &lt;filename.yaml&gt;
</code></pre>
 </li>
 <li>
  <p><strong>回滚Deployment到之前的版本</strong>:</p>
  <pre><code class="language-bash">kubectl rollout undo deployment/&lt;deployment-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>查看资源的YAML配置</strong>:</p>
  <pre><code class="language-bash">kubectl get pod &lt;pod-name&gt; -o yaml
</code></pre>
 </li>
 <li>
  <p><strong>查看集群事件</strong>:</p>
  <pre><code class="language-bash">kubectl get events
</code></pre>
 </li>
 <li>
  <p><strong>查看或设置当前的Kubernetes上下文</strong> (环境):</p>
  <pre><code class="language-bash">kubectl config current-context
kubectl config use-context &lt;context-name&gt;
</code></pre>
 </li>
 <li>
  <p><strong>为Pod设置标签</strong>:</p>
  <pre><code class="language-bash">kubectl label pods &lt;pod-name&gt; &lt;label-key&gt;=&lt;label-value&gt;
</code></pre>
 </li>
 <li>
  <p><strong>创建资源</strong> (直接从命令行而不是YAML文件):</p>
  <pre><code class="language-bash">kubectl run &lt;name&gt; --image=&lt;image&gt;
</code></pre>
 </li>
</ol>]]></description><guid isPermaLink="false">/archives/207</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>Docker</category><pubDate>Sun, 19 May 2024 11:27:00 GMT</pubDate></item><item><title><![CDATA[PVE使用注意]]></title><link>https://7boe.top/archives/205</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=PVE%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F&amp;url=/archives/205" width="1" height="1" alt="" style="opacity:0;">
<h1 id="关于pve的使用">关于PVE的使用</h1>
<p>合并硬盘</p>
<pre><code>lvremove /dev/pve/data
</code></pre>
<p>先删除lvm后去扩容到root下</p>
<pre><code>lvextend -rl +100%FREE /dev/pve/root
</code></pre>
<p>在gui页面删除硬盘</p>
<h2 id="换源">换源</h2>
<p>Proxmox VE 8.1 换源教程 - axcsz/Collect GitHub Wiki
 <br>
 Proxmox VE 8.1 换源教程
 <br>
 一、更换企业源
 <br>
 1.1、使用以下命令，打开
 <br>
 <code>nano /etc/apt/sources.list.d/pve-enterprise.list</code>
 <br>
 1.2、删除原来的的源，并添加下面的源
 <br>
 <code>deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription</code>
 <br>
 二、更换其他源
 <br>
 2.1、使用以下命令，打开
 <br>
 <code>nano /etc/apt/sources.list</code>
 <br>
 2.2、删除原来的的源，并添加下面的源（二选一）
 <br>
 （清华）</p>
<pre><code>deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
</code></pre>
<p>（中科大）</p>
<pre><code>deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-
free-firmware
</code></pre>
<p>三、修复源401错误、增加pve无订阅源
 <br>
 修复源401错误
 <br>
 3.1、使用以下命令，打开
 <br>
 <code>nano /etc/apt/sources.list.d/ceph.list</code>
 <br>
 3.2、删除原来的的源，并添加下面的源
 <br>
 <code>deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription </code>
 <br>
 增加pve无订阅源
 <br>
 3.3、使用以下命令，打开
 <br>
 <code>nano /etc/apt/sources.list.d/pve-no-subscription.list</code>
 <br>
 3.4、删除原来的的源，并添加下面的源
 <br>
 <code>deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription</code>
 <br>
 四、更换LXC源
 <br>
 使用以下命令
 <br>
 <code>sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm</code>
 <br>
 五、删除订阅弹窗
 <br>
 使用以下命令，执行完成后，需注销PVE登录后, 重新启动浏览器
 <br>
 <code>sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js &amp;&amp; systemctl restart pveproxy.service</code>
 <br>
 六、重启网络服务
 <br>
 <code>systemctl restart pvedaemon.service</code>
 <br>
 <code>reboot</code></p>
<h2 id="看温度脚本">看温度脚本</h2>
<pre><code>(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) &amp;&amp; chmod +x /tmp/temp.sh &amp;&amp; /tmp/temp.sh remod
</code></pre>]]></description><guid isPermaLink="false">/archives/205</guid><dc:creator>Celia</dc:creator><pubDate>Sun, 19 May 2024 11:26:00 GMT</pubDate></item><item><title><![CDATA[Headscale+derp中转服务器搭建]]></title><link>https://7boe.top/archives/204</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Headscale%2Bderp%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA&amp;url=/archives/204" width="1" height="1" alt="" style="opacity:0;">
<h1 id="headscalederp部署终极版本">Headscale+derp部署终极版本</h1>
<h2 id="部署环境">部署环境</h2>
<table>
 <thead>
  <tr>
   <th>系统</th>
   <th>主机</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>debian12</td>
   <td>香港阿里云</td>
  </tr>
  <tr>
   <td>乌班图18</td>
   <td>华为云</td>
  </tr>
  <tr>
   <td>PC</td>
   <td>家用</td>
  </tr>
 </tbody>
</table>
<h2 id="搭建背景">搭建背景</h2>
<blockquote>
 <p>最近家里云需要VPN稳定方式访问了，一直以来都是zerotier，tcp访问掉线非常严重，搭建moon没啥用，都是planet，但是仍旧很多问题，非常麻烦，需要每台服务器替换planet文件加入节点，经过一晚上的研究，搭建了tailscale的headscale版本加上derp的一个加速节点。</p>
</blockquote>
<h2 id="开始搭建">开始搭建</h2>
<p>准备工作
 <br>
 域名 服务器
 <br>
 <strong>开源项目</strong>
 <br>
 <strong>headscale</strong></p>
<pre><code>https://github.com/juanfont/headscale
</code></pre>
<p>derp开源docker</p>
<pre><code>https://hub.docker.com/r/fredliang/derper
</code></pre>
<p>webui管理开源地址</p>
<pre><code>https://github.com/gurucomputing/headscale-ui
</code></pre>
<h3 id="下载软件包">下载软件包</h3>
<p>这是阿尔法测试安装包，修复了很多东西，也能用的。</p>
<pre><code>wget https://github.com/juanfont/headscale/releases/download/v0.23.0-alpha9/headscale_0.23.0-alpha9_linux_amd64.deb
</code></pre>
<p>安装软件</p>
<pre><code>dpkg -i headscale_0.23.0-alpha9_linux_amd64.deb
</code></pre>
<p>启动</p>
<pre><code>systemctl enable --now headscale
</code></pre>
<p>修改配置</p>
<pre><code>vim /etc/headscale/config.yaml
</code></pre>
<p>需要修改的地方</p>
<pre><code>server_url: https://域名 #443 端口可以后面啥都不带，但是要配证书
listen_addr: 0.0.0.0:8080 #改成0.0.0.0监听所有地址
metrics_listen_addr: 0.0.0.0:9090 #一样
prefixes:
  #v6: fd7a:115c:a1e0::/48
  v4: 10.10.0.0/24   #这边我是自定义地址，但是systmd会报警告，不用管，能用

derp:
  server:
    # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config
    # The Headscale server_url defined above MUST be using https, DERP requires TLS to bplace
    enabled: false  #禁用官方的服务器，建议禁用，延迟高。
    paths:
       - /etc/headscale/derp.yaml #在这里创建一个文件后面要自行搭建这个
         #paths: []
dns_config:
  # Whether to prefer using Headscale provided DNS or use local.
  magic_dns: false 关闭
randomize_client_port: true #随机端口打开
</code></pre>
<blockquote>
 <p>顺便在同一台服务器上把ui搭建了吧，非常简单，但是我研究了很久，整合了网上很多方案，docker虽然方便但是，不方便管理以及修改配置文件,其实也可以docker搭建出来，然后nginx返向代理。</p>
</blockquote>
<h3 id="webui搭建">webui搭建</h3>
<p>下载静态文件</p>
<pre><code>wget https://github.com/gurucomputing/headscale-ui/releases/download/2024.02.24-beta1/headscale-ui.zip
</code></pre>
<p>解压</p>
<pre><code>unzip headscale-ui.zip -d /var/
</code></pre>
<p>nginx</p>
<pre><code>apt install nginx
</code></pre>
<p>配置</p>
<pre><code>vim /etc/nginx/conf.d/hs.conf
</code></pre>
<p>写入</p>
<pre><code>map $http_upgrade $connection_upgrade {
    default      keep-alive;
    'websocket'  upgrade;
    ''           close;
}


server {
        server_name hs.7boe.top;

        # Security / XSS Mitigation Headers
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
        location /admin {
        alias /var/www/admin;
        try_files $uri $uri/ /index.html;
    }
                location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_redirect http:// https://;
            proxy_buffering off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
            add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
        }

        listen 443 ssl;
        listen [::]:443 ssl;
        ssl_certificate /ssl/hs.7boe.top.pem;
        ssl_certificate_key /ssl/hs.7boe.top.key;
}

</code></pre>
<p>在web下面看见ui
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Foss.7boe.top%2F2024%2F04%2F24%2F66291d9d3d9e6.png&amp;size=m" alt=""></p>
<p>如果上不了网要设置iptable
 <br>
 iptables -D ts-input -s 100.64.0.0/10 ! -i tailscale0 -j DROP
 <br>
 iptables -D ts-forward -s 100.64.0.0/10 -o tailscale0 -j DROP</p>
<h2 id="搭建derp中转服务器">搭建DERP中转服务器</h2>
<blockquote>
 <p>必须域名
  <br>
  创建/ssl文件夹然后放进证书，以自己域名为文件名需要crt文件，例如 hs.7boe.top.crt xxxx.key</p>
</blockquote>
<p><strong>docker 一条命令</strong></p>
<pre><code>docker run --restart always \
  -p 443:443 -p 3478:3478/udp \
  -e DERP_CERT_MODE=manual \
  -v /ssl:/app/certs \
  -e DERP_ADDR=:443 \
  -e DERP_DOMAIN=derp.7boe.top \
  -e DERP_VERIFY_CLIENTS=true \
  -v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
  fredliang/derper
</code></pre>
<p><strong>docker compose</strong></p>
<pre><code>version: '3'

services:
  derper:
    container_name: derper
    image: fredliang/derper
    restart: always
    ports:
      - 3478:3478/udp
      - 443:443
    environment:
      - DERP_DOMAIN=derp.7boe.top
      - DERP_CERT_MODE=manual
      - DERP_ADDR=:443
      - DERP_VERIFY_CLIENTS=true
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
      - /ssl:/app/certs/
</code></pre>
<p><strong>如果想443端口使用nginx反代</strong></p>
<pre><code>server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ssl_certificate     /data/ssls/derper.example.com/derper.example.com.pem;
  ssl_certificate_key /data/ssls/derper.example.com/derper.example.com.key;

  server_name derper.example.com;
  client_max_body_size 500M;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:19850; #改成暴露的derp端口不是stun
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}
</code></pre>
<p><strong>写入headscale的/etc/headscale/derp.yaml文件内</strong></p>
<pre><code>regions:
  901:
    regionid: 901
    regioncode: shanghai 
    regionname: huawei cloud 
    nodes:
      - name: 901
        regionid: 901
        ipv4: '60.204.186.134'
        hostname: 'derp.7boe.top'
        stunport: 3478
        stunonly: false
        derpport: 19850
  902:
    regionid: 902
    regioncode: hangzhou
    regionname: aliyun cloud
    nodes:
      - name: 902
        regionid: 902
        ipv4: '121.40.147.166'
        hostname: 'derp.7boe.top'
        stunport: 3478
        stunonly: false
        derpport: 443
</code></pre>
<h2 id="tailscale安装">tailscale安装</h2>
<p>官网</p>
<pre><code>https://tailscale.com/
</code></pre>
<p><strong>windows</strong></p>
<pre><code>https://pkgs.tailscale.com/stable/tailscale-setup-latest.exe
</code></pre>
<p><strong>LINUX</strong></p>
<pre><code>curl -fsSL https://tailscale.com/install.sh | sh
</code></pre>
<p>全部都是使用命令行就行了</p>
<pre><code>tailscale up --login-server=https://hs.7boe.top --accept-dns --accept-routes=true
tailscale down
tailscale logout
tailscale ping ip
tailscale netcheck
tailscale up --advertise-routes=10.0.0.0/24,192.168.1.0/24 --netfilter-mode=off
</code></pre>
<p>headscale命令</p>
<pre><code>headscale routes enable 
headscale apikey create -e 9999d
headscale node ls
headscale user ls
headscale routes list 


</code></pre>]]></description><guid isPermaLink="false">/archives/204</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><category>软路由</category><pubDate>Thu, 25 Apr 2024 04:41:00 GMT</pubDate></item><item><title><![CDATA[RockyLinux9.3部署K8s+ContainerD最新部署]]></title><link>https://7boe.top/archives/203</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=RockyLinux9.3%E9%83%A8%E7%BD%B2K8s%2BContainerD%E6%9C%80%E6%96%B0%E9%83%A8%E7%BD%B2&amp;url=/archives/203" width="1" height="1" alt="" style="opacity:0;">
<h1 id="rockylinux93部署k8s最新containerd方式">RockyLinux9.3部署k8s+最新ContainerD方式</h1>
<h2 id="软件环境">软件环境</h2>
<p><code>操作系统：Rocky Linux release 9.3</code>
 <br>
 <code>containerd版本：1.7.14 </code>
 <br>
 <code>kubernetes版本：v1.28.2 </code>
 <br>
 <code>K8S master 节点IP：10.0.0.1 </code>
 <br>
 <code>K8S worker节点IP：172.16.0.1</code>
 <br>
 <code>网络插件：flannel </code>
 <br>
 <code>kube-proxy网络转发： ipvs</code>
 <br>
 <code>kubernetes源： 阿里云镜像站 </code>
 <br>
 <code>service-cidr：10.96.0.0/16 </code>
 <br>
 <code>pod-network-cidr：10.244.0.0/16 </code></p>
<h2 id="环境准备">环境准备</h2>
<p><strong>软件包安装</strong></p>
<pre><code>dnf install -y   dnf-utils  ipvsadm  telnet  wget  net-tools  conntrack  ipset  jq  iptables  curl  sysstat  libseccomp  socat  nfs-utils  fuse
</code></pre>
<p><strong>内核参数</strong></p>
<pre><code>systemctl stop firewalld
systemctl disable firewalld

# 永久关闭swap分区交换，kubeadm规定，一定要关闭
swapoff -a
sed -ri 's/.*swap.*/#&amp;/' /etc/fstab
#关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效
# iptables配置
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i &gt;/dev/null 2&gt;&amp;1 &amp;&amp; /sbin/modprobe $i;done
#加载内核模块
cat &lt;&lt;EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
nf_conntrack
EOF
 
cat &lt;&lt;EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
#内核预检
modprobe overlay
modprobe br_netfilter
#网桥转发
cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 将读取该文件中的参数设置，并将其应用到系统的当前运行状态中
sysctl -p /etc/sysctl.d/k8s.conf
# iptables生效参数
sysctl --system
先重启吧
reboot
</code></pre>
<h2 id="containerd部署">Containerd部署</h2>
<p>下载</p>
<pre><code>wget https://github.com/containerd/containerd/releases/download/v1.7.14/cri-containerd-1.7.14-linux-amd64.tar.gz
</code></pre>
<p><strong>解压</strong></p>
<pre><code>tar xf cri-containerd-1.7.14-linux-amd64.tar.gz -C /
</code></pre>
<p><strong>containerd 配置</strong></p>
<pre><code>mkdir -p /etc/containerd/
#生成默认配置
containerd config default &gt; /etc/containerd/config.toml
sed -i '/SystemdCgroup/s/false/true/' /etc/containerd/config.toml
#手动修改
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
</code></pre>
<p><strong>服务配置</strong></p>
<pre><code>cat &gt; /etc/default/kubelet &lt;&lt; EOF
# 该参数指定了 kubelet 使用 systemd 作为容器运行时的 cgroup 驱动程序
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

# 启用并立即启动 containerd 服务
systemctl enable --now containerd.service

# 检查 containerd 服务的当前状态
systemctl status containerd.service
</code></pre>
<p><strong>验证</strong></p>
<pre><code># 用于检查 containerd 的版本
containerd --version

# 用于与 CRI（Container Runtime Interface）兼容的容器运行时交互的命令行工具
crictl --version

# 用于运行符合 OCI（Open Container Initiative）标准的容器
runc --version

crictl info|  grep sandboxImage

crictl info|  grep SystemdCgroup

</code></pre>
<h2 id="k8s安装">K8S安装</h2>
<pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt; EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum list kubeadm --showduplicates | sort -r
</code></pre>
<p><strong>安装</strong>
 <br>
 默认安装最新</p>
<pre><code>dnf install kubelet kubeadm kubectl
</code></pre>
<p><strong>拉取镜像</strong></p>
<pre><code>kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
</code></pre>
<h2 id="初始化">初始化</h2>
<p><strong>master上操作</strong></p>
<pre><code>kubeadm config print init-defaults &gt; kubeadm-config.yaml
</code></pre>
<p><strong>修改配置文件</strong></p>
<pre><code>apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 149.104.23.134 #这样改成master的公网ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master  #这样要改成解析的主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #一定要改
kind: ClusterConfiguration
kubernetesVersion: 1.23.6 #确认版本号
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16  #方便安装网络插件
scheduler: {}
</code></pre>
<p><strong>使用配置文件初始化命令</strong></p>
<pre><code>kubeadm init --config=kubeadm-config.yaml
</code></pre>
<h2 id="安装网络插件">安装网络插件</h2>
<pre><code>kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
</code></pre>]]></description><guid isPermaLink="false">/archives/203</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>Docker</category><pubDate>Fri, 22 Mar 2024 01:55:00 GMT</pubDate></item><item><title><![CDATA[Debian12 部署K8s]]></title><link>https://7boe.top/archives/202</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Debian12%20%E9%83%A8%E7%BD%B2K8s&amp;url=/archives/202" width="1" height="1" alt="" style="opacity:0;">
<h1 id="debian12部署最新k8s">Debian12部署最新K8S</h1>
<p><strong>本次采用的环境</strong></p>
<table>
 <thead>
  <tr>
   <th>软件</th>
   <th>软件版本</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>containerd</td>
   <td>1.6.20</td>
  </tr>
  <tr>
   <td>Kubernetes</td>
   <td>1.28.2</td>
  </tr>
 </tbody>
</table>
<p><strong>服务器规划</strong></p>
<table>
 <thead>
  <tr>
   <th>服务器主机名</th>
   <th>服务器公网IP</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>master</td>
   <td>10.0.0.1</td>
  </tr>
  <tr>
   <td>node1</td>
   <td>192.168.0.1</td>
  </tr>
  <tr>
   <td>node2</td>
   <td>172.16.0.1</td>
  </tr>
 </tbody>
</table>
<p><strong>采用的是稳定版本默认源安装方式</strong></p>
<h2 id="环境准备">环境准备</h2>
<p><strong>解析</strong></p>
<pre><code>10.0.0.1 master
192.168.0.1 node1
172.16.0.1 node2
</code></pre>
<p><strong>设置时区</strong></p>
<pre><code>timedatectl set-timezone Asia/Shanghai
</code></pre>
<p><strong>内核模块</strong></p>
<pre><code>cat &gt; /etc/sysctl.d/kubernetes.conf &lt;&lt; EOF
# 允许 IPv6 转发请求通过iptables进行处理（如果禁用防火墙或不是iptables，则该配置无效）
net.bridge.bridge-nf-call-ip6tables = 1

# 允许 IPv4 转发请求通过iptables进行处理（如果禁用防火墙或不是iptables，则该配置无效）
net.bridge.bridge-nf-call-iptables = 1

# 启用IPv4数据包的转发功能
net.ipv4.ip_forward = 1

# 禁用发送 ICMP 重定向消息
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 提高 TCP 连接跟踪的最大数量
net.netfilter.nf_conntrack_max = 1000000

# 提高连接追踪表的超时时间
net.netfilter.nf_conntrack_tcp_timeout_established = 86400

# 提高监听队列大小
net.core.somaxconn = 1024

# 防止 SYN 攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

# 提高文件描述符限制
fs.file-max = 65536

# 设置虚拟内存交换（swap）的使用策略为0，减少对磁盘的频繁读写
vm.swappiness = 0
EOF
</code></pre>
<hr>
<pre><code>
cat &gt; /etc/modules-load.d/kubernetes.conf &lt;&lt; EOF
# /etc/modules-load.d/kubernetes.conf

# Linux 网桥支持
br_netfilter

# IPVS 加载均衡器
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh

# IPv4 连接跟踪
nf_conntrack_ipv4

# IP 表规则
ip_tables
EOF

这个要授权

chmod a+x /etc/modules-load.d/kubernetes.conf
</code></pre>
<p><strong>应用</strong></p>
<pre><code>sysctl -p /etc/sysctl.d/kubernetes.conf
</code></pre>
<p><strong>安装软件环境</strong></p>
<pre><code>apt-get install -y ipset ipvsadm
</code></pre>
<p><strong>关闭swap</strong></p>
<pre><code>swapoff -a
sed -ri 's/.*swap.*/#&amp;/' /etc/fstab
</code></pre>
<h2 id="安装containerd">安装Containerd</h2>
<pre><code>wget https://github.com/containerd/containerd/releases/download/v1.7.14/cri-containerd-1.7.14-linux-amd64.tar.gz
</code></pre>
<p><strong>解压</strong></p>
<pre><code>tar xf cri-containerd-1.7.8-linux-amd64.tar.gz -C /
</code></pre>
<p><strong>创建配置文件目录</strong></p>
<pre><code>mkdir /etc/containerd
# 创建一个默认的 containerd 配置文件
containerd config default &gt; /etc/containerd/config.toml

# 设置容器运行时（containerd + CRI）在创建容器时使用 Systemd Cgroups 驱动
sed -i '/SystemdCgroup/s/false/true/' /etc/containerd/config.toml

手动修改
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
</code></pre>
<p><strong>启动</strong></p>
<pre><code># 启用并立即启动 containerd 服务
systemctl enable --now containerd.service

# 检查 containerd 服务的当前状态
systemctl status containerd.service
</code></pre>
<p>验证环境</p>
<pre><code># 用于检查 containerd 的版本
containerd --version

# 用于与 CRI（Container Runtime Interface）兼容的容器运行时交互的命令行工具
crictl --version

# 用于运行符合 OCI（Open Container Initiative）标准的容器
runc --version

</code></pre>
<p><strong>安装k8s</strong></p>
<pre><code>apt-get update &amp;&amp; apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
</code></pre>
<p>配置kubelet</p>
<pre><code>cat &gt; /etc/default/kubelet &lt;&lt; EOF
# 该参数指定了 kubelet 使用 systemd 作为容器运行时的 cgroup 驱动程序
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
</code></pre>
<p>自启</p>
<pre><code>systemctl enable kubelet
</code></pre>
<p>创建初始化文件</p>
<pre><code>kubeadm config print init-defaults &gt; kubeadm-config.yaml
</code></pre>
<p>编辑文件内容</p>
<pre><code>apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.0.0.1    #改成自己master的ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: master    #改成解析的master主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers  #改成阿里云源
kind: ClusterConfiguration
kubernetesVersion: 1.28.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16   #添加pod网段
scheduler: {}
</code></pre>
<p><strong>初始化</strong></p>
<pre><code>kubeadm init --config=kubeadm-config.yaml
</code></pre>
<p><strong>初始化完成按照提示输入授权</strong></p>
<pre><code>mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
</code></pre>
<p><strong>部署网络插件</strong></p>
<pre><code>kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

</code></pre>]]></description><guid isPermaLink="false">/archives/202</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>技术分类</category><pubDate>Sat, 16 Mar 2024 10:50:00 GMT</pubDate></item><item><title><![CDATA[RockyLinux9.3 部署K8S]]></title><link>https://7boe.top/archives/201</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=RockyLinux9.3%20%E9%83%A8%E7%BD%B2K8S&amp;url=/archives/201" width="1" height="1" alt="" style="opacity:0;">
<h1 id="rocky-liunx93部署k8s">Rocky liunx9.3部署K8s</h1>
<h2 id="主机配置">主机配置</h2>
<p><strong>环境</strong></p>
<table>
 <thead>
  <tr>
   <th>软件</th>
   <th>软件版本</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Docker</td>
   <td>20.10.3</td>
  </tr>
  <tr>
   <td>Kubernetes</td>
   <td>1.23.0</td>
  </tr>
 </tbody>
</table>
<p><strong>服务器规划</strong></p>
<table>
 <thead>
  <tr>
   <th>服务器主机名</th>
   <th>服务器公网IP</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>master</td>
   <td>10.0.0.1</td>
  </tr>
  <tr>
   <td>node1</td>
   <td>192.168.0.1</td>
  </tr>
  <tr>
   <td>node2</td>
   <td>172.16.0.1</td>
  </tr>
 </tbody>
</table>
<h2 id="配置环境">配置环境</h2>
<p><strong>预装软件包</strong></p>
<pre><code>dnf install -y   dnf-utils  ipvsadm  telnet  wget  net-tools  conntrack  ipset  jq  iptables  curl  sysstat  libseccomp  socat  nfs-utils  fuse  

</code></pre>
<p><strong>配置模块</strong></p>
<pre><code>yum install -y ipset ipvsadm vim wget curl net-tools
# 关闭防火墙，PS：如果使用云服务器，还需要在云服务器的控制台中把防火墙关闭了或者允许所有端口。

systemctl stop firewalld
systemctl disable firewalld

# 永久关闭swap分区交换，kubeadm规定，一定要关闭
swapoff -a
sed -ri 's/.*swap.*/#&amp;/' /etc/fstab
#关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效
# iptables配置
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i &gt;/dev/null 2&gt;&amp;1 &amp;&amp; /sbin/modprobe $i;done
#加载内核模块
cat &lt;&lt;EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
nf_conntrack
EOF
 
cat &lt;&lt;EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
#内核预检
modprobe overlay
modprobe br_netfilter
#网桥转发
cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 将读取该文件中的参数设置，并将其应用到系统的当前运行状态中
sysctl -p /etc/sysctl.d/k8s.conf
# iptables生效参数
sysctl --system
</code></pre>
<h2 id="安装docker">安装Docker</h2>
<p><strong>导入软件源</strong></p>
<pre><code>yum install -y yum-utils 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
</code></pre>
<p><strong>可以先给版本变量</strong></p>
<pre><code>VERSION_STRING=3:20.10.24-3.el9 
sudo yum install docker-ce-VERSION_STRING docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</code></pre>
<p><strong>配置systmed</strong></p>
<pre><code>cat &lt;&lt;EOF &gt; /etc/docker/daemon.json
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
</code></pre>
<p><strong>重启服务</strong></p>
<pre><code>systemctl daemon-reload &amp;&amp; systemctl restart docker &amp;&amp; systemctl enable docker &amp;&amp; systemctl status docker 
</code></pre>
<h2 id="k8s安装">K8S安装</h2>
<pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt; EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum list kubeadm --showduplicates | sort -r
</code></pre>
<p><strong>安装指定版本</strong></p>
<pre><code>dnf install kubeadm-1.23.0 kubectl-1.23.0 kubelet-1.23.0
</code></pre>
<p><strong>拉取镜像</strong></p>
<pre><code>kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
</code></pre>
<h2 id="初始化">初始化</h2>
<p><strong>在Master上操作</strong>
 <br>
 <strong>使用配置文件初始化</strong></p>
<pre><code>kubeadm config print init-defaults &gt; kubeadm-config.yaml
</code></pre>
<p>配置修改</p>
<pre><code>apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 149.104.23.134 #这样改成master的公网ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master  #这样要改成解析的主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #一定要改
kind: ClusterConfiguration
kubernetesVersion: 1.23.6 #确认版本号
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16  #方便安装网络插件
scheduler: {}
</code></pre>
<p><strong>初始化完成后</strong></p>
<pre><code>mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
</code></pre>
<p><strong>安装网络插件</strong></p>
<pre><code>kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
</code></pre>]]></description><guid isPermaLink="false">/archives/201</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>Docker</category><pubDate>Thu, 22 Feb 2024 12:33:00 GMT</pubDate></item><item><title><![CDATA[幻兽帕鲁服务器搭建]]></title><link>https://7boe.top/archives/200</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E5%B9%BB%E5%85%BD%E5%B8%95%E9%B2%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA&amp;url=/archives/200" width="1" height="1" alt="" style="opacity:0;">
<h1 id="幻兽帕鲁游戏服务器搭建">幻兽帕鲁游戏服务器搭建</h1>
<p><a href="https://www.xuehaiwu.com/Pal/">在线配置修改</a>
 <br>
 <a href="https://developer.valvesoftware.com/wiki/SteamCMD">Steamcmd地址</a>
 <br>
 <a href="https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip">Windows版本</a></p>
<h2 id="windows搭建">Windows搭建</h2>
<p>一键脚本
 <br>
 <strong>Powershell</strong></p>
<pre><code>iex (irm ' https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Windows/install.ps1 ')
</code></pre>
<p><strong>配置文件位置</strong></p>
<pre><code>C:\Program Files\PalServer\steam\steamapps\common\PalServer\DefaultPalWorldSettings.ini
</code></pre>
<p><strong>高内存占用自动重启</strong></p>
<pre><code>iex (irm '  https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Windows/auto_restart_on_high_memory.ps1  ')
</code></pre>
<h2 id="linux搭建">Linux搭建</h2>
<p><strong>一键脚本</strong></p>
<pre><code>wget -O - https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Ubuntu/install.sh|sh
</code></pre>
<p><strong>配置文件</strong></p>
<pre><code>sudo chmod 777 /home/steam/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
</code></pre>
<p><strong>高内存占用自动重启</strong></p>
<pre><code>wget -O -   https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Ubuntu/auto_restart_on_high_memory.sh   | sh
</code></pre>
<p><strong>服务控制</strong></p>
<pre><code># 启动幻兽帕鲁的服务
sudo systemctl start pal-server
# 重启幻兽帕鲁的服务
sudo systemctl restart pal-server
# 关闭幻兽帕鲁的服务
sudo systemctl stop pal-server
# 查询幻兽帕鲁服务的状态
sudo systemctl status pal-server
</code></pre>
<h2 id="docker搭建">Docker搭建</h2>
<h3 id="debian">Debian</h3>
<p>存储库安装</p>
<pre><code>sudo apt update; sudo apt install software-properties-common; sudo apt-add-repository non-free; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
</code></pre>
<h3 id="ubunt">Ubunt</h3>
<pre><code>sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
</code></pre>
<h2 id="路人脚本">路人脚本</h2>
<p>Kejilion</p>
<pre><code>curl -sS -O https://kejilion.pro/palworld.sh &amp;&amp; chmod +x palworld.sh &amp;&amp; ./palworld.sh
</code></pre>
<p>xuehaiwu</p>
<pre><code>wget -O PalServerInstall.sh https://www.xuehaiwu.com/wp-content/uploads/shell/Pal/PalServerInstall.sh --no-check-certificate &amp;&amp; chmod +x PalServerInstall.sh &amp;&amp; ./PalServerInstall.sh
</code></pre>
<h2 id="手动搭建">手动搭建</h2>
<p>steamcmd命令</p>
<pre><code>直接启动
steamcmd +login anonymous +app_update 2394010 validate +quit

【相关命令】

login anonymous
# 匿名登录steam

app_update 2394010 validate
# 下载幻兽帕鲁服务app
</code></pre>]]></description><guid isPermaLink="false">/archives/200</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Fri, 26 Jan 2024 09:26:00 GMT</pubDate></item><item><title><![CDATA[keepalived(阿里云版)]]></title><link>https://7boe.top/archives/199</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=keepalived%28%E9%98%BF%E9%87%8C%E4%BA%91%E7%89%88%29&amp;url=/archives/199" width="1" height="1" alt="" style="opacity:0;">
<h1 id="阿里云上keepalived">阿里云上keepalived</h1>
<h2 id="原理解析">原理解析</h2>
<p>在之前阿里云ecs是无法使用vip的，但是现在推出了高可用虚拟IP（HaVip）可以绑定指定的ecs服务器，然后让他高可用。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F3914665071%2Fdfe2d4504235t.svg&amp;size=m" alt="">
 <br>
 原理如下，要购买eip，也就是弹性公网ip在去申请高可用虚拟ip，虚拟ip是和你的ecs在通一个网段中的，然后去使用keepalived响应vip，他会对等映射到eip上，实现高可用。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F3914665071%2F789b648297id4.svg&amp;size=m" alt=""></p>
<h2 id="实验开始">实验开始</h2>
<p><strong>购买两台通地域ecs，放在一个交换机内，然后申请免费的高可用vip。</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F3058752861%2Fp143363.png&amp;size=m" alt=""></p>
<p><strong>本示例以操作系统为CentOS的ECS实例为例，介绍如何安装Keepalived。</strong></p>
<p>登录ECS1实例。具体操作，请参见ECS连接方式概述。</p>
<p>执行以下命令，安装Keepalived。</p>
<pre><code>yum install keepalived
</code></pre>
<p>编辑keepalived.conf文件。</p>
<p>执行以下命令，编辑keepalived.conf文件。</p>
<pre><code>vim /etc/keepalived/keepalived.conf
</code></pre>
<p>执行以下命令，进入输入模式。</p>
<pre><code>i
</code></pre>
<p>根据以下信息修改keepalived.conf文件。</p>
<pre><code>! Configuration File for keepalived
vrrp_instance VI_1 {
state MASTER           #设置ECS1实例为主实例
    interface eth0          #设置网卡名，本示例配置为eth0  
    virtual_router_id 51
    nopreempt              
    priority 100             #设置优先级，数字越大，优先级越高，本示例配置主用实例优先级为100
    advert_int 1        
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.0.209   #设置ECS实例的私网IP地址，本示例配置为192.168.0.209
    unicast_peer {
        192.168.0.210           #对端ECS实例的私网IP地址，本示例配置为192.168.0.210
    }
    virtual_ipaddress {
        192.168.0.88          #设置HaVip的IP地址，本示例配置为192.168.0.88 
    }   
    garp_master_delay 1
    garp_master_refresh 5

    track_interface {
        eth0                #设置ECS实例网卡名，本示例配置为eth0
    }
}
</code></pre>
<blockquote>
 <p>说明
  <br>
  本示例仅展示需修改部分，请根据示例修改keepalived.conf文件配置。请勿直接复制本示例覆盖已有keepalived.conf文件。</p>
</blockquote>
<p>按下Esc键，输入:wq并回车以保存并关闭文件。</p>
<p>执行以下命令，启动ECS1实例的Keepalived。</p>
<pre><code>systemctl start keepalived
</code></pre>
<p>登录ECS2实例。</p>
<p>执行以下命令，安装Keepalived。</p>
<pre><code>yum install keepalived
</code></pre>
<p>编辑keepalived.conf文件。</p>
<p>执行以下命令，编辑keepalived.conf文件。</p>
<pre><code>vim /etc/keepalived/keepalived.conf
</code></pre>
<p>执行以下命令，进入输入模式。</p>
<pre><code>i
</code></pre>
<p>根据以下信息修改keepalived.conf文件。</p>
<pre><code>! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP           #设置ECS2实例为备用实例
   interface eth0          #设置网卡名，本示例配置为eth0  
   virtual_router_id 51
   nopreempt              
   priority 10             #设置优先级，数字越大，优先级越高，本示例配置备用实例优先级为10
   advert_int 1        
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   unicast_src_ip 192.168.0.210   #设置ECS实例的私网IP地址，本示例配置为192.168.0.210
   unicast_peer {
       192.168.0.209           #对端ECS实例的私网IP地址，本示例配置为192.168.0.209
   }
   virtual_ipaddress {
       192.168.0.88          #设置HaVip的IP地址，本示例配置为192.168.0.88 
   }    
   garp_master_delay 1
   garp_master_refresh 5

   track_interface {
       eth0                #设置ECS实例网卡名，本示例配置为eth0
   }
}
</code></pre>
<p>说明
 <br>
 本示例仅展示需修改部分，请根据示例修改keepalived.conf文件配置。请勿直接复制本示例覆盖已有keepalived.conf文件。</p>
<p>按下Esc键，输入:wq并回车以保存并关闭文件。</p>
<p>执行以下命令，启动ECS2实例的Keepalived。</p>
<pre><code>systemctl start keepalived
</code></pre>
<h3 id="将havip与主备ecs实例绑定">将HaVip与主备ECS实例绑定</h3>
<p>上面配置文件必须要用官方的，把他的keepalived的通信改成单播，然后这里手动绑定vip</p>
<p>您可以将HaVip绑定到ECS实例上，绑定后，ECS实例可以使用ARP协议进行该IP的宣告。</p>
<p>说明
 <br>
 HaVip仅支持绑定到同一个交换机下的ECS实例，每个HaVip最多可以绑定10台ECS实例。</p>
<p>完成以下操作，将HaVip分别与主备ECS实例绑定。</p>
<p>登录专有网络管理控制台。
 <br>
 在左侧导航栏，单击高可用虚拟IP。</p>
<p>在顶部菜单栏处，选择HaVip的地域。</p>
<p>找到步骤一：创建HaVip创建的HaVip实例，单击HaVip实例的ID。</p>
<p>在绑定资源区域ECS实例处，单击立即绑定。<img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F3058752861%2Fp237916.png&amp;size=m" alt=""></p>
<h2 id="绑定后测试即可">绑定后测试即可</h2>
<p>测试页面正常访问，以及宕机后是否会切换。</p>]]></description><guid isPermaLink="false">/archives/199</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sat, 20 Jan 2024 06:39:00 GMT</pubDate></item><item><title><![CDATA[teamspeak搭建]]></title><link>https://7boe.top/archives/198</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=teamspeak%E6%90%AD%E5%BB%BA&amp;url=/archives/198" width="1" height="1" alt="" style="opacity:0;">
<h1 id="ts语音服务器搭建">ts语音服务器搭建</h1>
<blockquote>
 <p>搭建私有语音服务器
  <br>
  先来介绍一下teamspeak吧，简单的来说，他是一款老牌的开源VoIP工具软件，可以进行语音通话，在线聊天，文件共享等等功能，不过呢，最大的特点还是它的可定制性强，以及非常低的带宽占用和计算机资源占用，下面的话我就以Centos 系统为例，简单的讲一下怎样去搭建一个属于你自己的语音服务器。</p>
</blockquote>
<h2 id="下载服务器端包">下载服务器端包</h2>
<p><a href="https://www.teamspeak.com/zh-CN/downloads/#server">下载地址</a>
 <br>
 <strong>下载到服务器上解压</strong></p>
<pre><code>tar -xvf teamspeak3-server_linux_amd64-3.13.7.tar.bz2
</code></pre>
<h2 id="开始部署">开始部署</h2>
<p><strong>无法用root启动，创建用户设置密码</strong></p>
<pre><code>useradd ts
passwd ts
</code></pre>
<p><strong>移动到home下的ts用户内</strong></p>
<pre><code>mv teamspeak3-server_linux_amd64 /home/ts/teamspeak3
chown -R ts.ts /home/ts/teamspeak3
</code></pre>
<p><strong>切换用户进去目录启动</strong></p>
<pre><code>su ts
cd
</code></pre>
<p><strong>生成授权文件</strong></p>
<pre><code>touch .ts3server_license_accepted
</code></pre>
<p><strong>启动测试</strong></p>
<pre><code>./ts3server_startscript.sh start
</code></pre>
<p><strong>前面不授权这个用户是没办法启动的</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fwww.aye10032.com%2Fimages%2Fposts%2Fteamspeak%2F%25E6%2588%2590%25E5%258A%259F%25E4%25BF%25A1%25E6%2581%25AF.png&amp;size=m" alt="">
 <br>
 <strong>把这一段信息复制下来备用，之后Ctrl +c终止服务即可</strong></p>
<h2 id="设置开机自启">设置开机自启</h2>
<pre><code>[Unit]
Description=Teamspeak server
After=network.target
[Service]
WorkingDirectory=/home/teamspeak/teamspeak3
User=teamspeak
Group=teamspeak
Type=forking
ExecStart=/home/teamspeak/teamspeak3/ts3server_startscript.sh start inifile=ts3server.ini
ExecStop=/home/teamspeak/teamspeak3/ts3server_startscript.sh stop
PIDFile=/home/teamspeak/teamspeak3/ts3server.pid
RestartSec=15
Restart=always
[Install]
WantedBy=multi-user.target
</code></pre>]]></description><guid isPermaLink="false">/archives/198</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sat, 13 Jan 2024 11:40:00 GMT</pubDate></item><item><title><![CDATA[KVM虚拟化]]></title><link>https://7boe.top/archives/197</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=KVM%E8%99%9A%E6%8B%9F%E5%8C%96&amp;url=/archives/197" width="1" height="1" alt="" style="opacity:0;">
<h1 id="kvm虚拟化">KVM虚拟化</h1>
<h2 id="概述">概述</h2>
<blockquote>
 <p>KVM，全称为Kernel-based Virtual Machine，是一个开源的虚拟化解决方案，它允许在Linux内核上创建和管理虚拟机（VM）。KVM利用Linux内核中的虚拟化技术，通过将虚拟化功能整合到内核中，实现了高性能和低开销的虚拟化。</p>
</blockquote>
<ul>
 <li>
  <p>内核虚拟化技术： KVM利用Linux内核中的硬件辅助虚拟化扩展（如Intel VT和AMD-V）来提供虚拟化支持。这使得KVM能够直接运行虚拟机，而无需使用额外的中间层。</p>
 </li>
 <li>
  <p>模块化结构： KVM采用模块化的结构，其中主要模块包括KVM内核模块、QEMU用户空间模块以及用于与KVM通信的虚拟设备模块。QEMU（Quick Emulator）是一个用于虚拟化的开源模拟器。</p>
 </li>
 <li>
  <p>支持多种硬件平台： KVM支持多种硬件平台，包括x86、x86_64、ARM和PowerPC等。这使得它能够在不同类型的处理器上运行虚拟机。</p>
 </li>
 <li>
  <p>性能和效率： 由于KVM将虚拟化功能嵌入到内核中，因此它能够实现接近原生性能的虚拟化。这对于需要高性能和低延迟的应用场景非常重要。</p>
 </li>
 <li>
  <p>QEMU集成： KVM通常与QEMU一起使用，QEMU负责虚拟设备的模拟，而KVM则负责处理虚拟机的硬件加速部分。这种结合提供了完整的虚拟化解决方案。</p>
 </li>
 <li>
  <p>管理工具： KVM可以通过多种管理工具进行配置和控制，包括命令行工具（如virsh）、图形界面工具（如virt-manager）以及各种管理API。</p>
 </li>
 <li>
  <p>支持Libvirt： Libvirt是一个用于管理虚拟化平台的开源工具包，它提供了统一的接口，可以用于管理KVM以及其他虚拟化技术。</p>
 </li>
 <li>
  <p>总体而言，KVM是一个强大的虚拟化解决方案，它为运行在Linux系统上的虚拟机提供了高性能和灵活性。通过与QEMU和Libvirt等工具的结合，KVM使得虚拟化变得更加容易管理和部署。</p>
 </li>
</ul>
<p>文章原文引用
 <br>
 <a href="https://muou666.com/archives/015">文章1</a>
 <br>
 <a href="https://xbd666.cn/archives/44">文章2</a></p>]]></description><guid isPermaLink="false">/archives/197</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 8 Jan 2024 09:27:00 GMT</pubDate></item><item><title><![CDATA[K8s公网部署（翻新版）]]></title><link>https://7boe.top/archives/196</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=K8s%E5%85%AC%E7%BD%91%E9%83%A8%E7%BD%B2%EF%BC%88%E7%BF%BB%E6%96%B0%E7%89%88%EF%BC%89&amp;url=/archives/196" width="1" height="1" alt="" style="opacity:0;">
<h1 id="k8s公网部署">k8s公网部署</h1>
<p><strong>翻新之前的文章</strong>
 <br>
 <a href="https://7boe.top/archives/187">写的很乱的，多种安装方式</a></p>
<blockquote>
 <p>本次实验使用三台机器在不同地区进行部署，实验环境使用到香港服务器和杭州阿里云服务器，公网环境部署网络稳定性不能得到保证，本文部署方式仅供参考。</p>
</blockquote>
<h2 id="环境准备">环境准备</h2>
<p><strong>环境</strong></p>
<table>
 <thead>
  <tr>
   <th>软件</th>
   <th>软件版本</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Docker</td>
   <td>20.0.1</td>
  </tr>
  <tr>
   <td>Kubernetes</td>
   <td>1.23.6</td>
  </tr>
 </tbody>
</table>
<p><strong>服务器规划</strong></p>
<table>
 <thead>
  <tr>
   <th>服务器主机名</th>
   <th>服务器公网IP</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>master</td>
   <td>149.104.23.134</td>
  </tr>
  <tr>
   <td>node1</td>
   <td>121.41.53.83</td>
  </tr>
  <tr>
   <td>node2</td>
   <td>116.62.32.149</td>
  </tr>
 </tbody>
</table>
<hr>
<p><strong>解析hosts</strong></p>
<pre><code>cat &gt;&gt; /etc/hosts &lt;&lt; EOF
149.104.23.134 master
121.41.53.83 node1
116.62.32.149 node2
EOF
</code></pre>
<p><strong>执行初始化脚本</strong></p>
<pre><code>bash &lt;(curl -sSl https://git.7boe.top/root/Shell/-/raw/af8fc85f5d15181942fc791305dc64e94c32c36e/k8s.sh?inline=false)
</code></pre>
<h3 id="docker安装">Docker安装</h3>
<p><strong>安装软件导入docker官方源</strong></p>
<pre><code>yum install -y yum-utils 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
</code></pre>
<p><strong>使用docker20版本</strong></p>
<pre><code>sudo yum install docker-ce-20.10.14-3.el7 docker-ce-cli-20.10.14-3.el7 containerd.io docker-compose-plugin
</code></pre>
<p><strong>其他版本有部分差异，可能会出奇怪问题。</strong>
 <br>
 <strong>换docker镜像源</strong></p>
<pre><code>cat &lt;&lt;EOF &gt; /etc/docker/daemon.json
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
</code></pre>
<p><strong>设置开机自启</strong></p>
<pre><code>systemctl daemon-reload &amp;&amp; systemctl restart docker &amp;&amp; systemctl enable docker &amp;&amp; systemctl status docker 
</code></pre>
<blockquote>
 <p>这里没有安装cri,因为k8s1.23版本还在提供docker作为容器运行</p>
</blockquote>
<p><strong>确认这里一定是systemd</strong></p>
<blockquote>
 <p>因为k8s是默认systemd作为cgroup driver，如果Docker使用另外的驱动，则可能出现不稳定的情况。</p>
</blockquote>
<pre><code>docker info | grep "Cgroup Driver"
</code></pre>
<h3 id="安装k8s">安装k8s</h3>
<p><strong>k8s导入源使用阿里云的源</strong></p>
<pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt; EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
</code></pre>
<p><strong>安装k8s</strong></p>
<pre><code>sudo yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 --disableexcludes=kubernetes
</code></pre>
<p><strong>开机自启</strong></p>
<pre><code>systemctl enable kubelet &amp;&amp; systemctl start kubelet &amp;&amp; systemctl status kubelet

</code></pre>
<p><strong>拉取镜像</strong></p>
<pre><code>kubeadm config images pull --kubernetes-version=v1.23.6 --image-repository registry.aliyuncs.com/google_containers
</code></pre>
<p><strong>也可以使用配置文件拉取</strong></p>
<pre><code>vim kubeadm-config-image.yaml
</code></pre>
<pre><code>apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers 
</code></pre>
<p><strong>拉取</strong></p>
<pre><code>kubeadm config images pull --config kubeadm-config-image.yaml
</code></pre>
<h3 id="初始化">初始化</h3>
<blockquote>
 <p>之前这里是最头疼的地方，如果是一个内网里面直接就好了，但是公网的话直接写公网ip他就一直报错，提示找不到这个ip，应为阿里云服务器网卡没有绑定公网ip，eth0写的是内网vpc专业网络内网ip，采用的自动对外映射公网方式。</p>
</blockquote>
<p><strong>这样初始化要变通一下</strong>
 <br>
 先生成一个配置文件</p>
<pre><code>kubeadm config print init-defaults &gt; kubeadm-config.yaml
</code></pre>
<ul>
 <li>pod-network-cidr：pod资源的网段，需与pod网络插件的值设置一致。通常，Flannel网络插件的默认为10.244.0.0/16，Calico插件的默认值为192.168.0.0/16；</li>
 <li>api-server：使用Master作为api-server，所以就是master机器的IP地址。</li>
 <li>image-repository：拉取镜像的镜像仓库，默认是k8s.gcr.io。</li>
 <li>nodeRegistration.name：改成master</li>
</ul>
<p>更改配置文件</p>
<pre><code>apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 149.104.23.134 #这样改成master的公网ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master  #这样要改成解析的主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #一定要改
kind: ClusterConfiguration
kubernetesVersion: 1.23.6 #确认版本号
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 192.168.0.0/16  #方便安装网络插件
scheduler: {}
</code></pre>
<p><strong>检查环境是否支持</strong></p>
<pre><code>kubeadm init phase preflight --config=kubeadm-config.yaml 
kubeadm init --config=kubeadm-config.yaml
</code></pre>
<blockquote>
 <p>这里基本是初始化必失败的
  <br>
  到这里，会有2种结果：
  <br>
  如果是内网，上面的docker版本，kubeadm版本没错的话，会成功.
  <br>
  如果在云服务器（腾讯云，阿里云）上，一定会失败（原因和办法在这里）：</p>
</blockquote>
<h3 id="云服务器初始化失败">云服务器初始化失败</h3>
<pre><code>[kubelet-check] Initial timeout of 40s passed.
</code></pre>
<blockquote>
 <p>卡在这里应为他找不到你设定的apiserver IP地址
  <br>
  但是你必须要初始化，目的是为了生成k8s的配置文件，否则下面的步骤中你会找不到etcd.yaml），失败后再执行下面的步骤！！</p>
</blockquote>
<pre><code>vim /etc/kubernetes/manifests/etcd.yaml
</code></pre>
<p>更改以下配置，<a href="https://blog.51cto.com/u_15152259/2690063">来源文章</a>。</p>
<pre><code>    - --listen-client-urls=https://127.0.0.1:2379,https://101.34.112.190:2379
    - --listen-peer-urls=https://101.34.112.190:2380
</code></pre>
<p><strong>改成</strong></p>
<pre><code>    - --listen-client-urls=https://127.0.0.1:2379
    - --listen-peer-urls=https://127.0.0.1:2380
</code></pre>
<p><strong>因为上方的地址他监听不到，要改成本地</strong></p>
<pre><code>systemctl stop kubelet 
netstat -anp |grep kube
</code></pre>
<blockquote>
 <p>请注意，不要执行 kubeadm reset，先 systemctl stop kubelet ，然后手动通过 netstat -anp |grep kube 来找pid，再通过 kill -9 pid 强杀。否则又会生成错误的etcd配置文件，这里非常关键！！！</p>
</blockquote>
<p><strong>重新初始化，但是跳过etcd文件已经存在的检查：</strong></p>
<pre><code># 重新启动kubelet
systemctl start kubelet
重新初始化，跳过配置文件生成环节，不要etcd的修改要被覆盖掉
kubeadm init --config=kubeadm-config.yaml --skip-phases=preflight,certs,kubeconfig,kubelet-start,control-plane,etcd
</code></pre>
<h3 id="成功初始化">成功初始化</h3>
<p>如果所有配置都正常，很快会输出下面的信息（秒级别）代表了成功，否则大概率是失败（由于网络超时等）：</p>
<pre><code>Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:
加入k8s 命令
</code></pre>
<p><strong>后面命令要是没了用这个，生成一个新的</strong></p>
<pre><code>kubeadm token create --print-join-command
</code></pre>
<p><strong>token忘记</strong></p>
<pre><code>kubeadm token list
</code></pre>
<p><strong>每一个节点都执行的话都可以操作kubectl,文件要scp过去</strong></p>
<pre><code>mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
</code></pre>
<h2 id="安装网络插件">安装网络插件</h2>
<h3 id="calico">calico</h3>
<p><strong>查看官网文档，看对应版本</strong></p>
<pre><code>https://docs.tigera.io/calico/3.25/getting-started/kubernetes/self-managed-onprem/onpremises
</code></pre>
<p><strong>3.25目前支持1.23的k8s</strong></p>
<pre><code>https://docs.tigera.io/calico/3.25/getting-started/kubernetes/requirements
</code></pre>
<p><strong>安装</strong></p>
<pre><code>kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml 
</code></pre>
<h3 id="flannel">flannel</h3>
<p><code>如果您使用自定义podCIDR（不是10.244.0.0/16），您首先需要下载上述清单并修改网络以匹配您的网络。</code></p>
<pre><code>kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
</code></pre>
<h2 id="允许master节点部署pod">允许master节点部署pod</h2>
<p><strong>调度策略</strong></p>
<ul>
 <li>NoSchedule: 一定不能被调度</li>
 <li>PreferNoSchedule: 尽量不要调度</li>
 <li>NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod</li>
</ul>
<p><strong>查看当前调度策略</strong></p>
<pre><code>kubectl describe node|grep -E "Name:|Taints:"
</code></pre>
<p><strong>更改master节点可被部署pod</strong></p>
<pre><code>kubectl taint nodes --all node-role.kubernetes.io/master:NoSchedule-
</code></pre>]]></description><guid isPermaLink="false">/archives/196</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sun, 7 Jan 2024 14:53:00 GMT</pubDate></item><item><title><![CDATA[Debian11升级12]]></title><link>https://7boe.top/archives/195</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Debian11%E5%8D%87%E7%BA%A712&amp;url=/archives/195" width="1" height="1" alt="" style="opacity:0;">
<h1 id="debian11升级12">Debian11升级12</h1>
<h2 id="先更新系统">先更新系统</h2>
<pre><code class="language-shell">apt update
apt upgrade -y
apt dist-upgrade -y
apt autoclean
apt autoremove -y
</code></pre>
<h2 id="换源升级">换源升级</h2>
<pre><code class="language-shell">sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list.d/*.list

当然也可以用这个源

deb http://deb.debian.org/debian/ bookworm main
deb-src http://deb.debian.org/debian/ bookworm main
deb http://security.debian.org/debian-security bookworm-security main
deb-src http://security.debian.org/debian-security bookworm-security main
deb http://deb.debian.org/debian/ bookworm-updates main
deb-src http://deb.debian.org/debian/ bookworm-updates main
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
</code></pre>
<h2 id="开始升级">开始升级</h2>
<pre><code class="language-shell">apt update
apt upgrade -y
apt dist-upgrade -y
</code></pre>
<h2 id="重新启动">重新启动</h2>
<pre><code class="language-shell">apt autoclean
apt autoremove -y
reboot
</code></pre>
<h2 id="查看版本内核">查看版本内核</h2>
<pre><code class="language-shell">uname -a
</code></pre>]]></description><guid isPermaLink="false">/archives/195</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Thu, 4 Jan 2024 08:30:00 GMT</pubDate></item><item><title><![CDATA[Ansible精简]]></title><link>https://7boe.top/archives/194</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Ansible%E7%B2%BE%E7%AE%80&amp;url=/archives/194" width="1" height="1" alt="" style="opacity:0;">
<h1 id="ansible的使用以及剧本">ansible的使用以及剧本</h1>
<blockquote>
 <p>在使用的每台机器上安装ansible</p>
</blockquote>
<h2 id="安装配置">安装配置</h2>
<pre><code>yum install -y epel*
yum install -y ansible
</code></pre>
<p><strong>配置文件</strong></p>
<pre><code>vim /etc/ansible/hosts
vim /etc/ansible/ansible.cfg
</code></pre>
<p>主机组和包含组配置文件写法</p>
<pre><code>[webservers]
192.168.10.11
[weball:children] 
webserver
</code></pre>
<p><strong>某一个组配置连接变量</strong></p>
<pre><code>[weball:vars] 
ansible_ssh_port=22     
ansible_ssh_user=root   
ansible_ssh_private_key_file=/root/.ssh/id_rsa
ansible_ssh_pass=1 
</code></pre>
<p>看默认主机文件里的主机</p>
<pre><code>ansible  weball --list-hosts

</code></pre>
<p>在别的地方写主机清单</p>
<pre><code>vim /opt/hostlist
#使用-i参数调用里面的组
ansible -i /opt/hostlist all -m ping -o
</code></pre>
<h2 id="模块">模块</h2>
<h3 id="复制模块">复制模块</h3>
<pre><code>1.远程复制备份模块：copy
模块参数详解：  
src=:指定源文件路径
dest=:目标地址（拷贝到哪里）
owner:指定属主
group:指定属组
mode:指定权限,可以以数字指定比如0644
backup:在覆盖之前将原文件备份，备份文件包含时间信息。有两个选项：yes|no
</code></pre>
<p><strong>使用命令实例</strong></p>
<pre><code>把本地的拷贝到对方机器
ansible web -m copy -a 'src=/root/b dest=/root/a '
带上copy=no是指不从本地拷贝，在远程主机上操作
</code></pre>
<h3 id="用户管理user模块">用户管理user模块</h3>
<p><strong>添加用户：</strong></p>
<pre><code>ansible web -m user -a "name=123"
添加叫123的用户
</code></pre>
<p><strong>删除用户</strong></p>
<pre><code>ansible web -m user -a "name=123 state=absent"
</code></pre>
<h3 id="软件包管理-yum模块">软件包管理 yum模块</h3>
<p><strong>安装软件包</strong></p>
<pre><code>ansible web -m yum -a 'name=httpd state=latest'
ansible web -m yum -a 'name=httpd state=remove'
</code></pre>
<h3 id="服务管理service模块">服务管理service模块</h3>
<pre><code>[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started" #启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=stopped" #停止
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=restarted" #重启
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=yes" #开机启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=no"  #开机关闭
</code></pre>
<h3 id="文件模块file">文件模块file</h3>
<p><strong>参数</strong></p>
<pre><code>模块参数详解：  
owner:修改属主
group:修改属组
mode:修改权限
path=:要修改文件的路径
recurse：递归的设置文件的属性，只对目录有效
        yes:表示使用递归设置
state:
touch:创建一个新的空文件
directory:创建一个新的目录，当目录存在时不会进行修改
</code></pre>
<p><strong>实例</strong></p>
<pre><code>ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch ' 
ansible web -m file -a 'path=/tmp/99 mode=777 state=directory ' 
</code></pre>
<h3 id="脚本-script-模块">脚本 script 模块</h3>
<blockquote>
 <p>指定本地的脚本文件，到远程主机运行一次
  <br>
  注意：和 shell 模块的不同，shell 模块是要求客户端上有这个脚本才能执行；script 是要求 ansible 服务端有这个脚本就可以了，执行的时候是不会拷贝这个脚本到客户端的。</p>
</blockquote>
<pre><code>ansible webservers1 -m script -a "chdir=/mnt /root/test.sh"
</code></pre>
<p>要给脚本权限</p>
<pre><code>chmod o+x test.sh
</code></pre>
<blockquote>
 <p>参数:
  <br>
  creates：如果其后跟的文件存在，则不执行脚本；
  <br>
  removes：如果其后跟的文件存在，则执行脚本；</p>
</blockquote>
<pre><code>ansible webservers1 -m script -a "/root/awk.sh removes=/etc/passwd"
</code></pre>
<h3 id="收集信息模块setup">收集信息模块setup</h3>
<p><strong>收集主机组信息</strong></p>
<pre><code>ansible webservers1 -m setup  #收集所有信息
</code></pre>
<p>查询主机组的ip</p>
<pre><code>ansible webservers1 -m setup -a 'filter=ansible_all_ipv4_addresses' #只查询ipv4的地址
</code></pre>
<h3 id="archive模块">archive模块</h3>
<blockquote>
 <p>作用：压缩
  <br>
  常用参数
  <br>
  path 打包目录名称
  <br>
  dest 声称打包文件名称
  <br>
  format 打包格式
  <br>
  owner 指定文件所属人
  <br>
  mode 指定文件权限</p>
</blockquote>
<pre><code>ansible webservers1 -m archive -a "path=/etc dest=/mnt/etc.tar.gz format=gz"
</code></pre>
<h4 id="解压模块unarchive">解压模块unarchive</h4>
<blockquote>
 <p>参数解释:
  <br>
  copy：默认为yes，当copy=yes，那么拷贝的文件是从ansible主机复制到远程主机上的，如果设置为copy=no，那么会在远程主机上寻找src源文件
  <br>
  src：源路径，可以是ansible主机上的路径，也可以是远程主机上的路径，如果是远程主机上的路径，则需要设置copy=no
  <br>
  dest：远程主机上的目标路径</p>
</blockquote>
<pre><code>ansible webservers -m unarchive -a 'src=/root/jdk-8u191-linux-x64.tar.gz dest=/opt/ copy=yes' -o
</code></pre>
<h3 id="cron模块作用计划任务">cron模块作用：计划任务</h3>
<blockquote>
 <p>常用参数
  <br>
  minute 分钟
  <br>
  hour 小时
  <br>
  day 天
  <br>
  month 月
  <br>
  weekday 周
  <br>
  name 任务名称
  <br>
  job 任务脚本或命令
  <br>
  disabled yes 禁用计划任务/no 启动计划任务
  <br>
  state=absent 删除计划任务</p>
</blockquote>
<pre><code>ansible webservers -m cron -a 'job="rm -rf /mnt/*" name="deletefile" minute="53" hour="20" day="7" month="5"'
</code></pre>
<h2 id="ansible-playbook">ansible-playbook</h2>
<h3 id="概念">概念</h3>
<ul>
 <li>
  <p>剧本（Playbook）： 一个包含一系列任务的 Ansible 配置文件，通常使用 YAML 编写。</p>
 </li>
 <li>
  <p>主机组（Hosts）： 定义任务将在哪些主机上执行。可以使用具体的主机名、IP 地址，也可以使用在 Ansible 主机清单（Inventory）中定义的主机组。</p>
 </li>
 <li>
  <p>任务（Task）： 定义了在目标主机上执行的一组操作。每个任务通常与一个模块（Module）关联，模块用于执行特定的功能，例如安装软件、配置文件等。</p>
 </li>
 <li>
  <p>模块（Module）： Ansible 操作的基本单元，用于执行特定的功能。例如，apt 模块用于管理 Debian/Ubuntu 系统上的软件包。</p>
 </li>
 <li>
  <p>角色（Roles）： 可以将一组任务和文件组织成可重用的角色。角色包含了在多个剧本中共享的任务和变量。</p>
 </li>
 <li>
  <p>变量（Variables）： 允许你在剧本中定义和使用变量，使剧本更具灵活性和可重用性。</p>
 </li>
 <li>
  <p>处理器（Handlers）： 用于在剧本中定义的任务中触发的操作，通常用于在特定条件下重新启动服务或执行其他动作</p>
 </li>
</ul>
<h3 id="架构">架构</h3>
<p>playbook的基础组件：</p>
<ul>
 <li>name:
  <br>
  定义playbook或者task的名称(描述信息)，每一个play都可以完成一个任务。</li>
 <li>hosts:
  <br>
  playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机.</li>
 <li>user :
  <br>
  remote_user则用于指定远程主机上的执行任务的用户，也可以使用user（基本上是root）</li>
 <li>tasks :
  <br>
  任务列表play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行，即在所有主机上完成第一个任务后再开始第二个。</li>
 <li>vars:
  <br>
  定义变量（如果不使用内部变量需要提前定义）</li>
 <li>vars_files:
  <br>
  调用定义变量文件</li>
 <li>notify:
  <br>
  任务执行结果如果是发生更改了的则触发定义在handler的任务执行</li>
 <li>handlers:
  <br>
  用于当前关注的资源发生变化时采取一定指定的操作</li>
</ul>
<h4 id="角色">角色</h4>
<p>目录顺序:</p>
<ul>
 <li>role_name/ ---角色名称=目录
  <ul>
   <li>files/：存储一些可以用copy调用的静态文件。</li>
   <li>tasks/： 存储任务的目录,此目录中至少应该有一个名为main.yml的文件，用于定义各task；其它的文件需要由main.yml进行“包含”调用es；</li>
   <li>handlers/:此目录中至少应该有一个名为main.yml的文件，用于定义各handler；其它的文件需要由（与notify:名字相同，方便notify通知执行下一条命令）通过main.yml进行“包含”调用；</li>
   <li>vars/：此目录中至少应该有一个名为main.yml的文件，用于定义各variable；其它的文件需要由main.yml进行“包含”调用；</li>
   <li>templates/：存储由template模块调用的模板文本； （也可以调用变量）</li>
   <li>site.yml：定义哪个主机应用哪个角色</li>
  </ul></li>
</ul>]]></description><guid isPermaLink="false">/archives/194</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 3 Jan 2024 01:33:00 GMT</pubDate></item><item><title><![CDATA[Rclone挂载]]></title><link>https://7boe.top/archives/193</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Rclone%E6%8C%82%E8%BD%BD&amp;url=/archives/193" width="1" height="1" alt="" style="opacity:0;">
<h1 id="rcloen下载以及挂载命令">rcloen下载以及挂载命令</h1>
<p>参考文章
 <br>
 <a href="https://blog.laoda.de/archives/aria2-rclone-filebrowser/#toc-head-16">咕咕歌</a>
 <br>
 <a href="https://www.nodeseek.com/post-9607-1">nodeseek</a>
 <br>
 <a href="https://willxup.top/archives/deploy-alist-and-rclone">wil</a></p>
<h2 id="安装">安装</h2>
<p><strong>依赖</strong></p>
<pre><code class="language-shell">apt-get install fuse3
</code></pre>
<pre><code class="language-shell">curl https://rclone.org/install.sh | sudo bash 
</code></pre>
<h2 id="编辑配置">编辑配置</h2>
<pre><code>rclone config
</code></pre>
<pre><code>n) New remote：新建一个远程存储。
s) Set configuration password：设置配置文件的密码。
q) Quit config：退出配置界面。
</code></pre>
<p>新建配置
 <br>
 输入配置名称</p>
<h2 id="挂载命令">挂载命令</h2>
<pre><code class="language-shell">rclone mount alist: /mnt/ --allow-other --allow-non-empty --vfs-cache-mode writes --vfs-cache-max-age 48h --vfs-cache-max-size 5G --cache-dir /tmp/cache --vfs-read-chunk-size 128M --vfs-read-chunk-size-limit 1G --buffer-size 128M --umask 000 --daemon
</code></pre>
<h3 id="微软云">微软云</h3>
<p><strong>挂载命令一样</strong></p>
<blockquote>
 <p>选择时到最后一边让他在生成一个命令，在windows下执行然后弹窗认证，复制cmd中的token，挂载</p>
</blockquote>
<p><strong>阿里云盘挂载</strong></p>
<pre><code class="language-shell">--header "Referer:https://www.aliyundrive.com/drive"
</code></pre>
<h2 id="卸载命令">卸载命令</h2>
<pre><code class="language-shell">fusermount -u /path/to/mount/point
</code></pre>
<p><strong>写一个自动挂载服务</strong></p>
<pre><code class="language-shell">vim /usr/lib/systemd/system/rclone.service

[Unit]
Description=Rclone
AssertPathIsDirectory=LocalFolder
After=network-online.target

[Service]
Type=simple
ExecStart=rclone mount alist: /mnt/ --allow-other --allow-non-empty --vfs-cache-mode writes --vfs-cache-max-age 48h --vfs-cache-max-size 5G --cache-dir /tmp/cache --vfs-read-chunk-size 128M --vfs-read-chunk-size-limit 1G --buffer-size 128M --umask 000
ExecStop=fusermount -u LocalFolder
Restart=on-abort
User=root

[Install]
WantedBy=default.target
</code></pre>
<h2 id="挂载配置参数">挂载配置参数</h2>
<pre><code class="language-shell">用法：
  rclone mount 远程:path /挂载点路径 [标志]

标志：
      --allow-non-empty                        允许挂载到非空目录（在Windows上不支持）
      --allow-other                            允许其他用户访问（在Windows上不支持）
      --allow-root                             允许根用户访问（在Windows上不支持）
      --async-read                             使用异步读取（在Windows上不支持）（默认为true）
      --attr-timeout Duration                  缓存文件/目录属性的时间（默认为1s）
      --daemon                                 在后台运行挂载并退出父进程（由于后台输出被抑制，请使用--log-file和--log-format=pid,...以监视）（在Windows上不支持）
      --daemon-timeout Duration                rclone响应内核的时间限制（在Windows上不支持）（默认为0s）
      --daemon-wait Duration                   等待来自守护程序的准备好挂载的时间（在Linux上是最大时间，在OSX/BSD上是常量睡眠时间）（在Windows上不支持）（默认为1m0s）
      --debug-fuse                             调试FUSE内部 - 需要 -v
      --default-permissions                    使内核强制执行基于文件模式的访问控制（在Windows上不支持）
      --devname string                         设置设备名称 - 默认为远程:path
      --dir-cache-time Duration                缓存目录条目的时间（默认为5m0s）
      --dir-perms FileMode                     目录权限（默认为0777）
      --file-perms FileMode                    文件权限（默认为0666）
      --fuse-flag stringArray                  直接传递给libfuse/WinFsp的标志或参数（如果需要重复）
      --gid uint32                             覆盖文件系统设置的gid字段（在Windows上不支持）
  -h, --help                                   获取挂载的帮助信息
      --max-read-ahead SizeSuffix              顺序读取时可以预读的字节数（在Windows上不支持）（默认为128Ki）
      --mount-case-insensitive Tristate        告诉操作系统挂载是大小写不敏感（true）还是大小写敏感（false），而不考虑后端（auto）（默认为未设置）
      --network-mode                           将其挂载为远程网络驱动器，而不是固定磁盘驱动器（仅在Windows上受支持）
      --no-checksum                            不比较上/下载时的校验和
      --no-modtime                             不读取/写入修改时间（可以加快速度）
      --no-seek                                不允许在文件中查找
      --noappledouble                          忽略Apple Double（._）和.DS_Store文件（仅在OSX上受支持）（默认为true）
      --noapplexattr                           忽略所有“com.apple.*”扩展属性（仅在OSX上受支持）
  -o, --option stringArray                     用于libfuse/WinFsp的选项（如果需要，可以重复）
      --poll-interval Duration                 等待更改之间的轮询时间，必须小于dir-cache-time并且仅在支持的远程上（设置为0以禁用）（默认为1m0s）
      --read-only                              仅允许只读访问
      --uid uint32                             覆盖文件系统设置的uid字段（在Windows上不支持）
      --umask int                              覆盖文件系统设置的权限位（在Windows上不支持）（默认为18）
      --vfs-cache-max-age Duration             缓存中的对象的最大时间（默认为1h0m0s）
      --vfs-cache-max-size SizeSuffix          缓存中对象的最大总大小（默认为关闭）
      --vfs-cache-min-free-space SizeSuffix    包含缓存的磁盘上的目标最小剩余空间（默认为关闭）
      --vfs-cache-mode CacheMode               缓存

</code></pre>
<h2 id="使用语法">使用语法</h2>
<pre><code class="language-shell">命令	    说明
rclone copy	复制
rclone move	移动，如果要在移动后删除空源目录，加上 –delete-empty-src-dirs 参数
rclone sync	同步：将源目录同步到目标目录，只更改目标目录
rclone size	查看网盘文件占用大小
rclone delete	删除路径下的文件内容
rclone purge	删除路径及其所有文件内容
rclone mkdir	创建目录
rclone rmdir	删除目录
rclone rmdirs	删除指定环境下的空目录。如果加上 –leave-root 参数，则不会删除根目录
rclone check	检查源和目的地址数据是否匹配
rclone ls	列出指定路径下的所有的文件以及文件大小和路径
rclone lsl	比上面多一个显示上传时间
rclone lsd	列出指定路径下的目录
rclone lsf	列出指定路径下的目录和文件
</code></pre>
<h3 id="其他参数">其他参数</h3>
<pre><code class="language-shell">命令	说明
-n = –dry-run	测试运行，查看Rclon在实际运行中会进行哪些操作
-P = –progress	显示实时传输进度，500mS刷新一次，否则默认1分钟刷新一次
–cache-chunk-size 5M	块的大小，默认5M越大上传越快，占用内存越多，太大可能会导致进程中断
–onedrive-chunk-size 100M	提高OneDrive上传速度适用于G口宽带服务器（默认为320KB）
–drive-chunk-size 64M	提高Google Drive上传速度适用于G口宽带服务器（默认为8M）
–cache-chunk-total-size SizeSuffix	块可以在本地磁盘上占用的总大小，默认10G
–transfers=N	并行文件数，默认为4
–config string	指定配置文件路径，string为配置文件路径
–ignore-errors	跳过错误
–size-only	根据文件大小校验，不校验hash
–drive-server-side-across-configs	服务端对服务端传输
</code></pre>]]></description><guid isPermaLink="false">/archives/193</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Thu, 21 Dec 2023 07:57:00 GMT</pubDate></item><item><title><![CDATA[Redis集群]]></title><link>https://7boe.top/archives/192</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Redis%E9%9B%86%E7%BE%A4&amp;url=/archives/192" width="1" height="1" alt="" style="opacity:0;">
<h1 id="redis集群以及哨兵">Redis集群以及哨兵</h1>
<blockquote>
 <p>当提到 Redis 时，通常是指一个开源的内存数据库（In-Memory Database），它是一个支持键-值对存储的高性能、持久化的数据库系统。Redis 被广泛用于缓存、会话存储、排行榜、实时分析等场景。</p>
</blockquote>
<p><strong>以下是 Redis 的一些关键特性和概念：</strong></p>
<ol>
 <li>
  <p><strong>键-值存储：</strong> Redis 是一个键-值存储系统，每个键都与一个值关联。这些值可以是字符串、哈希、列表、集合或有序集合等数据结构。</p>
 </li>
 <li>
  <p><strong>内存数据库：</strong> Redis 将数据存储在内存中，这使得它具有极高的读写性能。然而，为了持久化数据，Redis 也支持将数据定期保存到磁盘上。</p>
 </li>
 <li>
  <p><strong>数据结构：</strong> Redis 提供多种数据结构，包括字符串、哈希表、列表、集合和有序集合。这些数据结构赋予了 Redis 不同的用途，例如字符串用于缓存、列表用于消息队列、有序集合用于排行榜等。</p>
 </li>
 <li>
  <p><strong>持久性：</strong> Redis 支持将数据保存到磁盘上，以便在服务器重启时能够恢复数据。可以通过 RDB 快照和 AOF（Append-Only File）两种方式来实现持久化。</p>
 </li>
 <li>
  <p><strong>分布式：</strong> Redis 支持主从复制，可以配置多个 Redis 实例，其中一个为主服务器，其他为从服务器，从服务器可以复制主服务器上的数据。此外，Redis 还提供了集群模式，支持在多个节点之间进行数据分片。</p>
 </li>
 <li>
  <p><strong>事务和原子操作：</strong> Redis 支持事务，可以通过 MULTI、EXEC、DISCARD 和 WATCH 等命令实现。Redis 还提供了一些原子操作，确保在并发环境中的一致性。</p>
 </li>
 <li>
  <p><strong>发布订阅：</strong> Redis 支持发布订阅模式，允许客户端订阅频道并接收实时的消息通知。</p>
 </li>
 <li>
  <p><strong>多语言支持：</strong> Redis 提供了多种客户端库，支持多种编程语言，包括但不限于 Python、Java、Node.js、Ruby 等。</p>
 </li>
</ol>
<h2 id="安装redis">安装redis</h2>
<p><strong>下载地址</strong></p>
<pre><code>https://codeload.github.com/redis/redis/tar.gz/refs/tags/7.2.3
</code></pre>
<p><strong>下载完成解压出来</strong></p>
<pre><code>tar zxvf redis.gz 
</code></pre>
<p><strong>安装编译工具</strong></p>
<pre><code>yum install make gcc 
</code></pre>
<p><strong>进入目录直接make,编译完成后修改配置文件</strong></p>
<h3 id="配置文件类">配置文件类</h3>
<p><strong>常规单节点配置文件</strong></p>
<pre><code>bind 0.0.0.0 #这里改为全部地址可以访问
protected-mode no #加密传输关闭
prot 6379 #常规端口号，无需修改
daemonize yes　　#开启后台模式将no改为yes
requirepass 1122334 #设置密码
dir ./data #数据目录
logfile "/var/log/redis.log"  #设置日志存放路径与日志名
appendfilename appendonly.aof  #AOF文件名
dbfilename dump.rdb #rdb文件名
appendonli yes #AOF开启
appendfsync everysec  
always     #每次有数据修改发生时都会写入AOF文件。
everysec  #每秒钟同步一次，该策略为AOF的缺省策略
no          #从不同步。高效但是数据不会被持久化
</code></pre>
<h3 id="redis主从复制">Redis主从复制</h3>
<p><strong>修改配置</strong></p>
<pre><code>replicaof 192.168.100.1 6379 #填写需要复制的master机器ip即可
</code></pre>
<p><strong>验证</strong></p>
<pre><code>info replication #进入redis终端后
</code></pre>
<h3 id="哨兵模式">哨兵模式</h3>
<blockquote>
 <p>Redis哨兵模式是一种用于高可用性（High Availability）的解决方案，通过监控和管理Redis主从复制集群，使其在主服务器失效时能够自动进行故障转移。哨兵模式主要有以下几个组成部分：</p>
</blockquote>
<ul>
 <li>
  <p>主服务器（Master）：
   <br>
   主服务器是处理写入操作的节点，它负责接收客户端的写入请求。在哨兵模式中，有一个主服务器，多个从服务器通过主从复制与主服务器同步数据。</p>
 </li>
 <li>
  <p>从服务器（Replica）：
   <br>
   从服务器是主服务器的复制品，它通过主从复制机制与主服务器同步数据。从服务器可以用于处理读取请求，提高系统的读取性能，并在主服务器失效时被提升为新的主服务器。</p>
 </li>
 <li>
  <p>哨兵节点（Sentinel）：
   <br>
   哨兵节点是一种特殊的Redis实例，负责监控主服务器和从服务器的健康状况。当主服务器发生故障时，哨兵节点可以自动完成故障检测，并协调执行故障转移操作。多个哨兵节点可以组成哨兵群体，共同协作以确保高可用性。</p>
 </li>
</ul>
<p><strong>通过哨兵模式，系统能够实现以下功能：</strong></p>
<ul>
 <li>
  <p>故障检测： 哨兵节点定期检查主服务器和从服务器的健康状态，发现主服务器故障后会触发故障转移操作。</p>
 </li>
 <li>
  <p>故障转移： 当主服务器不可用时，哨兵节点会选出一个从服务器作为新的主服务器，继续提供服务。</p>
 </li>
 <li>
  <p>配置管理： 哨兵节点负责管理配置信息，包括主从服务器的连接信息、故障转移策略等。</p>
 </li>
 <li>
  <p>通知机制： 哨兵节点可以通过发布/订阅机制通知其他节点有关于故障转移等事件的信息。</p>
 </li>
</ul>
<p>**主观下线和客观下线 **</p>
<pre><code>主观下线：Subjectively Down，简称 SDOWN，指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。 
客观下线：Objectively Down， 简称 ODOWN，指的是多个 Sentinel 实例在对Master Server做出 SDOWN  判断，并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后，得出的Master  Server下线判断，然后开启failover
</code></pre>
<p><strong>修改配置文件</strong></p>
<pre><code>vim sentinel.conf 
</code></pre>
<h3 id="哨兵配置文件">哨兵配置文件</h3>
<pre><code>daemonize yes #设置哨兵放后台运行
logfile "/var/log/sentinel.log" #设置哨兵日志
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时，才能真正认为该master已经不可用了。 (slave上面写的是master的ip，master写自己ip)
sentinel auth-pass mymaster 1122334 #如果设置了密码那就需要指定密码，否则不需要
sentinel down-after-milliseconds mymaster 3000   #单位毫秒
sentinel failover-timeout mymaster 10000   #若sentinel在该配置值内未能完成failover(故障转移)操作（即故障时master/slave自动切换），则认为本次failover失败。

protected-mode no  #关闭加密模式--新添加到sentinel配置文件中  ----老版本中需需要添加
</code></pre>
<p><strong>启动</strong></p>
<pre><code>/src/redis-sentinel sentinel.conf
</code></pre>
<h2 id="redis集群">Redis集群</h2>
<p>更改配置文件</p>
<pre><code>cluster-enabled yes #启用集群
cluster-config-file nodes.conf #集群配置文件，由redis自动更新，不需要手动配置，运行多实例时请注修改为对应端口
cluster-node-timeout 5000 #单位毫秒。集群节点超时时间，即集群中主从节点断开连接时间阈值，超过该值则认为主节点不可以，从节点将有可能转为master
cluster-replica-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master，但是有些slave可能与master断开连接一段时间了导致数据过于陈旧，不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。
cluster-migration-barrier 1 #一个主机将保持连接的最小数量的从机，以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes #集群中的所有slot（16384个）全部覆盖，才能提供服务
</code></pre>
<p>使用命令创建集群</p>
<pre><code>./redis-cli --cluster create --cluster-replicas 1 192.168.116.172 192.168.116.173 192.168.116.174 192.168.116.175 192.168.116.1746 192.168.116.177
</code></pre>
<p>每一个后面跟着一个从节点，然后开始分槽。
 <br>
 掉线恢复后master会改变</p>]]></description><guid isPermaLink="false">/archives/192</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 20 Dec 2023 08:31:00 GMT</pubDate></item><item><title><![CDATA[zerotier搭建(翻新篇)]]></title><link>https://7boe.top/archives/191</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=zerotier%E6%90%AD%E5%BB%BA%28%E7%BF%BB%E6%96%B0%E7%AF%87%29&amp;url=/archives/191" width="1" height="1" alt="" style="opacity:0;">
<h1 id="zeortier搭建moon以及planet服务器翻新版">Zeortier搭建moon以及planet服务器(翻新版)</h1>
<h2 id="moon是什么为什么需要moon">Moon是什么，为什么需要Moon？</h2>
<blockquote>
 <p>ZeroTier通过自己的多个根服务器帮助我们建立虚拟的局域网，让虚拟局域网内的各台设备可以打洞直连。这些根服务器的功能有些类似于通过域名查询找到服务器地址的DNS服务器，它们被称为Planet。然而这里存在一个非常严重的问题，就是Zerotier的官方行星服务器都部署在国外，从国内访问的时候延迟很大，甚至在网络高峰期的时候都没法访问，这也会导致我们的虚拟局域网变得极不稳定，经常掉链子。</p>
</blockquote>
<blockquote>
 <p>为了应对网络链接的延迟和不稳定，提高虚拟局域网的速度和可靠性，Zerotier允许我们建立自己的moon卫星中转服务器。</p>
</blockquote>
<blockquote>
 <p>作为Moon服务器不需要具备太强大的CPU性能/内存空间和存储空间，虚拟机、VPS、或者云服务器甚至一个树莓派都行，当然，这台服务器需要长时间可靠在线并且具有静态IP地址（ZeroTier官网上说公网IP或者内网IP都可以，只是如果用的是内网IP的话，在外网的设备就只能依靠Planet而不能使用moon了）。</p>
</blockquote>
<h2 id="moon服务器配置过程">Moon服务器配置过程</h2>
<p><strong>官方安装</strong></p>
<pre><code>curl -s https://install.zerotier.com/ | sudo bash
</code></pre>
<p><strong>加入网络</strong></p>
<pre><code>sudo zerotier-cli join 3efa5cb78a961967
</code></pre>
<p><strong>创建moon配置文件</strong></p>
<pre><code>cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public &gt; moon.json
vim moon.json
</code></pre>
<p><strong>编辑</strong></p>
<blockquote>
 <p>这里我们需要根据自己服务器的公网静态IP，修改stableEndpoints那一行格式如下，其中11.22.33.44为你的公网IP，9993是默认的端口号</p>
</blockquote>
<pre><code>"stableEndpoints": [ "11.22.33.44/9993" ]
</code></pre>
<p><strong>换成自己的公网ip，注意引号</strong></p>
<p><strong>生成文件</strong></p>
<pre><code>sudo zerotier-idtool genmoon moon.json
</code></pre>
<p><strong>加入moon</strong></p>
<p>在zerotier文件夹下</p>
<pre><code>mkdir moons.d
mv 000000*.moon moons.d
service zerotier-one restart
zerotier-cli listpeers
</code></pre>
<p><strong>显示moon即可</strong></p>
<h2 id="搭建plnet服务器">搭建plnet服务器</h2>
<ul>
 <li>Planet：就类似官方的行星服务器，用来管理zerotier客户端的地址信息，帮助建立客户端之间的链接，以及无法建立直接的链接的时候，可以作为中续服务器来转发客户端之间的流量。</li>
 <li>moom：作为中续服务器存在，官方节点的都在海外，建立国内节点做为中续，可以使转发的效率更高，延迟也低。</li>
</ul>
<h3 id="脚本安装">脚本安装</h3>
<p><strong>debian</strong></p>
<pre><code>wget https://gitee.com/opopop880/zerotier_planet/raw/master/zerotier_planet_debain.sh &amp;&amp; chmod +x zerotier_planet_debain.sh &amp;&amp; ./zerotier_planet_debain.sh
</code></pre>
<p><strong>Centos</strong></p>
<pre><code>wget https://gitee.com/opopop880/zerotier_planet/raw/master/zertotier_planet.sh&nbsp;&amp;&amp; chmod +x zertotier_planet.sh &amp;&amp; ./zertotier_planet.sh&nbsp;
</code></pre>
<p>查看监听端口</p>
<pre><code>ss -tunlp | grep ztncui
</code></pre>
<p><strong>查看管理页面</strong></p>
<blockquote>
 <p>执行完成后，打开ip:3000或者<a href="https://ip:3443%EF%BC%8C%E7%94%A8%E6%88%B7%E5%90%8Dadmin">https://ip:3443，用户名admin</a> 密码password</p>
</blockquote>
<h3 id="docker搭建">docker搭建</h3>
<p><strong>GITHUB项目</strong>：<a href="https://github.com/xubiaolin/docker-zerotier-planet">地址</a></p>
<p><strong>下载项目</strong></p>
<pre><code>git clone https://ghproxy.markxu.online/https://github.com/xubiaolin/docker-zerotier-planet.git
</code></pre>
<p><strong>进入目录直接</strong></p>
<pre><code>./deploy.sh
</code></pre>]]></description><guid isPermaLink="false">/archives/191</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><pubDate>Mon, 11 Dec 2023 11:49:00 GMT</pubDate></item><item><title><![CDATA[RabbitMQ集群搭建]]></title><link>https://7boe.top/archives/190</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=RabbitMQ%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA&amp;url=/archives/190" width="1" height="1" alt="" style="opacity:0;">
<h1 id="rabbitmq集群搭建">RabbitMQ集群搭建</h1>
<h2 id="介绍">介绍</h2>
<blockquote>
 <p>RabbitMQ 是一个开源的消息代理软件，实现了高级消息队列协议（AMQP，Advanced Message Queuing Protocol）。它充当了消息的中间件，用于在分布式系统中传递消息，提供了可靠的、异步的、跨应用程序的消息传递机制。</p>
</blockquote>
<p><strong>RabbitMQ 的主要特点和用途：</strong></p>
<ul>
 <li>
  <p>消息队列： RabbitMQ 作为消息队列（Message Queue）的一种实现，允许应用程序之间通过消息进行通信。消息队列可以解耦发送者和接收者，使得它们可以独立地演进和扩展。</p>
 </li>
 <li>
  <p>解耦应用组件： 通过在系统的不同部分之间引入消息队列，可以实现应用组件的解耦。这意味着系统的不同部分可以独立开发、部署和扩展，而不必知道其他部分的实现细节。</p>
 </li>
 <li>
  <p>异步通信： RabbitMQ 支持异步消息传递，允许发送者发送消息后立即继续执行，而不必等待接收者的响应。这有助于提高系统的并发性和响应性。</p>
 </li>
 <li>
  <p>可靠性： RabbitMQ 提供了消息持久性选项，确保即使在代理重启后，也不会丢失已经发送的消息。这对于关键的业务消息和任务很重要。</p>
 </li>
 <li>
  <p>灵活的消息路由： RabbitMQ 提供了灵活的消息路由和交换机（Exchange）的机制。通过不同类型的交换机和路由规则，可以实现多样化的消息路由策略。</p>
 </li>
 <li>
  <p>工作队列： RabbitMQ 可以用作工作队列，允许任务的异步执行。生产者将任务放入队列，而工作者则从队列中取出任务并处理。这对于分布式任务处理和负载均衡非常有用。</p>
 </li>
 <li>
  <p>发布/订阅模式： RabbitMQ 支持发布/订阅模式，允许多个消费者订阅同一队列，并接收相同的消息。这在实现广播和通知系统时很有用。</p>
 </li>
 <li>
  <p>可扩展性： RabbitMQ 支持水平扩展，可以通过添加更多的节点来提高消息代理的处理能力。这有助于应对不断增长的负载。</p>
 </li>
 <li>
  <p>社区支持和丰富文档： RabbitMQ 是一个开源项目，拥有庞大的社区支持和丰富的文档资源，使得使用和集成 RabbitMQ 相对容易。</p>
 </li>
</ul>
<p><strong>集群模式</strong></p>
<blockquote>
 <p>RabbitMQ 支持不同类型的集群模式，以确保高可用性和水平扩展。以下是 RabbitMQ 中常见的集群模式：</p>
</blockquote>
<ul>
 <li>
  <p>镜像队列集群（Queue Mirroring Cluster）： 这是 RabbitMQ 中最常见的集群模式。在这种模式下，队列的所有消息都会在集群中的多个节点上进行复制（镜像）。每个队列的复制体称为队列的镜像。如果一个节点失效，仍然可以从其他节点获取相同队列的消息。这提高了队列的可用性和可靠性。</p>
 </li>
 <li>
  <p>所有者模式（Quorum Queues Cluster）： 在 RabbitMQ 3.8 版本及更高版本中引入了 Quorum Queues，这是一种基于 Raft 协议的新队列类型。Quorum Queues 提供更强的数据一致性和容错性，它们的数据存储在多个节点上。Quorum Queues 的集群模式称为所有者模式。在这种模式下，队列的所有者（leader）负责处理消息的写入和复制，而其他节点则充当跟随者（followers），复制队列的数据。</p>
 </li>
 <li>
  <p>基于发布/订阅的集群模式（Publisher-Subscriber Cluster）： RabbitMQ 也支持发布/订阅模式的集群，其中交换机和队列的绑定关系会在所有集群节点之间共享。这样，无论消息生产者连接到哪个节点，消息都能够正确地发布到相应的队列。这种模式可以用于构建分布式的发布/订阅系统。</p>
 </li>
</ul>
<p><strong>专业术语</strong></p>
<pre><code>ConnectionFactory（连接管理器）：应用程序与Rabbit之间建立tcp连接的管理器，程序代码中使用；
Channel（信道）：消息推送使用的通道；
Exchange（交换器）：用于接受、分配消息；
Queue（队列）：用于存储生产者的消息；类似存放商品的仓库和商店。是生产商品的工厂和购买商品的用户之间的中转站。
Broker：简单来说就是消息队列服务器实体
vhost：虚拟主机，一个broker里可以开设多个vhost，用作不同用户的权限分离.
producer：消息生产者，就是投递消息的程序。
consumer：消息消费者，就是接受消息的程序。
user:用户
Binding: exchange 与 queue 之间的虚拟链接，binding 中可以包含 routing key。binding 信息被保存到 exchange 的查询表中，用于消息的分发。
</code></pre>
<p><strong>节点类型</strong></p>
<pre><code>磁盘节点（Disk Node）： 磁盘节点是 RabbitMQ 集群中的普通节点，它负责存储消息和元数据，以确保消息的持久性。磁盘节点会将消息写入磁盘，以便在节点重启后仍然可以访问。大多数节点都是磁盘节点，尤其是那些处理关键业务消息的节点。

内存节点（Memory Node）： 内存节点是一种轻量级的节点类型，它主要用于缓存消息，而不将它们写入磁盘。内存节点对于处理大量短暂消息的情况非常有用，因为它们能够更快地处理消息。然而，内存节点不能保证消息的持久性，因此在节点重启后可能会丢失消息。

镜像节点（Mirrored Node）： 镜像节点是 RabbitMQ 集群中的节点，它主要用于存储队列的镜像副本。镜像节点在集群中的其他节点上维护队列的镜像，以提供消息的冗余存储。这有助于提高队列的可用性和可靠性。

所有者节点（Quorum Queues Owner Node）： 在 RabbitMQ 3.8 版本及更高版本中引入的 Quorum Queues 中，引入了所有者节点的概念。所有者节点负责处理队列的写入和复制，而其他节点充当跟随者（followers），负责复制队列的数据。这种节点类型用于 Quorum Queues 集群模式。
</code></pre>
<h3 id="搭建集群">搭建集群</h3>
<pre><code>192.168.50.138 	rabbitmq-1
192.168.50.139	rabbitmq-2
192.168.50.140	rabbitmq-3
</code></pre>
<p><strong>下载</strong></p>
<pre><code>wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.10/rabbitmq-server-3.7.10-1.el7.noarch.rpm
</code></pre>
<p><strong>下载erlang</strong></p>
<pre><code>wget https://cloud.7boe.top/d/HKOSS/%E8%BD%AF%E4%BB%B6%E5%8C%85/RabbitMQ/erlang-21.3.8.21-1.el7.x86_64.rpm
</code></pre>
<p><strong>开启web管理页面</strong></p>
<pre><code>rabbitmq-plugins enable rabbitmq_management
</code></pre>
<p><strong>创建用户并且授权</strong></p>
<pre><code>rabbitmqctl add_user wang passwd
rabbitmqctl set_user_tags wang administrator
</code></pre>
<p><strong>列出用户</strong></p>
<pre><code>rabbitmqctl list_users
</code></pre>
<p><strong>给权限</strong></p>
<pre><code>rabbitmqctl set_permissions -p "/" wang ".*" ".*" ".*"
</code></pre>
<p><strong>拷贝</strong></p>
<pre><code>cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
</code></pre>
<p><strong>修改配置文件</strong></p>
<pre><code>61 {lookback_users,[]}
</code></pre>
<p><strong>重启</strong></p>
<pre><code>systemctl restart rabbitmq-server

</code></pre>
<p><strong>常用端口</strong></p>
<pre><code>4369 -- erlang端口
5672 --程序连接端口
15672 -- 管理界面ui端口
25672 -- server间内部通信口
</code></pre>
<p><strong>创建数据目录</strong></p>
<pre><code>mkdir -p /data/rabbitmq/data
mkdir -p /data/rabbitmq/logs
chmod 777 -R /data/rabbitmq
chmod 777 -R /data/rabbitmq/logs
chown rabbitmq.rabbitmq /data/ -R
</code></pre>
<p><strong>新写一个env变量配置文件</strong></p>
<pre><code>vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
</code></pre>
<p>其他两台机器要拷贝cookie</p>
<pre><code>scp root@10.31.162.200:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
</code></pre>
<p>加入集群的机器要关闭
 <br>
 被加入的master要开启</p>
<pre><code>rabbitmqctl stop_app
chmod 400 .erlang.cookie
chown rabbitmq.rabbitmq .erlang.cookie
rabbitmqctl start_app
</code></pre>
<p>以内存加入，然后开启</p>
<pre><code>rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
rabbitmqctl start_app
</code></pre>
<p><strong>加入方式</strong></p>
<pre><code>（1）默认rabbitmq启动后是磁盘节点，在这个cluster命令下，mq-2和mq-3是内存节点，
mq-1是磁盘节点。
（2）如果要使mq-2、mq-3都是磁盘节点，去掉--ram参数即可。
（3）如果想要更改节点类型，可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤
</code></pre>
<p>集群状态</p>
<pre><code>rabbitmqctl cluster_status
</code></pre>
<p>页面查看</p>
<pre><code>http://192.168.50.138:15672
</code></pre>
<h3 id="镜像集群">镜像集群</h3>
<p><strong>一条命令即可</strong></p>
<pre><code>rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'
</code></pre>
<p><strong>设置策略</strong></p>
<pre><code>rabbitmqctl set_policy [-p Vhost] Name Pattern Definition
-p Vhost： 可选参数，针对指定vhost下的queue进行设置
Name: policy的名称，可以定义
Pattern: queue的匹配模式(正则表达式),也就是说会匹配一组。
Definition：镜像定义，包括ha-mode,ha-params,ha-sync-mode
    ha-mode:指明镜像队列的模式
        all：表示在集群中所有的节点上进行镜像
        exactly：表示在指定个数的节点上进行镜像，节点的个数由ha-params指定
    ha-sync-mode：进行队列中消息的同步方式，有效值为automatic和manual
    ha-params：ha-mode模式需要用到的参数
</code></pre>]]></description><guid isPermaLink="false">/archives/190</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Fri, 8 Dec 2023 13:25:00 GMT</pubDate></item><item><title><![CDATA[Keepalived+LVS]]></title><link>https://7boe.top/archives/189</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Keepalived%2BLVS&amp;url=/archives/189" width="1" height="1" alt="" style="opacity:0;">
<h1 id="keepalived高可用lvs">Keepalived高可用+LVS</h1>
<blockquote>
 <p>keepalived 是一个用于实现高可用性（High Availability, HA）的开源软件，主要用于在 Linux 系统中实现服务的故障转移和负载均衡。它通过在多个服务器之间共享虚拟 IP（VIP）地址和状态信息，确保在某个节点发生故障时，服务可以快速切换到另一个节点。</p>
</blockquote>
<p><strong>以下是 keepalived 的主要优势和功能：</strong></p>
<ul>
 <li>
  <p>故障转移： keepalived 允许多台服务器协同工作，共享同一个虚拟 IP 地址。如果其中一台服务器出现故障，keepalived 可以自动将虚拟 IP 地址转移到正常工作的节点，从而确保服务的可用性。</p>
 </li>
 <li>
  <p>负载均衡： 除了故障转移之外，keepalived 还可以用于负载均衡。它可以根据服务器的性能和负载情况动态地将请求分发到不同的节点，以避免某个节点过载，提高整体性能。</p>
 </li>
 <li>
  <p>健康检查： keepalived 可以定期检查服务器的健康状况。如果某个节点未能响应或处于不健康状态，keepalived 将采取措施将虚拟 IP 转移到其他正常的节点。
   <br>
   简化配置： keepalived 提供了一个相对简单的配置文件，使得用户可以轻松地配置虚拟 IP、优先级、健康检查等参数。配置文件采用类似于 iptables 风格的语法，易于理解和修改。</p>
 </li>
 <li>
  <p>支持 VRRP 协议： keepalived 使用虚拟路由冗余协议（Virtual Router Redundancy Protocol, VRRP）来实现故障转移。VRRP 允许多个节点合作以提供共享的虚拟 IP 地址，其中一个节点被选为主节点，负责响应流量。</p>
 </li>
 <li>
  <p>开源和免费： keepalived 是开源软件，可以免费使用。这使得它成为许多组织和项目中实现高可用性解决方案的选择。</p>
 </li>
</ul>
<hr>
<p><strong>keepalived专业术语</strong></p>
<ul>
 <li>
  <p>在 keepalived 和类似高可用性方案的上下文中，有一些专业术语被广泛使用。以下是一些与 keepalived 相关的专业术语：</p>
 </li>
 <li>
  <p>VRRP（Virtual Router Redundancy Protocol）： 虚拟路由器冗余协议，是一种用于实现路由器冗余的协议。keepalived 使用 VRRP 来协调多个节点之间的虚拟 IP 地址的状态和切换。</p>
 </li>
 <li>
  <p>VIP（Virtual IP）： 虚拟 IP 地址，是在 keepalived 中共享的 IP 地址。在多个节点之间，只有当前主节点拥有 VIP，其他节点在主节点发生故障时可能接管这个 VIP。</p>
 </li>
 <li>
  <p>VRRP Instance： VRRP 实例，表示一组配置共享相同 VRRP 虚拟 IP 的节点。每个 VRRP 实例有一个唯一的标识符（通常是数字），用于区分不同的实例。</p>
 </li>
 <li>
  <p>Priority： 优先级，是用来确定哪个节点将成为 VRRP 实例的主节点的参数。拥有较高优先级的节点将成为主节点，负责处理流量。</p>
 </li>
 <li>
  <p>Preemption： 抢占，是一个设置，用于确定当主节点重新上线时是否要重新抢占 VIP。如果启用了抢占，主节点恢复后将尝试重新获得 VIP。</p>
 </li>
 <li>
  <p>Advertisement Interval： 广告间隔，是主节点发送 VRRP 通告的时间间隔。通告包含当前节点的状态和优先级信息。</p>
 </li>
 <li>
  <p>Authentication： 认证，是通过密码（或密钥）确保节点之间安全通信的机制。只有知道正确密码的节点才能成为 VRRP 实例的一部分。</p>
 </li>
 <li>
  <p>Unicast/ Multicast： VRRP 通告可以通过单播（Unicast）或组播（Multicast）方式进行传播。这决定了通告是直接发送到指定节点还是通过组播地址发送给网络上的所有节点。</p>
 </li>
 <li>
  <p>Floating IP： 浮动 IP，是指与 VRRP VIP 相关联的 IP 地址。这个 IP 地址可以在节点之间“浮动”，即在主节点切换时从一个节点转移到另一个节点。</p>
 </li>
 <li>
  <p>这些术语在 keepalived 的文档和相关的高可用性文献中经常出现，理解它们有助于更好地配置和理解 keepalived 的工作原理。</p>
 </li>
</ul>
<pre><code>VS：Virtual Server            #虚拟服务

Director, Balancer            #负载均衡器、分发器

RS：Real Server                #后端请求处理服务器 

CIP: Client IP                 #用户端IP

VIP：Director Virtual IP       #负载均衡器虚拟IP

DIP：Director IP               #负载均衡器IP

RIP：Real Server IP            #后端请求处理服务器IP
</code></pre>
<h2 id="lvs">LVS</h2>
<p>核心模块</p>
<pre><code>LVS的管理工具和内核模块 ipvsadm/ipvs

ipvsadm：用户空间的命令行工具，用于管理集群服务及集群服务上的RS等；

ipvs：工作于内核上的程序，可根据用户定义的集群实现请求转发；
</code></pre>
<p><strong>LVS负载均衡工作模式</strong></p>
<pre><code>
LVS/NAT：网络地址转换模式，进站/出站的数据流量经过分发器(IP负载均衡，他修改的是IP地址)  --利用三层功能
LVS/DR  ：直接路由模式，只有进站的数据流量经过分发器(数据链路层负载均衡，因为他修改的是目的mac地址)--利用二层功能mac地址
LVS/TUN： 隧道模式，只有进站的数据流量经过分发器

FULL-NAT模式
</code></pre>
<h3 id="nat模式">NAT模式</h3>
<pre><code>NAT 模式（Network Address Translation）： 在这种模式下，负载均衡器通过修改传入请求的目标 IP 地址和端口，将其转发给后端服务器。后端服务器返回的响应经过负载均衡器，负载均衡器再将其发送给客户端。这样，负载均衡器对外隐藏了后端服务器的真实 IP 地址。

优势：简单易用，适用于不需要直接与后端服务器通信的场景。
缺点：对于大量并发连接，可能会成为性能瓶颈。
</code></pre>
<h3 id="路由模式">路由模式</h3>
<pre><code>直接路由模式（Direct Routing）： 在这种模式下，负载均衡器将请求直接转发给后端服务器，不修改目标 IP 地址。后端服务器收到请求后，直接将响应返回给客户端。负载均衡器通过 ARP 协议来劫持后端服务器的 IP 地址。

优势：性能较高，因为负载均衡器不需要修改 IP 地址。
缺点：负载均衡器和后端服务器必须在同一子网中，因为 ARP 劫持需要在同一广播域内工作。

</code></pre>
<h3 id="tun转发模式">TUN转发模式</h3>
<pre><code>IP 转发模式（IP Tunneling）： 在这种模式下，负载均衡器通过创建一个虚拟隧道（Tunnel）将请求和响应转发给后端服务器。负载均衡器对外使用 VIP，而后端服务器使用真实 IP 地址。

优势：可以跨越不同的子网，适用于更复杂的网络拓扑。
缺点：相对于其他模式，可能引入一些额外的网络开销。
在 LVS 中，这些工作模式可以选择不同的调度算法，例如轮询（Round Robin）、加权轮询（Weighted Round Robin）、最小连接数（Least Connections）、加权最小连接数（Weighted Least Connections）等，以确定将请求分发给哪个后端服务器。
</code></pre>
<h3 id="lvs的部署">lVS的部署</h3>
<p><strong>安装软件</strong></p>
<pre><code>yum -y install ipvsadm
</code></pre>
<p><strong>命令参数</strong></p>
<pre><code>-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-a --add-server  #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式（也是LVS默认的模式）
-s --scheduler #使用的调度算法，默认调度算法是 wlc
</code></pre>
<p><strong>算法</strong></p>
<pre><code>固定调度算法：rr，wrr，dh，sh
动态调度算法：wlc，lc，sed，nq，lblc，lblcr
固定调度算法：即调度器不会去判断后端服务器的繁忙与否，一如既往得将请求派发下去。
动态调度算法：调度器会去判断后端服务器的繁忙程度，然后依据调度算法动态得派发请求。
</code></pre>
<p><strong>部署前准备</strong></p>
<pre><code>-C -clear #清除内核虚拟服务器表中的所有记录。
-S -save #保存虚拟服务器规则到标准输出，输出为-R 选项可读的格式
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
--numeric, -n：#以数字形式输出地址和端口号
</code></pre>
<h4 id="lvs准备">LVS准备</h4>
<pre><code>程序包：ipvsadm（LVS管理工具）

主程序：/usr/sbin/ipvsadm

规则保存工具：/usr/sbin/ipvsadm-save  &gt; /path/to/file

配置文件：/etc/sysconfig/ipvsadm-config
</code></pre>
<p><strong>解析主机</strong></p>
<pre><code>192.168.246.166 lvs-server
192.168.246.161 real-server1
192.168.246.162 real-server2
</code></pre>
<p><strong>设置vip</strong></p>
<pre><code>ip addr add dev ens33 192.168.246.160/32
</code></pre>
<p><strong>开启</strong></p>
<pre><code>service ipvsadm start
</code></pre>
<p><strong>保存</strong></p>
<pre><code>ipvsadm --save &gt; /etc/sysconfig/ipvsadm
</code></pre>
<p>LVS分发策略</p>
<pre><code>-A：添加VIP
-t：用的是tcp协议
-a：添加的是lo的vip地址
-r：转发到real-serve rip
-s：算法
-L|-l –list #显示内核虚拟服务器表
--numeric, -n：#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式（也是LVS默认的模式）
-S -save #保存虚拟服务器规则到标准输出，输出为-R 选项可读的格式
rr：轮循
如果添加ip错了，删除命令如下:
# ip addr del 192.168.246.193 dev ens33
</code></pre>
<h4 id="开始设置">开始设置</h4>
<pre><code>ipvsadm -C 清除规则
ipvsadm -A -t 192.168.246.160:80 -s -rr
ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.162 -g 
ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.161 -g
ipvsadm -S &gt; /etc/sysconfig/ipvsadm 报存转发规则
ipvsadm -ln 查看链接

</code></pre>
<p>在被负载的机器上绑定vip</p>
<pre><code>ip addr add dev lo 192.168.246.160/32
echo 1 &gt; /proc/sys/net/ipv4/conf/all/arp_ignore 忽略arp广播
</code></pre>
<h3 id="静态算法">静态算法</h3>
<ul>
 <li>
  <p>LVS（Linux Virtual Server）提供了多种调度算法，用于确定将请求分发给哪个后端服务器。每种调度算法都有其独特的特点，适用于不同的负载均衡场景。以下是几种常见的 LVS 调度算法：</p>
 </li>
 <li>
  <p>轮询（Round Robin）： 这是最简单的调度算法之一。每个新的请求按照服务器列表的顺序分配到下一个服务器。当请求分配完所有服务器后，算法重新开始。这样，每个服务器都有机会服务请求，实现了基本的负载均衡。</p>
 </li>
 <li>
  <p>加权轮询（Weighted Round Robin）： 类似于轮询，但为每个服务器分配了权重，以便更重要的服务器获得更多的请求。服务器的权重可以根据其性能或硬件规格进行配置。</p>
 </li>
 <li>
  <p>最小连接数（Least Connections）： 请求被分配到当前连接数最少的服务器上。这种算法适用于后端服务器性能不一致的情况，以确保将请求发送到负载较轻的服务器上。</p>
 </li>
 <li>
  <p>加权最小连接数（Weighted Least Connections）： 类似于最小连接数算法，但每个服务器都分配了一个权重，以确保更重要的服务器获得更多的请求。</p>
 </li>
 <li>
  <p>最短响应时间（Least Response Time）： 请求被分配到响应时间最短的服务器上。这需要负载均衡器实时监测服务器的响应时间，并动态地调整请求的分发。</p>
 </li>
 <li>
  <p>加权最短响应时间（Weighted Least Response Time）： 类似于最短响应时间算法，但为每个服务器分配了权重，以确保更重要的服务器获得更多的请求。</p>
 </li>
 <li>
  <p>目标哈希（Destination Hashing）： 根据请求的目标 IP 地址哈希值将请求分配给特定的服务器。这确保相同 IP 地址的请求始终由相同的服务器处理，对于某些应用场景可能更有利。</p>
 </li>
 <li>
  <p>IP 范围调度（IP Range）： 根据请求的源 IP 地址或目标 IP 地址的范围将请求分配给特定的服务器。这可以用于按地理位置或其他标准分配请求。</p>
 </li>
</ul>
<h2 id="keepalive">Keepalive</h2>
<p><strong>安装keepalived</strong></p>
<pre><code>yum install keepalived
</code></pre>
<p><strong>编辑配置文件</strong></p>
<pre><code>vim /etc/keepalived/keepalived.conf
</code></pre>
<p><strong>master只保存</strong></p>
<pre><code>! Configuration File for keepalived

global_defs {
   router_id directory1   #辅助改为directory2
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备
    interface ens33     #VIP绑定接口
    virtual_router_id 80  #整个集群的调度器一致
    priority 100         #back改为50
    advert_int 1         #检查间隔，默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.246.16/24
    }
}

</code></pre>
<p>backup配置</p>
<pre><code>! Configuration File for keepalived

global_defs {
   router_id directory2
}

vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    virtual_router_id 80
    priority 50   #辅助改为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.246.16/24
    }
}
</code></pre>
<p>nginx停掉vip并不会漂移到backup
 <br>
 需要脚本杀死keepalived让他自动漂移</p>
<pre><code>
#!/bin/bash
curl -I http://localhost &amp;&gt;/dev/null	
if [ $? -ne 0 ];then
	systemctl stop keepalived
fi
</code></pre>
<p>访问不到页面直接停掉keepalived会让vip漂移
 <br>
 配置文件里面添加</p>
<pre><code>}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx_status.sh"
   interval 5    #调用脚本之间的间隔，默认为1秒
}
    track_script {
        check_nginx
    }
}

</code></pre>
<h3 id="lvs_director--keepalived">LVS_Director + KeepAlived</h3>
<p>配置文件</p>
<pre><code>! Configuration File for keepalived

global_defs {
   router_id lvs-keepalived-master    #辅助改为lvs-backup
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33                #VIP绑定接口
    virtual_router_id 80         #VRID 同一组集群，主备一致          
    priority 100            #本节点优先级，辅助改为50
    advert_int 1            #检查间隔，默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.246.110/32
    }
}

virtual_server 192.168.246.110 80 {    #LVS配置
	delay_loop 6   #健康检查rs时间间隔
	lb_algo rr     #LVS调度算法
	lb_kind DR     #LVS集群模式（路由模式）
	protocol TCP      #健康检查使用的协议
	real_server 192.168.246.162 80 {
		weight 1
		inhibit_on_failure   #当该节点失败时，把权重设置为0，而不是从IPVS中删除
		TCP_CHECK {          #健康检查
			connect_port 80   #检查的端口
			connect_timeout 3  #连接超时的时间
			}
		}
	real_server 192.168.246.163 80 {
		weight 1
		inhibit_on_failure
		TCP_CHECK {
			connect_timeout 3
			connect_port 80
			}
		}
}

</code></pre>
<p><strong>被负载的后端</strong></p>
<pre><code>ip addr add dev lo 192.168.246.110/32
echo "net.ipv4.conf.all.arp_ignore = 1" &gt;&gt; /etc/sysctl.conf
sysctl -p
</code></pre>]]></description><guid isPermaLink="false">/archives/189</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Fri, 8 Dec 2023 12:23:00 GMT</pubDate></item><item><title><![CDATA[K8S集群搭建多种方式]]></title><link>https://7boe.top/archives/187</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=K8S%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%E5%A4%9A%E7%A7%8D%E6%96%B9%E5%BC%8F&amp;url=/archives/187" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下k8s集群部署">Linux下k8s集群部署</h1>
<h2 id="安装环境">安装环境</h2>
<blockquote>
 <p>本次安装在Centos7下操作
  <br>
  准备环境
  <br>
  需要三台服务器，两个node节点，以及一个master。</p>
</blockquote>
<p><strong>环境</strong></p>
<table>
 <thead>
  <tr>
   <th>软件</th>
   <th>软件版本</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Docker</td>
   <td>23.0.1</td>
  </tr>
  <tr>
   <td>Kubernetes</td>
   <td>1.26.1</td>
  </tr>
 </tbody>
</table>
<p><strong>服务器规划</strong></p>
<table>
 <thead>
  <tr>
   <th>服务器主机名</th>
   <th>服务器IP</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>master</td>
   <td>10.31.162.200</td>
  </tr>
  <tr>
   <td>node1</td>
   <td>10.31.162.201</td>
  </tr>
  <tr>
   <td>node2</td>
   <td>10.31.162.202</td>
  </tr>
 </tbody>
</table>
<hr>
<h3 id="准备环境">准备环境</h3>
<p><strong>关闭selinux和防火墙</strong></p>
<pre><code>systemctl stop firewalld
systemctl disable firewalld
</code></pre>
<p><strong>关闭selinux</strong></p>
<pre><code>sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效
</code></pre>
<p><strong>关闭swapoff -a</strong></p>
<pre><code>sed -i 's/.*swap.*/#&amp;/' /etc/fstab
</code></pre>
<h5 id="加载内核模块"><strong>加载内核模块：</strong></h5>
<pre><code>cat &lt;&lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
</code></pre>
<p><strong>内核预检</strong></p>
<pre><code>modprobe overlay
modprobe br_netfilter
</code></pre>
<p><strong>安装软件包</strong></p>
<pre><code>apt-get install -y ipset ipvsadm vim wget curl net-tools
yum install -y ipset ipvsadm vim wget curl net-tools
</code></pre>
<p><strong>额外的</strong></p>
<pre><code>停止 AppArmor 服务
systemctl stop apparmor.service

禁用 AppArmor 服务
systemctl disable apparmor.service
</code></pre>
<p><strong>添加网桥过滤和地址转发功能</strong>
 <br>
 <strong>两种方式</strong></p>
<pre><code>简单版本
cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system   //生效命令
# 查看是否已成功加载模块
lsmod | grep br_netfilter

# 将读取该文件中的参数设置，并将其应用到系统的当前运行状态中
sysctl -p /etc/sysctl.d/k8s.conf
</code></pre>
<hr>
<pre><code>复杂版本
cat &gt; /etc/sysctl.d/kubernetes.conf &lt;&lt; EOF
# 允许 IPv6 转发请求通过iptables进行处理（如果禁用防火墙或不是iptables，则该配置无效）
net.bridge.bridge-nf-call-ip6tables = 1

# 允许 IPv4 转发请求通过iptables进行处理（如果禁用防火墙或不是iptables，则该配置无效）
net.bridge.bridge-nf-call-iptables = 1

# 启用IPv4数据包的转发功能
net.ipv4.ip_forward = 1

# 禁用发送 ICMP 重定向消息
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 提高 TCP 连接跟踪的最大数量
net.netfilter.nf_conntrack_max = 1000000

# 提高连接追踪表的超时时间
net.netfilter.nf_conntrack_tcp_timeout_established = 86400

# 提高监听队列大小
net.core.somaxconn = 1024

# 防止 SYN 攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

# 提高文件描述符限制
fs.file-max = 65536

# 设置虚拟内存交换（swap）的使用策略为0，减少对磁盘的频繁读写
vm.swappiness = 0
EOF


#然后执行
sysctl --system   //生效命令

# 查看是否已成功加载模块
lsmod | grep br_netfilter

# 将读取该文件中的参数设置，并将其应用到系统的当前运行状态中
sysctl -p /etc/sysctl.d/kubernetes.conf

</code></pre>
<p><strong>解析hosts</strong></p>
<pre><code>cat &gt;&gt; /etc/hosts &lt;&lt; EOF
192.168.100.105 master
192.168.100.106 node1
192.168.100.107 node2
EOF
</code></pre>
<p><strong>ipvs模式</strong></p>
<pre><code>cat &gt; /etc/sysconfig/modules/ipvs.modules &lt;&lt;EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules &amp;&amp; bash /etc/sysconfig/modules/ipvs.modules &amp;&amp; lsmod | grep -e ip_vs -e nf_conntrack_ipv4
</code></pre>
<hr>
<h2 id="docker安装">docker安装</h2>
<h3 id="debian11安装">debian11安装</h3>
<p>安装依赖</p>
<pre><code>apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
</code></pre>
<p>导入秘钥</p>
<pre><code>curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
</code></pre>
<p>添加存储库</p>
<pre><code>echo \
 "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</code></pre>
<p>打印指定版本</p>
<pre><code>apt-cache madison docker-ce | awk '{ print $3 }' 
</code></pre>
<p>给版本变量</p>
<pre><code>ver=5:20.10.14~3-0~debian-bullseye
</code></pre>
<p>指定版本安装</p>
<pre><code>apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
</code></pre>
<p>cri-docker参考下面</p>
<h3 id="centos安装">Centos安装</h3>
<p><strong>安装docker依赖</strong></p>
<pre><code>yum install -y yum-utils 
</code></pre>
<p><strong>配置软件软</strong></p>
<pre><code>yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
</code></pre>
<p><strong>安装docker</strong></p>
<pre><code>yum install docker-ce docker-ce-cli containerd.io -y
</code></pre>
<p><strong>安装指定版本</strong></p>
<pre><code>yum list docker-ce --showduplicates|grep "^doc"|sort -r
</code></pre>
<pre><code>yum install docker-ce-23.0.1-1.el7  docker-ce-cli-23.0.1-1.el7  containerd.io -y
</code></pre>
<p><strong>设置docker开机自启</strong></p>
<pre><code>systemctl daemon-reload &amp;&amp; systemctl start docker &amp;&amp; systemctl enable docker &amp;&amp; systemctl status docker
</code></pre>
<p><strong>配置docker镜像源</strong></p>
<pre><code>cat &lt;&lt;EOF &gt; /etc/docker/daemon.json
{
	"registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
	"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重启docker
systemctl restart docker
</code></pre>
<p><strong>安装cri-docker</strong></p>
<ul>
 <li>官方地址</li>
</ul>
<pre><code>https://github.com/Mirantis/cri-dockerd/releases
</code></pre>
<ul>
 <li>下载下来rpm安装</li>
</ul>
<pre><code>rpm -ivh https://github.7boe.top/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.7/cri-dockerd-0.3.7.20231027185657.170103f2-0.el7.x86_64.rpm
</code></pre>
<ul>
 <li>
  <p>配置cri-docker使用国内镜像</p>
  <pre><code>vim /usr/lib/systemd/system/cri-docker.service
</code></pre>
 </li>
 <li>
  <p>修改配置如下：</p>
  <pre><code>ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image registry.aliyuncs.com/google_containers/pause:3.9
</code></pre>
 </li>
 <li>
  <p>自启</p>
  <pre><code>systemctl daemon-reload &amp;&amp; systemctl start cri-docker &amp;&amp; systemctl enable cri-docker &amp;&amp; systemctl status cri-docker
</code></pre>
 </li>
</ul>
<hr>
<h2 id="安装containerd">安装Containerd</h2>
<p><strong>1.24后不在支持docker需要ctr但是可以下载cri-docker用于容器运行时这里是另外的ctr方式可以忽略</strong></p>
<h3 id="二进制安装">二进制安装</h3>
<p>下载</p>
<pre><code>wget https://github.7boe.top/https://github.com/containerd/containerd/releases/download/v1.7.10/cri-containerd-1.7.10-linux-amd64.tar.gz
</code></pre>
<p><strong>自动解压到指定位置</strong></p>
<pre><code>tar xf cri-containerd-1.7.9-linux-amd64.tar.gz -C /
</code></pre>
<p><strong>下载runc并且编译好库</strong></p>
<pre><code>wget https://github.7boe.top/https://github.com/opencontainers/runc/releases/download/v1.1.10/libseccomp-2.5.4.tar.gz
wget https://github.7boe.top/https://github.com/opencontainers/runc/releases/download/v1.1.10/runc.amd64
tar zxvf libseccomp-2.5.4.tar.gz
cd libseccomp-2.5.4
./configure
make &amp;&amp; make install
</code></pre>
<p><strong>移动新的runc到目录内</strong></p>
<pre><code>chmod +x runc.amd64
mv runc.amd64 /usr/local/sbin/runc
</code></pre>
<p><strong>验证版本</strong></p>
<pre><code>containerd -version
ctr version
crictl version
systemctl enable containerd ; systemctl start containerd ; systemctl status containerd
</code></pre>
<h3 id="yum安装"><strong>yum安装</strong></h3>
<pre><code>yum install -y yum-utils \
 device-mapper-persistent-data \
 lvm2
</code></pre>
<pre><code class="language-text">yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
</code></pre>
<pre><code>yum list | grep containerd
yum install containerd.io
</code></pre>
<p><strong>生成配置</strong></p>
<pre><code>mkdir -p /etc/containerd
containerd config default &gt; /etc/containerd/config.toml
</code></pre>
<p><strong>替换配置</strong></p>
<pre><code>registry.aliyuncs.com/google_containers/pause:3.9
SystemdCgroup = true
sed -i "s#https://registry-1.docker.io#https://registry.cn-hangzhou.aliyuncs.com#g"  /etc/containerd/config.toml
</code></pre>
<p><strong>需要crictr</strong></p>
<pre><code>wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
tar -zxvf crictl-v1.24.0-linux-amd64.tar.gz -C /usr/local/bin
</code></pre>
<p><strong>改变容器运行时</strong></p>
<pre><code>crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock
</code></pre>
<pre><code>cat &gt; /etc/crictl.yaml &lt;&lt;EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
pull-image-on-create: false
EOF
</code></pre>
<p><strong>ctr版本信息查看</strong></p>
<pre><code>containerd -version
ctr version
crictl version
systemctl enable containerd ; systemctl start containerd ; systemctl status containerd
</code></pre>
<hr>
<h2 id="安装k8s">安装k8s</h2>
<blockquote>
 <p><em><strong>kubeadm kubelet kubectl</strong></em>
  <br>
  <strong>kubeadm</strong>是一个Kubernetes的部署工具，负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤。提供kubeadm init 和 kubeadm join两个操作命令，可以让我们快速部署一个Kubernetes集群。</p>
</blockquote>
<blockquote>
 <p><strong>kubeadm</strong>是Kubernetes集群全生命周期的管理工具，可用于实现集群的部署、升级、降级及拆除。kubeadm部署Kubernetes集群是将大部分资源以pod的方式运行，例如（kube-proxy、kube-controller-manager、kube-scheduler、kube-apiserver、flannel)都是以pod方式运行。</p>
</blockquote>
<blockquote>
 <p><strong>kubectl</strong>是Kubernetes集群的命令行工具，通过kubectl能够对集群本身进行管理，并能够在集群上进行容器化应用的安装和部署。接下来我们会经常与kubectl命令打交道的</p>
</blockquote>
<h3 id="配置k8s源">配置k8s源</h3>
<h4 id="debian12国内源安装">Debian12国内源安装</h4>
<pre><code># 添加并信任APT证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -


安装apt软件仓库添加工具
apt-get install -y software-properties-common

# 添加源地址
add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

apt-cache madison kubectl | awk '{ print $3 }' 

ver=1.26.1
# 更新源并安装最新版 kubenetes
sudo apt install kubeadm=$ver kubectl=$ver kubeadm=$ver
sudo apt update &amp;&amp; apt install -y kubelet kubeadm kubectl

</code></pre>
<h4 id="centos导入源">Centos导入源</h4>
<pre><code>cat &lt;&lt;EOF &gt; /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
</code></pre>
<p><strong>安装指定版本 kubeadm，kubelet和kubectl</strong></p>
<pre><code>yum install -y kubelet-1.26.1 kubeadm-1.26.1 kubectl-1.26.1
</code></pre>
<p><strong>设置开机自启</strong></p>
<pre><code>systemctl enable kubelet &amp;&amp; systemctl start kubelet &amp;&amp; systemctl status kubelet
</code></pre>
<p><strong>可以不带这个</strong></p>
<p><strong>使用 /etc/default/kubelet 文件来设置 kubelet 的额外参数</strong></p>
<pre><code>该参数指定了 kubelet 使用 systemd 作为容器运行时的 cgroup 驱动程序
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

</code></pre>
<h4 id="部署kubernetes初始化">部署Kubernetes初始化</h4>
<p><strong>接下来的命令在master上执行</strong></p>
<p><strong>查看国内镜像</strong></p>
<pre><code> kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
</code></pre>
<p><strong>国内镜像拉取</strong></p>
<pre><code>kubeadm config images pull --kubernetes-version=v1.26.1 --image-repository registry.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock
</code></pre>
<p><strong>初始化命令</strong></p>
<pre><code>kubeadm init \
--kubernetes-version v1.26.1 \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address 10.0.0.1  \
--service-cidr 10.100.0.0/16 \
--pod-network-cidr 10.200.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all

</code></pre>
<p><strong>比较全的初始化</strong></p>
<pre><code>kubeadm init --apiserver-advertise-address=121.40.147.166 --kubernetes-version=v1.26.1 --pod-network-cidr=10.100.0.0/24  --service-cidr=10.200.0.0/24 --token-ttl=0 --cri-socket=unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers --upload-certs --ignore-preflight-errors=all

</code></pre>
<p><strong>配置 Kubernetes 集群的访问权限</strong></p>
<pre><code>mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
</code></pre>
<p><strong>kubectl命令补全</strong></p>
<pre><code>source &lt;(kubectl completion bash)
</code></pre>
<p><strong>node加入集群</strong></p>
<p>注意后面要设置容器运行时工具</p>
<pre><code>kubeadm join 192.168.72.139:6443 --token tbrqt5.e9xje0c0i1vv6b66 --discovery-token-ca-cert-hash sha256:f27da12089c64c1c5611ed5b6e008032e07988cc5fbbf190899314d098cfb0fb --cri-socket=unix:///var/run/cri-dockerd.sock
</code></pre>
<p><strong>查看集群信息</strong></p>
<pre><code>kubectl get nodes
</code></pre>
<p>查看pod信息</p>
<pre><code>kubectl get pods -A 
</code></pre>
<h2 id="安装网络插件calico">安装网络插件Calico</h2>
<p><strong>官网文档</strong></p>
<pre><code>https://docs.tigera.io/calico/3.25/getting-started/kubernetes/self-managed-onprem/onpremises
</code></pre>
<p><strong>查看支持的版本信息</strong></p>
<pre><code>https://docs.tigera.io/calico/3.25/getting-started/kubernetes/requirements
</code></pre>
<p><strong>安装步骤就俩</strong></p>
<pre><code>curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml -O
kubectl apply -f calico.yaml
</code></pre>
<h2 id="创建默认存储类">创建默认存储类</h2>
<p><strong>创建配置文件</strong></p>
<pre><code>vim default-storage-class.yaml
</code></pre>
<p><strong>写入存储类配置</strong></p>
<pre><code>apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: kubebord
provisioner: kubernetes.io/local-volume
</code></pre>
<pre><code>kubectl apply -f default-storage-class.yaml
</code></pre>
<p><strong>让他变成默认存储类</strong></p>
<pre><code>kubectl patch storageclass &lt;your-storage-class-name&gt; -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
</code></pre>]]></description><guid isPermaLink="false">/archives/187</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Fri, 8 Dec 2023 09:31:00 GMT</pubDate></item><item><title><![CDATA[Tomcat中间件]]></title><link>https://7boe.top/archives/188</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Tomcat%E4%B8%AD%E9%97%B4%E4%BB%B6&amp;url=/archives/188" width="1" height="1" alt="" style="opacity:0;">
<h1 id="tomcat使用手册">Tomcat使用手册</h1>
<p><strong>JVM虚拟机</strong></p>
<p>常用参数</p>
<pre><code>-XX:+PrintGC  #开启gc日志
-XX:+PrintGCDetails  #打印gc日志的详细信息
-XX:+PrintGCTimeStamps #打印gc日志的时间戳
-Xloggc:filename #gc日志的路径与名字
</code></pre>
<p><strong>在这里GC 日志格式支持 %p 和 %t 两个参数:</strong></p>
<pre><code>%p 将会被替换为对应的进程 PID
%t 将会被替代为时间字符串，格式为: YYYY-MM-DD_HH-MM-SS
</code></pre>
<p>开启gc日志</p>
<pre><code>-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
</code></pre>
<p><strong>配置JAVA虚拟机的堆空间</strong></p>
<pre><code>1.设置java堆空间：两个值默认为物理内存64/1
-Xms:初始堆大小
-Xmx:最大堆大小
# 实际生产环境中， 我们通常将初始化堆(-Xms) 和 最大堆(-Xmx) 设置为一样大不超过物理内存的一半。以避免程序频繁的申请堆空间。

[root@qfedu.com bin]# vim catalina.sh   添加
JAVA_OPTS="-server -Xms2048m -Xmx2048m  -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
[root@qfedu.com ~]# mkdir /data0/logs/ -p  #创建gc日志存放路径

2.重启tomcat
</code></pre>
<h2 id="jvm-运维实用排障工具">JVM 运维实用排障工具</h2>
<p><strong>jdk安装</strong></p>
<pre><code>wget https://cloud.7boe.top/d/HKOSS/%E8%BD%AF%E4%BB%B6%E5%8C%85/jdk-8u321-linux-x64.tar.gz?sign=clICrDwnwWb9pMcbmSGK9-7Dke49AcKux6hLkaGKELs=:0 -O jdk.gz
</code></pre>
<p><strong>压缩出来</strong></p>
<pre><code>tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
</code></pre>
<p><strong>环境变量</strong></p>
<pre><code>vim /etc/profile
</code></pre>
<p><strong>写入</strong></p>
<pre><code>JAVA_HOME=/usr/local/java #指定java安装目录
PATH=$JAVA_HOME/bin:$PATH #用于指定java系统查找命令的路径
export JAVA_HOME PATH #类的路径，在编译运行java程序时，如果有调用到其他类的时候，在classpath中寻找需要的类。
</code></pre>
<p><strong>jps</strong></p>
<pre><code>用来查看Java进程的具体状态, 包括进程ID，进程启动的路径及启动参数等等，与unix上的ps类似，只不过jps是用来显示java进程
常用参数如下:
-v：输出传给jvm的参数

注意: 使用jps 时的运行账户要和JVM 虚拟机启动的账户一致。若启动JVM虚拟机是运行的账户为www，那使用jps指令时，也要使用www 用户去指定。 sudo -u www jps
</code></pre>
<p><strong>Example</strong></p>
<pre><code>#查看已经运行的JVM 进程的实际启动参数
[root@java-tomcat1 ~]# jps -v 
58154 Jps -Denv.class.path=.:/usr/local/java/lib:/usr/local/java/jre/lib:/usr/local/java/lib/tools.jar -Dapplication.home=/usr/local/java -Xms8m
58015 Bootstrap -Djava.util.logging.config.file=/data/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/data/application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp
</code></pre>
<p><strong>jstack</strong></p>
<pre><code>jstack用于打印出给定的java进程ID或远程调试服务的Java堆栈信息。此信息通常在运维的过程中被保存起来(保存故障现场)，以供RD们去分析故障。
常用参数如下:
jstack &lt;pid&gt;
jstack [-F] &lt;pid&gt; //当’jstack [-l] pid’没有响应的时候强制打印栈信息
</code></pre>
<p><strong>Example</strong></p>
<pre><code>jstack -F 38360 &gt; /tmp/jstack.log
</code></pre>
<p><strong>jmap</strong></p>
<pre><code>可以查看JVM堆内存使用情况
# jmap -heap pid

[root@qfedu.com ~]# jmap -heap 1414
Attaching to process ID 1414, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.271-b09

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 520093696 (496.0MB)
   NewSize                  = 11010048 (10.5MB)
   MaxNewSize               = 173015040 (165.0MB)
   OldSize                  = 22544384 (21.5MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 166723584 (159.0MB)
   used     = 52566128 (50.13096618652344MB)
   free     = 114157456 (108.86903381347656MB)
   31.5289095512726% used
</code></pre>
<h2 id="tomcat部署">Tomcat部署</h2>
<p><strong>下载</strong></p>
<pre><code>wget https://cloud.7boe.top/d/HKOSS/%E8%BD%AF%E4%BB%B6%E5%8C%85/apache-tomcat-9.0.83.zip?sign=fHosBJ5zXERmfI5Kn5QbfwUv_TUZikqAHpvDs1BhqNc=:0 -O tomcat9.zip
</code></pre>
<p><strong>解压出来</strong></p>
<pre><code>tar zxvf tomcat9.zip
</code></pre>
<p><strong>给权限</strong></p>
<pre><code>chmod +x tomcat9/bin/catalina.sh
</code></pre>
<p><strong>启动</strong></p>
<pre><code>tomcat9/bin/startup.sh
</code></pre>
<h3 id="tomcat目录介绍">Tomcat目录介绍</h3>
<pre><code>.
├── bin     #存放tomcat的管理脚本
├── BUILDING.txt
├── conf    #tomcat的配置文件
├── CONTRIBUTING.md
├── lib      #web应用调用的jar包存放路径
├── LICENSE
├── logs     #tomcat日志存放目录，catalin.out日志为只要输出日志
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp     #存放临时文件
├── webapps  #默认网站发布目录
└── work     #存放编译生产的.java与.class文件
</code></pre>
<p>网站默认目录</p>
<pre><code>├── docs  #tomcat的帮助文档
├── examples  #web应用实例
├── host-manager  #主机管理
├── manager    #登录管理
└── ROOT    #默认站点根目录
</code></pre>
<p>配置文件</p>
<pre><code>.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── server.xml           # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml    # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml
</code></pre>
<p><strong>x</strong></p>
<pre><code>tail -f tomcat9/logs/catalina.out 
</code></pre>
<h3 id="tomcat主要参数">Tomcat主要参数</h3>
<pre><code>port:指定服务器端要创建的端口号，并在这个端口监听来自客户端的请求。
protocol：连接器使用的协议，支持HTTP和AJP。AJP（Apache Jserv Protocol）专用于tomcat与apache建立通信的.
redirectPort：指定服务器正在处理http请求时，资源本身又被设置了必须要https方式访问的重定向的端口号
maxThreads：接收最大请求的并发数
connectionTimeout  指定超时的时间数(以毫秒为单位)
</code></pre>
<h4 id="host参数">host参数</h4>
<pre><code>host:表示一个虚拟主机
name:指定主机名
appBase:应用程序基本目录，即存放应用程序的目录.一般为appBase="webapps"，相对于CATALINA_HOME而言的，也可以写绝对路径。
unpackWARs:如果为true，则tomcat会自动将WAR文件解压，否则不解压。
autoDeploy:在tomcat启动时，是否自动部署
</code></pre>
<h2 id="tomcat多实例配置">Tomcat多实例配置</h2>
<p>装两个tomcat写入多个个端口</p>
<pre><code>&lt; &lt;Server port="8011" shutdown="SHUTDOWN"&gt;
---
&gt; &lt;Server port="8012" shutdown="SHUTDOWN"&gt;
</code></pre>
<h2 id="tomcat安全优化">Tomcat安全优化</h2>
<p><strong>telnet 管理端口保护（强制）</strong></p>
<h5 id=""></h5>
<table>
 <thead>
  <tr>
   <th><strong>类别</strong></th>
   <th><strong>配置内容及说明</strong></th>
   <th><strong>标准配置</strong></th>
   <th><strong>备注</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>telnet管理端口保护</td>
   <td>1.修改默认的8005管理端口为不易猜测的端口（大于1024）；2.修改SHUTDOWN指令为其他字符串；</td>
   <td></td>
   <td>1.以上配置项的配置内容只是建议配置，可以按照服务实际情况进行合理配置，但要求端口配置在<strong>8000~8999</strong>之间；</td>
  </tr>
 </tbody>
</table>
<h5 id="2ajp-连接端口保护推荐">2、ajp 连接端口保护（推荐）</h5>
<table>
 <thead>
  <tr>
   <th><strong>类别</strong></th>
   <th><strong>配置内容及说明</strong></th>
   <th><strong>标准配置</strong></th>
   <th><strong>备注</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Ajp 连接端口保护</td>
   <td>1.修改默认的ajp 8009端口为不易冲突的大于1024端口；2.通过iptables规则限制ajp端口访问的权限仅为线上机器；</td>
   <td>&lt;Connector port="<strong>8528</strong>"protocol="AJP/1.3" /&gt;</td>
   <td>以上配置项的配置内容仅为建议配置，请按照服务实际情况进行合理配置，但要求端口配置在<strong>8000~8999</strong>之间；；保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器；</td>
  </tr>
 </tbody>
</table>
<h5 id="3-禁用管理端强制">3、 禁用管理端（强制）</h5>
<table>
 <thead>
  <tr>
   <th><strong>类别</strong></th>
   <th><strong>配置内容及说明</strong></th>
   <th><strong>标准配置</strong></th>
   <th><strong>备注</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>禁用管理端</td>
   <td>1. 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件，重启tomcat后将会自动生成新的文件；2. 删除{Tomcat安装目录}/webapps下默认的所有目录和文件；3.将tomcat 应用根目录配置为tomcat安装目录以外的目录；</td>
   <td>&lt;Host name="localhost" appBase="/application/work/webapps"</td>
   <td>对于前段web模块，Tomcat管理端属于tomcat的高危安全隐患，一旦被攻破，黑客通过上传web shell的方式将会直接取得服务器的控制权，后果极其严重；</td>
  </tr>
 </tbody>
</table>
<h5 id="4降权启动强制">4、降权启动（强制）</h5>
<table>
 <thead>
  <tr>
   <th><strong>类别</strong></th>
   <th><strong>配置内容及说明</strong></th>
   <th><strong>标准配置</strong></th>
   <th><strong>备注</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>降权启动</td>
   <td>1.tomcat启动用户权限必须为非root权限，尽量降低tomcat启动用户的目录访问权限；2.如需直接对外使用80端口，可通过普通账号启动后，配置iptables规则进行转发；</td>
   <td></td>
   <td>避免一旦tomcat 服务被入侵，黑客直接获取高级用户权限危害整个server的安全；</td>
  </tr>
 </tbody>
</table>
<h3 id="参数详解">参数详解</h3>
<pre><code>&lt;Server port="8527" shutdown=" dangerous"&gt;

&lt;!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --&gt;
&lt;Connector port="8080" server="webserver"/&gt; 

&lt;!-- Define an AJP 1.3 Connector on port 8528 --&gt;
&lt;!--Define an accesslog --&gt; 
&lt;Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
                 pattern="%h %l %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/&gt;

    &lt;Connector port="8528" protocol="AJP/1.3" /&gt;

&lt;Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/&gt;
    
    
参数解释:
resolveHosts #如果这个值是true的话，tomcat会将这个服务器IP地址通过DNS转换为主机名，如果是false，就直接写服务器IP地址.
%h   #这个就是服务器名称了，如果resolveHosts为false的话，这里就是IP地址了
%t   #日志和时间，使用通常的Log格式
%r   #包含了请求的方法和URI
%s   #这个是响应http的状态码
%b   #这是发送信息的字节数，不包括http头，如果字节数为0的话，显示为-
%D   #处理请求的时间，以毫秒为单位
%l   #浏览者进行身份验证时提供的名字

</code></pre>
<h3 id="隐藏版本号">隐藏版本号</h3>
<pre><code>&lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b" /&gt;
&lt;Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" /&gt;      #在日志这里添加最后一句隐藏版本号。


重启tomcat访问查看
</code></pre>]]></description><guid isPermaLink="false">/archives/188</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 6 Dec 2023 11:25:00 GMT</pubDate></item><item><title><![CDATA[Centos7升级内核]]></title><link>https://7boe.top/archives/184</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Centos7%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8&amp;url=/archives/184" width="1" height="1" alt="" style="opacity:0;">
<h1 id="centos7升级内核">Centos7升级内核</h1>
<p>更新版本和加入仓库</p>
<pre><code>yum -y update
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
</code></pre>
<p><strong>查看可用的系统内核包</strong></p>
<pre><code>yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
</code></pre>
<p><strong>安装最新内核</strong>
 <br>
 ml最新版
 <br>
 lt稳定版</p>
<pre><code>yum --enablerepo=elrepo-kernel install kernel-lt
</code></pre>
<p><strong>打印内核版本</strong></p>
<pre><code>awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
</code></pre>
<p><strong>修改启动项</strong></p>
<pre><code>grub2-set-default 0
</code></pre>]]></description><guid isPermaLink="false">/archives/184</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sat, 2 Dec 2023 11:27:00 GMT</pubDate></item><item><title><![CDATA[NGINX证书以及状态检查]]></title><link>https://7boe.top/archives/186</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=NGINX%E8%AF%81%E4%B9%A6%E4%BB%A5%E5%8F%8A%E7%8A%B6%E6%80%81%E6%A3%80%E6%9F%A5&amp;url=/archives/186" width="1" height="1" alt="" style="opacity:0;">
<h1 id="nginx内置变量以及配置https">NGINX内置变量以及配置https</h1>
<p><strong>nginx变量简介</strong></p>
<ul>
 <li>所有的 Nginx变量在 Nginx 配置文件中引用时都须带上 $ 前缀</li>
 <li>在 Nginx 配置中，变量只能存放一种类型的值，而且也只存在一种类型，那就是字符串类型</li>
</ul>
<p><strong>用这种方式引用</strong>
 <br>
 <code>$变量名</code></p>
<h2 id="内置预定义变量">内置预定义变量</h2>
<blockquote>
 <p>内置预定义变量即无需声明就可以使用的变量，通常包括一个http请求或响应中一部分内容的值，以下为一些常用的内置预定义变量</p>
</blockquote>
<table>
 <thead>
  <tr>
   <th><strong>变量名</strong></th>
   <th><strong>定义</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>$arg_PARAMETER</td>
   <td>GET请求中变量名PARAMETER参数的值。</td>
  </tr>
  <tr>
   <td>$args</td>
   <td>这个变量等于GET请求中的参数。例如，foo=123&amp;bar=blahblah;这个变量只可以被修改</td>
  </tr>
  <tr>
   <td>$binary_remote_addr</td>
   <td>二进制码形式的客户端地址。</td>
  </tr>
  <tr>
   <td>$body_bytes_sent</td>
   <td>传送页面的字节数</td>
  </tr>
  <tr>
   <td>$content_length</td>
   <td>请求头中的Content-length字段。</td>
  </tr>
  <tr>
   <td>$content_type</td>
   <td>请求头中的Content-Type字段。</td>
  </tr>
  <tr>
   <td>$cookie_COOKIE</td>
   <td>cookie COOKIE的值。</td>
  </tr>
  <tr>
   <td>$document_root</td>
   <td>当前请求在root指令中指定的值。</td>
  </tr>
  <tr>
   <td>$document_uri</td>
   <td>与$uri相同。</td>
  </tr>
  <tr>
   <td>$host</td>
   <td>请求中的主机头(Host)字段，如果请求中的主机头不可用或者空，则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写，不包含端口。</td>
  </tr>
  <tr>
   <td>$hostname</td>
   <td>机器名使用 gethostname系统调用的值</td>
  </tr>
  <tr>
   <td>$http_HEADER</td>
   <td>HTTP请求头中的内容，HEADER为HTTP请求中的内容转为小写，-变为_(破折号变为下划线)，例如：$http_user_agent(Uaer-Agent的值);</td>
  </tr>
  <tr>
   <td>$sent_http_HEADER</td>
   <td>HTTP响应头中的内容，HEADER为HTTP响应中的内容转为小写，-变为_(破折号变为下划线)，例如： <span class="math math-inline">sent_http_cache_control, </span>sent_http_content_type…;</td>
  </tr>
  <tr>
   <td>$is_args</td>
   <td>如果$args设置，值为"?"，否则为""。</td>
  </tr>
  <tr>
   <td>$limit_rate</td>
   <td>这个变量可以限制连接速率。</td>
  </tr>
  <tr>
   <td>$nginx_version</td>
   <td>当前运行的nginx版本号。</td>
  </tr>
  <tr>
   <td>$query_string</td>
   <td>与$args相同。</td>
  </tr>
  <tr>
   <td>$remote_addr</td>
   <td>客户端的IP地址。</td>
  </tr>
  <tr>
   <td>$remote_port</td>
   <td>客户端的端口。</td>
  </tr>
  <tr>
   <td>$remote_user</td>
   <td>已经经过Auth Basic Module验证的用户名。</td>
  </tr>
  <tr>
   <td>$request_filename</td>
   <td>当前连接请求的文件路径，由root或alias指令与URI请求生成。</td>
  </tr>
  <tr>
   <td>$request_body</td>
   <td>这个变量（0.7.58+）包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。</td>
  </tr>
  <tr>
   <td>$request_body_file</td>
   <td>客户端请求主体信息的临时文件名。</td>
  </tr>
  <tr>
   <td>$request_completion</td>
   <td>如果请求成功，设为"OK"；如果请求未完成或者不是一系列请求中最后一部分则设为空。</td>
  </tr>
  <tr>
   <td>$request_method</td>
   <td>这个变量是客户端请求的动作，通常为GET或POST。包括0.8.20及之前的版本中，这个变量总为main request中的动作，如果当前请求是一个子请求，并不使用这个当前请求的动作。</td>
  </tr>
  <tr>
   <td>$request_uri</td>
   <td>这个变量等于包含一些客户端请求参数的原始URI，它无法修改，请查看$uri更改或重写URI。</td>
  </tr>
  <tr>
   <td>$scheme</td>
   <td>所用的协议，比如http或者是https，比如rewrite ^(.+)<span class="math math-inline"> </span>scheme://example.com$1 redirect;</td>
  </tr>
  <tr>
   <td>$server_addr</td>
   <td>服务器地址，在完成一次系统调用后可以确定这个值，如果要绕开系统调用，则必须在listen中指定地址并且使用bind参数。</td>
  </tr>
  <tr>
   <td>$server_name</td>
   <td>服务器名称。</td>
  </tr>
  <tr>
   <td>$server_port</td>
   <td>请求到达服务器的端口号。</td>
  </tr>
  <tr>
   <td>$server_protocol</td>
   <td>请求使用的协议，通常是HTTP/1.0或HTTP/1.1。</td>
  </tr>
  <tr>
   <td>$uri</td>
   <td>请求中的当前URI(不带请求参数，参数位于args)，不同于浏览器传递的args)，不同于浏览器传递的args)，不同于浏览器传递的request_uri的值，它可以通过内部重定向，或者使用index指令进行修改。不包括协议和主机名，例如/foo/bar.html</td>
  </tr>
 </tbody>
</table>
<h2 id="nginx-监控">nginx 监控</h2>
<p>nginx的基础监控</p>
<ul>
 <li>进程监控</li>
 <li>端口监控</li>
</ul>
<blockquote>
 <p>指标</p>
</blockquote>
<p><code>Accepts（接受）、Handled（已处理）、Requests（请求数）是一直在增加的计数器。Active（活跃）、Waiting（等待）、Reading（读）、Writing（写）随着请求量而增减。</code></p>
<p><strong>nginx Stub Status 监控模块</strong>
 <br>
 使用示例</p>
<pre><code>server {
        listen 80;
        server_name localhost;
        location /nginx-status {
                stub_status     on;
                access_log      on;
                }
}
</code></pre>
<h2 id="https证书">HTTPS证书</h2>
<p>配置文件</p>
<pre><code>server {
    listen 443 ssl;  #https端口
    server_name www.7boe.top;
    access_log  /var/log/nginx/https_access.log  main;

    ssl_certificate   /etc/nginx/cert/www.testpm.cn.pem; #指定证书路径
    ssl_certificate_key  /etc/nginx/cert/www.testpm.cn.key; #指定私钥路径
    ssl_session_timeout 5m; #配置用于SSL会话的缓存
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定使用的协议
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #密码指定为OpenSSL支持的格式
    ssl_prefer_server_ciphers on;  #设置协商加密算法。

    location / {
        root  /usr/share/nginx/html;
        index index.html index.htm;
    }
}
</code></pre>]]></description><guid isPermaLink="false">/archives/186</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sat, 2 Dec 2023 06:41:00 GMT</pubDate></item><item><title><![CDATA[NGINX重定向]]></title><link>https://7boe.top/archives/184</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=NGINX%E9%87%8D%E5%AE%9A%E5%90%91&amp;url=/archives/184" width="1" height="1" alt="" style="opacity:0;">
<h1 id="nginx-location块的用法">NGINX location块的用法</h1>
<blockquote>
 <p>location块写在server中，一个server中可以有多个location。</p>
</blockquote>
<p><strong>location匹配规则</strong></p>
<pre><code>= 最高优先级匹配
^~ 某个开头
~ 区分大小写
~* 表示不区分大小写
!~ 取反不匹配大小写
!~* 表示不区分大小写不匹配的正则
/    通用匹配，任何请求都会匹配到
@    内部服务跳转
</code></pre>
<p><strong>优先级</strong></p>
<pre><code>= 大于 ^~  大于 ~|~*|!~|!~* 大于 /
</code></pre>
<p><strong>匹配方式</strong></p>
<pre><code>location / {
    root /www;
    index index.html;
}
</code></pre>
<p><strong>表示匹配www根下面的全部资源。</strong>
 <br>
 带路径匹配</p>
<pre><code>location /abc {
    root /www;
    index index.html;
   
}
</code></pre>
<p>表示匹配www下的abc文件夹内的全部资源。</p>
<p><strong>区分大小写匹配</strong></p>
<pre><code>location ~ / {
     root /www;
     index index.html;
}

</code></pre>
<p>意思是匹配abc为小写。</p>
<p>
 <del>* 和^</del>
</p>
<pre><code>location ^~ / {    // 匹配任意开头
    root /www;
    index index.html;
    
}

location ~*  .jpg$ {  //匹配jpg结尾
    root /www;
    index index.html

} 

</code></pre>
<h2 id="重定向和地址重写">重定向和地址重写</h2>
<p><strong>重写语句有</strong></p>
<pre><code>if、rewrite、set、return
</code></pre>
<h3 id="if语句">IF语句</h3>
<pre><code>if (condition) { … }
if 可以支持如下条件判断匹配符号
~ 					正则匹配 (区分大小写)
~* 				    正则匹配 (不区分大小写)
!~                  正则不匹配 (区分大小写)
!~*		            正则不匹配  (不区分大小写)
-f 和!-f 		    用来判断是否存在文件
-d 和!-d 		    用来判断是否存在目录
-e 和!-e 		    用来判断是否存在文件或目录
-x 和!-x 		    用来判断文件是否可执行

在匹配过程中可以引用一些Nginx的全局变量
$args				请求中的参数;
$document_root	    针对当前请求的根路径设置值;
$host				请求信息中的"Host"，如果请求中没有Host行，则等于设置的服务器名;
$limit_rate			对连接速率的限制;
$request_method		请求的方法，比如"GET"、"POST"等;
$remote_addr		客户端地址;
$remote_port		客户端端口号;
$remote_user		客户端用户名，认证用;
$request_filename   当前请求的文件路径名（带网站的主目录/usr/local/nginx/html/images/a.jpg）
$request_uri		当前请求的文件路径名（不带网站的主目录/images/a.jpg）
$query_string		与$args相同;
$scheme				用的协议，比如http或者是https
$server_protocol	请求的协议版本，"HTTP/1.0"或"HTTP/1.1";
$server_addr 		服务器地址，如果没有用listen指明服务器地址，使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name		请求到达的服务器名;
$document_uri 		与$uri一样，URI地址;
$server_port 		请求到达的服务器端口号;
</code></pre>
<h3 id="rewrite-flag">Rewrite flag</h3>
<pre><code>last 			    表示完成rewrite。默认为last。
break 				本条规则匹配完成后，终止匹配，不再匹配后面的规则
redirect 			返回302临时重定向，浏览器地址会显示跳转后的URL地址
permanent 		    返回301永久重定向，浏览器地址会显示跳转后URL地址
</code></pre>
<blockquote>
 <p>redirect 和 permanent区别则是返回的不同方式的重定向:</p>
</blockquote>
<blockquote>
 <p>对于客户端来说一般状态下是没有区别的。而对于搜索引擎，相对来说301的重定向更加友好，如果我们把一个地址采用301跳转方式跳转的话，搜索引擎会把老地址的相关信息带到新地址，同时在搜索引擎索引库中彻底废弃掉原先的老地址。</p>
</blockquote>
<blockquote>
 <p>使用302重定向时，搜索引擎(特别是google)有时会查看跳转前后哪个网址更直观，然后决定显示哪个，如果它觉的跳转前的URL更好的话，也许地址栏不会更改。</p>
</blockquote>
<h3 id="rewrite">rewrite</h3>
<p><strong>重定向到另一个页面</strong></p>
<pre><code>location /a {
    root /www;
    index index.html;
    rewrite .* /b/index.html permanent;  //匹配到a路径的后面任意字符进行重定向
}
location /b {
    root /www;
    index index.html;


}
</code></pre>
<p><strong>匹配定向开头跳转</strong></p>
<pre><code>location /2019/a {
    root /www;
    index index.html;
    rewrite ^/2019/(.*)$ /2018/$1 permanent; //指定开头跳转带后面url跳转
}
location /2018/a {
    root /www;
    index index.html;
}
</code></pre>
<p><strong>匹配域名重定向到新的域名</strong></p>
<pre><code>location /a {
    root /www;
    index.html;
    if ( $host ~* 域名 ) {
    rewrite .* http://jd.com$request_url permanent;
    }
    

}

</code></pre>
<p><strong>匹配内容地址跳转</strong></p>
<pre><code>location /login {
    root /www;
    index index.html;
    rewrire ^/login/(.*)\.html$ http://$host/reg/login.html?user=$1;

}
匹配到域名加login会跳转到reg
location /reg {
    root /www;
    index index.html;
    

}

</code></pre>
<p>匹配二级域名跳转www二级域名移到后面</p>
<pre><code>server {
    listen       80;
    server_name  www.testpm.com;

    location / {
         root   /usr/share/nginx/html;
         index  index.html index.htm;
         if ( $host ~* ^www.testpm.com$) {
                break;
                }
         if ( $host ~* "^(.*)\.testpm\.com$" ) {
                set $user $1;
                rewrite .* http://www.testpm.com/$user permanent;
                }
        }
    location /jack {
         root /usr/share/nginx/html;
         index  index.html index.hml;
        }
    location /alice {
         root /usr/share/nginx/html;
         index index.html index.hml;
        }
}

</code></pre>
<h3 id="return-指令">return 指令</h3>
<p>匹配一个不能访问的地址时返回代码403</p>
<pre><code>server {
    listen       80;
    server_name  www.testpm.cn;
    #access_log  /var/log/nginx/http_access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        }

    location ~* \.sh$ {
        return 403;
        }	
}
</code></pre>]]></description><guid isPermaLink="false">/archives/184</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Thu, 30 Nov 2023 12:38:00 GMT</pubDate></item><item><title><![CDATA[nginx负载均衡]]></title><link>https://7boe.top/archives/183</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1&amp;url=/archives/183" width="1" height="1" alt="" style="opacity:0;">
<h1 id="nginx-负载均衡以及反向代理和location的使用">NGINX 负载均衡以及反向代理和location的使用</h1>
<h2 id="nginx的常用命令">nginx的常用命令</h2>
<pre><code>nginx -c /path/nginx.conf  	     # 以特定目录下的配置文件启动nginx:
nginx -s reload            	 	 # 修改配置后重新加载生效
nginx -s stop  				 	 # 快速停止nginx
nginx -s quit  				 	 # 正常停止nginx
nginx -t    					 # 测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf  # 测试特定的nginx配置文件是否正确
</code></pre>
<h2 id="nginx编译安装参数">nginx编译安装参数</h2>
<pre><code>
--prefix=/usr/local/nginx                        //指向安装目录
--conf-path=/etc/nginx/nginx.conf                //指定配置文件
--http-log-path=/var/log/nginx/access.log        //指定访问日志
--error-log-path=/var/log/nginx/error.log        //指定错误日志
--lock-path=/var/lock/nginx.lock                 //指定lock文件
--pid-path=/run/nginx.pid                        //指定pid文件

--http-client-body-temp-path=/var/lib/nginx/body    //设定http客户端请求临时文件路径
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi     //设定http fastcgi临时文件路径
--http-proxy-temp-path=/var/lib/nginx/proxy         //设定http代理临时文件路径
--http-scgi-temp-path=/var/lib/nginx/scgi           //设定http scgi临时文件路径
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi         //设定http uwsgi临时文件路径

--with-debug                                        //启用debug日志
--with-ipv6                                         //启用ipv6支持
--with-http_ssl_module                              //启用ssl支持
--with-http_stub_status_module                      //获取nginx自上次启动以来的状态
--with-http_realip_module                 //允许从请求标头更改客户端的IP地址值，默认为关
--with-http_auth_request_module           //实现基于一个子请求的结果的客户端授权。如果该子请求返回的2xx响应代码，所述接入是允许的。如果它返回401或403中，访问被拒绝与相应的错误代码。由子请求返回的任何其他响应代码被认为是一个错误。
--with-http_addition_module               //作为一个输出过滤器，支持不完全缓冲，分部分响应请求
--with-http_dav_module                    //增加PUT,DELETE,MKCOL：创建集合,COPY和MOVE方法 默认关闭，需编译开启
--with-http_geoip_module                  //使用预编译的MaxMind数据库解析客户端IP地址，得到变量值
--with-http_gunzip_module                 //它为不支持“gzip”编码方法的客户端解压具有“Content-Encoding: gzip”头的响应。
--with-http_gzip_static_module            //在线实时压缩输出数据流
--with-http_spdy_module                   //SPDY可以缩短网页的加载时间
--with-http_sub_module                    //允许用一些其他文本替换nginx响应中的一些文本
--with-http_xslt_module                   //过滤转换XML请求
--with-mail                               //启用POP3/IMAP4/SMTP代理模块支持
--with-mail_ssl_module                    //启用ngx_mail_ssl_module支持启用外部模块支持

--with  表示在编译过程中需要给nginx添加的模块
--without 表示编译nginx时默认该模块是添加进去的当使用这个参数时表示将默认编译的模块移除
</code></pre>
<h2 id="nginx反向代理">NGINX反向代理</h2>
<p><strong>反向代理的模块就是</strong></p>
<pre><code>ngx_http_proxy_module
</code></pre>
<p><strong>配置他就一条命令</strong></p>
<pre><code>location{
proxy_pass http://   ; 反代后端的地址

}
</code></pre>
<p>还要其他的配置‘</p>
<pre><code>proxy_pass ：真实后端服务器的地址，可以是ip也可以是域名和url地址
proxy_redirect ：如果真实服务器使用的是的真实IP:非默认端口。则改成IP：默认端口。
proxy_set_header：重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr;#只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址

proxy_connect_timeout：:后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout：后端服务器数据回传时间，就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout ：nginx接收upstream（上游/真实） server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
</code></pre>
<h2 id="nginx负载均衡">NGINX负载均衡</h2>
<p>负载均衡模块采用</p>
<pre><code>upstream_fair
</code></pre>
<p>负载均衡写法</p>
<pre><code>upstream 组名 {
    
    server ip; 
    server ip;

}
</code></pre>
<p><strong>负载均衡方式有
  <br> upstream 支持4种负载均衡调度算法</strong></p>
<pre><code>1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

2、ip_hash:每个请求按访问IP的hash结果分配，同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上，可以解决session问题。

3、url_hash:按访问url的hash结果来分配请求，使每个url定向到同一个后端服务器。

4、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡，也就是根据后端服务器的响应时间来分配请求，响应时间短的优先分配。Nginx本身是不支持 fair的，如果需要使用这种调度算法，必须下载Nginx的 upstream_fair模块。
</code></pre>
<p><strong>热备</strong></p>
<pre><code>
upstream myweb { 
      server 172.17.14.2:8080; 
      server 172.17.14.3:8080 backup;  #热备     
    }
</code></pre>
<p><strong>权重轮询</strong></p>
<pre><code>upstream web {
    server 192.168.10.1:8080 weight=1;
    server 192.168.10.2:8080 weight=1;

}

</code></pre>
<p><strong>ip_hash</strong></p>
<pre><code>upstream web {
    ip_hash
    server 192.168.10.1:8080;
    server 192.168.10.2:8080;
}

</code></pre>
<p><strong>负载均衡其他参数</strong></p>
<ul>
 <li>down，表示当前的server暂时不参与负载均衡。</li>
 <li>backup，预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候，才会请求backup机器，因此这台机器的压力最轻。</li>
 <li>max_fails，允许请求失败的次数，默认为1。当超过最大次数时，返回proxy_next_upstream 模块定义的错误。</li>
 <li>fail_timeout，在经历了max_fails次失败后，暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。</li>
</ul>
<p>示例</p>
<pre><code> upstream myweb { 
      server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
      server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;    
    }

</code></pre>
<p><strong>如何调用负载均衡组
  <br> upstream 写入http块中</strong></p>
<pre><code>server{

    listen 80；
    server_name _;
    
    location / {
    proxy_pass http://web;
    
    }

}

</code></pre>
<h2 id="nginx-配置后端健康检查模块">nginx 配置后端健康检查模块</h2>
<p>nginx_upstream_check_module模块</p>
<pre><code> wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/refs/heads/master.zip
</code></pre>
<p>安装patch</p>
<pre><code>yum install patch 
</code></pre>
<p>解压出来后直接</p>
<pre><code>patch -p1 &lt; /root/nginx_upstream_check_module-master/check_1.20.1+.patch
</code></pre>
<p>在编译时指定位置加入模块</p>
<pre><code>./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream --add-module=/root/nginx_upstream_check_module-master/
</code></pre>
<p><strong>重新make
  <br> 然后把拷贝走nginx新的二进制文件</strong></p>
<pre><code>cp objs/nginx /usr/local/nginx/sbin
</code></pre>
<p>启用健康检查</p>
<pre><code>upstream web {
    server 192.168.209.128 weight=1;
    server 192.168.209.130 weight=1;
    check interval=5000 rise=2 fall=3 timeout=4000 type=http port=80;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;

}


server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://web;
    
    }
    location /status {
        check_status;
            access off:
    
    }
    
    
    }



}


</code></pre>
<p><strong>参数解释：</strong></p>
<ul>
 <li>interval:表示每隔多少毫秒向后端发送健康检查包；</li>
 <li>rise:表示如果连续成功次数达到2 服务器就被认为是up；</li>
 <li>fail:表示如果连续失败次数达到3 服务器就被认为是down；</li>
 <li>timeout:表示后端健康请求的超时时间是多少毫秒；</li>
 <li>type:表示发送的健康检查包是什么类型的请求；</li>
 <li>port: 表示发送检查到后端的服务的端口;</li>
 <li>check_http_send:表示http健康检查包发送的请求内容。为了减少传输数据量，推荐采用“head”方法；</li>
 <li>check_http_expect_alive:指定HTTP回复的成功状态，默认认为2XX和3XX的状态是健康的；</li>
</ul>
<h2 id="nginx-会话保持">nginx 会话保持</h2>
<p>基于ip_hash的nginx负载均衡</p>
<pre><code>upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}
</code></pre>
<p><strong>sticky_cookie_insert---而是基于cookie实现</strong>
 <br>
 需要添加第三方模块
 <br>
 先显示他的安装信息</p>
<pre><code>nginx -V
</code></pre>
<p>需要先下载最新的源码包</p>
<pre><code>wget https://nginx.org/download/nginx-1.25.3.tar.gz
</code></pre>
<p>这个是cookie的模块包</p>
<pre><code>wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
</code></pre>
<p>全部解压出来
 <br>
 然后开始加入模块
 <br>
 进入nginx的源码包的目录里面 根据你的nginx安装的信息继续进行编译</p>
<pre><code>./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng
</code></pre>
<p>之前安装使用软件包管理器安装的nginx会直接覆盖掉</p>
<pre><code>make &amp;&amp; make install
</code></pre>
<p>直接在负载均衡模块里面加入</p>
<pre><code>upstream qfedu {
        server 192.168.198.143;
        server 192.168.198.145;
        sticky;
}

</code></pre>
<p>反向代理模块代理就行了
 <br>
 其他参数</p>
<pre><code>sticky expires=1h domain=testpm.com path=/;
</code></pre>
<p><strong>缓存一小时 匹配域名 以及路径</strong></p>]]></description><guid isPermaLink="false">/archives/183</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 29 Nov 2023 11:49:00 GMT</pubDate></item><item><title><![CDATA[keepalived 高可用]]></title><link>https://7boe.top/archives/182</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=keepalived%20%E9%AB%98%E5%8F%AF%E7%94%A8&amp;url=/archives/182" width="1" height="1" alt="" style="opacity:0;">
<h1 id="keepalived-高可用主备">keepalived 高可用主备</h1>
<blockquote>
 <p>实验采用两台centos9
  <br>
  nginx+keepalived
  <br>
  一共两台，进行主备切换</p>
</blockquote>
<p><strong>主服务器 192.168.100.105
  <br> 备用 192.168.100.106</strong>
 <br>
 <strong>虚拟ip 192.168.100.200</strong></p>
<h2 id="安装">安装</h2>
<pre><code>dnf install vim wget curl vim net-tools nginx keepalived

</code></pre>
<p><strong>nginx 配置需要更改为虚拟ip</strong></p>
<pre><code>  server {
        listen       80;
        listen       [::]:80;
        server_name  192.168.100.200;
</code></pre>
<p><strong>两台机器均已经配置好监听同ip</strong></p>
<h2 id="keepalived">keepalived</h2>
<p><strong>master配置</strong></p>
<pre><code>! Configuration File for keepalived             # 这一行为注释
global_defs { 
        router_id nginx01       # router_id 机器标识，通常使用 hostname，相对具有唯一性，和备机区分开，不能使用同一个标识
}


vrrp_instance VI_1 {            # 定义一个vrrp_install实例，名称为VI_1
        state MASTER                    # 表示该实例的角色状态，有MASTER和BACKUP两种主备状态
        interface eth0                  # 对外提供服务的网络接口，注意修改为自己的网卡名称，如 ens33,eth0,eth1
        virtual_router_id 51    # 虚拟路由ID标识，主备服务器配置中相同实例的ID必须一致
        priority 100                    # priority表示实例优先级，数字越大，优先级越高。master 的优先级必须大于 backup
        advert_int 1                    # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔，默认是秒

        authentication {                # 权限认证配置
                auth_type PASS          # 主要有 PASS 和 AH 两种
                auth_pass 1111          # 验证密码，同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
        }

        virtual_ipaddress {
                192.168.100.200         # 虚拟IP地址；可以配置多个IP，每个IP占一行。注意，这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
        }



}
</code></pre>
<p><strong>备用服务器配置</strong></p>
<pre><code>! Configuration File for keepalived             # 这一行为注释
global_defs { 
        router_id nginx02       # router_id 机器标识，通常使用 hostname，相对具有唯一性，和主机区分开，不能使用同一个标识
}
vrrp_instance VI_1 {            # 定义一个vrrp_install实例，名称为VI_1
        state BACKUP                    # 表示该实例的角色状态，有MASTER和BACKUP两种主备状态
        interface eth0                  # 对外提供服务的网络接口，注意修改为自己的网卡名称，如 ens33,eth0,eth1
        virtual_router_id 51    # 虚拟路由ID标识，主备服务器配置中相同实例的ID必须一致
        priority 99                     # priority表示实例优先级，数字越大，优先级越高。master 的优先级必须大于 backup
        advert_int 1                    # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔，默认是秒

        authentication {                # 权限认证配置
                auth_type PASS          # 主要有 PASS 和 AH 两种
                auth_pass 1111          # 验证密码，同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
        }

        virtual_ipaddress {
                192.168.100.200         # 虚拟IP地址；可以配置多个IP，每个IP占一行。注意，这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
        }
}
</code></pre>
<p>直接访问192.168.100.200</p>
<p>这里主服务掉线vip后会自动切换到备用服务器上去了</p>
<p>keep宕机后 会自动切换但是nginx宕机他不会切换
 <br>
 需要用到脚本让他自己关闭</p>
<pre><code>#! /bin/bash
# 当 nginx 服务 down 掉之后，通过 keepalived 检查，确认没有服务重新启动 nginx
nginx_server=`ps -C nginx --no-header | wc -l`

if [ $nginx_server -gt 0 ];then
    exit 1
else
	nginx
fi

</code></pre>
<p><strong>keep 里面要加入</strong></p>
<pre><code>vrrp_script chk_nginx {		# 定义一个检测脚本，在global_defs之外配置
  script "/etc/keepalived/check_nginx.sh"	# 自己写的监测脚本
  interval 2	# 每2s监测一次
  weight 10		# 该参数用于指定当监测失效时，该设备的优先级会减少的值，该值为负表示减少
  fall 2        # 尝试两次都成功才成功
  rise 2        # 尝试两次都失败才失败
}
</code></pre>]]></description><guid isPermaLink="false">/archives/182</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Tue, 28 Nov 2023 09:12:00 GMT</pubDate></item><item><title><![CDATA[FlowerCLoud机场评测]]></title><link>https://7boe.top/archives/180</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=FlowerCLoud%E6%9C%BA%E5%9C%BA%E8%AF%84%E6%B5%8B&amp;url=/archives/180" width="1" height="1" alt="" style="opacity:0;">
<h1 id="flowercloud机场测试">FlowerCloud机场测试</h1>
<p>官方网站 ：<a href="https://flowercloud.net/aff.php?aff=3759">官网</a>
 <br>
 本次测试采用 <code>Global Acceleration Plus</code>套餐 双十一优惠码1111</p>
<blockquote>
 <p>Global Acceleration Air： 128元/一年，每月20G流量；仅限账户所有人本人。</p>
</blockquote>
<blockquote>
 <p>Global Acceleration Lite： 39/月，218元/半年，346/年，每月150G流量；仅限账户所有人本人。</p>
</blockquote>
<blockquote>
 <p>Global Acceleration Plus：58/月，318元/半年，546/年，每月400G流量；仅限账户所有人本人。</p>
</blockquote>
<blockquote>
 <p>Global Acceleration Max：113/月，618元/半年，946/年，每月1000G流量；仅限账户所有人本人。</p>
</blockquote>
<h2 id="测试速度">测试速度</h2>
<p><strong>测试时间 2023-11-27</strong></p>
<blockquote>
 <p>测试线路统一采用上海10G带宽微软云</p>
</blockquote>
<p><strong>最大速度4500兆，图片下下来自己看</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F12%2F11%2F6576f1e5641a5.png&amp;size=m" alt=""></p>
<p><strong>2023-12-01 上午测试</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F12%2F11%2F6576f1eb663c6.png&amp;size=m" alt="">
 <br>
 <strong>2023-12-22中午</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F12%2F22%2F6585110e939e5.png&amp;size=m" alt=""></p>
<p><strong>油管30万码率</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F12%2F11%2F6576f1e88d3b2.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/180</guid><dc:creator>Celia</dc:creator><category>机场测速</category><pubDate>Mon, 27 Nov 2023 13:10:00 GMT</pubDate></item><item><title><![CDATA[随机图片api搭建]]></title><link>https://7boe.top/archives/177</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E9%9A%8F%E6%9C%BA%E5%9B%BE%E7%89%87api%E6%90%AD%E5%BB%BA&amp;url=/archives/177" width="1" height="1" alt="" style="opacity:0;">
<h1 id="搭建随机图片api">搭建随机图片api</h1>
<p><strong>网站源码</strong></p>
<pre><code>&lt;?php
//初始化随机数生成器种子，这行代码也可以删除
$seed = time();
//获取随机数
$num = rand(1,20);
//拼接图片地址
$picpath = "https://ali.7boe.top/api/".$num.".webp";
//重定位到图片
die(header("Location: $picpath"));
?&gt;

</code></pre>
<p><strong>在存储桶里面上传指定数字结尾的图片，匹配指定文件格式可进行数组随机图片</strong></p>]]></description><guid isPermaLink="false">/archives/177</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 27 Nov 2023 09:59:00 GMT</pubDate></item><item><title><![CDATA[frp内网穿透]]></title><link>https://7boe.top/archives/179</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=frp%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F&amp;url=/archives/179" width="1" height="1" alt="" style="opacity:0;">
<h1 id="frps内网穿透以及service服务自启">frps内网穿透以及service服务自启</h1>
<p><a href="https://github.com/fatedier/frp">frp项目地址</a></p>
<blockquote>
 <p>frp 允许是一种快速反向代理，您将位于 NAT 或防火墙网关的本地服务器暴露给 Internet。目前支持TCP和UDP，以及HTTP和HTTPS协议，可以将请求通过域名转发到内部服务</p>
</blockquote>
<h2 id="frps服务端配置文件">frps服务端配置文件</h2>
<p>能用的我基本上都写在这边了</p>
<pre><code>
bindPort = 7100
bindAddr = "0.0.0.0"
#虚拟主机端口
vhostHTTPPort = 8888
vhostHTTPSPort = 8443

#web控制器
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "123"

#日志登记和天数
log.to = "./frps.log"
log.level = "info"
log.maxDays = 7

#认证
auth.method = "token"
auth.token = "qwer123"
#订阅的主域名
subDomainHost = "7boe.top"

</code></pre>
<h3 id="设置systemd服务控制">设置systemd服务控制</h3>
<p>最好用官方的</p>
<pre><code>[Unit]
# 服务名称，可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令，需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

</code></pre>
<h2 id="frpc客户端配置">frpc客户端配置</h2>
<pre><code>serverAddr = "127.0.0.1"
serverPort = 7100

#客户端标记名称
user = "Celia"
#认证
auth.token = "qwer123"
auth.method = "token"
#穿透类型
[[proxies]]
name = "sshd"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
[[web]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
#域名加上服务器上的订阅域名
subdomain = "web"
customDomains = ["web.7boe.top"]
[[proxies]]
name = "web02"
type = "https"
localIP = "127.0.0.1"
localPort = 8000
subdomain = "web02"
customDomains = ["web02.7boe.top"]

</code></pre>]]></description><guid isPermaLink="false">/archives/179</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><pubDate>Thu, 23 Nov 2023 12:59:00 GMT</pubDate></item><item><title><![CDATA[gitlab搭建安装]]></title><link>https://7boe.top/archives/178</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=gitlab%E6%90%AD%E5%BB%BA%E5%AE%89%E8%A3%85&amp;url=/archives/178" width="1" height="1" alt="" style="opacity:0;">
<h1 id="gitlab安装">Gitlab安装</h1>
<p>系统默认debian12
 <br>
 系统纯干净
 <br>
 <a href="https://packages.gitlab.com/gitlab/gitlab-ce">官网下载地址</a></p>
<h2 id="下载deb包">下载deb包</h2>
<pre><code>wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/bullseye/gitlab-ce_16.6.0-ce.0_amd64.deb/download.deb
</code></pre>
<p>安装gitlab包</p>
<pre><code>dpkg -i gitlab-ce_16.6.0-ce.0_amd64.deb
</code></pre>
<h2 id="配置文件">配置文件</h2>
<p>gitlab配置文件</p>
<pre><code>vim /etc/gitlab/gitlab.rb
</code></pre>
<p>主要修改</p>
<p>邮件通知</p>
<pre><code>gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "2911074976@qq.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '2911074976@qq.com'
gitlab_rails['smtp_pool'] = false

</code></pre>
<p>配置时区</p>
<pre><code>gitlab_rails['time_zone'] = 'Asia/Shanghai'
</code></pre>
<p>设置ssl</p>
<pre><code>nginx['enable']=true
nginx['redirect_http_to_https']=true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"
</code></pre>
<p>gitlab 命令</p>
<pre><code>gitlab-rails console

</code></pre>
<p>测试邮箱设置</p>
<pre><code>Notify.test_email('2911074976@qq.com','Message subject','Message body').deliver_now
</code></pre>
<pre><code>sudo gitlab-ctl reconfigure
重新加载配置，每次修改/etc/gitlab/gitlab.rb文件之后执行
sudo gitlab-ctl status
查看 GitLab 状态
sudo gitlab-ctl start
启动 GitLab
sudo gitlab-ctl stop
停止 GitLab
sudo gitlab-ctl restart
重启 GitLab
sudo gitlab-ctl tail
查看所有日志
sudo gitlab-ctl tail nginx/gitlab_acces.log
查看 nginx 访问日志
sudo gitlab-ctl tail postgresql
查看 postgresql 日志
</code></pre>
<h2 id="密码设置">密码设置</h2>
<p>默认密码在/etc/gitlab/initial_root_password</p>
<pre><code>1）切换到相应路径下
cd /opt/gitlab/bin/
2）打开控制台
sudo gitlab-rails console -e production
3）查询用户账号信息并赋值给u
u=User.where(id:1).first
4）设置该用户名的密码(密码最少8位)
u.password=12345678
5）确认密码
u.password_confirmation=12345678
6）保存信息（最后有个叹号）
  u.save!
  
</code></pre>
<h2 id="开机自启">开机自启</h2>
<pre><code> 启用 Gitlab开机自启动 ：systemctl enable gitlab-runsvdir.service
 禁止 Gitlab 开机自启动：systemctl disable gitlab-runsvdir.service
</code></pre>]]></description><guid isPermaLink="false">/archives/178</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Thu, 23 Nov 2023 07:11:00 GMT</pubDate></item><item><title><![CDATA[shell循环]]></title><link>https://7boe.top/archives/175</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=shell%E5%BE%AA%E7%8E%AF&amp;url=/archives/175" width="1" height="1" alt="" style="opacity:0;">
<h1 id="shell循环">shell循环</h1>
<h2 id="循环">循环</h2>
<h3 id="for循环">for循环</h3>
<pre><code>for 变量名 in 变量值

do
        执行程序
done
</code></pre>
<pre><code>for i in {0..8}
do
    echo $i
done

</code></pre>
<p><strong>for嵌套</strong></p>
<pre><code>read -p "打印多少行啊" num

for ((i=1;i&lt;=$num;i++))

do
       for ((m=1;m&lt;=i;m++))
       do
                echo -n  "*"
        done
        echo ""
done
</code></pre>
<h3 id="while语句">while语句</h3>
<pre><code>while 条件测试
do
  判断为真的时候执行命令
done
</code></pre>
<h3 id="until-语句">until 语句</h3>
<pre><code>until []
 do
 判断为假的时候执行
 done
</code></pre>
<pre><code>until [ -d /etc/nginx ]

do
        nginx -t &amp;&gt; /dev/null
        echo $?
        exit
done
</code></pre>
<h2 id="shell-循环控制">Shell 循环控制</h2>
<table>
 <thead>
  <tr>
   <th><strong>命令</strong></th>
   <th><strong>说明</strong></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>break n</td>
   <td>n 表示跳出循环的次数，如果省略 n 表示跳出整个循环</td>
  </tr>
  <tr>
   <td>continue n</td>
   <td>n 表示退到第n层继续循环，如果省略n表示跳过本次循环进入下一次循环</td>
  </tr>
  <tr>
   <td>exit n</td>
   <td>退出当前的shell程序，并返回 n，n 也可以省略</td>
  </tr>
  <tr>
   <td>return</td>
   <td>用于返回一个退出值给调用的函数</td>
  </tr>
  <tr>
   <td>shift</td>
   <td>用于将参数列表list左移指定次数，最左端的那个参数就从列表中删除，其后边的参数继续进入循环</td>
  </tr>
 </tbody>
</table>
<p><strong>break跳出循环次数</strong></p>
<pre><code>while rpm -qa | grep -q vim; [ $? -eq 0 ]
do
    for ((i=1; i&lt;=3; i++))
    do
        echo "666"

        if [ $i -eq 3 ]; then
            break  2 #跳出循环次数

        fi
    done
done
</code></pre>
<h2 id="编程之函数">编程之函数</h2>
<h3 id="定义函数">定义函数</h3>
<pre><code>name(){
操作内容 命令

}
</code></pre>
<h3 id="调用函数">调用函数</h3>
<p>直接在操作中定义函数</p>
<pre><code>if [ -f /etc/nginx/nginx.conf ];then
name 
fi
</code></pre>
<pre><code>#!/bin/bash
# first function
function HelloWorld() {
  echo "Hello world"
}
# second function
Welcome() {
  echo "Welcome to qfedu"
}
# third function
function HelloShell {
 echo "Hello Shell"
}
# file functions
HelloWorld               # 调用函数
Welcome
HelloShell
</code></pre>]]></description><guid isPermaLink="false">/archives/175</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 20 Nov 2023 06:46:00 GMT</pubDate></item><item><title><![CDATA[tailscale中转服务器搭建]]></title><link>https://7boe.top/archives/174</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=tailscale%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA&amp;url=/archives/174" width="1" height="1" alt="" style="opacity:0;">
<h1 id="tailscale搭建derp中转服务">Tailscale搭建derp中转服务</h1>
<p>官网：<code>https://tailscale.com/</code></p>
<p>linux安装：<code>curl -fsSL https://tailscale.com/install.sh | sh</code></p>
<p>Windows安装：<code>https://pkgs.tailscale.com/stable/tailscale-setup-latest.exe</code></p>
<h2 id="需要什么">需要什么</h2>
<p>域名加ssl</p>
<p>nginx反向代理</p>
<p>docker安装derp服务器</p>
<pre><code>docker run --restart always \
  --name derper -p 12345:12345 -p 3478:3478/udp \
  -e DERP_ADDR=:12345 \
  -e DERP_DOMAIN=derp.7boe.top \
  -d ghcr.io/yangchuansheng/derper:latest
</code></pre>
<p><a href="https://icloudnative.io/posts/custom-derp-servers/">参考文章</a></p>
<h2 id="配置文件">配置文件</h2>
<pre><code>// Example/default ACLs for unrestricted connections.
{
	// Declare static groups of users beyond those in the identity service.
	"groups": {
		"group:example": ["user1@example.com", "user2@example.com"],
	},

	// Declare convenient hostname aliases to use in place of IP addresses.
	"hosts": {
		"example-host-1": "100.100.100.100",
	},

	// Access control lists.
	"acls": [
		// Match absolutely everything.
		// Comment this section out if you want to define specific restrictions.
		{"action": "accept", "users": ["*"], "ports": ["*:*"]},
	],
	"ssh": [
		// Allow all users to SSH into their own devices in check mode.
		// Comment this section out if you want to define specific restrictions.
		{
			"action": "check",
			"src":    ["autogroup:members"],
			"dst":    ["autogroup:self"],
			"users":  ["autogroup:nonroot", "root"],
		},
	],
	"derpMap": {
		"OmitDefaultRegions": true, // 是否只连接自建 derper 节点
		"Regions": {"900": {
			"RegionID":   900,
			"RegionCode": "hk",
			"RegionName": "hongkong", // 字符串，代表地区
			"Nodes": [{
				"Name":     "nodename",
				"RegionID": 900,
				"HostName": "d66.456.com",
				"DERPPort": 12345,
				"STUNPort": 3478,
				"IPv4":     "1.1.1.1",
			}],
		}},
	},
}

</code></pre>
<h2 id="把同子网设备加入vpn">把同子网设备加入VPN</h2>
<p><a href="https://tailscale.com/kb/1019/subnets/">官方文档</a></p>
<p>启动命令</p>
<pre><code>tailscale up --advertise-routes=192.168.0.0/24
</code></pre>
<p>开启自己的子网地址后
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Ftailscale.com%2Fkb%2F1019%2Fsubnets%2Fnot-advertised-subnets.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/174</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>软路由</category><pubDate>Sun, 19 Nov 2023 13:27:00 GMT</pubDate></item><item><title><![CDATA[shell认知]]></title><link>https://7boe.top/archives/173</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=shell%E8%AE%A4%E7%9F%A5&amp;url=/archives/173" width="1" height="1" alt="" style="opacity:0;">
<h1 id="shell脚本认知">Shell脚本认知</h1>
<h2 id="认识shell">认识shell</h2>
<p><strong>shell有哪些些</strong></p>
<ul>
 <li>bash</li>
 <li>zsh</li>
 <li>csh</li>
 <li>ash</li>
 <li>ksh</li>
 <li>nologin</li>
</ul>
<p><strong>shell的使用场景</strong></p>
<ul>
 <li>自动化批量系统初始化程序 （update，软件安装，时区设置，安全策略...）</li>
 <li>自动化批量软件部署程序 （LAMP，LNMP，Tomcat，LVS，Nginx）</li>
 <li>应用管理程序 (KVM，集群管理扩容，MySQL，DELLR720批量RAID）</li>
 <li>日志分析处理程序（PV, UV, 200, !200, top 100, grep/awk）</li>
 <li>自动化备份恢复程序（MySQL完全备份/增量 + Crond）</li>
 <li>自动化管理程序（批量远程修改密码，软件升级，配置更新）</li>
 <li>自动化信息采集及监控程序（收集系统/应 用状态信息，CPU,Mem,Disk,Net,TCP Status,Apache,MySQL）</li>
 <li>配合Zabbix信息采集（收集系统/应用状态信息，CPU,Mem,Disk,Net,TCP Status,Apache,MySQL）</li>
 <li>自动化扩容（增加云主机--&gt;业务上线）</li>
 <li>Zabbix监控CPU 80%+|-50% Python API AWS/EC2（增加/删除云主机） + Shell Script（业务上线）</li>
 <li>俄罗斯方块，打印三角形，打印圣诞树，打印五角星，运行小火车，坦克大战，排序算法实现</li>
 <li>Shell可以做任何事（一切取决于业务需求）</li>
</ul>
<h2 id="关于shell的设置">关于shell的设置</h2>
<p><strong>更换别名</strong></p>
<pre><code>vim .bashrc
</code></pre>
<p>linux快捷键操作</p>
<h3 id="2快捷键">2、快捷键</h3>
<table>
 <thead>
  <tr>
   <th>快捷键</th>
   <th>作用</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>*ctrl+a</td>
   <td>把光标移动到命令行开头。如果我们输入的命令过长，想要把光标移动到命令行开头时使用。</td>
  </tr>
  <tr>
   <td>*ctrl+e</td>
   <td>把光标移动到命令行结尾。</td>
  </tr>
  <tr>
   <td>*ctrl+c</td>
   <td>强制终止当前的命令。</td>
  </tr>
  <tr>
   <td>*ctrl+l</td>
   <td>清屏，相当于clear命令。</td>
  </tr>
  <tr>
   <td>*ctrl+u</td>
   <td>删除或剪切光标之前的命令。我输入了一行很长的命令，不用使用退格键一个一个字符的删除，使用这个快捷键会更加方便</td>
  </tr>
  <tr>
   <td>*ctrl+k</td>
   <td>删除或剪切光标之后的内容。</td>
  </tr>
  <tr>
   <td>ctrl+y</td>
   <td>粘贴ctrl+U或ctul+K剪切的内容。</td>
  </tr>
  <tr>
   <td>*ctrl+r</td>
   <td>在历史命令中搜索，按下ctrl+R之后，就会出现搜索界面，只要输入搜索内容，就会从历史命令中搜索。</td>
  </tr>
  <tr>
   <td>*ctrl+d</td>
   <td>退出当前终端。</td>
  </tr>
  <tr>
   <td>ctrl+z</td>
   <td>暂停，并放入后台。这个快捷键牵扯工作管理的内容，我们在系统管理章节详细介绍。</td>
  </tr>
  <tr>
   <td>ctrl+s</td>
   <td>暂停屏幕输出。</td>
  </tr>
  <tr>
   <td>ctrl+q</td>
   <td>恢复屏幕输出。</td>
  </tr>
  <tr>
   <td>ctrl+左右箭头</td>
   <td>单词之间快速移动光标</td>
  </tr>
 </tbody>
</table>
<p><strong>前后台操作</strong>
 <br>
 直接用命令操作会在前台运作</p>
<pre><code>top
</code></pre>
<p>在后台运行就需要按下</p>
<pre><code>ctrl+z
</code></pre>
<p><code>jobs</code>查看后台进程</p>
<p><code>fg %n</code> 让进程回到前台
 <br>
 <code>bg %n</code> 让进程到后台
 <br>
 <code>nohup</code> 直接让软件在后台运行</p>
<h2 id="重定向和命令判断">重定向和命令判断</h2>
<p><strong>输出重定向</strong></p>
<blockquote>
 <p><code>&gt;</code>是输出
  <br>
  <code>&lt;</code>是输入</p>
</blockquote>
<table>
 <thead>
  <tr>
   <th>类 型</th>
   <th>符 号</th>
   <th>作 用</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>标准输出重定向</td>
   <td>command &gt;file</td>
   <td>以覆盖的方式，把 command 的正确输出结果输出到 file 文件中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;&gt;file</td>
   <td>以追加的方式，把 command 的正确输出结果输出到 file 文件中。</td>
  </tr>
  <tr>
   <td>标准错误输出重定向</td>
   <td>command 2&gt;file</td>
   <td>以覆盖的方式，把 command 的错误信息输出到 file 文件中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command 2&gt;&gt;file</td>
   <td>以追加的方式，把 command 的错误信息输出到 file 文件中。</td>
  </tr>
  <tr>
   <td>正确输出和错误信息同时保存</td>
   <td>command &gt;file 2&gt;&amp;1</td>
   <td>以覆盖的方式，把正确输出和错误信息同时保存到同一个文件（file）中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;&gt;file 2&gt;&amp;1</td>
   <td>以追加的方式，把正确输出和错误信息同时保存到同一个文件（file）中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;file1 2&gt;file2</td>
   <td>以覆盖的方式，把正确的输出结果输出到 file1 文件中，把错误信息输出到 file2 文件中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;&gt;file1 2&gt;&gt;file2</td>
   <td>以追加的方式，把正确的输出结果输出到 file1 文件中，把错误信息输出到 file2 文件中。</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;file 2&gt;file</td>
   <td>【<strong>不推荐</strong>】这两种写法会导致 file 被打开两次，引起资源竞争，所以 stdout 和 stderr 会互相覆盖，</td>
  </tr>
  <tr>
   <td></td>
   <td>command &gt;&gt;file 2&gt;&gt;file</td>
   <td></td>
  </tr>
 </tbody>
</table>
<p><strong>/dev/null 文件是垃圾箱</strong></p>
<p>不要的输出直接可以输出到这里</p>
<p><strong>文件描述符</strong></p>
<table>
 <thead>
  <tr>
   <th>文件描述符</th>
   <th>文件名</th>
   <th>类型</th>
   <th>硬件</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>0</td>
   <td>stdin</td>
   <td>标准输入文件</td>
   <td>键盘</td>
  </tr>
  <tr>
   <td>1</td>
   <td>stdout</td>
   <td>标准正确输出文件</td>
   <td>显示器</td>
  </tr>
  <tr>
   <td>2</td>
   <td>stderr</td>
   <td>标准错误输出文件</td>
   <td>显示器</td>
  </tr>
 </tbody>
</table>
<p><strong>输入重定向</strong></p>
<pre><code class="language-cat">    TYPE=Ethernet 
    BOOTPROTO=none 
    NAME=ens160 
    DEVICE=ens160 
    ONBOOT=yes 
    IPADDR=192.168.26.200 
    PREFIX=24 
    GATEWAY=192.168.26.2 
    DNS1=192.168.26.2 
    eof
</code></pre>
<p><strong>read命令用法</strong></p>
<p>输出字后面可以让用户输入
 <br>
 **</p>
<pre><code># cat a.sh
stty -echo
read -p "请你大声的请你大声的告诉我你的QQ密码是什么:"  name
echo
echo 我的密码是： $name
stty echo
</code></pre>
<h3 id="----具备逻辑判断">&amp;&amp; || 具备逻辑判断</h3>
<p>&amp;&amp;是在上一台哦命令执行成功后才执行吓一跳
 <br>
 ||是在上一条命令没有成功后才执行下一条</p>
<p><strong>通配符</strong></p>
<table>
 <thead>
  <tr>
   <th>字符</th>
   <th>含义</th>
   <th>实例</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>*</td>
   <td>匹配0个或多个任意字符</td>
   <td>a*b，a与b之间可以有任意长度的字符，也可以没有。例如：aabcb，ab，azxcb...</td>
  </tr>
  <tr>
   <td>?</td>
   <td>匹配一个任意字符</td>
   <td>a?b，a与b之间必须但也只能存在一个字符，该字符可以是任意字符。例如：aab，abb，acb...</td>
  </tr>
  <tr>
   <td>[list]</td>
   <td>匹配list中的任意单个字符，一个[]只匹配一个位置的字符</td>
   <td>a[xyz]b，a与b之间必须但也只能存在一个字符，该字符只能是x或y或z。例如：axb，ayb，azb</td>
  </tr>
  <tr>
   <td>[!list]</td>
   <td>匹配除list中的任意单个字符</td>
   <td>a[!a-z]b，a与b之间必须但也只能存在一个字符，该字符不能是小写字母。例如：aAb，a0b...</td>
  </tr>
  <tr>
   <td>[c1-c2]</td>
   <td>匹配c1-c2间的任意单个字符</td>
   <td>a[0-1]b，a与b之间必须但也只能存在一个字符，该字符只能是数字。例如：a0b，a1b...</td>
  </tr>
  <tr>
   <td>{string1,string2,...}</td>
   <td>匹配string1、string2等中的一个字符串</td>
   <td>a{abc,xyz,opq}b，a与b之间必须但也只能存在一个字符串，字符串只能是abc或xyz或opq。例如：aabcb，axyzb，aopqb...</td>
  </tr>
  <tr>
   <td>{1..3}</td>
   <td>匹配1到3</td>
   <td></td>
  </tr>
 </tbody>
</table>
<h2 id="bash-初始化">Bash 初始化</h2>
<p>环境变量文件有哪些</p>
<pre><code class="language-bash">/etc/profile    使用范围：所有账户

/etc/bashrc	    使用范围：所有账户

~/.bashrc		使用范围：~所代表的账户

~/.bash_profile 使用范围：~所代表的账户

~/.bash_logout

login shell
	登录的时候需要输入用户名
nologin shell
	登录的时候不需要输入用户
</code></pre>
<h3 id="变量文件的作用">变量文件的作用</h3>
<p>1、/etc/profile</p>
<ul>
 <li>全局（公有）配置，不管是哪个用户，登录时都会读取该文件。</li>
</ul>
<p>2、/ect/bashrc</p>
<ul>
 <li>Ubuntu 没有此文件，与之对应的是 /ect/bash.bashrc</li>
 <li>它也是全局（公有）的</li>
 <li>bash 执行时，不管是何种方式，都会读取此文件。</li>
</ul>
<p>3、~/.profile</p>
<ul>
 <li>
  <p>若 bash 是以 login 方式执行时，读取 ~/.bash_profile，若它不存在，则读取
   <del>/.bash_login，若前两者不存在，读取</del>
   /.profile。</p>
 </li>
 <li>
  <p>图形模式登录时，此文件将被读取，即使存在 ~/.bash_profile 和 ~/.bash_login。</p>
 </li>
</ul>
<p>4、~/.bash_login</p>
<ul>
 <li>若 bash 是以 login 方式执行时，读取 ~/.bash_profile，若它不存在，则读取 ~/.bash_login，若前两者不存在，读取 ~/.profile。</li>
</ul>
<p>5、~/.bash_profile</p>
<ul>
 <li>
  <p>Unbutu 默认没有此文件，可新建。</p>
 </li>
 <li>
  <p>只有 bash 是以 login 形式执行时，才会读取此文件。通常该配置文件还会配置成去读取 ~/.bashrc。</p>
 </li>
</ul>
<p>6、~/.bashrc</p>
<ul>
 <li>当 bash 是以 non-login 形式执行时，读取此文件。若是以 login 形式执行，则不会读取此文件。</li>
</ul>
<p>7、~/.bash_logout</p>
<ul>
 <li>注销时，且是 longin 形式，此文件才会读取。在文本模式注销时，此文件会被读取，图形模式注销时，此文件不会被读取。</li>
</ul>
<h3 id="bash-环境变量加载">Bash 环境变量加载</h3>
<ul>
 <li>
  <p>图形模式登录时，顺序读取：/etc/profile 和 ~/.profile</p>
 </li>
 <li>
  <p>图形模式登录后，打开终端时，顺序读取：/etc/bash.bashrc 和 ~/.bashrc</p>
 </li>
 <li>
  <p>文本模式登录时，顺序读取：/etc/bash.bashrc，/etc/profile 和 ~/.bash_profile</p>
 </li>
 <li>
  <p>从其它用户 su 到该用户，则分两种情况：</p>
  <ul>
   <li>如果带 -l 参数（或-参数，--login 参数），如：su -l username，则 bash 是 login 的，它将顺序读取以下配置文件：/etc/bash.bashrc，/etc/profile 和~/.bash_profile。</li>
   <li>如果没有带 -l 参数，则 bash 是 non-login 的，它将顺序读取：/etc/bashrc 和 ~/.bashrc</li>
  </ul>
 </li>
 <li>
  <p>注销时，或退出 su 登录的用户，如果是 longin 方式，那么 bash 会读取：~/.bash_logout</p>
  <ul>
   <li>执行自定义的 Shell 文件时，若使用 bash -l a.sh 的方式，则 bash 会读取行：/etc/profile 和 ~/.bash_profile，若使用其它方式，如：bash a.sh，./a.sh，sh a.sh（这个不属于bash Shell），则不会读取上面的任何文件。</li>
   <li>上面的例子凡是读取到 ~/.bash_profile 的，若该文件不存在，则读取 ~/.bash_login，若前两者不存在，读取 ~/.profile。</li>
  </ul>
 </li>
</ul>
<h2 id="shell-脚本规范">Shell 脚本规范</h2>
<p><strong>开头有注释其</strong></p>
<pre><code>#!/bin/sh 
</code></pre>
<p><strong>除了 bash 之外，可以用下面的命令查看本机支持的解释器:</strong></p>
<pre><code>/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
</code></pre>
<p><strong>参数要规范</strong>
 <br>
 判断参数 给出输出回显</p>
<pre><code>if [[ $# != 2 ]];then
    echo "Parameter incorrect."
    exit 1
fi
</code></pre>
<h3 id="变量">变量</h3>
<p>一般情况下会将一些重要的环境变量定义在开头，确保这些变量的存在。</p>
<pre><code class="language-shell">source /etc/profile
export PATH=”/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin/”
</code></pre>
<ul>
 <li>这种定义方式有一个很常见的用途，最典型的应用就是，当本地安装了很多 java 版本时，可能需要指定一个java来用。这时就会在脚本开头重新定义JAVA_HOME以及PATH变量来进行控制。</li>
 <li>一段好的代码通常是不会有很多硬编码在代码里的“魔数”的。如果一定要有，通常是用一个变量的形式定义在开头，然后调用的时候直接调用这个变量，这样方便日后的修改。</li>
</ul>
<h3 id="代码有效率">代码有效率</h3>
<p><strong>勤用双引号</strong></p>
<pre><code>#!/bin/sh
#已知当前文件夹有一个a.sh的文件
var="*.sh"
echo $var
echo "$var" 
</code></pre>
<p>双引号 强制引用生效
 <br>
 单引号 无效引用</p>
<p><strong>学会查路径</strong></p>
<p>查看脚本所在路径</p>
<pre><code>script_dir=$(cd $(dirname $0) &amp;&amp; pwd)
script_dir=$(dirname $(readlink -f $0 ))
</code></pre>
<h3 id="shell-脚本调试">Shell 脚本调试</h3>
<p>sh 带参数
 <br>
 -n 不执行
 <br>
 -v 显示脚本内容
 <br>
 -x 执行脚本是会输出到那一步了</p>
<pre><code>module () {  eval `/usr/bin/modulecmd bash $*`
}
#!/bin/bash
case $1 in
    "one")
    echo "you input number is one"
    ;;
    "two")
    echo "you input number is twp"
    ;;
*)
    echo "you input number is other"
    ;;
esac
you input number is other
</code></pre>
<p><strong>位置变量</strong></p>
<p>$0 脚本名(自己本身)</p>
<p><span class="math math-inline">\* 所有的参数** "</span>*" 会将所有的参数作为一个整体，以"<span class="math math-inline">1 </span>2 … $n"的形式输出所有参数</p>
<p><span class="math math-inline">@ 所有的参数 "</span>@" 会将各个参数分开，以"<span class="math math-inline">1" "</span>2" … "$n" 的形式输出所有参数</p>
<p>$# 参数的个数</p>
<div class="math math-display">$! 上一个后台进程的PID $? 上一个命令的返回值 0表示成功 **示例** echo "第2个位置参数是$2" echo "第1个位置参数是$1" echo "第4个位置参数是$4" echo "所有参数是: $*" echo "所有参数是: $@" echo "参数的个数是: $#" echo "当前进程的PID是: $$" echo '$1='$1 echo '$2='$2 echo '$3='$3 echo '$*='$* echo '$@='$@ echo '$#='$# echo '$$='$$ ## 变量运算</div>]]></description><guid isPermaLink="false">/archives/173</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 15 Nov 2023 12:50:00 GMT</pubDate></item><item><title><![CDATA[MySQL集群搭建]]></title><link>https://7boe.top/archives/172</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=MySQL%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA&amp;url=/archives/172" width="1" height="1" alt="" style="opacity:0;">
<h1 id="mysql安装galera集群">mysql安装galera集群</h1>
<p><strong>配置galera源</strong></p>
<pre><code>vim /etc/yum.repo.d/galera.repo  /写入文件
</code></pre>
<pre><code>[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
enabled=1
gpgcheck=0
</code></pre>
<p><strong>安装阿里云epel源</strong></p>
<pre><code>rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
</code></pre>
<p><strong>编辑hosts</strong>
 <br>
 vim /etc/hosts</p>
<pre><code>89.213.0.37 node2
45.67.86.14 node
38.47.106.186 master
</code></pre>
<p><strong>查看安装包</strong></p>
<pre><code>yum list | grep 'galera'

</code></pre>
<p><strong>安装所需安装包以及集群定制mysql</strong></p>
<pre><code>yum install mysql-wsrep-5.7.x86_64 galera  rsync -y
</code></pre>
<p><strong>启动数据库(所有机器)：
  <br> 开始初始化步骤</strong></p>
<pre><code>systemctl start mysqld
</code></pre>
<p><strong>查看密码</strong></p>
<pre><code>cat /var/log/mysqld.log |grep password
</code></pre>
<p><strong>改密码</strong></p>
<pre><code>mysqladmin -u root -p password
</code></pre>
<p>创建授权用户</p>
<pre><code>grant all on *.* to 'admin'@'%' identified by 'Wang@qwer123';
</code></pre>
<p>编辑配置文件</p>
<pre><code>server-id=1 binlog_format=row innodb_file_per_table=1 innodb_autoinc_lock_mode=2

wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://' 
wsrep_node_name='master' 
wsrep_node_address='38.47.106.186' 
wsrep_sst_auth=syncuser:'Wang@qwer123' 
wsrep_sst_method=rsync
</code></pre>
<p><strong>每台机器都要改</strong></p>
<pre><code>galera2配置：主配置文件my.cnf追加如下内容 

server-id=2 
binlog_format=row 
innodb_file_per_table=1 
innodb_autoinc_lock_mode=2

wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name='galera' 
wsrep_cluster_address='gcomm://master' 
wsrep_node_name='node' 
wsrep_node_address='45.67.86.14'
wsrep_sst_auth=syncuser:'Wang@qwer123' 
wsrep_sst_method=rsync
</code></pre>
<p><strong>node3一样配置</strong></p>
<pre><code>galera3配置：主配置文件my.cnf追加如下内容
server-id=3 
binlog_format=row i
nnodb_file_per_table=1 
innodb_autoinc_lock_mode=2

wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name='galera' 
wsrep_cluster_address='gcomm://master,node' 
wsrep_node_name='node2' 
wsrep_node_address='89.213.0.37' 
wsrep_sst_auth=syncuser:'Wang@qwer123' 
wsrep_sst_method=rsync
</code></pre>
<blockquote>
 <p>GPT解释
  <br>
  这是一些Galera Cluster的配置选项，用于配置MySQL节点以参与Galera集群。让我解释每个选项的含义，并为你提供一些建议。</p>
</blockquote>
<ol>
 <li>
  <p><strong><code>wsrep_on=ON</code>：</strong></p>
  <ul>
   <li>启用Galera插件。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_provider=/usr/lib64/galera/libgalera_smm.so</code>：</strong></p>
  <ul>
   <li>指定Galera插件的位置。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_cluster_name=''</code>：</strong></p>
  <ul>
   <li>设置集群的名称。这是一个标识符，用于区分不同的Galera集群。请在引号内提供一个唯一的名称。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_cluster_address='gcomm://galera1'</code>：</strong></p>
  <ul>
   <li>指定Galera集群中其他节点的地址。在这里，只提供了一个节点的地址（<code>galera1</code>）。确保列出所有集群中的节点。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_node_name='galera2'</code>：</strong></p>
  <ul>
   <li>设置当前节点的名称。每个节点都应有唯一的名称。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_node_address='192.168.245.136'</code>：</strong></p>
  <ul>
   <li>设置当前节点的IP地址。确保这是节点可以访问的IP地址。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_sst_auth=syncuser:'Qianfeng123!@'</code>：</strong></p>
  <ul>
   <li>设置用于数据同步的用户名和密码。在这里，用户名是<code>syncuser</code>，密码是<code>Qianfeng123!@</code>。确保密码是安全的。</li>
  </ul>
 </li>
 <li>
  <p><strong><code>wsrep_sst_method=rsync</code>：</strong></p>
  <ul>
   <li>设置用于全量同步的方法。在这里使用的是rsync，这是一种常见的同步方法。你也可以选择其他方法，如xtrabackup。</li>
  </ul>
 </li>
</ol>
<p>基于你的配置，如果要对其进行修改，可以考虑以下几点：</p>
<ul>
 <li><strong><code>wsrep_cluster_name</code>：</strong> 设置一个唯一的集群名称。</li>
 <li><strong><code>wsrep_cluster_address</code>：</strong> 添加所有集群中节点的地址。</li>
 <li><strong><code>wsrep_node_name</code>：</strong> 设置每个节点的唯一名称。</li>
 <li><strong><code>wsrep_node_address</code>：</strong> 确保提供每个节点的可访问IP地址。</li>
 <li><strong><code>wsrep_sst_auth</code>：</strong> 使用安全的用户名和密码。</li>
 <li><strong><code>wsrep_sst_method</code>：</strong> 根据需要选择合适的同步方法。</li>
</ul>
<p>修改完配置后，确保在每个节点上应用这些更改，并重启MySQL服务使其生效。如果你遇到任何问题，请查看MySQL和Galera的日志文件以获取更多详细信息。</p>
<h2 id="验证操作">验证操作</h2>
<p>全部机器重新启动，没有报错是正常的。</p>
<pre><code>systemctl restart mysqld

</code></pre>
<p>看端口</p>
<pre><code>ss -tunlp |grep 3306

</code></pre>
<p><strong>数据库表单验证</strong></p>
<pre><code>show status like 'wsrep%';
</code></pre>
<p><strong>正常会显示3个ip
  <br> 阶段测试 在任何一台机器上写数据，在其他机器上全部会同步</strong></p>]]></description><guid isPermaLink="false">/archives/172</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 13 Nov 2023 03:17:00 GMT</pubDate></item><item><title><![CDATA[Linux日志备份以及多源主从复制]]></title><link>https://7boe.top/archives/171</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E6%97%A5%E5%BF%97%E5%A4%87%E4%BB%BD%E4%BB%A5%E5%8F%8A%E5%A4%9A%E6%BA%90%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6&amp;url=/archives/171" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux的mysql日志以及备份">Linux的mysql日志以及备份</h1>
<h2 id="日志分类">日志分类</h2>
<p><strong>Error Log</strong>
 <br>
 错误日志包含在/var/log/mysqld.log
 <br>
 默认位置： 编译安装：在安装目录下 rpm安装：/var/log/mysqld.log
 <br>
 <strong>指定日志位置</strong></p>
<pre><code>log-error=/var/log/mysqld.log
</code></pre>
<p><strong>注:日志存储的目录必须修改所有者和所属组为mysql</strong></p>
<p><strong>Binary Log</strong> 产生binlog日志：修改配置文件,添加如下配置</p>
<pre><code>log-bin=/var/log/mysql-bin/slave2
server-id=2    //mysql5.7要写

mkdir  /var/lib/mysql-bin
chown mysql.mysql /var/lib/mysql-bin/
systemctl restart mysqld

</code></pre>
<h2 id="使用binlog">使用binlog</h2>
<pre><code>vim  /etc/my.cnf   
[mysqld]
log-bin=mylog   # 追加如下配置
server-id=1
</code></pre>
<p><strong>查看方式</strong></p>
<pre><code>mysqlbinlog mysql.000002
</code></pre>
<p>安装datatime看</p>
<pre><code>mysqlbinlog /log/bin.000001 --start-datetime="2023.10.31 00:00:00" --stop-datetime="2023-11-07 00:00:00"
</code></pre>
<p>按position读取</p>
<pre><code>mysqlbinlog mysql.000002 --start-position=260
</code></pre>
<p>根据binlog恢复数据</p>
<pre><code>mysqlbinlog --start-datetime='2014-11-25 11:56:54'  --stop-datetime='2014-11-25 11:57:41'  binlog | mysql -u root -p1
</code></pre>
<p>刷新bin-log日志</p>
<pre><code>mysql -u root -p flush logs
</code></pre>
<h2 id="mysqldump">mysqldump</h2>
<p>备份</p>
<pre><code>mysqldump -u root -p db &gt;db.sql
</code></pre>
<p>导入恢复</p>
<pre><code>mysql -u root -p &lt;db.sql
</code></pre>
<h2 id="percona-xtrabackup物理备份">percona-xtrabackup物理备份</h2>
<p>安装软件centos7</p>
<pre><code>yum install https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.28/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.28-1.el7.x86_64.rpm
</code></pre>
<p>创建备份目录</p>
<pre><code>mkdir -p backup/full
</code></pre>
<h2 id="开始全量备份">开始全量备份</h2>
<pre><code>innobackupex --user=root --password=Wang@qwer123  backup/full
</code></pre>
<p>完全备份恢复流程</p>
<ul>
 <li>停止数据库</li>
 <li>清理环境</li>
 <li>重演回滚－－&gt; 恢复数据</li>
 <li>修改权限</li>
 <li>启动数据库</li>
 <li></li>
</ul>
<blockquote>
 <p>开始还原流程
  <br>
  关闭数据库并清理环境</p>
</blockquote>
<pre><code>systemctl stop mysqld
rm -rf /var/lib/mysql/*
innobackupex --apply-log backup/full/2018-01-21_18-19-25/ /验证备份
</code></pre>
<p>恢复数据</p>
<pre><code>innobackupex --copy-back backup/full/2018-01-21_18-19-25/
</code></pre>
<p>给予权限,重启启动</p>
<pre><code>chown mysql.mysql  /var/lib/mysql  -R
systemctl  start mysqld
</code></pre>
<h2 id="增量备份">增量备份</h2>
<p>先开始一个完整的备份</p>
<pre><code>innobackupex --user=USER --password=PASSWORD /backup/full
</code></pre>
<p>开始增量备份</p>
<pre><code>innobackupex --incremental /path/to/inc/dir \
  --incremental-basedir=$FULLBACKUP --user=USER --password=PASSWORD
</code></pre>
<p>校验包</p>
<pre><code>innobackupex --apply-log --redo-only /xtrabackup/full/2016-12-08_10-13-42/
</code></pre>
<p>合并包</p>
<pre><code>innobackupex --apply-log --redo-only /xtrabackup/full/2023-11-10_05-26-09/ --incremental-dir=/xtrabackup/full/2023-11-10_05-44-15/ //把谁合并到谁
</code></pre>
<p>差异备份</p>
<pre><code></code></pre>
<h2 id="mysql主从复制">mysql主从复制</h2>
<p>配置环境
 <br>
 统一MySQL5.7
 <br>
 关闭selinux
 <br>
 防火墙
 <br>
 centos安装5.7</p>
<pre><code>yum install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
</code></pre>
<p>配置hosts和my.conf</p>
<pre><code>10.0.0.1 master
10.0.0.2 node1
10.0.0.3 node2
</code></pre>
<p>vim /etc/my.cnf文件</p>
<pre><code>log-bin=/var/lib/mysql/master
server-id=1 		//ID号需要跟从的配置不一样

gtid_mode=ON
enforce_gtid_consistency=1
</code></pre>
<p>授权用户</p>
<pre><code>grant replication slave,super,reload on *.* to slave@'%' identified by 'Wang@qwer123';
</code></pre>
<p>添加master</p>
<pre><code>change master to master_host='10.0.0.2',master_user='admin',master_password='Wang@qwer123',master_auto_position=1;

</code></pre>
<p>slave命令</p>
<pre><code>stop salve;
start slave;
show slave status;
show master status;
show slave status \G;
</code></pre>
<h2 id="多源复制">多源复制</h2>
<p>配置文件一样</p>
<p>授权一样</p>
<pre><code>grant replication slave,super,reload on *.* to admin@'%' identified by 'Wang@qwer123';
</code></pre>
<p>让master互联</p>
<pre><code>change master to master_host='master2',master_user='admin',master_password='Wang@qwer123',master_auto_position=1;
</code></pre>
<p>到此，互为主从配置成功</p>
<p>接下来配置两台slave: slave1: 修改配置文件vim /etc/my.cnf</p>
<pre><code>
log-bin 
server-id=3 
gtid_mode=ON 
enforce_gtid_consistency=1 
master-info-repository=TABLE
relay-log-info-repository=TABLE
</code></pre>
<p>两个机器都加入master1和2</p>
<pre><code>change master to master_host='master2',master_user='admin',master_password='Wang@qwer123',master_auto_position=1 for channel 'master2';
change master to master_host='master',master_user='admin',master_password='Wang@qwer123', master_auto_position=1 for channel 'master1';

</code></pre>
<h3 id="加入报错查id">加入报错查id</h3>
<p><strong>解决链接</strong>
 <br>
 <a href="https://tool.4xseo.com/a/55018.html">帮助</a></p>]]></description><guid isPermaLink="false">/archives/171</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Fri, 10 Nov 2023 13:18:00 GMT</pubDate></item><item><title><![CDATA[Linux数据库Mysql增删改查]]></title><link>https://7boe.top/archives/170</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E6%95%B0%E6%8D%AE%E5%BA%93Mysql%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5&amp;url=/archives/170" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux数据库mysql增删改查">Linux数据库Mysql增删改查</h1>
<p><strong>从安装数据库到增删改查</strong></p>
<pre><code>apt install mariadb-server
</code></pre>
<p>安装好后初始化</p>
<pre><code>mysql_secure_installation
</code></pre>
<h2 id="查">查</h2>
<p><strong>查询现有的库</strong></p>
<pre><code>show databases;
</code></pre>
<p><strong>进入库</strong></p>
<pre><code>use mysql;
</code></pre>
<p><strong>查询表</strong></p>
<pre><code>show tables;
</code></pre>
<p><strong>查询表结构</strong></p>
<pre><code>desc mysql;
</code></pre>
<p><strong>查询表内容</strong></p>
<pre><code>select * from mysql;
</code></pre>
<p><strong>查询创建数据库信息</strong></p>
<pre><code>select create database mysql;

</code></pre>
<p><strong>查询表创建信息</strong></p>
<pre><code>select create table use;
</code></pre>
<p><strong>条件查询</strong></p>
<pre><code>select name,age from user where name="wang";
</code></pre>
<h1 id="增">增</h1>
<p>创建数据库</p>
<pre><code>CREATE  DATABASE school
</code></pre>
<p>创建表</p>
<pre><code>create table db(id int,name varchar(10),sex enum("m","f"),age int);
</code></pre>
<p>增加数据</p>
<pre><code>insert into db(id,name,sex,age) values(1,"wing","m",18); //字符必须引用
</code></pre>
<p>安装表字段顺序插入</p>
<pre><code>insert into db values(4,"xiaosan","f",10);

</code></pre>
<p>插入新增指定的数据</p>
<pre><code>insert into t1 set id=6,math=65; //新增数据可以只插入指定的数据
</code></pre>
<p>更新数据</p>
<pre><code>update db1 set name="wang" where id=1;   //条件是id
</code></pre>
<h2 id="改">改</h2>
<p>修改表名</p>
<pre><code>rename table db1 to t1;
</code></pre>
<p>添加新字段</p>
<pre><code>alter table db1  add job int(10);
</code></pre>
<p>修改数据类型</p>
<pre><code>mysql&gt; alter table t1  modify chinese int(5) not null;
</code></pre>
<p>修改名称、数据类型、修饰符</p>
<pre><code>mysql&gt; alter table t1 change chinese  china int(6);
</code></pre>
<h2 id="删">删</h2>
<p>删除表字段</p>
<pre><code>alter table db1 drop wang;
</code></pre>
<p>删除表</p>
<pre><code>delete table db1;
</code></pre>
<p>删除多张表</p>
<pre><code>drop table t1,t2,t3;
</code></pre>
<p>删库</p>
<pre><code>drop database 数据库名;
</code></pre>
<h2 id="复制表">复制表</h2>
<p>复制查询内容</p>
<pre><code>create table t10(select * from t3); //创建表的时候把另一个表的内容全部复制来
</code></pre>
<p>也可以复制指定查询的字段</p>
<pre><code>create table t10(select id,name from t3);
</code></pre>
<p>复制指定查询的表</p>
<pre><code>insert into t3 select * from t10 where id=9; //复制指定的表里的指定内容

</code></pre>
<h2 id="进阶">进阶</h2>
<h3 id="进阶创建表">进阶创建表</h3>
<p><strong>创建表字段</strong></p>
<pre><code>CREATE TABLE ces (
  id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,  //主键唯一，id自增，不能为空
  name VARCHAR(20) NOT NULL,
  sex ENUM('male', 'female') DEFAULT 'male' NOT NULL,  //不填默认为
  hir_data DATE NOT NULL,
  post VARCHAR(50),
  job VARCHAR(100),
  gongzhi DOUBLE(15, 2) NOT NULL,
  office INT,
  dep_id INT
);
    
</code></pre>
<p><strong>进阶插入表字段</strong>
 <br>
 按照顺序插入表内容</p>
<pre><code>INSERT INTO ces (name, sex, hir_data, post, job, gongzhi, office, dep_id)
VALUES 
('jack', 'male', '2018-02-02', 'instructor', 'teach', 5000, 501, 100),
('tom', 'male', '2018-02-03', 'instructor', 'teach', 5500, 501, 100),
('robin', 'male', '2018-02-02', 'instructor', 'teach', 8000, 501, 100),
('alice', 'female', '2018-02-02', 'instructor', 'teach', 7200, 501, 100),
('wing', 'male', '2018-02-02', 'hr', 'hrcc', 600, 502, 101),
('harry', 'male', '2018-02-02', 'hr', NULL, 6000, 502, 101),
('emma', 'female', '2018-02-06', 'sale', 'salecc', 20000, 503, 102),
('christine', 'female', '2018-02-05', 'sale', 'salecc', 2200, 503, 102),
('zhuzhu', 'male', '2018-02-05', 'sale', NULL, 2200, 503, 102),
('gougou', 'male', '2018-02-05', 'sale', '', 2200, 503, 102);
</code></pre>
<h3 id="进阶查询">进阶查询</h3>
<p>条件查询</p>
<pre><code>SELECT DISTINCT post  FROM ces;  //不显示重复
</code></pre>
<p>算数</p>
<pre><code>SELECT name, gongzhi*2 FROM ces; //工资乘以2
</code></pre>
<p>大于小于</p>
<pre><code>select gongzhi from ces where gongzhi&gt;500 and gongzhi&lt;10000
</code></pre>
<p>反过来</p>
<pre><code>select gongzhi from ces where not gongzhi&gt;5000 ; //工资不大于5000的
</code></pre>
<p>匹配字符</p>
<pre><code>select gongzhi from ces where gongzhi BETWEEN 2000 AND 5000; //取反也是not
</code></pre>
<p>查询为空</p>
<pre><code>select job from ces where job is null; //查询为空
</code></pre>
<pre><code>select job from ces where job is not null;//不为空
</code></pre>
<p>按内容查询或</p>
<pre><code>SELECT gongzhi FROM ces WHERE salary=4000 OR salary=5000 OR salary=6000 ;
</code></pre>
<pre><code>SELECT gongzhi FROM ces WHERE salary IN (4000,5000,6000,9000) ;
</code></pre>
<p>排序</p>
<pre><code>SELECT gongzhi FROM ces WHERE order by gongzhi; //从小到大
</code></pre>
<pre><code>SELECT gongzhi FROM ces WHERE order by gongzhi desc;//大到小
</code></pre>
<p>按分组查询</p>
<pre><code>SELECT dep_id,GROUP_CONCAT(name) FROM ces group by dep_id;
</code></pre>
<p>包含查询</p>
<pre><code>SELECT * from ces where name like '%J%';//名字里面包含j的
</code></pre>
<h3 id="函数">函数</h3>
<ul>
 <li><code>COUNT()</code>: 用于计算指定列或表中的行数。</li>
 <li><code>MAX()</code>: 用于找到指定列或表中的最大值。</li>
 <li><code>MIN()</code>: 用于找到指定列或表中的最小值。</li>
 <li><code>AVG()</code>: 用于计算指定列或表中的平均值。</li>
 <li><code>DATABASE()</code>: 用于返回当前数据库的名称。</li>
 <li><code>USER()</code>: 用于返回当前用户的名称。</li>
 <li><code>NOW()</code>: 用于返回当前日期和时间。</li>
 <li><code>SUM()</code>: 用于计算指定列或表中数值的总和。</li>
 <li><code>PASSWORD()</code>: 用于对字符串进行加密，通常用于用户密码的存储。</li>
 <li><code>MD5()</code>: 用于计算字符串的 MD5 哈希值。</li>
 <li><code>SHA1()</code>: 用于计算字符串的 SHA1 哈希值。</li>
 <li><code>POWER()</code>: 用于计算一个数的指定次幂。</li>
</ul>
<h2 id="数据类型">数据类型</h2>
<ul>
 <li>
  <p>整数
   <br>
   int类型</p>
 </li>
 <li>
  <p>浮点型
   <br>
   float 单精度
   <br>
   duoble 双精度
   <br>
   decimal 定点型</p>
 </li>
 <li>
  <p>字符串类型
   <br>
   char
   <br>
   varchar 能存放跟多</p>
 </li>
 <li>
  <p>枚举类型
   <br>
   enum 固定的数只能选一个
   <br>
   set 两个都可以选</p>
 </li>
 <li>
  <p>日期类型</p>
 </li>
</ul>
<p>year
 <br>
 1978年 可以写成 78
 <br>
 2008年 可以写成08</p>
<p>data
 <br>
 2022年3月8号,可以写成如下格式输入给mysql 2022/03/08 2022-03-08</p>
<p>time
 <br>
 050510 05:05:10</p>
<h2 id="权限管理">权限管理</h2>
<p>创建用户</p>
<pre><code>create user 'wang'@'%' identified by 'qwer123123';
</code></pre>
<p>授权用户</p>
<pre><code>grant all on *.* to 'wang'@'%' identified by 'qwer123';

</code></pre>
<p>5.7版本数据库可以直接授权没有的用户，使用授权语句会创建不存在的用户。
 <br>
 删除用户</p>
<pre><code>DROP USER  'wang'@’localhost’;
</code></pre>
<p>会删除localhost的用户，可以存在其他授权地址的同名用户。
 <br>
 用语句在库里面删除</p>
<pre><code>delete from mysql.user where user='wang' AND host='localhost';\
</code></pre>
<p>刷新权限</p>
<pre><code>FLUSH PRIVILEGES;

</code></pre>
<p>查看自己的授权</p>
<pre><code>SHOW GRANTS\G
</code></pre>
<p>看其他用户权限</p>
<pre><code>SHOW GRANTS FOR admin1@'%'\G  
</code></pre>
<p>配置文件设置跳过密码</p>
<pre><code>skip-grant-tables
</code></pre>
<p>改用户名</p>
<pre><code>RENAME USER old_name TO new_name;
</code></pre>
<h2 id="其他配置以及语句">其他配置以及语句</h2>
<p>状态</p>
<pre><code>show status; 
</code></pre>
<p>进程列表</p>
<pre><code>show processlist;
</code></pre>]]></description><guid isPermaLink="false">/archives/170</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 8 Nov 2023 08:05:00 GMT</pubDate></item><item><title><![CDATA[Linux下nfs服务以及ftp服务器]]></title><link>https://7boe.top/archives/169</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8Bnfs%E6%9C%8D%E5%8A%A1%E4%BB%A5%E5%8F%8Aftp%E6%9C%8D%E5%8A%A1%E5%99%A8&amp;url=/archives/169" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下的nfs文件共享以及ftp服务器">Linux下的nfs文件共享以及ftp服务器</h1>
<h2 id="nfs">NFS</h2>
<p>NFS（Network File System）是一种用于在网络上共享文件系统的协议。它允许将远程文件系统挂载到本地系统，使得可以像访问本地文件一样访问远程文件。下面是安装和使用 NFS 的一般步骤：</p>
<ol>
 <li>
  <p>在服务器上安装 NFS 服务：</p>
  <ul>
   <li>对于 Ubuntu 或 Debian 系统，使用以下命令安装 NFS 服务器组件：
    <pre><code>sudo apt-get install nfs-kernel-server
</code></pre></li>
   <li>对于 CentOS 或 RHEL 系统，使用以下命令安装 NFS 服务器组件：
    <pre><code>sudo yum install nfs-utils
</code></pre></li>
  </ul>
 </li>
 <li>
  <p>在服务器上创建要共享的目录：</p>
  <pre><code>sudo mkdir /path/to/shared_directory
</code></pre>
 </li>
 <li>
  <p>配置 NFS 服务器：</p>
  <ul>
   <li>打开 NFS 服务器配置文件 <code>/etc/exports</code> 进行编辑：
    <pre><code>sudo nano /etc/exports
</code></pre></li>
   <li>在文件中添加共享目录的配置，指定允许访问的客户端和权限。例如，如果要允许客户端 IP 地址为 192.168.1.100 的主机访问共享目录，可以添加以下行：
    <pre><code>/path/to/shared_directory 192.168.1.100(rw,sync,no_root_squash)
</code></pre>
    这将允许客户端以读写模式（rw）访问共享目录，并确保同步写入（sync），同时保留 root 用户权限（no_root_squash）。</li>
  </ul>
 </li>
 <li>
  <p>保存并关闭文件（在 Nano 编辑器中，按下 <code>Ctrl + X</code>，然后按下 <code>Y</code> 以保存更改）。</p>
 </li>
 <li>
  <p>启动 NFS 服务：</p>
  <ul>
   <li>对于 Ubuntu 或 Debian 系统，使用以下命令启动 NFS 服务：
    <pre><code>sudo service nfs-kernel-server start
</code></pre></li>
   <li>对于 CentOS 或 RHEL 系统，使用以下命令启动 NFS 服务：
    <pre><code>sudo systemctl start nfs-server
</code></pre></li>
  </ul>
 </li>
 <li>
  <p>在客户端上挂载共享目录：</p>
  <ul>
   <li>确保客户端上已安装 NFS 客户端组件：
    <ul>
     <li>对于 Ubuntu 或 Debian 系统，使用以下命令安装 NFS 客户端组件：
      <pre><code>sudo apt-get install nfs-common
</code></pre></li>
     <li>对于 CentOS 或 RHEL 系统，使用以下命令安装 NFS 客户端组件：
      <pre><code>sudo yum install nfs-utils
</code></pre></li>
    </ul></li>
   <li>创建一个本地目录作为挂载点：
    <pre><code>sudo mkdir /path/to/mount_point
</code></pre></li>
   <li>将远程共享目录挂载到本地挂载点：
    <pre><code>sudo mount server_ip:/path/to/shared_directory /path/to/mount_point
</code></pre>
    将 <code>server_ip</code> 替换为 NFS 服务器的 IP 地址，<code>/path/to/shared_directory</code> 替换为共享目录的路径，<code>/path/to/mount_point</code> 替换为本地挂载点的路径。</li>
  </ul>
 </li>
</ol>
<h2 id="ftp">FTP</h2>
<p>要安装和配置 vsftpd（Very Secure FTP Daemon），您可以按照以下步骤进行操作：</p>
<ol>
 <li>
  <p>安装 vsftpd：</p>
  <ul>
   <li>对于 Ubuntu 或 Debian 系统，使用以下命令安装：
    <pre><code>sudo apt update
sudo apt install vsftpd
</code></pre></li>
   <li>对于 CentOS 或 RHEL 系统，使用以下命令安装：
    <pre><code>sudo yum install vsftpd
</code></pre></li>
  </ul>
 </li>
 <li>
  <p>配置 vsftpd：</p>
  <ul>
   <li>打开 <code>/etc/vsftpd.conf</code> 文件进行编辑：
    <pre><code>sudo nano /etc/vsftpd.conf
</code></pre></li>
   <li>根据需要进行以下配置更改：
    <ul>
     <li>确保以下行的注释符号（<code>#</code>）被删除：
      <pre><code>listen=YES
</code></pre></li>
     <li>如果您希望允许匿名访问，请确保以下行的注释符号被删除：
      <pre><code>anonymous_enable=YES
</code></pre></li>
     <li>如果您希望允许本地用户登录，请确保以下行没有注释符号：
      <pre><code>local_enable=YES
</code></pre></li>
     <li>如果您希望允许上传文件，请确保以下行没有注释符号：
      <pre><code>write_enable=YES
</code></pre></li>
     <li>如果您希望启用本地用户的写权限，请确保以下行没有注释符号：
      <pre><code>local_umask=022
</code></pre></li>
     <li>如果您希望限制本地用户的访问到其主目录，请确保以下行没有注释符号：
      <pre><code>chroot_local_user=YES
</code></pre></li>
     <li>如果您希望启用虚拟用户，请参考 vsftpd 文档进行相应配置。</li>
    </ul></li>
  </ul>
 </li>
 <li>
  <p>保存并关闭文件（在 Nano 编辑器中，按下 <code>Ctrl + X</code>，然后按下 <code>Y</code> 以保存更改）。</p>
 </li>
 <li>
  <p>重启 vsftpd 服务以使更改生效：</p>
  <ul>
   <li>对于 Ubuntu 或 Debian 系统，使用以下命令重启服务：
    <pre><code>sudo service vsftpd restart
</code></pre></li>
   <li>对于 CentOS 或 RHEL 系统，使用以下命令重启服务：
    <pre><code>sudo systemctl restart vsftpd
</code></pre></li>
  </ul>
 </li>
</ol>]]></description><guid isPermaLink="false">/archives/169</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>技术分类</category><pubDate>Tue, 31 Oct 2023 09:30:00 GMT</pubDate></item><item><title><![CDATA[Linux下ssh服务]]></title><link>https://7boe.top/archives/168</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8Bssh%E6%9C%8D%E5%8A%A1&amp;url=/archives/168" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下的ssh秘钥以及服务">Linux下的ssh秘钥以及服务</h1>
<h2 id="ssh连接">ssh连接</h2>
<p>远程管理
 <br>
 SSH（Secure Shell）是一种加密的网络协议，用于在不安全的网络上安全地进行远程登录和文件传输。下面是一些常用的SSH服务命令：</p>
<ol>
 <li>
  <p>连接到远程服务器：</p>
  <pre><code>ssh user@hostname
</code></pre>
  <p>其中，<code>user</code>是您在远程服务器上的用户名，<code>hostname</code>是远程服务器的主机名或IP地址。执行此命令后，系统会提示您输入密码来进行身份验证。</p>
 </li>
 <li>
  <p>使用特定端口连接到远程服务器：</p>
  <pre><code>ssh -p port user@hostname
</code></pre>
  <p>如果SSH服务器在非默认的端口上运行（默认端口为22），您可以使用<code>-p</code>选项指定端口号。</p>
 </li>
 <li>
  <p>使用SSH密钥进行身份验证：</p>
  <pre><code>ssh -i path/to/private_key user@hostname
</code></pre>
  <p>如果您使用SSH密钥对进行身份验证，可以使用<code>-i</code>选项指定私钥文件的路径。</p>
 </li>
 <li>
  <p>传输文件到远程服务器（使用scp命令）：</p>
  <pre><code>scp path/to/local/file user@hostname:path/to/remote/directory
</code></pre>
  <p>这将把本地文件复制到远程服务器的指定目录中。同样，您需要提供正确的用户名、主机名和目标路径。</p>
 </li>
 <li>
  <p>从远程服务器下载文件（使用scp命令）：</p>
  <pre><code>scp user@hostname:path/to/remote/file path/to/local/directory
</code></pre>
  <p>这将从远程服务器下载文件到本地指定目录。同样，您需要提供正确的用户名、主机名和远程文件路径。</p>
 </li>
</ol>
<h2 id="ssh秘钥">ssh秘钥</h2>
<p>生成和拷贝SSH密钥是一种更安全和方便的SSH身份验证方法。下面是生成和拷贝SSH密钥的步骤：</p>
<ol>
 <li>
  <p>生成SSH密钥对：
   <br>
   在本地计算机上打开终端或命令提示符，并执行以下命令来生成SSH密钥对：</p>
  <pre><code>ssh-keygen -t rsa -b 4096
</code></pre>
  <p>这将生成一个RSA类型的密钥对，密钥长度为4096位。您可以按照提示输入密钥文件的保存路径和密码（可选）。</p>
 </li>
 <li>
  <p>拷贝公钥到远程服务器：
   <br>
   使用以下命令将公钥拷贝到远程服务器上的<code>~/.ssh/authorized_keys</code>文件中：</p>
  <pre><code>ssh-copy-id user@hostname
</code></pre>
  <p>这将要求您输入远程服务器的密码，然后将本地生成的公钥自动复制到远程服务器上的授权密钥文件中。</p>
  <p>如果<code>ssh-copy-id</code>命令不可用，您可以手动复制公钥到远程服务器。使用以下命令将公钥内容复制到剪贴板：</p>
  <pre><code>cat ~/.ssh/id_rsa.pub | pbcopy   # macOS
cat ~/.ssh/id_rsa.pub | xclip   # Linux
</code></pre>
  <p>然后，在远程服务器上，使用文本编辑器打开<code>~/.ssh/authorized_keys</code>文件，并将公钥粘贴到文件中保存。</p>
 </li>
 <li>
  <p>测试SSH连接：
   <br>
   现在，您可以尝试使用SSH密钥进行连接，而无需输入密码：</p>
  <pre><code>ssh user@hostname
</code></pre>
  <p>如果一切设置正确，您应该能够直接连接到远程服务器。</p>
 </li>
</ol>]]></description><guid isPermaLink="false">/archives/168</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>技术分类</category><pubDate>Mon, 30 Oct 2023 02:19:00 GMT</pubDate></item><item><title><![CDATA[Liunx下搭建gitlab代码仓库]]></title><link>https://7boe.top/archives/167</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Liunx%E4%B8%8B%E6%90%AD%E5%BB%BAgitlab%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93&amp;url=/archives/167" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下搭建gitlab本地代码仓库">Linux下搭建gitlab本地代码仓库</h1>
<h2 id="docker搭建">Docker搭建</h2>
<p><strong>docker搜索gitlab</strong></p>
<pre><code>docker search gitlab 
</code></pre>
<p><strong>ce 表示社区免费版 ，ee 表示企业付费版</strong></p>
<pre><code>docker pull gitlab/gitlab-ce //拉取gitlab官方镜像

</code></pre>
<p><strong>查看镜像</strong></p>
<pre><code>docker images
</code></pre>
<p><strong>启动容器</strong></p>
<pre><code>docker run -d \
--hostname gitlab.xxx.com \
--name gitlab \
--restart always \
-p 8082:443 -p 8083:80 -p 8084:22 \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/local/gitlab_data/gitlab/config:/etc/gitlab \
-v /usr/local/gitlab_data/gitlab/logs:/var/log/gitlab \
-v /usr/local/gitlab_data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce

</code></pre>
<p><strong>参数说明</strong></p>
<ul>
 <li>-d 指定后台运行</li>
 <li>--hostname 指定主机名</li>
 <li>--name 指定容器名</li>
 <li>-p 端口映射 443 https端口 80 http端口 22 ssh端口</li>
 <li>--restart always 容器停止后的重启策略: 容器退出时总是重启</li>
 <li>-v 指定挂载存储卷首先在宿主主机创建对应的目录</li>
</ul>]]></description><guid isPermaLink="false">/archives/167</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>GITHUB项目</category><category>Docker</category><category>技术分类</category><pubDate>Sat, 28 Oct 2023 09:18:00 GMT</pubDate></item><item><title><![CDATA[Grafana和Prometheus的安装]]></title><link>https://7boe.top/archives/167</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Grafana%E5%92%8CPrometheus%E7%9A%84%E5%AE%89%E8%A3%85&amp;url=/archives/167" width="1" height="1" alt="" style="opacity:0;">
<h1 id="grafana和prometheus搭建">Grafana和Prometheus搭建</h1>
<h2 id="服务端">服务端</h2>
<p>首先搭建Prometheus 服务端</p>
<p><a href="https://prometheus.io/download/">官网</a></p>
<p><a href="https://github.com/prometheus/prometheus/releases/download/v2.47.2/prometheus-2.47.2.linux-amd64.tar.gz">最新版</a>
 <br>
 下载到服务器后解压出来</p>
<pre><code>tar xvf prometheus-2.47.2.linux-amd64.tar.gz -C /usr/local/prometheus
cd /usr/local/prometheus
useradd prometheus -s /usr/sbin/nologin
chown -R prometheus.prometheus ./*
</code></pre>
<p>进入目录后编辑配置文件，需要改动的是最后几行，是添加其他节点以及主机的</p>
<pre><code>vim prometheus.yml
</code></pre>
<p>之需要添加job_name这种监控对象就行了排版类似文件内原来的默认主机</p>
<pre><code>  - job_name: "prometheus"
    static_configs:
      - targets: ["127.0.0.1:9100"]
</code></pre>
<p>然后启动查看测试</p>
<pre><code>./prometheus //启动后查看9090端口的服务里面tag里面有几台机器

</code></pre>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F26%2F653a525de867d.png&amp;size=m" alt=""></p>
<p>然后写service服务文件，让其可以通过systemctl控制他,配置文件路径改成自己的</p>
<pre><code>[Unit]
Description=prometheus
After=network.target 

[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target

</code></pre>
<p>然后重载服务，尝试用systemctl控制他开启</p>
<pre><code>➜ systemctl daemon-reload
➜ systemctl start prometheus.service
➜ systemctl enable prometheus.service
➜ systemctl status prometheus.service

</code></pre>
<h2 id="安装-node_exporter">安装 node_exporter</h2>
<p><strong>接下来安装node节点，统一采用docker方式安装，没什么因为快。</strong></p>
<blockquote>
 <p>dockerhub官方docker镜像文件
  <br>
  直接拉下来然后启动映射出来就行了</p>
</blockquote>
<p>先安装docker环境</p>
<pre><code>apt install docker.io
</code></pre>
<p>拉取</p>
<pre><code>docker pull prom/node-exporter
</code></pre>
<p>一条命令启动</p>
<pre><code>docker run -d --name node --restart=always -p 9100:9100 prom/node-exporter
</code></pre>
<blockquote>
 <p><strong>直接映射到9100端口了，可以打开看一下测试页，因为是node没有其他东西正常只要在server端添加到配置文件就行了</strong></p>
</blockquote>
<h2 id="安装-grafana">安装 Grafana</h2>
<blockquote>
 <p>安装方式呢..... 哎也是docker
  <br>
  为什么钟爱docker呢，因为个人用户数据不需要持久化的情况下，直接一条命令启动，不需要配置那么多东西</p>
</blockquote>
<pre><code>docker run -d --name=grafana -p 3000:3000 grafana/grafana
</code></pre>
<p>直接启动 在3000端口进行配置就行了。
 <br>
 跟多配置文件在<a href="https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/">官网</a></p>
<p>如果需要保持到卷里面,直接用这个</p>
<pre><code>docker run -d -p 3000:3000 --name=grafana \
  --volume grafana-storage:/var/lib/grafana \
  grafana/grafana-enterprise

</code></pre>
<p>需要映射到目录里用这个
 <br>
 <strong>docker-compose</strong></p>
<pre><code>version: '3.8'
services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    restart: alway
    user: '0'
    ports:
      - '3000:3000'
    # adding the mount volume point which we create earlier
    volumes:
      - './data:/var/lib/grafana' //和当前docker-compose文件放在一起的data下

</code></pre>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F26%2F653a6465b6a1e.png&amp;size=m" alt=""></p>
<p>最后<a href="https://stat.7boe.top/">成品</a></p>]]></description><guid isPermaLink="false">/archives/167</guid><dc:creator>Celia</dc:creator><category>Linux</category><category>网站搭建</category><pubDate>Thu, 26 Oct 2023 13:00:00 GMT</pubDate></item><item><title><![CDATA[Linux编译安装nginx以及mysql]]></title><link>https://7boe.top/archives/166</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85nginx%E4%BB%A5%E5%8F%8Amysql&amp;url=/archives/166" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下编译nginx以及mysql">Linux下编译Nginx以及Mysql</h1>
<h2 id="nginx">Nginx</h2>
<ul>
 <li>下载</li>
</ul>
<pre><code>wget  https://nginx.org/download/nginx-1.25.3.tar.gz
</code></pre>
<ul>
 <li>安装编译器</li>
</ul>
<pre><code>yum -y install gcc gcc- c++ pcre pcre-devel gd-devel openssl-devel  zlib zlib-devel
</code></pre>
<ul>
 <li>解压缩</li>
</ul>
<pre><code>tar xzvf nginx-1.25.3.tar.gz
</code></pre>
<ul>
 <li>进入目录</li>
</ul>
<pre><code>cd nginx-1.25.3/
</code></pre>
<ul>
 <li>配置安装参数</li>
</ul>
<pre><code>./configure --prefix=/usr/local/nginx \
--group=nginx \
--user=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf
过程当中如果出错，删除Makefile文件后重新配置
</code></pre>
<ul>
 <li>编译以及编译安装</li>
</ul>
<pre><code>make &amp;&amp; make install
</code></pre>
<p>启动Nginx</p>
<pre><code>./usr/local/nginx/bin/nginx   //带其他参数
</code></pre>
<h2 id="mysql编译">Mysql编译</h2>
<ul>
 <li>下载带boost的包</li>
</ul>
<pre><code>wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-boost-5.7.36.tar.gz?spm=a2c6h.25603864.0.0.474e63afypHFbr -O mysql-boost-5.7.36.tar.gz
</code></pre>
<ul>
 <li>解压缩</li>
</ul>
<pre><code>tar zxvf mysql-boost-5.7.36.tar.gz

</code></pre>
<ul>
 <li>创建用户</li>
</ul>
<pre><code>useradd -r mysql -M -s /sbin/nologin

</code></pre>
<p>安装编译环境</p>
<pre><code>yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake
</code></pre>
<p>创建文件存放位置</p>
<pre><code>mkdir -p /usr/local/{data,mysql,log}
</code></pre>
<p>预编译</p>
<pre><code>
cmake . \
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
</code></pre>
<ul>
 <li>开始编译</li>
</ul>
<pre><code>make -j4 &amp;&amp; make install
</code></pre>
<ul>
 <li>进入安装目录修改权限</li>
</ul>
<pre><code>chown -R mysql.mysql .
</code></pre>
<ul>
 <li>初始化</li>
</ul>
<pre><code>./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data    
</code></pre>
<p>初始化,只需要初始化一次，初始化完成之后，一定要记住提示最后的密码用于登陆或者修改密码</p>
<pre><code>vim /etc/my.cnf 
</code></pre>
<p>删除旧配置文件之后，再添加如下内容</p>
<pre><code>[mysqld]
basedir=/usr/local/mysql       #指定安装目录
datadir=/usr/local/mysql/data  #指定数据存放目录
</code></pre>
<p>在后台启动</p>
<pre><code>./bin/mysqld_safe --user=mysql &amp;
</code></pre>
<ul>
 <li>登录</li>
</ul>
<pre><code>/usr/local/mysql/bin/mysql -uroot -p
</code></pre>
<p>密码在之前初始化出来的日志里</p>
<p>登录</p>
<pre><code>mysql
mysql&gt; update mysql.user set password=password("456") where user="root" and host="localhost";
mysql&gt; flush privileges;
mysql&gt; \q

</code></pre>
<p>修改好密码之后注释掉skip-grant-table，重启服务即可使用修改后的密码进入数据库</p>]]></description><guid isPermaLink="false">/archives/166</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 25 Oct 2023 04:24:00 GMT</pubDate></item><item><title><![CDATA[Linux下软件包管理]]></title><link>https://7boe.top/archives/165</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8B%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86&amp;url=/archives/165" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下软件包管理">Linux下软件包管理</h1>
<h2 id="rpm">RPM</h2>
<p><code>rpm</code> 是一个用于管理 RPM（Red Hat Package Manager）软件包的命令行工具。下面是一些常用的 <code>rpm</code> 命令参数：</p>
<ol>
 <li>
  <p>安装软件包：</p>
  <pre><code>rpm -i &lt;package.rpm&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --install &lt;package.rpm&gt;
</code></pre>
 </li>
 <li>
  <p>升级软件包：</p>
  <pre><code>rpm -U &lt;package.rpm&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --upgrade &lt;package.rpm&gt;
</code></pre>
 </li>
 <li>
  <p>删除软件包：</p>
  <pre><code>rpm -e &lt;package&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --erase &lt;package&gt;
</code></pre>
 </li>
 <li>
  <p>查询软件包信息：</p>
  <pre><code>rpm -q &lt;package&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query &lt;package&gt;
</code></pre>
 </li>
 <li>
  <p>列出已安装的软件包：</p>
  <pre><code>rpm -qa
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query --all
</code></pre>
 </li>
 <li>
  <p>列出软件包文件列表：</p>
  <pre><code>rpm -ql &lt;package&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query --list &lt;package&gt;
</code></pre>
 </li>
 <li>
  <p>显示软件包信息：</p>
  <pre><code>rpm -qi &lt;package&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query --info &lt;package&gt;
</code></pre>
 </li>
 <li>
  <p>显示软件包所属文件：</p>
  <pre><code>rpm -qf &lt;file&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query --file &lt;file&gt;
</code></pre>
 </li>
 <li>
  <p>显示软件包依赖关系：</p>
  <pre><code>rpm -qR &lt;package&gt;
</code></pre>
  <p>或者</p>
  <pre><code>rpm --query --requires &lt;package&gt;
</code></pre>
 </li>
</ol>
<h2 id="yum">YUM</h2>
<p>在使用 <code>yum</code> 命令时，可以使用各种参数来指定不同的操作和选项。以下是一些常用的 <code>yum</code> 参数：</p>
<ol>
 <li>
  <p>安装软件包：</p>
  <pre><code>yum install &lt;package_name&gt;
</code></pre>
 </li>
 <li>
  <p>升级软件包：</p>
  <pre><code>yum update &lt;package_name&gt;
</code></pre>
 </li>
 <li>
  <p>删除软件包：</p>
  <pre><code>yum remove &lt;package_name&gt;
</code></pre>
 </li>
 <li>
  <p>搜索软件包：</p>
  <pre><code>yum search &lt;keyword&gt;
</code></pre>
 </li>
 <li>
  <p>列出可用软件包：</p>
  <pre><code>yum list
</code></pre>
 </li>
 <li>
  <p>列出已安装的软件包：</p>
  <pre><code>yum list installed
</code></pre>
 </li>
 <li>
  <p>显示软件包信息：</p>
  <pre><code>yum info &lt;package_name&gt;
</code></pre>
 </li>
 <li>
  <p>清理缓存：</p>
  <pre><code>yum clean all
</code></pre>
 </li>
 <li>
  <p>列出软件包的依赖关系：</p>
  <pre><code>yum deplist &lt;package_name&gt;
</code></pre>
 </li>
 <li>
  <p>跳过无法安装的软件包：</p>
  <pre><code>yum install &lt;package_name&gt; --skip-broken
</code></pre>
 </li>
</ol>]]></description><guid isPermaLink="false">/archives/165</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 23 Oct 2023 07:12:00 GMT</pubDate></item><item><title><![CDATA[Centos9 安装Zabbix6.0]]></title><link>https://7boe.top/archives/164</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Centos9%20%E5%AE%89%E8%A3%85Zabbix6.0&amp;url=/archives/164" width="1" height="1" alt="" style="opacity:0;">
<h1 id="zabbix60安装手册">Zabbix6.0安装手册</h1>
<blockquote>
 <p>本文已centos9为例
  <br>
  官网安装方法为最好
  <br>
  在新开的服务器上最好安装一些软件包，后面会用到一些软件</p>
</blockquote>
<p>安装软件包和数据库</p>
<pre><code>dnf install vim wget net-tools mariadb-server -y

</code></pre>
<pre><code>rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
dnf clean all
</code></pre>
<p>直接初始化</p>
<pre><code>mysql_secure_installation
</code></pre>
<p>进入数据库把指令上的密码库或者用户改成自己能记得的</p>
<pre><code>mysql 
mysql&gt; create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql&gt; create user zabbix@localhost identified by 'password';
mysql&gt; grant all privileges on zabbix.* to zabbix@localhost;
mysql&gt; FLUSH PRIVILEGES;
mysql&gt; quit;
</code></pre>
<p>安装zabbix</p>
<pre><code>dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
</code></pre>
<p>导入数据库 后面会让输入密码 这里库名和用户改成自己的</p>
<pre><code>zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
</code></pre>
<p>修改配置</p>
<pre><code>vim /etc/zabbix/zabbix_server.conf
用vim里面的搜索功能改成自己的密码
DBHost=localhost
DBName=zabbixdb
DBUser=zabbixuser
DBPassword=your_password
</code></pre>
<p>修改nginx配置</p>
<pre><code>vim /etc/nginx/conf.d/zabbix.conf //进去把监听端口和地址注释去掉
# listen 8080;
# server_name example.com;

</code></pre>
<p>筛选语言包,看自己的源上有哪些可用的语言包</p>
<pre><code>dnf list |grep glibc-langpack|grep zh
</code></pre>
<p>安装语言包</p>
<pre><code>dnf install glibc-langpack-zh.x86_64
</code></pre>
<p>重启和开机自启</p>
<pre><code>systemctl restart zabbix-server zabbix-agent nginx php-fpm
systemctl enable zabbix-server zabbix-agent nginx php-fpm
</code></pre>
<p>然后访问8080端口即可</p>]]></description><guid isPermaLink="false">/archives/164</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Sat, 21 Oct 2023 02:43:00 GMT</pubDate></item><item><title><![CDATA[Linux下的磁盘管理]]></title><link>https://7boe.top/archives/163</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8B%E7%9A%84%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86&amp;url=/archives/163" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下的磁盘管理">Linux下的磁盘管理</h1>
<h2 id="fdisk">Fdisk</h2>
<p><code>fdisk</code> 命令是一个用于磁盘分区管理的工具，在 Linux 和类 Unix 操作系统中广泛使用。下面是 <code>fdisk</code> 命令的一些常用参数和操作：</p>
<ol>
 <li>
  <p><code>fdisk -l</code>：列出系统上的所有磁盘和分区信息。</p>
 </li>
 <li>
  <p><code>fdisk /dev/sdX</code>：打开指定的磁盘进行分区操作，其中 <code>sdX</code> 是磁盘设备名，如 <code>/dev/sda</code>。</p>
 </li>
 <li>
  <p><code>n</code>：创建一个新分区。</p>
 </li>
 <li>
  <p><code>d</code>：删除一个分区。</p>
 </li>
 <li>
  <p><code>p</code>：显示分区表。</p>
 </li>
 <li>
  <p><code>w</code>：将分区表写入磁盘并退出。</p>
 </li>
 <li>
  <p><code>q</code>：退出 <code>fdisk</code> 而不保存任何更改。</p>
 </li>
 <li>
  <p><code>t</code>：更改分区的类型。</p>
 </li>
 <li>
  <p><code>m</code>：显示 <code>fdisk</code> 命令的帮助信息。</p>
 </li>
</ol>
<h2 id="df">Df</h2>
<p><code>df</code> 命令用于显示文件系统的磁盘空间使用情况。下面是 <code>df</code> 命令的一些常用参数：</p>
<ol>
 <li>
  <p><code>-h</code>：以人类可读的方式显示磁盘空间信息，使用 K、M、G 等单位。</p>
 </li>
 <li>
  <p><code>-T</code>：显示文件系统类型。</p>
 </li>
 <li>
  <p><code>-i</code>：显示 inode 使用情况。</p>
 </li>
 <li>
  <p><code>-a</code> 或 <code>--all</code>：显示所有文件系统，包括系统保留的文件系统。</p>
 </li>
 <li>
  <p><code>-x &lt;文件系统类型&gt;</code>：排除指定类型的文件系统。</p>
 </li>
 <li>
  <p><code>-l</code> 或 <code>--local</code>：仅显示本地文件系统。</p>
 </li>
 <li>
  <p><code>-P</code>：以可解析的格式输出，方便脚本处理。</p>
 </li>
 <li>
  <p><code>-t &lt;文件系统类型&gt;</code>：仅显示指定类型的文件系统。</p>
 </li>
 <li>
  <p><code>-hT</code>：组合使用 <code>-h</code> 和 <code>-T</code> 参数，显示人类可读的磁盘空间信息和文件系统类型。</p>
 </li>
 <li>
  <p><code>--total</code>：显示总计行，包括所有文件系统的总磁盘空间使用情况。</p>
 </li>
 <li>
  <p><code>--help</code>：显示 <code>df</code> 命令的帮助信息。</p>
 </li>
</ol>
<h2 id="swap">SWAP</h2>
<p>Swap 是一种虚拟内存技术，用于扩展计算机的内存容量。在 Linux 系统中，可以使用以下命令和参数来管理和操作 Swap：</p>
<ol>
 <li>
  <p><code>swapon</code>：启用一个或多个 Swap 分区或文件。</p>
  <ul>
   <li>
    <p><code>swapon /dev/sdX</code>：启用指定的 Swap 分区，其中 <code>/dev/sdX</code> 是 Swap 分区的设备名。</p>
   </li>
   <li>
    <p><code>swapon /path/to/swapfile</code>：启用指定的 Swap 文件，其中 <code>/path/to/swapfile</code> 是 Swap 文件的路径。</p>
   </li>
  </ul>
 </li>
 <li>
  <p><code>swapoff</code>：禁用一个或多个已启用的 Swap 分区或文件。</p>
  <ul>
   <li>
    <p><code>swapoff /dev/sdX</code>：禁用指定的 Swap 分区。</p>
   </li>
   <li>
    <p><code>swapoff /path/to/swapfile</code>：禁用指定的 Swap 文件。</p>
   </li>
  </ul>
 </li>
 <li>
  <p><code>mkswap</code>：创建一个 Swap 分区或文件。</p>
  <ul>
   <li>
    <p><code>mkswap /dev/sdX</code>：创建一个 Swap 分区。</p>
   </li>
   <li>
    <p><code>mkswap /path/to/swapfile</code>：创建一个 Swap 文件。</p>
   </li>
  </ul>
 </li>
 <li>
  <p><code>swapon -s</code>：显示当前启用的 Swap 分区或文件的摘要信息。</p>
 </li>
 <li>
  <p><code>free -h</code>：显示系统的内存和 Swap 使用情况。</p>
 </li>
</ol>
<h2 id="mkfs-格式化">mkfs 格式化</h2>
<p>要将分区格式化为 ext4 文件系统，可以使用 <code>mkfs.ext4</code> 命令。请确保在执行格式化之前备份重要的数据，因为格式化会清除分区上的所有数据。</p>
<p>以下是格式化为 ext4 文件系统的基本步骤：</p>
<ol>
 <li>
  <p>确定要格式化的分区设备名，例如 <code>/dev/sdX</code>（其中 <code>X</code> 是分区的字母标识符，如 <code>a</code>、<code>b</code>、<code>c</code> 等）。</p>
 </li>
 <li>
  <p>打开终端，以管理员权限运行以下命令：</p>
  <pre><code>sudo mkfs.ext4 /dev/sdX
</code></pre>
  <p>将 <code>/dev/sdX</code> 替换为你要格式化的分区设备名。</p>
 </li>
 <li>
  <p>系统会显示一些警告信息，确认要格式化该设备。输入 <code>y</code> 或 <code>yes</code> 确认。</p>
 </li>
 <li>
  <p><code>mkfs.ext4</code> 命令将开始格式化过程，并显示进度信息。</p>
 </li>
 <li>
  <p>格式化完成后，你可以将该分区挂载到文件系统的目录中，以便访问和使用。例如，你可以使用 <code>mount</code> 命令将其挂载到 <code>/mnt</code> 目录：</p>
  <pre><code>sudo mount /dev/sdX /mnt
</code></pre>
  <p>这将将分区 <code>/dev/sdX</code> 挂载到 <code>/mnt</code> 目录。</p>
 </li>
</ol>
<h2 id="mount">mount</h2>
<p><code>mount</code> 命令用于手动挂载文件系统到指定的挂载点。它可以使用不同的参数来指定挂载选项和文件系统类型。下面是 <code>mount</code> 命令的常用参数：</p>
<ul>
 <li><code>-t &lt;文件系统类型&gt;</code>：指定要挂载的文件系统类型。例如，<code>-t ext4</code> 表示挂载 ext4 文件系统。</li>
 <li><code>-o &lt;挂载选项&gt;</code>：指定挂载选项，多个选项之间用逗号分隔。常见的挂载选项包括：
  <ul>
   <li><code>rw</code>：以读写模式挂载文件系统（默认选项）。</li>
   <li><code>ro</code>：以只读模式挂载文件系统。</li>
   <li><code>noexec</code>：禁止在挂载点上执行可执行文件。</li>
   <li><code>nosuid</code>：禁止设置 setuid 和 setgid 位。</li>
   <li><code>nodev</code>：禁止创建特殊设备文件。</li>
   <li><code>noatime</code>：禁止更新访问时间。</li>
   <li><code>nodiratime</code>：禁止更新目录的访问时间。</li>
   <li><code>relatime</code>：相对于访问时间的更新，但不会每次访问都更新。</li>
  </ul></li>
 <li><code>-r</code>：以只读模式挂载文件系统。</li>
 <li><code>-w</code>：以读写模式挂载文件系统。</li>
 <li><code>-o remount</code>：重新挂载已经挂载的文件系统，可以用于修改挂载选项。</li>
 <li><code>-L &lt;卷标&gt;</code>：根据卷标挂载文件系统。</li>
 <li><code>-U &lt;UUID&gt;</code>：根据 UUID 挂载文件系统。</li>
 <li><code>-P</code>：根据设备路径挂载文件系统。</li>
</ul>
<p>下面是一些示例 <code>mount</code> 命令的用法：</p>
<ul>
 <li>
  <p>挂载 ext4 文件系统到指定挂载点 <code>/mnt</code>：</p>
  <pre><code>mount -t ext4 /dev/sdXY /mnt
</code></pre>
 </li>
 <li>
  <p>挂载 NFS 文件系统到指定挂载点 <code>/mnt</code>，并指定挂载选项：</p>
  <pre><code>mount -t nfs -o rw,hard,intr 192.168.1.100:/shared /mnt
</code></pre>
 </li>
 <li>
  <p>重新挂载已经挂载的文件系统，并修改挂载选项：</p>
  <pre><code>mount -o remount,noexec /mnt
</code></pre>
 </li>
</ul>
<h2 id="开机自动挂载">开机自动挂载</h2>
<p>要实现开机自动挂载分区，你需要编辑 <code>/etc/fstab</code> 文件并添加相应的条目。<code>/etc/fstab</code> 是一个系统配置文件，用于定义文件系统的挂载点和选项。</p>
<p>以下是在 <code>/etc/fstab</code> 文件中添加自动挂载分区的步骤：</p>
<ol>
 <li>
  <p>打开终端，以管理员权限编辑 <code>/etc/fstab</code> 文件。可以使用文本编辑器如 <code>nano</code> 或 <code>vi</code>：</p>
  <pre><code>sudo nano /etc/fstab
</code></pre>
 </li>
 <li>
  <p>在文件的末尾添加一个新的行，指定要挂载的分区的相关信息。行的格式如下：</p>
  <pre><code>/dev/sdX   /mnt   ext4   defaults   0   0
</code></pre>
  <p>这里的含义是：</p>
  <ul>
   <li><code>/dev/sdX</code> 是要挂载的分区设备名。</li>
   <li><code>/mnt</code> 是挂载点的路径，可以根据需要选择其他目录。</li>
   <li><code>ext4</code> 是文件系统类型，确保与分区的实际文件系统类型匹配。</li>
   <li><code>defaults</code> 是挂载选项，使用默认选项即可。</li>
   <li><code>0</code> 和 <code>0</code> 是用于文件系统检查和备份的选项，一般设置为 <code>0</code>。</li>
  </ul>
  <p>请将 <code>/dev/sdX</code> 和 <code>/mnt</code> 替换为你要挂载的分区设备名和挂载点路径。</p>
 </li>
 <li>
  <p>保存并关闭文件。在 <code>nano</code> 编辑器中，按下 <code>Ctrl + O</code> 保存文件，然后按下 <code>Ctrl + X</code> 关闭编辑器。</p>
 </li>
 <li>
  <p>重启系统，分区应该会自动挂载到指定的挂载点。</p>
 </li>
</ol>
<h2 id="逻辑卷的创建和扩容">逻辑卷的创建和扩容</h2>
<p><strong>分为新建卷组和扩容卷组</strong>
 <br>
 下面为新建卷组
 <br>
 正常创建分区 但是不要格式化</p>
<p>创建pv卷</p>
<pre><code>pvcreate /dev/sdb1
</code></pre>
<p>创建vg卷组</p>
<pre><code>vgcreate vg0 /dev/sda2
</code></pre>
<p>检查信息用的指令</p>
<pre><code>pvdisplay 
vgdisplay
lvdisplay
pvs
lvs
vgs
vgscan
pvscan
lvscan
</code></pre>
<p>创建lv</p>
<pre><code>lvcreate -L 5G -n lv1 vg0 //lv名称和vg名称

</code></pre>
<p>正常格式化文件系统 格式化lv</p>
<pre><code>mkfs.xfs /dev/vg0/lv1
</code></pre>
<h3 id="扩容">扩容</h3>
<p>扩容无需创建vg直接加入vg
 <br>
 依旧是创建分区后pv改分区</p>
<p>加入vg组</p>
<pre><code>vgextend -v cs /dev/sdb1
</code></pre>
<p>扩容lv</p>
<pre><code>lvextend -L +5G /dev/cs/lv0 //扩展到那个lv里面去
</code></pre>
<p>重启</p>
<pre><code>reboot
</code></pre>]]></description><guid isPermaLink="false">/archives/163</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Thu, 19 Oct 2023 07:40:00 GMT</pubDate></item><item><title><![CDATA[Linux的查找文件压缩以及打包文件]]></title><link>https://7boe.top/archives/162</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E7%9A%84%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6%E5%8E%8B%E7%BC%A9%E4%BB%A5%E5%8F%8A%E6%89%93%E5%8C%85%E6%96%87%E4%BB%B6&amp;url=/archives/162" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux文件查找以及打包压缩">LINUX文件查找以及打包压缩</h1>
<p>这些命令在 Linux 和类 Unix 操作系统中用于查找和描述命令或程序的位置和功能。它们的区别如下：</p>
<ol>
 <li>
  <p><code>whereis</code> 命令：</p>
  <ul>
   <li><code>whereis</code> 命令用于查找二进制程序、源代码和帮助页面的位置。</li>
   <li>它会搜索特定命令或程序的可执行文件、源代码和帮助文档所在的标准位置。</li>
   <li>例如，<code>whereis python</code> 将显示 Python 解释器的位置，包括二进制文件、源代码和帮助文档的路径。</li>
  </ul>
 </li>
 <li>
  <p><code>whatis</code> 命令：</p>
  <ul>
   <li><code>whatis</code> 命令用于显示给定命令或程序的简短描述。</li>
   <li>它会从系统的手册页面（man page）中提取命令的摘要信息，并显示在终端上。</li>
   <li>例如，<code>whatis ls</code> 将显示 <code>ls</code> 命令的简短描述，即列出目录内容。</li>
  </ul>
 </li>
 <li>
  <p><code>which</code> 命令：</p>
  <ul>
   <li><code>which</code> 命令用于查找给定命令或程序的可执行文件的路径。</li>
   <li>它会搜索系统的 PATH 环境变量中列出的目录，找到并显示第一个匹配的可执行文件的路径。</li>
   <li>例如，<code>which python</code> 将显示 Python 解释器的路径，即可执行文件所在的位置。</li>
  </ul>
 </li>
</ol>
<h2 id="find">Find</h2>
<p><code>find</code> 命令用于在指定目录下查找文件和目录，并可以根据不同的参数进行条件搜索。<code>find</code> 命令非常灵活，可以根据多种条件来定位文件和目录。</p>
<p>下面是一些常用的 <code>find</code> 命令的参数和用法示例：</p>
<ol>
 <li>
  <p>按文件名查找：</p>
  <pre><code>find /path/to/directory -name "filename"
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找文件名为 "filename" 的文件。</p>
 </li>
 <li>
  <p>按文件类型查找：</p>
  <pre><code>find /path/to/directory -type f
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找所有普通文件。</p>
 </li>
 <li>
  <p>按目录类型查找：</p>
  <pre><code>find /path/to/directory -type d
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找所有目录。</p>
 </li>
 <li>
  <p>按文件大小查找：</p>
  <pre><code>find /path/to/directory -size +10M
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找大小大于 10MB 的文件。</p>
 </li>
 <li>
  <p>按修改时间查找：</p>
  <pre><code>find /path/to/directory -mtime -7
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找最近 7 天内修改过的文件。</p>
 </li>
 <li>
  <p>按权限查找：</p>
  <pre><code>find /path/to/directory -perm 644
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找权限为 644 的文件。</p>
 </li>
 <li>
  <p>组合多个条件：</p>
  <pre><code>find /path/to/directory -name "*.txt" -type f -size +1M
</code></pre>
  <p>该命令将在 <code>/path/to/directory</code> 目录下查找文件名以 ".txt" 结尾、类型为普通文件且大小大于 1MB 的文件。</p>
 </li>
</ol>
<p><strong>参数</strong></p>
<pre><code>* // 所有文件 
！ //取反
{1..3} // 多少到多少中间省略
[]  // 匹配多少到多少,表示其中任意一个单个字符    
        例：
        [abc]
        [a-z]
        [a-Z]
        [a-zA-Z]
        [!a-z] 
        [0-9]
\ //转译符号 ，反转
（但个整条命令） // 相当于一整条命令
'' // 强制引用
-a and 
-o or 
</code></pre>
<p><strong>find -size 大小</strong></p>
<pre><code>find ./* -size +10M
find ./* -size -10M -a -size +20M //小于10M 大于20M
</code></pre>
<p><strong>find -type 文件类型查找</strong></p>
<pre><code>p //管道文件
l //链接文件
s //sockt 套接字文件
b  //块设备文件
d //目录文件
- //普通文件
f //普通文件
</code></pre>
<p><strong>find -iname 不区分大小写</strong></p>
<h2 id="tar">TAR</h2>
<pre><code>tar zcvf aaa.tar 文件源 压缩 
tar zxvf aaa.tar.gz -C /root 解压到指定文件夹
</code></pre>]]></description><guid isPermaLink="false">/archives/162</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 18 Oct 2023 06:09:00 GMT</pubDate></item><item><title><![CDATA[Linux下的进程 管道符和重定向]]></title><link>https://7boe.top/archives/161</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8B%E7%9A%84%E8%BF%9B%E7%A8%8B%20%E7%AE%A1%E9%81%93%E7%AC%A6%E5%92%8C%E9%87%8D%E5%AE%9A%E5%90%91&amp;url=/archives/161" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下进程管道和重定向">Linux下进程管道和重定向</h1>
<p>进程是计算机中正在运行的程序的实例。它是操作系统进行任务调度和资源分配的基本单位。</p>
<p>在操作系统中，每个进程都有自己的内存空间、代码、数据和执行状态。进程可以是一个应用程序、一个服务、一个后台任务或系统内部的其他组件。每个进程都由操作系统分配一个唯一的标识符，称为进程ID（Process ID，PID），用于标识和管理进程。</p>
<p>进程的主要特征包括：</p>
<ul>
 <li>独立性：每个进程运行在自己的独立内存空间中，彼此之间相互隔离，不会直接干扰其他进程的执行。</li>
 <li>并发性：多个进程可以同时运行，操作系统通过任务调度算法决定每个进程的执行顺序和时间片分配。</li>
 <li>协作性：进程可以通过进程间通信（Inter-Process Communication，IPC）机制来进行数据交换和协作，例如管道、套接字、共享内存等。</li>
 <li>生命周期：进程可以被创建、运行、暂停、恢复、终止等。进程的生命周期由操作系统管理。</li>
</ul>
<p>进程的创建通常是由操作系统启动一个新的程序实例或通过现有进程创建子进程。进程可以执行各种操作，包括读写文件、网络通信、计算、图形界面显示等。</p>
<p>进程管理是操作系统的核心功能之一，它负责分配和管理系统资源，包括内存、CPU 时间、文件句柄等，以确保进程能够正常运行并与其他进程共享资源。</p>
<h2 id="ps">PS</h2>
<p><code>ps</code> 命令是用于显示当前系统中正在运行的进程的命令，它提供了许多参数来控制输出的格式和内容。以下是 <code>ps</code> 命令的一些常用参数：</p>
<ul>
 <li><code>a</code>：显示所有进程，包括其他用户的进程。</li>
 <li><code>x</code>：显示没有控制终端的进程。</li>
 <li><code>u</code>：以用户为基础的格式显示进程信息，包括进程的用户、CPU 占用率、内存占用等。</li>
 <li><code>e</code>：显示所有进程，包括没有终端的进程。</li>
 <li><code>f</code>：以完整的格式显示进程信息，包括进程的详细信息（如进程的用户、进程 ID、父进程 ID、CPU 占用率等）。</li>
 <li><code>l</code>：以长格式显示进程信息，包括更多的属性（如进程状态、启动时间、命令行等）。</li>
 <li><code>c</code>：仅显示进程的命令名称，而不显示完整的命令行。</li>
 <li><code>r</code>：显示实时优先级。</li>
 <li><code>n</code>：以数字形式显示用户和组的标识符，而不是名称。</li>
 <li><code>--sort=&lt;列名&gt;</code>：按指定的列名对进程进行排序，例如 <code>--sort=-%cpu</code> 表示按 CPU 占用率降序排序。</li>
 <li><code>--forest</code>：以树状结构显示进程之间的父子关系。</li>
 <li><code>--headers</code>：显示列标题。</li>
 <li><code>--no-headers</code>：不显示列标题。</li>
 <li><code>--pid=&lt;进程ID&gt;</code>：仅显示指定进程ID的信息。</li>
 <li><code>--ppid=&lt;父进程ID&gt;</code>：仅显示指定父进程ID的子进程信息。</li>
</ul>
<h2 id="top">TOP</h2>
<p><code>top</code> 命令是一个常用的系统监视工具，用于实时显示系统中运行的进程的状态和资源使用情况。下面是一些常用的 <code>top</code> 命令参数及其详细解释：</p>
<ul>
 <li><code>-d &lt;秒数&gt;</code>：指定刷新间隔，即 <code>top</code> 命令每隔指定的秒数更新一次显示，默认为 3 秒。</li>
 <li><code>-n &lt;次数&gt;</code>：指定显示的次数，即 <code>top</code> 命令刷新并显示指定次数后自动退出。</li>
 <li><code>-p &lt;进程ID&gt;</code>：只显示指定进程ID的信息，多个进程ID可以用逗号分隔。</li>
 <li><code>-u &lt;用户名&gt;</code>：只显示指定用户名的进程信息。</li>
 <li><code>-U &lt;用户列表&gt;</code>：只显示指定用户列表中的进程信息，多个用户可以用逗号分隔。</li>
 <li><code>-s &lt;排序字段&gt;</code>：根据指定的字段对进程进行排序，常用的字段有 <code>%CPU</code>（CPU 使用率）、<code>%MEM</code>（内存使用率）、<code>TIME+</code>（累计 CPU 时间）等。</li>
 <li><code>-o &lt;字段列表&gt;</code>：自定义显示的字段列表，用逗号分隔，可以选择显示的信息，例如 <code>PID</code>（进程ID）、<code>USER</code>（用户名）、<code>%CPU</code>（CPU 使用率）、<code>%MEM</code>（内存使用率）等。</li>
 <li><code>-b</code>：以批处理模式运行 <code>top</code> 命令，将结果输出到文件而不是终端。</li>
 <li><code>-c</code>：显示完整的命令行参数，而不截断显示。</li>
 <li><code>-H</code>：显示每个进程的线程信息。</li>
 <li><code>-i</code>：忽略闲置和僵尸进程，只显示活跃的进程。</li>
 <li><code>-d</code>：显示每个进程的磁盘 I/O 统计信息。</li>
 <li><code>-e</code>：显示所有进程，包括其他用户的进程。</li>
 <li><code>-s</code>：累计模式，将多个进程的资源使用情况累计显示。</li>
</ul>
<h2 id="kill">KILL</h2>
<p><code>kill</code> 命令用于向进程发送信号，以控制进程的行为。下面是一些常用的 <code>kill</code> 命令的参数：</p>
<ul>
 <li><code>kill &lt;进程ID&gt;</code>：向指定进程ID发送默认的终止信号（SIGTERM），用于正常终止进程。</li>
 <li><code>kill -&lt;信号编号&gt; &lt;进程ID&gt;</code>：向指定进程ID发送指定的信号，可以使用信号编号或信号名称。例如，<code>kill -9 1234</code> 或 <code>kill -KILL 1234</code> 将发送强制终止信号（SIGKILL）给进程ID为 1234 的进程。</li>
 <li><code>killall &lt;进程名称&gt;</code>：向所有具有指定进程名称的进程发送默认的终止信号。例如，<code>killall firefox</code> 将向所有名为 "firefox" 的进程发送终止信号。</li>
 <li><code>killall -&lt;信号编号&gt; &lt;进程名称&gt;</code>：向所有具有指定进程名称的进程发送指定的信号。</li>
 <li><code>kill -l</code>：列出系统支持的信号列表及其对应的编号和名称。</li>
</ul>
<h2 id="重定向">重定向</h2>
<p>重定向 :
 <br>
 把标准输出写入到指定的文件</p>
<p>重定向是一种将命令的输入或输出流从默认位置更改为其他位置的方法。在命令行中，可以使用以下符号来进行重定向：</p>
<ul>
 <li><code>&gt;</code>：将命令的输出重定向到文件，并覆盖文件中的内容。</li>
 <li><code>&gt;&gt;</code>：将命令的输出追加到文件的末尾。</li>
 <li><code>&lt;</code>：将文件的内容作为命令的输入。</li>
 <li><code>2&gt;</code>：将命令的错误输出重定向到文件。</li>
 <li><code>2&gt;&gt;</code>：将命令的错误输出追加到文件的末尾。</li>
 <li><code>&amp;&gt;</code> 或 <code>&amp;&gt;&gt;</code>：将命令的输出和错误输出都重定向到文件。</li>
</ul>
<p>下面是一些重定向的用法示例：</p>
<ol>
 <li>
  <p>将命令的输出重定向到文件：</p>
  <pre><code>command &gt; file.txt
</code></pre>
 </li>
 <li>
  <p>将命令的输出追加到文件的末尾：</p>
  <pre><code>command &gt;&gt; file.txt
</code></pre>
 </li>
 <li>
  <p>将文件的内容作为命令的输入：</p>
  <pre><code>command &lt; file.txt
</code></pre>
 </li>
 <li>
  <p>将命令的错误输出重定向到文件：</p>
  <pre><code>command 2&gt; error.txt
</code></pre>
 </li>
 <li>
  <p>将命令的错误输出追加到文件的末尾：</p>
  <pre><code>command 2&gt;&gt; error.txt
</code></pre>
 </li>
 <li>
  <p>将命令的输出和错误输出都重定向到文件：</p>
  <pre><code>command &amp;&gt; output.txt
</code></pre>
 </li>
 <li>
  <p>将命令的输出和错误输出都追加到文件的末尾：</p>
  <pre><code>command &amp;&gt;&gt; output.txt
</code></pre>
 </li>
</ol>
<h2 id="管道用法">管道用法</h2>
<p>管道（Pipe）是一种将一个命令的输出作为另一个命令的输入的方法。通过管道，可以将多个命令串联起来，实现数据的传递和处理。在命令行中，使用竖线符号 <code>|</code> 表示管道操作符。</p>
<p>下面是一些管道的用法示例：</p>
<ol>
 <li>
  <p>将一个命令的输出作为另一个命令的输入：</p>
  <pre><code>command1 | command2
</code></pre>
  <p>例如，<code>ls | grep "example"</code> 将列出当前目录下的文件和目录，并将结果传递给 <code>grep</code> 命令进行匹配过滤。</p>
 </li>
 <li>
  <p>将多个命令串联起来：</p>
  <pre><code>command1 | command2 | command3
</code></pre>
  <p>例如，<code>cat file.txt | grep "keyword" | wc -l</code> 将读取文件 <code>file.txt</code> 的内容，然后将包含关键字 "keyword" 的行传递给 <code>wc -l</code> 命令进行行数统计。</p>
 </li>
 <li>
  <p>使用管道和重定向结合：</p>
  <pre><code>command1 | command2 &gt; file.txt
</code></pre>
  <p>例如，<code>ls | grep "example" &gt; file.txt</code> 将列出当前目录下的文件和目录，并将包含关键字 "example" 的行输出到文件 <code>file.txt</code>。</p>
 </li>
</ol>
<h2 id="tr">tr</h2>
<p><code>tr</code> 命令用于对文本进行字符转换或删除操作。它可以在输入中替换、删除或压缩字符，并将结果输出到标准输出或指定的文件中。</p>
<p>下面是一些常用的 <code>tr</code> 命令用法示例：</p>
<ol>
 <li>
  <p>替换字符：</p>
  <pre><code>echo "Hello" | tr 'o' 'a'
</code></pre>
  <p>该命令将字符串 "Hello" 中的字符 'o' 替换为 'a'，输出结果为 "Hella"。</p>
 </li>
 <li>
  <p>删除字符：</p>
  <pre><code>echo "Hello" | tr -d 'l'
</code></pre>
  <p>该命令将字符串 "Hello" 中的字符 'l' 删除，输出结果为 "Heo"。</p>
 </li>
 <li>
  <p>字符集转换：</p>
  <pre><code>echo "Hello" | tr '[:lower:]' '[:upper:]'
</code></pre>
  <p>该命令将字符串 "Hello" 中的小写字母转换为大写字母，输出结果为 "HELLO"。</p>
 </li>
 <li>
  <p>压缩字符：</p>
  <pre><code>echo "Hello" | tr -s 'l'
</code></pre>
  <p>该命令将字符串 "Hello" 中连续出现的字符 'l' 压缩为一个字符，输出结果为 "Helo"。</p>
 </li>
 <li>
  <p>删除字符集：</p>
  <pre><code>echo "Hello" | tr -cd '[:alnum:]'
</code></pre>
  <p>该命令将字符串 "Hello" 中的非字母和非数字字符删除，输出结果为 "Hello"。</p>
 </li>
</ol>
<h2 id="srot">SROT</h2>
<p><code>sort</code> 命令用于对文本文件的行进行排序，默认按照字典顺序进行排序。<code>sort</code> 命令可以根据不同的选项进行排序，并将结果输出到标准输出或指定的文件中。</p>
<p>下面是一些常用的 <code>sort</code> 命令用法示例：</p>
<ol>
 <li>
  <p>对文件进行排序并输出到标准输出：</p>
  <pre><code>sort file.txt
</code></pre>
  <p>该命令将按照字典顺序对文件 <code>file.txt</code> 的行进行排序，并将结果输出到标准输出。</p>
 </li>
 <li>
  <p>对文件进行排序并将结果保存到新文件：</p>
  <pre><code>sort file.txt &gt; sorted.txt
</code></pre>
  <p>该命令将按照字典顺序对文件 <code>file.txt</code> 的行进行排序，并将排序后的结果保存到文件 <code>sorted.txt</code>。</p>
 </li>
 <li>
  <p>对文件进行逆序排序：</p>
  <pre><code>sort -r file.txt
</code></pre>
  <p>该命令将按照字典顺序对文件 <code>file.txt</code> 的行进行逆序排序（降序）。</p>
 </li>
 <li>
  <p>忽略字母的大小写进行排序：</p>
  <pre><code>sort -f file.txt
</code></pre>
  <p>该命令将按照字典顺序对文件 <code>file.txt</code> 的行进行排序，忽略字母的大小写。</p>
 </li>
 <li>
  <p>按照数值进行排序：</p>
  <pre><code>sort -n file.txt
</code></pre>
  <p>该命令将按照数值大小对文件 <code>file.txt</code> 的行进行排序。</p>
 </li>
 <li>
  <p>按照指定的字段进行排序：</p>
  <pre><code>sort -k &lt;field&gt; file.txt
</code></pre>
  <p>该命令将按照指定字段 <code>&lt;field&gt;</code> 对文件 <code>file.txt</code> 的行进行排序。字段可以使用数字表示，例如 <code>-k 2</code> 表示按照第二个字段进行排序；也可以使用 <code>-k &lt;start&gt;,&lt;end&gt;</code> 表示按照从 <code>&lt;start&gt;</code> 到 <code>&lt;end&gt;</code> 的字段范围进行排序。</p>
 </li>
</ol>
<h2 id="awk">awk</h2>
<p><code>awk</code> 是一种强大的文本处理工具，用于从文本文件中提取和处理数据。它按行读取输入文件，并根据指定的规则执行相应的操作。下面是 <code>awk</code> 命令的一般语法：</p>
<pre><code>awk '&lt;规则&gt; { &lt;操作&gt; }' &lt;文件名&gt;
</code></pre>
<p>其中，<code>&lt;规则&gt;</code> 用于选择要处理的行，<code>&lt;操作&gt;</code> 用于指定对选定行执行的操作，<code>&lt;文件名&gt;</code> 是要处理的文件名。</p>
<p><code>awk</code> 命令的常用参数如下：</p>
<ul>
 <li><code>-F &lt;分隔符&gt;</code>：指定输入文件的字段分隔符。默认情况下，分隔符是空格或制表符。</li>
 <li><code>-v &lt;变量名&gt;=&lt;值&gt;</code>：定义一个 <code>awk</code> 变量，并为其赋值。</li>
 <li><code>-f &lt;脚本文件&gt;</code>：从指定的脚本文件中读取 <code>awk</code> 命令。</li>
 <li><code>-i &lt;扩展名&gt;</code>：指定在原始文件上进行原地修改，并将修改后的结果保存到指定的扩展名文件中。</li>
 <li><code>-W &lt;关键字&gt;</code>：启用指定的兼容模式。</li>
</ul>
<p>除了这些常用参数，<code>awk</code> 还具有许多内置变量和函数，可以在 <code>awk</code> 脚本中使用。以下是一些常用的内置变量：</p>
<ul>
 <li><code>NR</code>：当前记录（行）号。</li>
 <li><code>NF</code>：当前记录的字段数。</li>
 <li><code>$0</code>：当前记录的完整文本内容。</li>
 <li><code>$1</code>, <code>$2</code>, ...：当前记录的第一个、第二个字段，以此类推。</li>
</ul>
<p>以下是一些常用的 <code>awk</code> 内置函数：</p>
<ul>
 <li><code>print</code>：打印指定的文本或变量。</li>
 <li><code>printf</code>：按指定格式打印文本或变量。</li>
 <li><code>length</code>：返回指定字符串的长度。</li>
 <li><code>substr</code>：返回指定字符串的子字符串。</li>
 <li><code>split</code>：将指定字符串拆分为数组。</li>
 <li><code>tolower</code>：将指定字符串转换为小写。</li>
 <li><code>toupper</code>：将指定字符串转换为大写。</li>
 <li><code>getline</code>：从输入文件中读取下一行。</li>
</ul>]]></description><guid isPermaLink="false">/archives/161</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Wed, 18 Oct 2023 06:08:00 GMT</pubDate></item><item><title><![CDATA[Linux常用命令（小白版）]]></title><link>https://7boe.top/archives/160</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%EF%BC%88%E5%B0%8F%E7%99%BD%E7%89%88%EF%BC%89&amp;url=/archives/160" width="1" height="1" alt="" style="opacity:0;">
<p>在Linux系统中，各个目录有着不同的作用和用途。下面是一些常见的目录及其作用的简要说明：</p>
<ol>
 <li>
  <p><code>/</code>（根目录）：Linux文件系统的顶级目录，包含了整个文件系统的层次结构。</p>
 </li>
 <li>
  <p><code>/bin</code>：存放系统的基本命令和可执行文件，如ls、cp、rm等。</p>
 </li>
 <li>
  <p><code>/boot</code>：包含启动Linux系统所需的文件，如内核文件和引导加载程序。</p>
 </li>
 <li>
  <p><code>/dev</code>：包含设备文件，用于与系统中的硬件设备进行交互。</p>
 </li>
 <li>
  <p><code>/etc</code>：存放系统的配置文件，包括各种应用程序和服务的配置文件。</p>
 </li>
 <li>
  <p><code>/home</code>：用户的家目录，每个用户在此目录下有一个以其用户名命名的子目录，用于存放用户的个人文件和配置。</p>
 </li>
 <li>
  <p><code>/lib</code>：存放系统所需的共享库文件，这些库文件被可执行文件使用。</p>
 </li>
 <li>
  <p><code>/media</code>：用于挂载可移动媒体设备（如光盘、USB驱动器等）的挂载点。</p>
 </li>
 <li>
  <p><code>/mnt</code>：用于挂载临时文件系统或其他文件系统的挂载点。</p>
 </li>
 <li>
  <p><code>/opt</code>：用于安装第三方应用程序的目录，通常将应用程序安装在此目录下的子目录中。</p>
 </li>
 <li>
  <p><code>/proc</code>：虚拟文件系统，提供了有关系统内核和运行中进程的信息。</p>
 </li>
 <li>
  <p><code>/root</code>：超级用户（root）的家目录。</p>
 </li>
 <li>
  <p><code>/sbin</code>：存放系统管理员使用的系统命令，这些命令通常需要超级用户权限才能执行。</p>
 </li>
 <li>
  <p><code>/tmp</code>：用于存放临时文件的目录，该目录下的文件在系统重启后会被清除。</p>
 </li>
 <li>
  <p><code>/usr</code>：存放系统软件资源，包括应用程序、库文件、文档等。</p>
 </li>
 <li>
  <p><code>/var</code>：存放经常变化的文件，如日志文件、缓存文件等。</p>
 </li>
</ol>
<h2 id="cd">CD</h2>
<p><code>cd</code> 是一个用于在命令行中切换当前工作目录的命令。它有一些常用的参数，可以帮助你在目录之间进行导航和操作。下面是一些常见的 <code>cd</code> 命令参数：</p>
<ol>
 <li><code>cd</code>：切换到当前用户的主目录（通常是 <code>/home/username</code>）。</li>
 <li><code>cd ~</code>：同样切换到当前用户的主目录。</li>
 <li><code>cd -</code>：切换到先前的工作目录。</li>
 <li><code>cd ..</code>：切换到当前目录的父目录。</li>
 <li><code>cd /</code>：切换到根目录。</li>
 <li><code>cd /path/to/directory</code>：切换到指定路径下的目录。</li>
 <li><code>cd ./directory</code>：切换到当前目录下的子目录。</li>
 <li><code>cd ../directory</code>：切换到当前目录的父目录下的子目录。</li>
 <li><code>cd -P</code>：强制解析符号链接，切换到符号链接所指向的实际目录。</li>
 <li><code>cd -L</code>：保持符号链接的形式，切换到符号链接所在的目录。</li>
 <li><code>cd --</code>：停止处理后续的参数，用于处理以 <code>-</code> 开头的目录名。</li>
</ol>
<h2 id="mv">MV</h2>
<p><code>mv</code> 是一个用于在命令行中移动或重命名文件或目录的命令。它有一些常用的参数，可以帮助你在文件系统中进行文件和目录的操作。下面是一些常见的 <code>mv</code> 命令参数：</p>
<ol>
 <li><code>mv source_file destination</code>：将源文件移动到目标位置或重命名为目标文件名。</li>
 <li><code>mv source_file1 source_file2 directory</code>：将多个源文件移动到指定目录。</li>
 <li><code>mv -i source_file destination</code>：在目标位置存在同名文件时，提示是否覆盖。</li>
 <li><code>mv -f source_file destination</code>：强制覆盖目标位置的文件，不进行提示。</li>
 <li><code>mv -u source_file destination</code>：仅在源文件更新或目标位置不存在时才执行移动操作。</li>
 <li><code>mv -v source_file destination</code>：显示详细的移动操作信息。</li>
 <li><code>mv -n source_file destination</code>：不执行实际的移动操作，仅显示将要执行的操作。</li>
 <li><code>mv -b source_file destination</code>：在移动文件时创建备份文件。</li>
 <li><code>mv --backup=CONTROL source_file destination</code>：根据指定的备份控制选项创建备份文件。</li>
 <li><code>mv --help</code>：显示 <code>mv</code> 命令的帮助信息。</li>
 <li><code>mv --version</code>：显示 <code>mv</code> 命令的版本信息。</li>
</ol>
<h2 id="cp">CP</h2>
<p><code>cp</code> 是一个在命令行中用于复制文件和目录的命令。下面是一些常见的 <code>cp</code> 命令参数：</p>
<ol>
 <li><code>cp source_file destination_file</code>：复制源文件到目标文件。</li>
 <li><code>cp source_file1 source_file2 ... destination_directory</code>：将多个源文件复制到目标目录。</li>
 <li><code>cp -r source_directory destination_directory</code>：递归地复制整个源目录及其内容到目标目录。</li>
 <li><code>cp -i source_file destination_file</code>：在复制文件之前进行交互式确认，如果目标文件已存在，则提示是否覆盖。</li>
 <li><code>cp -u source_file destination_file</code>：仅在源文件比目标文件新或目标文件不存在时才进行复制。</li>
 <li><code>cp -l source_file destination_file</code>：创建硬链接而不是复制文件。</li>
 <li><code>cp -s source_file destination_file</code>：创建符号链接而不是复制文件。</li>
 <li><code>cp -p source_file destination_file</code>：保持源文件的属性（权限、时间戳等）。</li>
 <li><code>cp -v source_file destination_file</code>：显示复制过程中的详细信息。</li>
 <li><code>cp --backup=method source_file destination_file</code>：在复制文件时进行备份，可以选择备份的方法，如 <code>none</code>（不备份）、<code>off</code>（不备份）、<code>numbered</code>（备份并编号）等。</li>
 <li><code>cp --preserve=all source_file destination_file</code>：保持源文件的所有属性，包括权限、时间戳、所有者等。</li>
</ol>
<h2 id="mkdir">MKDIR</h2>
<p><code>mkdir</code> 是一个在命令行中用于创建目录的命令。下面是一些常见的 <code>mkdir</code> 命令参数：</p>
<ol>
 <li><code>mkdir directory_name</code>：创建一个名为 <code>directory_name</code> 的目录。</li>
 <li><code>mkdir -p directory_path</code>：递归地创建目录路径中的所有目录，即使父目录不存在也可以创建。</li>
 <li><code>mkdir -m mode directory_name</code>：使用指定的权限模式创建目录。权限模式可以是八进制数，例如 <code>mkdir -m 755 directory_name</code>。</li>
 <li><code>mkdir -v directory_name</code>：显示创建的每个目录的详细信息。</li>
 <li><code>mkdir --help</code>：显示 <code>mkdir</code> 命令的帮助信息，包括可用的参数和选项。</li>
 <li><code>mkdir --version</code>：显示 <code>mkdir</code> 命令的版本信息。</li>
</ol>
<h2 id="rm">RM</h2>
<p><code>rm</code> 是一个在命令行中用于删除文件和目录的命令。下面是一些常见的 <code>rm</code> 命令参数：</p>
<ol>
 <li><code>rm file_name</code>：删除指定的文件。</li>
 <li><code>rm -r directory_name</code>：递归地删除指定的目录及其内容。</li>
 <li><code>rm -f file_name</code>：强制删除文件，不进行任何确认提示。</li>
 <li><code>rm -i file_name</code>：在删除文件之前进行交互式确认，提示是否删除。</li>
 <li><code>rm -v file_name</code>：显示删除的每个文件的详细信息。</li>
 <li><code>rm -rf directory_name</code>：强制递归删除目录及其内容，不进行任何确认提示。</li>
 <li><code>rm --help</code>：显示 <code>rm</code> 命令的帮助信息，包括可用的参数和选项。</li>
 <li><code>rm --version</code>：显示 <code>rm</code> 命令的版本信息。</li>
</ol>
<h2 id="du">DU</h2>
<p><code>du</code> 是一个在命令行中用于计算目录或文件大小的命令。下面是一些常见的 <code>du</code> 命令参数：</p>
<ol>
 <li><code>du file_name</code>：计算指定文件的大小。</li>
 <li><code>du -h file_name</code>：以人类可读的格式显示文件大小，例如使用 KB、MB、GB 等单位。</li>
 <li><code>du -s directory_name</code>：计算指定目录的总大小，而不显示子目录的详细信息。</li>
 <li><code>du -h -s directory_name</code>：以人类可读的格式显示指定目录的总大小。</li>
 <li><code>du -c directory_name</code>：显示指定目录中每个子目录的大小，并显示总大小的汇总。</li>
 <li><code>du -a directory_name</code>：显示目录中每个文件和子目录的大小。</li>
 <li><code>du -d depth directory_name</code>：限制显示子目录的层次深度，例如 <code>du -d 2 directory_name</code> 只显示两层子目录的大小。</li>
 <li><code>du --exclude=pattern directory_name</code>：排除符合指定模式的文件或目录，例如 <code>du --exclude=*.txt directory_name</code> 排除所有扩展名为 <code>.txt</code> 的文件。</li>
 <li><code>du --help</code>：显示 <code>du</code> 命令的帮助信息，包括可用的参数和选项。</li>
 <li><code>du --version</code>：显示 <code>du</code> 命令的版本信息。</li>
</ol>
<h2 id="tail">Tail</h2>
<p><code>tail</code> 是一个在命令行中用于查看文件末尾内容的命令。下面是一些常见的 <code>tail</code> 命令参数：</p>
<ol>
 <li><code>tail file_name</code>：显示文件的末尾内容，默认显示最后 10 行。</li>
 <li><code>tail -n num file_name</code>：显示文件的末尾 num 行内容，例如 <code>tail -n 20 file_name</code> 显示最后 20 行。</li>
 <li><code>tail -f file_name</code>：实时追踪文件的末尾内容，显示新添加的内容，并持续输出。</li>
 <li><code>tail -c num file_name</code>：显示文件的末尾 num 字节内容，例如 <code>tail -c 100 file_name</code> 显示最后 100 个字节。</li>
 <li><code>tail -q file_name</code>：禁止显示文件名作为输出的一部分。</li>
 <li><code>tail -v file_name</code>：显示文件名作为输出的一部分。</li>
 <li><code>tail --help</code>：显示 <code>tail</code> 命令的帮助信息，包括可用的参数和选项。</li>
 <li><code>tail --version</code>：显示 <code>tail</code> 命令的版本信息。</li>
</ol>
<h2 id="less和more">LESS和MORE</h2>
<p><code>more</code> 和 <code>less</code> 都是用于在命令行中浏览文件内容的工具，它们在功能上有一些区别：</p>
<ol>
 <li>
  <p><strong>分页方式：</strong> <code>more</code> 以全屏为单位进行分页显示文件内容，按下空格键可向前翻页，按下 Enter 键可向下滚动一行。<code>less</code> 则提供更强大的分页功能，可以向上和向下滚动，支持使用箭头键、Page Up、Page Down 等进行导航。</p>
 </li>
 <li>
  <p><strong>搜索功能：</strong> <code>less</code> 具有更强大的搜索功能。你可以使用 <code>/</code> 后跟关键字在文件中进行搜索，并使用 <code>n</code> 和 <code>N</code> 键在搜索结果之间进行导航。<code>more</code> 不支持搜索功能。</p>
 </li>
 <li>
  <p><strong>反向搜索：</strong> <code>less</code> 允许你使用 <code>?</code> 后跟关键字进行反向搜索，即从文件末尾向前搜索。<code>more</code> 不支持反向搜索。</p>
 </li>
 <li>
  <p><strong>编辑文件：</strong> <code>less</code> 允许你在浏览文件时进行编辑，可以使用 <code>v</code> 键或者 <code>vi</code> 命令进入编辑模式。<code>more</code> 不支持文件编辑。</p>
 </li>
 <li>
  <p><strong>文件类型判断：</strong> <code>less</code> 能够根据文件类型进行语法高亮显示，例如对于代码文件会进行着色。<code>more</code> 不具备这个功能。</p>
 </li>
</ol>
<p>总的来说，<code>less</code> 是 <code>more</code> 的增强版</p>
<p>下面是 <code>more</code> 和 <code>less</code> 命令常用的参数：</p>
<p><code>more</code> 命令参数：</p>
<ul>
 <li>空格键：向下滚动一屏。</li>
 <li>Enter 键：向下滚动一行。</li>
 <li><code>/keyword</code>：在文件中搜索指定关键字。</li>
 <li><code>n</code>：在搜索结果中定位到下一个匹配项。</li>
 <li><code>q</code>：退出 <code>more</code> 命令。</li>
</ul>
<p><code>less</code> 命令参数：</p>
<ul>
 <li>空格键：向下滚动一屏。</li>
 <li>Enter 键：向下滚动一行。</li>
 <li><code>b</code>：向上滚动一屏。</li>
 <li><code>/keyword</code>：在文件中搜索指定关键字。</li>
 <li><code>?keyword</code>：在文件中反向搜索指定关键字。</li>
 <li><code>n</code>：在搜索结果中定位到下一个匹配项。</li>
 <li><code>N</code>：在搜索结果中定位到上一个匹配项。</li>
 <li><code>q</code>：退出 <code>less</code> 命令。</li>
 <li><code>v</code>：使用编辑器打开文件进行编辑。</li>
 <li><code>:n</code>：显示当前行号。</li>
</ul>
<h3 id="vim">VIM</h3>
<pre><code>i 	在当前字符前插入文本
I 	在行首插入文本
a 	在当前字符后添加文本
A	 在行末添加文本
o 	在当前行后面插入一空行
O	 在当前行前面插入一空行
^ 	行首，第一个不是空白字符的位置
$ 	行尾
gg 	文件顶部
G 	文件末尾
数字gg 	移动到 数字 对应行数
数字G 	移动到 数字 对应行数
u 	撤销上次命令
U	撤销当前用户的所有的编辑操作
Ctrl+r 	恢复撤销的命令
Ctrl+b 	向上翻页
Ctrl+f 	向下翻页
Ctrl+g 	显示光标所在位置的行号和文件的总行数
v 	从光标位置开始按照正常模式选择文本
V 	选中光标经过的完整行
x 	删除光标所在字符，或者选中文字
dd 	删除光标所在行，可以 ndd 删除多行
D 	删除至行尾
yy 	复制一行，可以 nyy 复制多行
p 	粘贴
/str 	查找 str
n	查找下一个(必须在查找状态下执行)
N	查找上一个(必须在查找状态下执行)
gUU 	将当前行的字母全改成大写
guu 	将当前行的字母全改成小写
gUw 	将光标下的单词改成大写
guw 	将光标下的单词改成小写
g~~ 	行翻转(大小写互换)
ZZ 	保存并退出
ZQ 	不保存并退出# 末行模式(:):
:数字 			移动到 数字 对应行数
:%d 			删除全部
:%s/旧文本/新文本/g 	查找并替换
:%s/旧文本/新文本/gc 	查找并替换，会有提示(y-替换；n-不替换；q-退出替换；l-最后一个，并把光标移动到行首)
:r 文件的路径及文件名	在当前文件中读入其他文件的内容
:r! 命令名			将某一命令的结果追加到当前行的下一行
:w 			保存
:w 文件的路径及文件名	另存为其他文件
:q 			退出，如果没有保存 ，不允许退出
:w! 			强行保存
:q! 			强行退出，不保存退出
:wq 			保存并退出
:wq! 			强制保存并退出
:x 			保存并退出
:set nu 			显示行号
:history 			列出历史命令记录
:pwd 			显示当前所在
:set ts=4               tab4行
:set sw=4
</code></pre>
<p>Vim 是一个功能强大的文本编辑器，它提供了丰富的替换功能。下面是几种常见的替换操作：</p>
<ol>
 <li>
  <p>替换当前行的第一个匹配项：</p>
  <pre><code>:s/要替换的内容/替换后的内容/
</code></pre>
  <p>这个命令将替换当前行中第一个匹配到的内容。如果要替换所有匹配项，可以在命令末尾添加 <code>g</code> 标志：</p>
  <pre><code>:s/要替换的内容/替换后的内容/g
</code></pre>
 </li>
 <li>
  <p>替换整个文件中的匹配项：</p>
  <pre><code>:%s/要替换的内容/替换后的内容/g
</code></pre>
  <p>这个命令将替换整个文件中所有匹配到的内容。 <code>%</code> 符号表示对整个文件进行操作。</p>
 </li>
 <li>
  <p>替换指定范围内的匹配项：</p>
  <pre><code>:起始行号,结束行号s/要替换的内容/替换后的内容/g
</code></pre>
  <p>这个命令将替换指定范围内的行中的匹配项。将 <code>起始行号</code> 和 <code>结束行号</code> 替换为实际的行号。</p>
 </li>
 <li>
  <p>忽略大小写进行替换：</p>
  <pre><code>:s/要替换的内容/替换后的内容/gi
</code></pre>
  <p>在替换命令末尾添加 <code>i</code> 标志，将会忽略大小写进行替换。</p>
 </li>
</ol>]]></description><guid isPermaLink="false">/archives/160</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Tue, 17 Oct 2023 02:47:00 GMT</pubDate></item><item><title><![CDATA[Linux命令权限操作]]></title><link>https://7boe.top/archives/159</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E5%91%BD%E4%BB%A4%E6%9D%83%E9%99%90%E6%93%8D%E4%BD%9C&amp;url=/archives/159" width="1" height="1" alt="" style="opacity:0;">
<h1 id="linux下的用户权限管理">Linux下的用户权限管理</h1>
<p>在Linux系统中，用户和组用于管理文件和目录的访问权限。每个用户都有一个唯一的用户ID（UID），而每个组都有一个唯一的组ID（GID）。下面是一些有关Linux下用户和组的常见操作和概念：</p>
<ol>
 <li>
  <p>用户管理：</p>
  <ul>
   <li>创建用户：可以使用 <code>useradd</code> 命令创建新用户，例如 <code>useradd username</code>。</li>
   <li>删除用户：使用 <code>userdel</code> 命令删除用户，例如 <code>userdel username</code>。</li>
   <li>修改用户信息：使用 <code>usermod</code> 命令修改用户的属性，例如 <code>usermod -c "New User" username</code>。</li>
   <li>切换用户：使用 <code>su</code> 命令切换到其他用户，例如 <code>su - username</code>。</li>
  </ul>
 </li>
 <li>
  <p>组管理：</p>
  <ul>
   <li>创建组：可以使用 <code>groupadd</code> 命令创建新组，例如 <code>groupadd groupname</code>。</li>
   <li>删除组：使用 <code>groupdel</code> 命令删除组，例如 <code>groupdel groupname</code>。</li>
   <li>修改组信息：使用 <code>groupmod</code> 命令修改组的属性，例如 <code>groupmod -n newgroupname groupname</code>。</li>
  </ul>
 </li>
 <li>
  <p>用户和组关联：</p>
  <ul>
   <li>将用户添加到组：使用 <code>usermod</code> 命令将用户添加到一个或多个组，例如 <code>usermod -aG groupname username</code>。</li>
   <li>查看用户所属的组：使用 <code>groups</code> 命令查看用户所属的组，例如 <code>groups username</code>。</li>
  </ul>
 </li>
 <li>
  <p>文件和目录权限：</p>
  <ul>
   <li>每个文件和目录都有一个所有者用户和一个所有者组，它们决定了谁可以访问、修改或执行文件。</li>
   <li>使用 <code>chown</code> 命令可以更改文件或目录的所有者，例如 <code>chown username filename</code>。</li>
   <li>使用 <code>chgrp</code> 命令可以更改文件或目录的所属组，例如 <code>chgrp groupname filename</code>。</li>
   <li>使用 <code>chmod</code> 命令可以更改文件或目录的权限，例如 <code>chmod 755 filename</code>。</li>
  </ul>
 </li>
</ol>
<h2 id="useradd">USERADD</h2>
<p><code>useradd</code> 命令用于在Linux系统中创建新用户。以下是 <code>useradd</code> 命令的一些常用参数：</p>
<ul>
 <li><code>-c, --comment COMMENT</code>：为用户添加注释，通常是用户的描述信息。</li>
 <li><code>-d, --home HOME_DIR</code>：指定用户的主目录路径。</li>
 <li><code>-e, --expiredate EXPIRE_DATE</code>：设置用户的过期日期，格式为 YYYY-MM-DD。</li>
 <li><code>-f, --inactive INACTIVE</code>：设置用户账号的非活动时间（以天为单位），超过该时间将被锁定。</li>
 <li><code>-g, --gid GROUP</code>：指定用户所属的初始组。</li>
 <li><code>-G, --groups GROUPS</code>：指定用户所属的其他附加组。</li>
 <li><code>-m, --create-home</code>：创建用户的主目录。</li>
 <li><code>-M, --no-create-home</code>：不创建用户的主目录。</li>
 <li><code>-n, --no-user-group</code>：不创建与用户名同名的初始组。</li>
 <li><code>-r, --system</code>：创建一个系统用户。</li>
 <li><code>-s, --shell SHELL</code>：指定用户的登录Shell。/sbin/nologin</li>
 <li><code>-u, --uid UID</code>：为用户指定一个唯一的用户ID。</li>
 <li><code>-U, --user-group</code>：创建与用户名同名的初始组。</li>
</ul>
<h2 id="usermod">USERMOD</h2>
<p><code>usermod</code> 是一个用于修改用户账户属性的命令，它可以用于更改用户的各种设置。以下是一些常用的 <code>usermod</code> 参数：</p>
<ul>
 <li><code>-c, --comment COMMENT</code>：设置用户账户的注释字段，通常用于提供有关用户的描述信息。</li>
 <li><code>-d, --home HOME_DIR</code>：更改用户的主目录。</li>
 <li><code>-e, --expiredate EXPIRE_DATE</code>：设置用户账户的过期日期。</li>
 <li><code>-g, --gid GROUP</code>：更改用户的主要组。</li>
 <li><code>-G, --groups GROUPS</code>：设置用户的附加组。可以指定一个逗号分隔的组列表。</li>
 <li><code>-l, --login NEW_LOGIN</code>：更改用户的登录名。</li>
 <li><code>-p, --password PASSWORD</code>：设置用户的密码。密码应该是经过加密的。</li>
 <li><code>-s, --shell SHELL</code>：更改用户的登录 shell。</li>
 <li><code>-u, --uid UID</code>：更改用户的用户 ID。</li>
 <li><code>-L, --lock</code>：锁定用户账户，禁止用户登录。</li>
 <li><code>-U, --unlock</code>：解锁用户账户，允许用户登录。</li>
</ul>
<h2 id="passwd">PASSWD</h2>
<p><code>passwd</code> 命令用于更改用户密码。以下是一些常用的 <code>passwd</code> 命令参数：</p>
<ul>
 <li><code>-l, --lock</code>：锁定用户账户，禁止用户登录。</li>
 <li><code>-u, --unlock</code>：解锁用户账户，允许用户登录。</li>
 <li><code>-d, --delete</code>：删除用户密码，允许无密码登录。</li>
 <li><code>-e, --expire</code>：强制用户在下次登录时更改密码。</li>
 <li><code>-S, --status</code>：显示用户密码的状态信息。</li>
 <li><code>-a, --all</code>：对所有用户执行操作。</li>
 <li><code>-r, --root</code>：以 root 身份执行操作。</li>
 <li><code>-h, --help</code>：显示帮助信息。</li>
</ul>
<p>这些参数可以与 <code>passwd</code> 命令一起使用，以执行不同的操作。例如，要锁定用户账户，可以使用 <code>passwd -l 用户名</code> 命令。要解锁用户账户，可以使用 <code>passwd -u 用户名</code> 命令。</p>
<h2 id="group">GROUP</h2>
<p><code>group</code> 命令用于管理用户组。以下是一些常用的 <code>group</code> 命令参数：</p>
<ul>
 <li><code>-g, --gid GID</code>：设置用户组的组 ID。</li>
 <li><code>-n, --name NAME</code>：设置用户组的名称。</li>
 <li><code>-r, --system</code>：创建一个系统用户组。</li>
 <li><code>-a, --add USER</code>：将用户添加到用户组。</li>
 <li><code>-d, --delete USER</code>：从用户组中删除用户。</li>
 <li><code>-R, --root CHROOT_DIR</code>：将操作限制在指定的 chroot 目录中。</li>
 <li><code>-h, --help</code>：显示帮助信息。</li>
</ul>
<p>这些参数可以与 <code>group</code> 命令一起使用，以执行不同的操作。例如，要创建一个新的用户组，可以使用 <code>groupadd 组名</code> 命令。要将用户添加到用户组，可以使用 <code>groupadd -a 用户名 组名</code> 命令。</p>
<h2 id="groupadd">GROUPADD</h2>
<p><code>groupadd</code> 命令用于创建新的用户组。以下是一些常用的 <code>groupadd</code> 命令参数：</p>
<ul>
 <li><code>-g, --gid GID</code>：设置用户组的组 ID。</li>
 <li><code>-r, --system</code>：创建一个系统用户组。</li>
 <li><code>-f, --force</code>：即使用户组已经存在，也强制创建新的用户组。</li>
 <li><code>-K, --key KEY=VALUE</code>：设置用户组的键值对属性。</li>
 <li><code>-R, --root CHROOT_DIR</code>：将操作限制在指定的 chroot 目录中。</li>
 <li><code>-h, --help</code>：显示帮助信息。</li>
</ul>
<p>这些参数可以与 <code>groupadd</code> 命令一起使用，以执行不同的操作。例如，要创建一个新的用户组，可以使用 <code>groupadd 组名</code> 命令。要创建一个系统用户组，可以使用 <code>groupadd -r 组名</code> 命令。</p>
<h2 id="groupmod">GROUPMOD</h2>
<p><code>groupmod</code> 命令用于修改用户组的属性。以下是一些常用的 <code>groupmod</code> 命令参数：</p>
<ul>
 <li><code>-g, --gid GID</code>：修改用户组的组 ID。</li>
 <li><code>-n, --new-name NEW_GROUP</code>：修改用户组的名称。</li>
 <li><code>-o, --non-unique</code>：允许使用非唯一的组 ID。</li>
 <li><code>-R, --root CHROOT_DIR</code>：将操作限制在指定的 chroot 目录中。</li>
 <li><code>-h, --help</code>：显示帮助信息。</li>
</ul>
<p>这些参数可以与 <code>groupmod</code> 命令一起使用，以执行不同的操作。例如，要修改用户组的名称，可以使用 <code>groupmod -n 新组名 旧组名</code> 命令。要修改用户组的组 ID，可以使用 <code>groupmod -g 新组ID 组名</code> 命令。</p>
<h2 id="chmod">CHMOD</h2>
<p><code>chmod</code> 命令用于更改文件或目录的权限。它可以使用不同的参数来设置不同的权限。</p>
<p>下面是 <code>chmod</code> 命令的常见参数：</p>
<ul>
 <li><code>u</code>：表示文件所有者（user）的权限。</li>
 <li><code>g</code>：表示文件所属组（group）的权限。</li>
 <li><code>o</code>：表示其他用户（others）的权限。</li>
 <li><code>a</code>：表示所有用户的权限，等同于 <code>ugo</code> 的组合。</li>
 <li><code>+</code>：添加指定的权限。</li>
 <li><code>-</code>：移除指定的权限。</li>
 <li><code>=</code>：设置指定的权限，覆盖之前的权限设置。</li>
</ul>
<p>权限参数：</p>
<ul>
 <li><code>r</code>：读取权限。</li>
 <li><code>w</code>：写入权限。</li>
 <li><code>x</code>：执行权限。</li>
</ul>
<p>使用 <code>chmod</code> 命令时，可以组合这些参数来设置不同的权限。以下是一些示例：</p>
<ol>
 <li>
  <p>将文件 <code>script.sh</code> 的所有者设置为可读写执行，所属组和其他用户只有读取权限：</p>
  <pre><code>chmod u=rwx,g=r,o=r script.sh
</code></pre>
 </li>
 <li>
  <p>将目录 <code>mydir</code> 及其所有子目录和文件的所有者和所属组设置为可读写执行，其他用户只有读取和执行权限：</p>
  <pre><code>chmod -R u=rwx,g=rwx,o=rx mydir
</code></pre>
 </li>
 <li>
  <p>将文件 <code>file.txt</code> 的所有用户的写入权限移除：</p>
  <pre><code>chmod a-w file.txt
</code></pre>
 </li>
 <li>
  <p>将文件 <code>program</code> 的所有用户的执行权限设置为与所有者相同：</p>
  <pre><code>chmod a=x,g=x,o=x program
</code></pre>
 </li>
</ol>
<h2 id="chown">CHOWN</h2>
<blockquote>
 <p>用于修改用户和组的所有者</p>
</blockquote>
<p>用户</p>
<pre><code>chown root aaa  //修改为root所有者

</code></pre>
<p>组</p>
<pre><code>chown :root aaa // 用于修改为root组
</code></pre>]]></description><guid isPermaLink="false">/archives/159</guid><dc:creator>Celia</dc:creator><category>Linux</category><pubDate>Mon, 16 Oct 2023 02:32:00 GMT</pubDate></item><item><title><![CDATA[linux下的nmtui和手动配置网络]]></title><link>https://7boe.top/archives/158</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=linux%E4%B8%8B%E7%9A%84nmtui%E5%92%8C%E6%89%8B%E5%8A%A8%E9%85%8D%E7%BD%AE%E7%BD%91%E7%BB%9C&amp;url=/archives/158" width="1" height="1" alt="" style="opacity:0;">
<h1 id="关于nmtui和手动配置网络">关于Nmtui和手动配置网络</h1>
<h2 id="nmtui">nmtui</h2>
<p><code>nmtui</code> 是 NetworkManager 文本用户界面（Text User Interface）的缩写。它是一个在终端中管理网络连接的工具，提供了一个交互式的界面，使用户能够轻松地配置和管理网络设置。</p>
<p>使用 <code>nmtui</code>，你可以执行以下操作：</p>
<ol>
 <li>
  <p>查看当前网络连接状态：显示当前连接的网络接口和其状态（已连接、已断开等）。</p>
 </li>
 <li>
  <p>管理 Wi-Fi 连接：搜索可用的 Wi-Fi 网络，连接到指定的网络，输入密码进行身份验证等。</p>
 </li>
 <li>
  <p>管理有线连接：配置有线网络接口的 IP 地址、子网掩码、网关等。</p>
 </li>
 <li>
  <p>配置网络连接：创建、编辑和删除网络连接配置文件，包括 Wi-Fi、有线和虚拟专用网络（VPN）连接。</p>
 </li>
 <li>
  <p>重新连接网络：重新连接已保存的网络配置。</p>
 </li>
</ol>
<p>使用 <code>nmtui</code> 是相对简单的。你只需在终端中输入 <code>nmtui</code> 命令，然后按照屏幕上的提示进行操作。你可以使用箭头键导航，使用空格键选择选项，并按 Enter 键确认选择。对于一些需要输入文本的场景，你可以使用键盘输入。</p>
<h2 id="一-关于使用">一. 关于使用</h2>
<p>当你运行 <code>nmtui</code> 命令时，会打开 NetworkManager 文本用户界面（TUI）。以下是 <code>nmtui</code> 的一些常见用法和操作步骤：</p>
<ol>
 <li>
  <p>启动 <code>nmtui</code>：
   <br>
   在终端中输入 <code>nmtui</code> 命令，然后按 Enter 键。</p>
 </li>
 <li>
  <p>导航和选择选项：
   <br>
   使用上下箭头键在不同的选项之间进行导航。使用 Tab 键切换到不同的按钮或输入框。使用空格键选择选项。</p>
 </li>
 <li>
  <p>查看连接状态：
   <br>
   在主界面上，你可以看到当前连接的网络接口和其状态（已连接、已断开等）。</p>
 </li>
 <li>
  <p>管理 Wi-Fi 连接：</p>
  <ul>
   <li>在主界面上，使用箭头键导航到 "Activate a connection"（激活连接）选项，然后按下空格键。</li>
   <li>如果有可用的 Wi-Fi 网络，它们将会显示在列表中。使用箭头键导航到所需的网络，然后按下空格键以选择它。</li>
   <li>如果网络需要密码，你将被提示输入密码。输入密码后，按下 Enter 键进行身份验证。</li>
   <li>如果连接成功，你将看到一个成功的消息。</li>
  </ul>
 </li>
 <li>
  <p>管理有线连接：</p>
  <ul>
   <li>在主界面上，使用箭头键导航到 "Edit a connection"（编辑连接）选项，然后按下空格键。</li>
   <li>选择你想要编辑的有线连接，并按下 Enter 键。</li>
   <li>在连接设置中，你可以配置 IP 地址、子网掩码、网关等。使用 Tab 键在不同的字段之间切换，使用箭头键进行导航，并使用空格键选择选项。</li>
   <li>配置完成后，按下 F10 键保存设置。</li>
  </ul>
 </li>
 <li>
  <p>配置网络连接：</p>
  <ul>
   <li>在主界面上，使用箭头键导航到 "Edit a connection"（编辑连接）选项，然后按下空格键。</li>
   <li>在连接列表中，你可以选择创建新的连接或编辑现有的连接。按下 Enter 键选择所需的选项。</li>
   <li>根据连接类型（Wi-Fi、有线、VPN 等），你将被要求输入相关的设置，例如 SSID、密码、IP 地址等。按照屏幕上的提示进行操作，并按下 F10 键保存设置。</li>
  </ul>
 </li>
 <li>
  <p>重新连接网络：</p>
  <ul>
   <li>在主界面上，使用箭头键导航到 "Activate a connection"（激活连接）选项，然后按下空格键。</li>
   <li>选择要重新连接的网络，并按下 Enter 键。</li>
  </ul>
 </li>
 <li>
  <p>退出 <code>nmtui</code>：
   <br>
   在主界面上，使用箭头键导航到 "Quit"（退出）选项，然后按下空格键。</p>
 </li>
</ol>
<p>这些是 <code>nmtui</code> 的一些基本用法和操作步骤。你可以根据需要进行导航、选择和配置网络连接。记住，<code>nmtui</code> 的界面是基于文本的，使用键盘进行操作。</p>
<h2 id="二-语法格式及常用选项">二. 语法格式及常用选项</h2>
<blockquote>
 <p>直接运行命令： nmtui
  <br>
  这个单词不好记是不是，可以进行联想啊： 当你要进行修改网络的时候，心里特别烦，骂骂咧咧的说了句：你妹（nm) 的腿 (tui）, 怎么样，记住了吗</p>
</blockquote>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F65260d1f9706b.png&amp;size=m" alt="img"></p>
<p>通过nmtui提供的GUI界面，可以编辑连接，启动连接，设置主机名，如果对连接的概念不理解可以参考这篇文章：RHEL/CentOS系列发行版nmcli命令概述</p>
<p>可以使用箭头键或按 Tab 键向前选择选项，按 Shift+Tab 组合键返回。按 Enter 选择一个选项。按 Space 键选择复选框状态。</p>
<p><strong>1、编辑连接</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F652611eeb4bb4.png&amp;size=m" alt=""></p>
<p><strong>2、添加连接</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F6526121b0d816.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F65261224bc48f.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F652612288486f.png&amp;size=m" alt=""></p>
<p><strong>3、启用连接（激活连接）</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F6526127079973.png&amp;size=m" alt=""></p>
<p><strong>4、设置系统主机名</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F10%2F11%2F6526128dbefb7.png&amp;size=m" alt=""></p>
<h1 id="关于手动配置网卡">关于手动配置网卡</h1>
<p><strong>编辑网卡配置文件</strong></p>
<pre><code>vim /etc/sysconfig/network-scripts/ifcfg-ens33
</code></pre>
<p><strong>BOOTPROTO=dhcp这一行，把dhcp改为BOOTPROTO=stati</strong>c
 <br>
 <strong>手动添加配置</strong></p>
<pre><code>BOOTPROTO=dhcp  //指定网卡模式，有dhcp (自动获取IP)，static (手动配置IP)//默认情况下是no，表示网卡为关闭状态，需要改成yes才能激活网卡
IPADD=    //指定网卡的IP地址
NETMASK=  //指定网卡的子网掩码
GATEWAY=  //指定网卡的网关地址
DNS=      //指定网卡的NDS地址
ONBOOT=yes
</code></pre>
<p>然后重新启动网络服务</p>
<pre><code>systemctl restart network
</code></pre>
<p><strong>Centos9</strong></p>
<pre><code>vim /etc/NetworkManager/system-connections/ens33.nmconnection
</code></pre>]]></description><guid isPermaLink="false">/archives/158</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><pubDate>Wed, 11 Oct 2023 03:07:00 GMT</pubDate></item><item><title><![CDATA[交换机配置命令]]></title><link>https://7boe.top/archives/157</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E4%BA%A4%E6%8D%A2%E6%9C%BA%E9%85%8D%E7%BD%AE%E5%91%BD%E4%BB%A4&amp;url=/archives/157" width="1" height="1" alt="" style="opacity:0;">
<h1 id="交换机配置常用命令">交换机配置常用命令</h1>
<h2 id="vlan">vlan</h2>
<pre><code>int vlan10
vlan 10
</code></pre>
<blockquote>
 <p>都可以直接创建并且进入vlan</p>
</blockquote>
<p><strong>批量创建vlan</strong></p>
<pre><code>vlan batch 10 20 30
</code></pre>
<p>会直接创建3个vlan 且为 valn 10 valn 20 vlan 30</p>
<p><strong>在vlan内可以创建网关地址</strong></p>
<pre><code>ip add 192.168.1.1 24
</code></pre>
<p>这样就创建了一个vlan内的网关地址</p>
<h2 id="接口配置">接口配置</h2>
<p><strong>进入接口</strong></p>
<pre><code>int g 0/0/1
</code></pre>
<p>进入第一个接口</p>
<p><strong>配置接口链路类型</strong></p>
<pre><code>port link-type acc 
</code></pre>
<p>配置为access模式 数据仅通过单个vlan</p>
<pre><code>port default vlan 10
</code></pre>
<p>把当前接口默认vlan设置成vlan 10</p>
<h2 id="dhcp配置">DHCP配置</h2>
<blockquote>
 <p>配置dhcp自动获取ip以及网关和dns</p>
</blockquote>
<p>开启dhcp</p>
<pre><code>dhcp enable 
</code></pre>
<p>创建地址池</p>
<pre><code>ip pool &lt;地址池名称&gt;
</code></pre>
<p>创建地址池网段</p>
<pre><code>network 192.168.100.0 mask 255.255.255.0
</code></pre>
<p>创建了一个ip地址192.168.100.0-192.168.100.255的一个地址池</p>
<blockquote>
 <p>自动获取网关和dns</p>
</blockquote>
<p>创建网关</p>
<pre><code>gateway-list 192.168.100.1
</code></pre>
<p>创建dns</p>
<pre><code>dns-list 223.5.5.5
</code></pre>
<p>华为设备需要再网关接口开启dhcp</p>
<pre><code>int g0/0/0
</code></pre>
<p>开启dhcp</p>
<pre><code>dhcp select golobal
</code></pre>
<p>加入电脑或者其他设备即可自动或者地址</p>
<h2 id="静态路由">静态路由</h2>
<p>配置静态路由，对网络下的其他路由设备不同网段设备进行访问。</p>
<pre><code>dis ip routing-table 192.168.100.1  
</code></pre>
<p>例如这个查看当前路由表是否能找到这个ip 没有输出就是没有表，需要添加静态路由</p>
<pre><code>ip route-static 10.1.1.0 8
</code></pre>
<h2 id="常见命令">常见命令</h2>
<p>查看全部接口ip</p>
<pre><code>display ip interface brief
</code></pre>
<p>查看全部接口状态</p>
<pre><code>display interface brief
</code></pre>
<h2 id="名词解释">名词解释</h2>
<p><strong>网口</strong>：</p>
<p>FE：代表百兆口</p>
<p>GE：代表千兆口 ** 三层交换机**：</p>
<p>就是具有部分路由器功能的交换机。</p>
<p>最重要目的是加快大型局域网内部的数据交换。</p>
<p>数据中心交换机——网络流量汇聚转发的承担者</p>
<p>交换机的端口不能直接设置IP地址，只能划入vlan，然后给这个vlan interface设置IP地址</p>
<p><strong>名词含义：</strong></p>
<p>LACP：链路聚合控制协议，提供备份功能</p>
<p>Ntdp enable：ntdp是用来收集网络拓扑信息的协议</p>
<p>Ndp enable：ndp是用来发现邻接点相关信息的协议，协议激活。</p>
<p><strong>Vpn(虚拟专用网络)：</strong></p>
<p>属于远程访问技术，简单的说就是利用公用网络架设专用网络。</p>
<p>配置交换机常用命令 修改交换机主机名</p>
<p>通过console配置接口进入交换机配置界面，首先出现&lt; &gt;用户视图，</p>
<p>然后[ ]是包括系统视图在内的其他视图；</p>
<p>quit返回上一级，return直接返回用户视图。</p>
<p>查看版本:display version</p>
<p>查看交换机当前配置:display current-configuration/dis cu</p>
<p>查看各个接口的运行状态：display int brief</p>
<p>查看某接口的配置信息：display this/dis th</p>
<p>查看vlan信息：display vlan</p>
<p>显示路由信息：display ip routing-table</p>
<p>查看mac表：display mac-address</p>
<p>CE系列交换机命令：commit 华为CE设备配置完成后，使用commit使得配置命令生效。</p>
<p>Undo vlan 20——删除vlan 20</p>
<p>Undo shutdown——打开端口</p>
<p>查看CPU占用率：display cpu</p>
<p>查看内存占用率：display memory</p>
<p>查看设备的license状态：display license state</p>
<p>查看处于trial状态的license剩余有效天数：display license state trial</p>
<p>堆叠：</p>
<p>1.堆叠检查：display stack configuration</p>
<p>2.堆叠拓扑：display stack topology</p>
<p>交换机加IP地址</p>
<p>Int vlan 1</p>
<p>Ip address 192.168.1.1 255.255.255.0</p>
<p>Quit</p>
<p>交换机重置清除所有配置命令</p>
<p>&lt;…&gt;用户模式下执行</p>
<p>Reset saved-configuration 选“Y”</p>
<p>Reboot 1:选“N”，2：选“Y”</p>
<p>重启后即可</p>]]></description><guid isPermaLink="false">/archives/157</guid><dc:creator>Celia</dc:creator><category>软路由</category><pubDate>Wed, 30 Aug 2023 13:39:00 GMT</pubDate></item><item><title><![CDATA[Harbor私有镜像仓库的安装配置]]></title><link>https://7boe.top/archives/156</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Harbor%E7%A7%81%E6%9C%89%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93%E7%9A%84%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE&amp;url=/archives/156" width="1" height="1" alt="" style="opacity:0;">
<h1 id="harbor">Harbor</h1>
<blockquote>
 <p>Harbor 是一个开源的企业级 Docker 镜像仓库。它提供了一个安全、可靠的方式来存储和分发 Docker 镜像，同时还具有访问控制、漏洞扫描、复制和备份等功能。</p>
</blockquote>
<p><strong>以下是 Harbor 的一些主要特性：</strong></p>
<ol>
 <li>
  <p>镜像存储和分发：Harbor 提供了一个集中管理的镜像仓库，可以方便地存储和分发 Docker 镜像。它支持通过 Web 界面或 Docker 命令行工具上传、下载和管理镜像。</p>
 </li>
 <li>
  <p>访问控制：Harbor 具有强大的访问控制功能，可以定义用户和团队的权限，以控制谁可以访问和操作镜像仓库。这有助于确保镜像的安全性和合规性。</p>
 </li>
 <li>
  <p>漏洞扫描：Harbor 集成了漏洞扫描工具，可以对上传的镜像进行漏洞扫描，并提供详细的漏洞报告。这有助于及早发现和修复镜像中的安全漏洞。</p>
 </li>
 <li>
  <p>复制和备份：Harbor 支持镜像仓库的复制和备份，可以将镜像仓库的数据复制到其他 Harbor 实例或进行定期的备份。这有助于提高镜像仓库的可用性和可靠性。</p>
 </li>
 <li>
  <p>触发器和通知：Harbor 支持触发器和通知机制，可以在特定事件发生时触发自定义操作或发送通知。例如，在镜像上传或漏洞扫描完成时触发自动构建或发送邮件通知。</p>
 </li>
 <li>
  <p>LDAP/AD 集成：Harbor 可以与 LDAP（轻量级目录访问协议）或 Active Directory（AD）集成，以便与现有的用户身份验证和授权系统进行集成。</p>
 </li>
 <li>
  <p>多租户支持：Harbor 支持多租户架构，可以将镜像仓库划分为不同的项目和命名空间，以实现更好的资源隔离和管理。</p>
 </li>
</ol>
<blockquote>
 <p>Harbor 提供了一个功能强大且易于使用的企业级 Docker 镜像仓库解决方案，适用于各种规模的组织和项目。它可以帮助组织更好地管理和保护 Docker 镜像，并提供了一系列的功能来提高开发和部署的效率。</p>
</blockquote>
<p>GITHUB开源项目地址：[Harbor](<a href="https://gitwget">https://gitwget</a> hub.com/goharbor/harbor) 官网：<a href="https://goharbor.io/">Harbor官网</a></p>
<h2 id="安装方式">安装方式</h2>
<p>Harbor的安装方式采用在docker当中运行，需要现在安装docker以及docker-compose 安装docker脚本</p>
<pre><code>bash &lt;(curl -sSL https://linuxmirrors.cn/docker.sh)
</code></pre>
<p>下载好Github上的Harbor离线包</p>
<pre><code>wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
</code></pre>
<p>解压出来</p>
<pre><code>tar -xvf harbor-offline-installer-v2.8.3.tgz
</code></pre>
<p>进入目录里面编辑yml文件</p>
<pre><code>vim harbor.yml     ##如果结尾不是yml的文件，给他重命名成yml
</code></pre>
<p>编辑文件内容主要有以下几个部分</p>
<pre><code>hostname: harbor.7boe.top     #hostname可以填写域名

http:
port
  port: 80
https:
  port: 443

  certificate: /root/ssl/7boe.top.pem     #开启https需要证书和秘钥
  private_key: /root/ssl/7boe.top.key    #不开起https注释掉即可

harbor_admin_password: Harbor12345    #这是登录 账号是admin
</code></pre>
<p>然后执行脚本</p>
<pre><code>./prepare
</code></pre>
<p>他会生成一个docker-compose文件 #一般不需要改动 直接执行</p>
<pre><code>docker-compose up -d
</code></pre>
<p>等全部组件启动后，直接域名访问即可</p>]]></description><guid isPermaLink="false">/archives/156</guid><dc:creator>Celia</dc:creator><category>Docker</category><category>技术分类</category><pubDate>Sun, 13 Aug 2023 05:32:56 GMT</pubDate></item><item><title><![CDATA[DDNS-GO解析到动态ipv6]]></title><link>https://7boe.top/archives/154</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=DDNS-GO%E8%A7%A3%E6%9E%90%E5%88%B0%E5%8A%A8%E6%80%81ipv6&amp;url=/archives/154" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E5%85%B3%E4%BA%8E" tabindex="-1">关于</h1>
<p><strong>这是一个GitHub开源项目，利用ipv6动态公网ip定期检查动态ip自动解析到自己的域名进行不间断上网，不建议利用服务，远程到自己的服务器或者家里都是可以的，动态ipv6默认是封禁80，443端口，smb端口，可以使用其他端口。</strong></p>
<p>项目地址:<a href="https://github.com/jeessy2/ddns-go" target="_blank">DDNS-GO</a></p>
<h1 id="ddns-go" tabindex="-1">ddns-go</h1>
<p><a href="https://github.com/jeessy2/ddns-go/releases/latest" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Frelease%2Fjeessy2%2Fddns-go.svg%3Flogo%3Dgithub%26style%3Dflat-square&amp;size=m" alt="GitHub release"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fdownloads%2Fjeessy2%2Fddns-go%2Ftotal%3Flogo%3Dgithub&amp;size=m" alt="GitHub release downloads"></a> <a href="https://github.com/jeessy2/ddns-go/blob/master/go.mod" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fgo-mod%2Fgo-version%2Fjeessy2%2Fddns-go&amp;size=m" alt="Go version"></a> <a href="https://goreportcard.com/report/github.com/jeessy2/ddns-go/v5" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgoreportcard.com%2Fbadge%2Fgithub.com%2Fjeessy2%2Fddns-go%2Fv5&amp;size=m" alt=""></a> <a href="https://registry.hub.docker.com/r/jeessy/ddns-go" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fdocker%2Fimage-size%2Fjeessy%2Fddns-go&amp;size=m" alt=""></a> <a href="https://registry.hub.docker.com/r/jeessy/ddns-go" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fdocker%2Fpulls%2Fjeessy%2Fddns-go&amp;size=m" alt=""></a></p>
<p>自动获得你的公网 IPv4 或 IPv6 地址，并解析到对应的域名服务。</p>
<ul>
 <li><a href="https://7boe.top#%E7%89%B9%E6%80%A7">特性</a></li>
 <li><a href="https://7boe.top#%E7%B3%BB%E7%BB%9F%E4%B8%AD%E4%BD%BF%E7%94%A8">系统中使用</a></li>
 <li><a href="https://7boe.top#docker%E4%B8%AD%E4%BD%BF%E7%94%A8">Docker中使用</a></li>
 <li><a href="https://7boe.top#%E4%BD%BF%E7%94%A8ipv6">使用IPv6</a></li>
 <li><a href="https://7boe.top#webhook">Webhook</a></li>
 <li><a href="https://7boe.top#callback">Callback</a></li>
 <li><a href="https://7boe.top#%E7%95%8C%E9%9D%A2">界面</a></li>
 <li><a href="https://7boe.top#%E5%BC%80%E5%8F%91%E8%87%AA%E8%A1%8C%E7%BC%96%E8%AF%91">开发&amp;自行编译</a></li>
</ul>
<h2 id="%E7%89%B9%E6%80%A7" tabindex="-1">特性</h2>
<ul>
 <li>支持Mac、Windows、Linux系统，支持ARM、x86架构</li>
 <li>支持的域名服务商 <code>Alidns(阿里云)</code> <code>Dnspod(腾讯云)</code> <code>Cloudflare</code> <code>华为云</code> <code>Callback</code> <code>百度云</code> <code>Porkbun</code> <code>GoDaddy</code> <code>Google Domain</code></li>
 <li>支持接口/网卡/<a href="https://github.com/jeessy2/ddns-go/wiki/%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%8E%B7%E5%8F%96IP%E5%8F%82%E8%80%83" target="_blank">命令</a>获取IP</li>
 <li>支持以服务的方式运行</li>
 <li>默认间隔5分钟同步一次</li>
 <li>支持同时配置多个DNS服务商</li>
 <li>支持多个域名同时解析</li>
 <li>支持多级域名</li>
 <li>网页中配置，简单又方便，默认勾选<code>禁止从公网访问</code></li>
 <li>网页中方便快速查看最近50条日志</li>
 <li>支持Webhook通知</li>
 <li>支持TTL</li>
 <li>支持部分DNS服务商<a href="https://github.com/jeessy2/ddns-go/wiki/%E4%BC%A0%E9%80%92%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0" target="_blank">传递自定义参数</a>，实现地域解析等功能</li>
</ul>
<blockquote>
 <p><strong>Note</strong> 建议在启用公网访问时，使用 Nginx 等反向代理软件启用 HTTPS 访问，以保证安全性。<a href="https://github.com/jeessy2/ddns-go/wiki/FAQ" target="_blank">FAQ</a></p>
</blockquote>
<h2 id="%E7%B3%BB%E7%BB%9F%E4%B8%AD%E4%BD%BF%E7%94%A8" tabindex="-1">系统中使用</h2>
<ul>
 <li>
  <p>从 <a href="https://github.com/jeessy2/ddns-go/releases" target="_blank">Releases</a> 下载并解压 ddns-go</p>
 </li>
 <li>
  <p>[可选] 使用 <a href="https://brew.sh" target="_blank">Homebrew</a> 安装 <a href="https://formulae.brew.sh/formula/ddns-go" target="_blank">ddns-go</a>：</p>
  <pre><code class="language-bash">brew install ddns-go
</code></pre>
 </li>
 <li>
  <p>双击运行, 如没有找到配置, 程序将自动打开 <a href="http://127.0.0.1:9876" target="_blank">http://127.0.0.1:9876</a></p>
 </li>
 <li>
  <p>[可选] 安装服务</p>
  <ul>
   <li>Mac/Linux: <code>sudo ./ddns-go -s install</code></li>
   <li>Win(以管理员打开cmd): <code>.\ddns-go.exe -s install</code></li>
  </ul>
 </li>
 <li>
  <p>[可选] 服务卸载</p>
  <ul>
   <li>Mac/Linux: <code>sudo ./ddns-go -s uninstall</code></li>
   <li>Win(以管理员打开cmd): <code>.\ddns-go.exe -s uninstall</code></li>
  </ul>
 </li>
 <li>
  <p>[可选] 支持安装或启动时带参数 <code>-l</code>监听地址 <code>-f</code>同步间隔时间(秒) <code>-cacheTimes</code>间隔N次与服务商比对 <code>-c</code>自定义配置文件路径 <code>-noweb</code>不启动web服务 <code>-skipVerify</code>跳过证书验证 <code>-dns</code> 自定义 DNS 服务器。如：<code>./ddns-go -s install -l :9877 -f 600 -c /Users/name/ddns-go.yaml</code></p>
 </li>
</ul>
<blockquote>
 <p><strong>Note</strong> 通过合理的配置 <code>-f</code> 和 <code>-cacheTimes</code> 可以实现 IP 变化即时触发更新且不会被 DDNS 服务商限流, 例如 <code>-f 10 -cacheTimes 360</code> 效果为每 10 秒检查一次本地 IP 变化, 每小时去公网对比一下 IP 变化</p>
</blockquote>
<h2 id="docker%E4%B8%AD%E4%BD%BF%E7%94%A8" tabindex="-1">Docker中使用</h2>
<ul>
 <li>
  <p>挂载主机目录, 使用docker host模式。可把 <code>/opt/ddns-go</code> 替换为你主机任意目录, 配置文件为隐藏文件</p>
  <pre><code class="language-bash">docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
</code></pre>
 </li>
 <li>
  <p>在浏览器中打开<code>http://主机IP:9876</code>，修改你的配置，成功</p>
 </li>
 <li>
  <p>[可选] 使用 <code>ghcr.io</code> 镜像</p>
  <pre><code class="language-bash">docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
</code></pre>
 </li>
 <li>
  <p>[可选] 支持启动带参数 <code>-l</code>监听地址 <code>-f</code>间隔时间(秒)</p>
  <pre><code class="language-bash">docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
</code></pre>
 </li>
 <li>
  <p>[可选] 不使用docker host模式</p>
  <pre><code class="language-bash">docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
</code></pre>
 </li>
</ul>
<h2 id="%E4%BD%BF%E7%94%A8ipv6" tabindex="-1">使用IPv6</h2>
<ul>
 <li>前提：你的电脑或终端能正常获取IPv6，并能正常访问IPv6</li>
 <li>Windows/Mac：推荐 <a href="https://7boe.top#%E7%B3%BB%E7%BB%9F%E4%B8%AD%E4%BD%BF%E7%94%A8">系统中使用</a>，Windows/Mac桌面版的docker不支持<code>--net=host</code></li>
 <li>群晖：
  <ul>
   <li>套件中心下载docker并打开</li>
   <li>注册表中搜索<code>ddns-go</code>并下载</li>
   <li>映像 -&gt; 选择<code>jeessy/ddns-go</code> -&gt; 启动 -&gt; 高级设置 -&gt; 网络中勾选<code>使用与 Docker Host 相同的网络</code>，高级设置中勾选<code>启动自动重新启动</code></li>
   <li>在浏览器中打开<code>http://群晖IP:9876</code>，修改你的配置，成功</li>
  </ul></li>
 <li>Linux的x86或arm架构，推荐使用Docker的<code>--net=host</code>模式。参考 <a href="https://7boe.top#Docker%E4%B8%AD%E4%BD%BF%E7%94%A8">Docker中使用</a></li>
 <li>虚拟机中使用有可能正常获取IPv6，但不能正常访问IPv6</li>
</ul>
<h2 id="%E7%95%8C%E9%9D%A2" tabindex="-1">界面</h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fjeessy2%2Fddns-go%2Fmaster%2Fddns-web.png&amp;size=m" alt="screenshots"></p>
<h2 id="%E5%BC%80%E5%8F%91%26%E8%87%AA%E8%A1%8C%E7%BC%96%E8%AF%91" tabindex="-1">开发&amp;自行编译</h2>
<ul>
 <li>如果喜欢从源代码编译自己的版本，可以使用本项目提供的 Makefile 构建</li>
 <li>使用 <code>make build</code> 生成本地编译后的 <code>ddns-go</code> 可执行文件</li>
 <li>使用 <code>make build_docker_image</code> 自行编译 Docker 镜像</li>
</ul>]]></description><guid isPermaLink="false">/archives/154</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Sat, 12 Aug 2023 03:24:35 GMT</pubDate></item><item><title><![CDATA[GITHUB文件加速项目]]></title><link>https://7boe.top/archives/153</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E6%96%87%E4%BB%B6%E5%8A%A0%E9%80%9F%E9%A1%B9%E7%9B%AE&amp;url=/archives/153" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E5%85%B3%E4%BA%8E" tabindex="-1">关于</h1>
<p><strong>搭建这个项目前提基本是你要有香港服务器，因为大陆下载GitHub文件一直很慢，利用香港服务器进行代理加速，不可用作与违反大陆相关法律，仅供学习使用。</strong></p>
<blockquote>
 <p>该项目是GitHub上的一个开源文件加速工具，搭建出来是一个页面，利用该链接进行加速。
  <br>
  示例:<a href="https://github.7boe.top" target="_blank">DEMO</a>
  <br>
  项目地址<a href="https://github.com/hunshcn/gh-proxy" target="_blank">GITHUB文件加速</a></p>
</blockquote>
<h2 id="readme" tabindex="-1">README</h2>
<h3 id="%E7%AE%80%E4%BB%8B" tabindex="-1">简介</h3>
<p><strong>github release、archive以及项目文件的加速项目，支持clone，有Cloudflare Workers无服务器版本以及Python版本</strong></p>
<h3 id="%E6%BC%94%E7%A4%BA" tabindex="-1">演示</h3>
<p><a href="https://gh.api.99988866.xyz/" target="_blank">https://gh.api.99988866.xyz/</a></p>
<p>演示站为公共服务，如有大规模使用需求请自行部署，演示站有点不堪重负</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.maocdn.cn%2Fimg%2F2021%2F04%2F24%2Fimagea272c95887343279.png&amp;size=m" alt="imagea272c95887343279.png"></p>
<p>当然也欢迎<a href="https://7boe.top#%E6%8D%90%E8%B5%A0">捐赠</a>以支持作者</p>
<h3 id="python%E7%89%88%E6%9C%AC%E5%92%8Ccf-worker%E7%89%88%E6%9C%AC%E5%B7%AE%E5%BC%82" tabindex="-1">python版本和cf worker版本差异</h3>
<ul>
 <li>
  <p>python版本支持进行文件大小限制，超过设定返回原地址 <a href="https://github.com/hunshcn/gh-proxy/issues/8" target="_blank">issue #8</a></p>
 </li>
 <li>
  <p>python版本支持特定user/repo 封禁/白名单 以及passby <a href="https://github.com/hunshcn/gh-proxy/issues/41" target="_blank">issue #41</a></p>
 </li>
</ul>
<h3 id="%E4%BD%BF%E7%94%A8" tabindex="-1">使用</h3>
<p>直接在copy出来的url前加<code>https://gh.api.99988866.xyz/</code>即可</p>
<p>也可以直接访问，在input输入</p>
<p><em><strong>大量使用请自行部署，以上域名仅为演示使用。</strong></em></p>
<p>访问私有仓库可以通过</p>
<p><code>git clone https://user:TOKEN@ghproxy.com/https://github.com/xxxx/xxxx</code> <a href="https://github.com/hunshcn/gh-proxy/issues/71" target="_blank">#71</a></p>
<p>以下都是合法输入（仅示例，文件不存在）：</p>
<ul>
 <li>
  <p>分支源码：<a href="https://github.com/hunshcn/project/archive/master.zip" target="_blank">https://github.com/hunshcn/project/archive/master.zip</a></p>
 </li>
 <li>
  <p>release源码：<a href="https://github.com/hunshcn/project/archive/v0.1.0.tar.gz" target="_blank">https://github.com/hunshcn/project/archive/v0.1.0.tar.gz</a></p>
 </li>
 <li>
  <p>release文件：<a href="https://github.com/hunshcn/project/releases/download/v0.1.0/example.zip" target="_blank">https://github.com/hunshcn/project/releases/download/v0.1.0/example.zip</a></p>
 </li>
 <li>
  <p>分支文件：<a href="https://github.com/hunshcn/project/blob/master/filename" target="_blank">https://github.com/hunshcn/project/blob/master/filename</a></p>
 </li>
 <li>
  <p>commit文件：<a href="https://github.com/hunshcn/project/blob/1111111111111111111111111111/filename" target="_blank">https://github.com/hunshcn/project/blob/1111111111111111111111111111/filename</a></p>
 </li>
 <li>
  <p>gist：<a href="https://gist.githubusercontent.com/cielpy/351557e6e465c12986419ac5a4dd2568/raw/cmd.py" target="_blank">https://gist.githubusercontent.com/cielpy/351557e6e465c12986419ac5a4dd2568/raw/cmd.py</a></p>
 </li>
</ul>
<h3 id="cf-worker%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2" tabindex="-1">cf worker版本部署</h3>
<p>首页：<a href="https://workers.cloudflare.com" target="_blank">https://workers.cloudflare.com</a></p>
<p>注册，登陆，<code>Start building</code>，取一个子域名，<code>Create a Worker</code>。</p>
<p>复制 <a href="https://cdn.jsdelivr.net/gh/hunshcn/gh-proxy@master/index.js" target="_blank">index.js</a> 到左侧代码框，<code>Save and deploy</code>。如果正常，右侧应显示首页。</p>
<p><code>ASSET_URL</code>是静态资源的url（实际上就是现在显示出来的那个输入框单页面）</p>
<p><code>PREFIX</code>是前缀，默认（根路径情况为"/"），<a href="http://xn--example-e73kkez26jqdf625bs50bzhzb1xzb.com/gh/*%EF%BC%8C%E8%AF%B7%E5%B0%86PREFIX%E6%94%B9%E4%B8%BA" target="_blank">如果自定义路由为example.com/gh/*，请将PREFIX改为</a> ‘/gh/’，注意，少一个杠都会错！</p>
<h3 id="python%E7%89%88%E6%9C%AC%E9%83%A8%E7%BD%B2" tabindex="-1">Python版本部署</h3>
<h3 id="docker%E9%83%A8%E7%BD%B2" tabindex="-1">Docker部署</h3>
<pre><code class="language-">docker run -d --name="gh-proxy-py" \
  -p 0.0.0.0:80:80 \
  --restart=always \
  hunsh/gh-proxy-py:latest
</code></pre>
<p>第一个80是你要暴露出去的端口</p>
<h3 id="%E7%9B%B4%E6%8E%A5%E9%83%A8%E7%BD%B2" tabindex="-1">直接部署</h3>
<p>安装依赖（请使用python3）</p>
<p><code>pip install flask requests</code></p>
<p>按需求修改<code>app/main.py</code>的前几项配置</p>
<p><em>注意:</em> 可能需要在<code>return Response</code>前加两行</p>
<pre><code class="language-python3">if 'Transfer-Encoding' in headers:
    headers.pop('Transfer-Encoding')
</code></pre>
<h3 id="%E6%B3%A8%E6%84%8F" tabindex="-1">注意</h3>
<p>python版本的机器如果无法正常访问github.io会启动报错，请自行修改静态文件url</p>
<p>python版本默认走服务器（2021.3.27更新）</p>
<h3 id="cloudflare-workers%E8%AE%A1%E8%B4%B9" tabindex="-1">Cloudflare Workers计费</h3>
<p>到 <code>overview</code> 页面可参看使用情况。免费版每天有 10 万次免费请求，并且有每分钟1000次请求的限制。</p>
<p>如果不够用，可升级到 $5 的高级版本，每月可用 1000 万次请求（超出部分 $0.5/百万次请求）。</p>
<h3 id="changelog" tabindex="-1">Changelog</h3>
<ul>
 <li>2020.04.10 增加对<code>raw.githubusercontent.com</code>文件的支持</li>
 <li>2020.04.09 增加Python版本（使用Flask）</li>
 <li>2020.03.23 新增了clone的支持</li>
 <li>2020.03.22 初始版本</li>
</ul>
<h3 id="%E9%93%BE%E6%8E%A5" tabindex="-1">链接</h3>
<p><a href="https://hunsh.net" target="_blank">我的博客</a></p>
<h3 id="%E5%8F%82%E8%80%83" tabindex="-1">参考</h3>
<p><a href="https://github.com/EtherDream/jsproxy/" target="_blank">jsproxy</a></p>
<h3 id="%E6%8D%90%E8%B5%A0" tabindex="-1">捐赠</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.maocdn.cn%2Fimg%2F2021%2F04%2F24%2Fimage.md.png&amp;size=m" alt="wx.png">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fwww.helloimg.com%2Fimages%2F2021%2F04%2F24%2FBK9vmb.md.png&amp;size=m" alt="ali.png"></p>
<h2 id="%E6%90%AD%E5%BB%BA%E6%96%B9%E5%BC%8F" tabindex="-1">搭建方式</h2>
<p>最简单的就是上面那个docker
 <br>
 不用部署其他环境，端口可以改一下，比如改到8080端口，然后nginx反向代理套一个域名</p>
<pre><code class="language-">docker run -d --name="gh-proxy-py" \
  -p 8080:80 \
  --restart=always \
  hunsh/gh-proxy-py:latest
</code></pre>
<p>然后nginx加入配置</p>
<pre><code class="language-">location /
{
    proxy_pass http://127.0.0.1:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
}
</code></pre>]]></description><guid isPermaLink="false">/archives/153</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Sat, 12 Aug 2023 03:08:26 GMT</pubDate></item><item><title><![CDATA[Linux指令（参数补全）]]></title><link>https://7boe.top/archives/152</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E6%8C%87%E4%BB%A4%EF%BC%88%E5%8F%82%E6%95%B0%E8%A1%A5%E5%85%A8%EF%BC%89&amp;url=/archives/152" width="1" height="1" alt="" style="opacity:0;">
<h1 id="关于">关于</h1>
<blockquote>
 <p>记录一些有用容易忘记的指令和文件以及参数补全</p>
</blockquote>
<h2 id="常用指令">常用指令</h2>
<p>关于git的指令:<a href="https://7boe.top/archives/142">GIT</a>
 <br>
 关于pm2指令:<a href="https://7boe.top/archives/150">pm2管理器</a></p>
<h3 id="scp">SCP</h3>
<p><code>scp</code>（Secure Copy）是一个用于在本地系统和远程系统之间进行安全文件传输的命令行工具。它基于SSH协议，可以在不同的系统之间复制文件和目录。</p>
<p>以下是一些常用的 <code>scp</code> 命令示例：</p>
<ol>
 <li>
  <p>从本地系统复制文件到远程系统：</p>
  <pre><code>scp /path/to/local/file user@remote:/path/to/destination/
</code></pre>
 </li>
 <li>
  <p>从远程系统复制文件到本地系统：</p>
  <pre><code>scp user@remote:/path/to/remote/file /path/to/destination/
</code></pre>
 </li>
 <li>
  <p>复制整个目录及其内容到远程系统：</p>
  <pre><code>scp -r /path/to/local/directory user@remote:/path/to/destination/
</code></pre>
 </li>
 <li>
  <p>复制整个目录及其内容到本地系统：</p>
  <pre><code>scp -r user@remote:/path/to/remote/directory /path/to/destination/
</code></pre>
 </li>
 <li>
  <p>指定端口号进行复制：</p>
  <pre><code>scp -P port /path/to/local/file user@remote:/path/to/destination/
</code></pre>
 </li>
</ol>
<p><strong>请注意，在示例命令中，<code>user</code> 是远程系统上的用户名，<code>remote</code> 是远程系统的主机名或IP地址。你需要将这些值替换为实际的用户名和主机名/IP地址。</strong></p>
<h3 id="docker">Docker</h3>
<h4 id="以下是一些常用的docker指令">以下是一些常用的Docker指令：</h4>
<ul>
 <li>
  <p><code>docker inspect &lt;image&gt;</code> 查看一个镜像的信息</p>
 </li>
 <li>
  <p><code>docker run</code>：创建和运行一个新的容器。</p>
 </li>
 <li>
  <p><code>docker start</code>：启动已停止的容器。</p>
  <ul>
   <li>例如：<code>docker start my_container</code>将启动名为"my_container"的容器。</li>
  </ul>
 </li>
 <li>
  <p><code>docker stop</code>：停止正在运行的容器。</p>
  <ul>
   <li>例如：<code>docker stop my_container</code>将停止名为"my_container"的容器。</li>
  </ul>
 </li>
 <li>
  <p><code>docker rm</code>：删除一个或多个容器。</p>
 </li>
 <li>
  <p><code>docker ps</code>：列出当前正在运行的容器。</p>
 </li>
 <li>
  <p><code>docker images</code>：列出本地存储的镜像。</p>
 </li>
 <li>
  <p><code>docker pull</code>：从Docker镜像仓库中拉取镜像。</p>
 </li>
 <li>
  <p><code>docker push</code>：将本地镜像推送到Docker镜像仓库。</p>
 </li>
 <li>
  <p><code>docker exec</code>：在正在运行的容器中执行命令。</p>
  <ul>
   <li>例如：<code>docker exec -it my_container bash</code>将在名为"my_container"的容器中打开一个交互式终端。</li>
  </ul>
 </li>
 <li>
  <p><code>docker build</code>：根据Dockerfile构建镜像。</p>
  <ul>
   <li>例如：<code>docker build -t my_image .</code>将使用当前目录下的Dockerfile文件构建名为"my_image"的镜像。</li>
  </ul>
 </li>
</ul>
<h4 id="以下是一些与卷网络和构建缓存相关的docker指令">以下是一些与卷、网络和构建缓存相关的Docker指令：</h4>
<ul>
 <li>
  <p>查看卷：</p>
  <ul>
   <li><code>docker volume ls</code>：列出所有的卷。</li>
   <li><code>docker volume inspect &lt;volume_name&gt;</code>：查看特定卷的详细信息。</li>
  </ul>
 </li>
 <li>
  <p>查看网络：</p>
  <ul>
   <li><code>docker network ls</code>：列出所有的网络。</li>
   <li><code>docker network inspect &lt;network_name&gt;</code>：查看特定网络的详细信息。</li>
  </ul>
 </li>
 <li>
  <p>丢弃不使用的容器：</p>
  <ul>
   <li><code>docker container prune</code>：删除所有停止的容器。</li>
   <li><code>docker container prune -f</code>：强制删除所有停止的容器，无需确认。</li>
  </ul>
 </li>
 <li>
  <p>丢弃不使用的镜像：</p>
  <ul>
   <li><code>docker image prune</code>：删除所有未被标记的镜像（没有关联的容器）。</li>
   <li><code>docker image prune -a</code>：删除所有未被使用的镜像，包括未被标记的和已停止的容器使用的镜像。</li>
  </ul>
 </li>
 <li>
  <p>丢弃不使用的网络：</p>
  <ul>
   <li><code>docker network prune</code>：删除所有未被使用的网络。</li>
  </ul>
 </li>
 <li>
  <p>清理构建缓存：</p>
  <ul>
   <li><code>docker builder prune</code>：删除所有未使用的构建缓存。</li>
  </ul>
 </li>
</ul>
<blockquote>
 <p>请注意，在执行这些命令之前，请确保你了解它们的作用，并根据需要进行确认。删除操作是不可逆的，因此在进行任何删除操作之前，请确保你不再需要相关资源。</p>
</blockquote>
<h4 id="以下是docker中创建网络指定ip地址和设置dns的相关命令">以下是Docker中创建网络、指定IP地址和设置DNS的相关命令：</h4>
<ul>
 <li>创建网络：
  <ul>
   <li><code>docker network create &lt;network_name&gt;</code>：创建一个新的用户定义网络。</li>
  </ul></li>
 <li>在网络中创建指定的IP地址：
  <br>
  <code>docker network create --subnet=&lt;subnet&gt; --gateway=&lt;gateway&gt; --ip-range=&lt;ip_range&gt; -o "com.docker.network.bridge.name"="&lt;interface&gt;" &lt;network_name&gt;</code> ++创建一个具有指定IP范围、网关和子网掩码的网络，并将宿主机网络接口与该网络关联。++
  <ul>
   <li><code>&lt;subnet&gt;</code>：子网掩码，例如"172.18.0.0/16"。</li>
   <li><code>&lt;gateway&gt;</code>：网关IP地址，例如"172.18.0.1"。</li>
   <li><code>&lt;ip_range&gt;</code>：分配给容器的IP地址范围，例如"172.18.0.0/24"。</li>
   <li><code>&lt;interface&gt;</code>：宿主机网络接口名称，例如"eth0"。</li>
   <li><code>&lt;network_name&gt;</code>：要创建的网络名称。</li>
  </ul></li>
</ul>
<h4 id="设置dns服务器">设置DNS服务器：</h4>
<ul>
 <li>在创建网络时，可以使用<code>--dns</code>选项来指定DNS服务器的地址：
  <pre><code class="language-shell">docker network create --dns=&lt;dns_server_ip&gt; &lt;network_name&gt;
</code></pre></li>
</ul>
<h4 id="要在docker中将网络设置为桥接bridge或主机host模式可以使用以下命令">要在Docker中将网络设置为桥接（Bridge）或主机（Host）模式，可以使用以下命令：</h4>
<ul>
 <li>创建桥接网络：
  <pre><code class="language-shell">docker network create --driver=bridge &lt;network_name&gt;
</code></pre></li>
 <li>创建主机网络：
  <pre><code class="language-shell">docker network create --driver=host &lt;network_name&gt;
</code></pre></li>
</ul>
<blockquote>
 <p>请注意，选择适当的网络模式取决于你的应用需求和配置。在桥接模式下，Docker会为每个容器创建一个虚拟网络接口，并使用NAT（Network Address Translation）进行主机和容器之间的通信。而在主机模式下，容器与主机共享网络命名空间，直接使用主机的网络栈。</p>
</blockquote>
<h3 id="docker-compose">Docker-compose</h3>
<p>以下是 Docker Compose 常用的指令：</p>
<ol>
 <li>
  <p><code>docker-compose up</code>：启动应用程序的容器。它会根据配置文件创建和启动容器，并将它们连接到定义的网络。如果没有指定服务名称，则会启动所有的服务。</p>
 </li>
 <li>
  <p><code>docker-compose up -d</code>：以后台模式启动应用程序的容器。</p>
 </li>
 <li>
  <p><code>docker-compose down</code>：停止并移除应用程序的容器、网络和卷。</p>
 </li>
 <li>
  <p><code>docker-compose ps</code>：显示应用程序的容器状态。</p>
 </li>
 <li>
  <p><code>docker-compose logs</code>：查看应用程序的容器日志。</p>
 </li>
 <li>
  <p><code>docker-compose exec &lt;service&gt; &lt;command&gt;</code>：在运行中的容器中执行命令。</p>
 </li>
 <li>
  <p><code>docker-compose build</code>：构建应用程序的容器镜像。</p>
 </li>
 <li>
  <p><code>docker-compose pull</code>：拉取最新的容器镜像。</p>
 </li>
 <li>
  <p><code>docker-compose restart &lt;service&gt;</code>：重启指定的服务。</p>
 </li>
 <li>
  <p><code>docker-compose stop &lt;service&gt;</code>：停止指定的服务。</p>
 </li>
 <li>
  <p><code>docker-compose start &lt;service&gt;</code>：启动指定的服务。</p>
 </li>
 <li>
  <p><code>docker-compose scale &lt;service&gt;=&lt;num&gt;</code>：扩展特定服务的容器数量。</p>
 </li>
 <li>
  <p><code>docker-compose pause &lt;service&gt;</code>：暂停指定的服务。</p>
 </li>
 <li>
  <p><code>docker-compose unpause &lt;service&gt;</code>：取消暂停指定的服务。</p>
 </li>
 <li>
  <p><code>docker-compose rm &lt;service&gt;</code>：移除指定的服务容器。</p>
 </li>
 <li>
  <p><code>docker-compose config</code>：验证并显示配置文件的语法。</p>
 </li>
</ol>
<h3 id="nginx">NGINX</h3>
<p><strong>以下是Nginx的常用命令和选项。请注意，某些命令可能需要以root权限或sudo来执行。</strong></p>
<pre><code>nginx -s signal    # 向Nginx主进程发送信号
  stop             # 快速停止Nginx服务
  quit             # 优雅地停止Nginx服务
  reload           # 重新加载配置文件
  reopen           # 重新打开日志文件

nginx -t           # 检查Nginx配置文件语法是否正确

nginx -v           # 查看Nginx版本信息

nginx -V           # 显示Nginx版本信息及编译参数

nginx -h           # 查看帮助信息

</code></pre>
<h4 id="常用的nginx命令">常用的Nginx命令：</h4>
<ul>
 <li>启动Nginx服务：<code>sudo service nginx start</code></li>
 <li>停止Nginx服务：<code>sudo service nginx stop</code></li>
 <li>重新加载配置文件：<code>sudo service nginx reload</code></li>
 <li>检查配置文件语法是否正确：<code>sudo nginx -t</code></li>
 <li>查看Nginx版本信息：<code>nginx -v</code></li>
 <li>查看Nginx的运行状态：<code>sudo service nginx status</code></li>
</ul>
<h4 id="一些较为冷门的nginx命令">一些较为冷门的Nginx命令：</h4>
<ul>
 <li>打开Nginx进程的调试日志：<code>sudo nginx -g "daemon off; master_process on; error_log /var/log/nginx/error.log debug;"</code></li>
 <li>修改Nginx工作进程数：可以通过编辑Nginx配置文件中的<code>worker_processes</code>指令来更改Nginx工作进程的数量。</li>
 <li>向Nginx发送信号控制命令：例如，通过向Nginx主进程发送<code>SIGUSR1</code>信号，可以重新打开日志文件，而不需要重启Nginx服务。</li>
</ul>
<h3 id="redis">Redis</h3>
<p><strong>以下是一些常用的Redis操作命令，可以帮助你与Redis进行交互：</strong></p>
<ul>
 <li>
  <p>连接到Redis服务器：</p>
  <pre><code>redis-cli
</code></pre>
 </li>
 <li>
  <p>键值对操作：</p>
  <ul>
   <li>设置键值对：<code>SET key value</code></li>
   <li>获取键对应的值：<code>GET key</code></li>
   <li>删除指定的键值对：<code>DEL key</code></li>
  </ul>
 </li>
 <li>
  <p>列表操作：</p>
  <ul>
   <li>向列表尾部添加元素：<code>RPUSH key element</code></li>
   <li>获取列表长度：<code>LLEN key</code></li>
   <li>获取指定范围内的元素：<code>LRANGE key start end</code></li>
   <li>弹出并返回列表头部的元素：<code>LPOP key</code></li>
  </ul>
 </li>
 <li>
  <p>哈希操作：</p>
  <ul>
   <li>设置哈希字段及其值：<code>HSET key field value</code></li>
   <li>获取哈希字段对应的值：<code>HGET key field</code></li>
   <li>获取整个哈希的所有字段和值：<code>HGETALL key</code></li>
   <li>删除指定的哈希字段：<code>HDEL key field</code></li>
  </ul>
 </li>
 <li>
  <p>集合操作：</p>
  <ul>
   <li>添加一个或多个元素到集合中：<code>SADD key member [member ...]</code></li>
   <li>获取集合中的所有成员：<code>SMEMBERS key</code></li>
   <li>判断元素是否存在于集合中：<code>SISMEMBER key member</code></li>
   <li>从集合中移除一个或多个元素：<code>SREM key member [member ...]</code></li>
  </ul>
 </li>
 <li>
  <p>有序集合操作：</p>
  <ul>
   <li>添加一个带有分数的成员到有序集合中：<code>ZADD key score member</code></li>
   <li>按分数范围获取有序集合中的成员：<code>ZRANGEBYSCORE key min max</code></li>
   <li>计算有序集合中的成员个数：<code>ZCARD key</code></li>
   <li>移除有序集合中的一个或多个成员：<code>ZREM key member [member ...]</code></li>
  </ul>
 </li>
</ul>
<blockquote>
 <p>这只是Redis操作命令的一小部分。Redis还提供了更多功能丰富的命令，如发布订阅、事务处理等。你可以查阅Redis官方文档以获取完整的命令列表和详细的命令说明。</p>
</blockquote>
<h2 id="关于常用的文件">关于常用的文件</h2>
<p><strong>要在Linux系统中添加一个HTTP代理，可以按照以下步骤进行操作：</strong></p>
<ol>
 <li>
  <p>打开终端并使用root权限或sudo执行以下命令来编辑<code>/etc/environment</code>文件：</p>
  <pre><code class="language-shell">sudo nano /etc/environment
</code></pre>
 </li>
 <li>
  <p>在打开的文件中，在末尾添加以下行（替换<code>proxy.example.com</code>和<code>8080</code>为你的代理服务器地址和端口）：</p>
  <pre><code>http_proxy=http://proxy.example.com:8080/
https_proxy=http://proxy.example.com:8080/
ftp_proxy=http://proxy.example.com:8080/
no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
</code></pre>
 </li>
 <li>
  <p>保存文件并关闭编辑器。</p>
 </li>
 <li>
  <p>重新加载环境变量，以使更改生效：</p>
  <pre><code class="language-shell">source /etc/environment
</code></pre>
 </li>
 <li>
  <p>现在，你的系统已经配置了HTTP代理。可以通过运行<code>echo $http_proxy</code>来验证代理设置是否正确。</p>
 </li>
</ol>
<blockquote>
 <p>请注意，这种方法会为整个系统添加HTTP代理设置，并将影响所有网络连接。如果你只想为特定用户或进程设置代理，请考虑使用相应的用户或进程级别配置。</p>
</blockquote>
<h3 id="忘记密码">忘记密码</h3>
<p>1.开机按e建进入引导文件
 <br>
 2.在 linux /boot/vmlinuz-3.4.0 键入”e”进入编辑模式,在句末加上”init=/bin/bash”
 <br>
 3.按ctrl-x
 <br>
 4.按“b”启动系统。
 <br>
 这样我们即可获得一个bash的shell。</p>
<p>查看用户名: # cd /etc</p>
<pre><code>cat hostname
</code></pre>
<p>然后修改密码：
 <br>
 进入shell后，根分区的挂载模式默认是只读，我们要将其改为可写，否则不能更改root密码:
 <br>
 mount -no remount,rw /
 <br>
 passwd root
 <br>
 sync
 <br>
 mount -no remount,ro /
 <br>
 reboot //如果在虚拟机上没有反应，手动重启</p>
<h2 id="linux系统级常用命令">Linux系统级常用命令</h2>
<h3 id="tree">Tree</h3>
<p>以下是常用的 <code>tree</code> 命令的参数列表：</p>
<ul>
 <li><code>-a</code>：显示所有文件和目录，包括隐藏文件。</li>
 <li><code>-d</code>：只显示目录。</li>
 <li><code>-f</code>：在每个文件或目录之前显示完整的相对路径。</li>
 <li><code>-L level</code>：限制显示的层级深度，只显示指定层级的文件和目录。</li>
 <li><code>-I pattern</code>：排除匹配指定模式的文件或目录。</li>
 <li><code>-P pattern</code>：只显示匹配指定模式的文件或目录。</li>
 <li><code>-s</code>：以文件大小的顺序显示文件和目录。</li>
 <li><code>-t</code>：以修改时间的顺序显示文件和目录。</li>
 <li><code>-u</code>：以访问时间的顺序显示文件和目录。</li>
 <li><code>-r</code>：以相反的顺序显示文件和目录。</li>
 <li><code>-h</code>：以人类可读的格式显示文件大小。</li>
 <li><code>-D</code>：显示上次修改时间而不是默认的日期时间格式。</li>
 <li><code>-F</code>：在文件和目录之后添加符号表示。</li>
 <li><code>-i</code>：显示文件和目录的编号。</li>
 <li><code>-n</code>：在输出中不进行排序。</li>
 <li><code>-p</code>：以可打印字符的形式显示非打印字符。</li>
 <li><code>-q</code>：使用引号引起文件和目录名。</li>
 <li><code>-R</code>：递归地显示所有子目录。</li>
 <li><code>-x</code>：以行的形式显示文件和目录，而不是以树状结构显示。</li>
</ul>]]></description><guid isPermaLink="false">/archives/152</guid><dc:creator>Celia</dc:creator><category>Docker</category><category>技术分类</category><pubDate>Fri, 11 Aug 2023 03:37:00 GMT</pubDate></item><item><title><![CDATA[node下的后台运行工具pm2]]></title><link>https://7boe.top/archives/150</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=node%E4%B8%8B%E7%9A%84%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E5%B7%A5%E5%85%B7pm2&amp;url=/archives/150" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E5%85%B3%E4%BA%8E" tabindex="-1">关于</h1>
<h2 id="%E4%BB%80%E4%B9%88%E6%98%AFpm2" tabindex="-1">什么是pm2</h2>
<blockquote>
 <p>PM2（Process Manager 2）是一个用于管理和运行 Node.js 应用程序的生产过程管理器。它提供了许多功能，帮助简化在生产环境中部署和管理 Node.js 应用程序的过程。</p>
</blockquote>
<p>PM2 的主要功能包括：</p>
<ol>
 <li>
  <p>进程管理：PM2 可以启动、停止、重启和监视应用程序的运行。它可以自动处理应用程序的崩溃和重启，确保应用程序持续可用。</p>
 </li>
 <li>
  <p>负载均衡：PM2 可以根据系统的负载情况自动进行负载均衡，将请求分发给多个应用程序实例，以提高应用程序的性能和可伸缩性。</p>
 </li>
 <li>
  <p>日志管理：PM2 可以实时监视和管理应用程序的日志输出。它可以将日志输出保存到文件中，并提供命令行界面来查看和搜索日志。</p>
 </li>
 <li>
  <p>环境管理：PM2 可以根据不同的环境配置文件（如开发环境、生产环境）来管理应用程序的配置。这样可以轻松地在不同的环境中部署和运行应用程序。</p>
 </li>
 <li>
  <p>远程部署：PM2 支持远程部署，可以通过 SSH 连接到远程服务器，并在远程服务器上管理和运行应用程序。
   <br>
   <strong>总之，PM2 是一个强大的工具，可以帮助简化 Node.js 应用程序的部署和管理，提高应用程序的可靠性和性能。它在生产环境中被广泛使用，并受到许多开发者和运维人员的青睐。</strong></p>
 </li>
</ol>
<h2 id="%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%AE%83" tabindex="-1">如何使用它</h2>
<ul>
 <li>确保已经全局安装了 PM2。如果没有安装，可以使用以下命令进行安装：
  <pre><code class="language-">npm install -g pm2
</code></pre></li>
</ul>
<ol>
 <li>启动应用程序：</li>
</ol>
<pre><code class="language-">pm2 start app.js
</code></pre>
<p>这将启动名为 “app.js” 的应用程序。</p>
<ol start="2">
 <li>停止应用程序：</li>
</ol>
<pre><code class="language-">pm2 stop app
</code></pre>
<p>这将停止名为 “app” 的应用程序。</p>
<ol start="3">
 <li>重启应用程序：</li>
</ol>
<pre><code class="language-">pm2 restart app
</code></pre>
<p>这将重启名为 “app” 的应用程序。</p>
<ol start="4">
 <li>显示所有应用程序的状态：</li>
</ol>
<pre><code class="language-">pm2 status
</code></pre>
<p>这将显示所有已启动的应用程序的状态信息。</p>
<ol start="5">
 <li>显示特定应用程序的状态：</li>
</ol>
<pre><code class="language-">pm2 show app
</code></pre>
<p>这将显示名为 “app” 的应用程序的详细状态信息。</p>
<ol start="6">
 <li>监视应用程序的日志输出：</li>
</ol>
<pre><code class="language-">pm2 logs app
</code></pre>
<p>这将实时显示名为 “app” 的应用程序的日志输出。</p>
<ol start="7">
 <li>监视所有应用程序的日志输出：</li>
</ol>
<pre><code class="language-">pm2 logs
</code></pre>
<p>这将实时显示所有已启动应用程序的日志输出。</p>
<ol start="8">
 <li>列出所有已启动的应用程序：</li>
</ol>
<pre><code class="language-">pm2 list
</code></pre>
<p>这将列出所有已启动的应用程序及其相关信息。</p>
<p>要删除一个 PM2 任务，可以使用以下命令：</p>
<pre><code class="language-">pm2 delete app
</code></pre>
<p>其中，“app” 是要删除的任务的名称或 ID。通过运行上述命令，PM2 将停止并删除指定的任务。</p>
<p>如果你想删除所有的 PM2 任务，可以使用以下命令：</p>
<pre><code class="language-">pm2 delete all
</code></pre>
<p>这将停止并删除所有的 PM2 任务。</p>
<p>请注意，删除任务将永久删除任务的配置和相关信息。在执行删除操作之前，请确保你不再需要该任务，并且已经备份了任何重要的数据或日志文件。</p>
<h2 id="%E6%8C%81%E4%B9%85%E5%8C%96%E8%BF%90%E8%A1%8C" tabindex="-1">持久化运行</h2>
<p>要在当前文件夹下使用 npm 持久化运行 <code>npm run start</code> 命令，可以使用 PM2 进程管理器。PM2 可以在后台运行 Node.js 应用程序，并在系统启动时自动重新启动它们。</p>
<p>以下是使用 PM2 持久化运行 <code>npm run start</code> 命令的步骤：</p>
<ul>
 <li>
  <p>进入到你的项目文件夹中，执行以下命令启动应用程序：</p>
  <pre><code class="language-">pm2 start npm --name myapp -- run start
</code></pre>
  <p>在上面的命令中，<code>myapp</code> 是应用程序的名称，你可以根据需要进行更改。<code>npm --name myapp -- run start</code> 是启动命令，其中 <code>run start</code> 是你在 <code>package.json</code> 文件中定义的脚本命令。</p>
 </li>
 <li>
  <p>应用程序现在会在后台以持久化方式运行。你可以使用以下命令来查看应用程序的状态：</p>
  <pre><code class="language-">pm2 status
</code></pre>
  <p>这将显示所有由 PM2 管理的应用程序的状态信息。</p>
 </li>
</ul>
<p>通过使用 PM2，你可以确保 <code>npm run start</code> 命令在后台持久化运行，并具有自动重启功能。如果系统重新启动，PM2 会自动重新启动你的应用程序，确保它们保持运行状态。</p>
<p>请注意，以上步骤假设你已经在项目文件夹中正确配置了 <code>package.json</code> 文件和相应的 <code>start</code> 脚本。</p>]]></description><guid isPermaLink="false">/archives/150</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Mon, 7 Aug 2023 07:53:38 GMT</pubDate></item><item><title><![CDATA[Linux下的systemd以及Selinux和日志]]></title><link>https://7boe.top/archives/149</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B8%8B%E7%9A%84systemd%E4%BB%A5%E5%8F%8ASelinux%E5%92%8C%E6%97%A5%E5%BF%97&amp;url=/archives/149" width="1" height="1" alt="" style="opacity:0;">
<h1 id="systemd">systemd</h1>
<h2 id="关于">关于</h2>
<p>systemd是一个用于管理Linux系统启动过程和系统服务的系统和服务管理器。它是现代Linux发行版中广泛采用的一种替代方案，取代了传统的SysV init系统。</p>
<p>systemd的设计目标是提供更快的启动速度、更有效的资源管理、更简化的配置和管理方式，以及更强大的功能和扩展性。它引入了一些新的概念和特性，如并行启动、按需启动、单元文件、依赖关系、日志记录等。</p>
<p>以下是一些systemd的主要特点：</p>
<ul>
 <li>
  <p>并行启动：systemd可以并行启动系统服务，从而加快系统启动过程。它通过定义服务之间的依赖关系，以及使用socket激活和按需启动等机制，实现了高效的并行启动。</p>
 </li>
 <li>
  <p>单元文件：systemd使用单元文件来描述和配置系统服务。每个服务都有一个对应的服务单元文件（.service），其中包含了服务的配置和行为信息。通过编辑这些单元文件，可以灵活地配置和管理系统服务。</p>
 </li>
 <li>
  <p>依赖关系：systemd允许通过定义依赖关系来控制服务的启动顺序。服务可以指定它们所依赖的其他服务，以确保在启动时按正确的顺序启动。</p>
 </li>
 <li>
  <p>日志记录：systemd引入了journal日志系统，用于记录系统和服务的日志信息。它提供了强大的日志过滤和查询功能，可以更方便地查看和分析系统日志。</p>
 </li>
 <li>
  <p>用户会话管理：除了系统服务管理外，systemd还提供了用户会话管理功能。它可以在用户登录时启动和管理用户会话，并在用户注销时清理会话相关的资源。</p>
 </li>
 <li>
  <p>轻量级容器管理：systemd还提供了一些功能来管理轻量级容器，如namespace隔离、cgroup资源控制等。这使得systemd成为一种在容器化环境中运行和管理服务的选择。</p>
 </li>
</ul>
<blockquote>
 <p>总体而言，systemd为Linux系统提供了一种现代化的、统一的系统和服务管理框架。它简化了系统配置和管理的过程，并提供了更好的性能和功能。然而，由于systemd的引入涉及到一些系统级的改变，它也引起了一些争议和讨论。不同的Linux发行版可以在使用systemd的程度和方式上有所差异。</p>
</blockquote>
<h2 id="systemd的编写">systemd的编写</h2>
<p>如果我想创建一个守护进程，或者让他开机自启，想使用systemd来管理一些软件，就需要编写一些service文件。</p>
<p>使用systemd来管理一个软件，可以按照以下步骤进行操作：</p>
<ol>
 <li>
  <p>创建一个服务单元文件：在systemd中，每个要管理的软件都需要一个对应的服务单元文件。可以使用任何文本编辑器创建一个以<code>.service</code>为后缀的服务单元文件，例如<code>mysoftware.service</code>。</p>
 </li>
 <li>
  <p>编写服务单元文件：在服务单元文件中，你需要定义软件的各种配置和行为。以下是一个示例服务单元文件的基本结构：</p>
 </li>
</ol>
<pre><code>[Unit]
Description=My Software
After=network.target

[Service]
ExecStart=/path/to/mysoftware
WorkingDirectory=/path/to/working/directory
User=myuser
Group=mygroup
Restart=always

[Install]
WantedBy=multi-user.target
</code></pre>
<p>在上述示例中，你需要根据实际情况进行以下调整：</p>
<ul>
 <li><code>Description</code>：提供对软件的简短描述。</li>
 <li><code>ExecStart</code>：指定要运行的软件的可执行文件路径。</li>
 <li><code>WorkingDirectory</code>：指定软件的工作目录。</li>
 <li><code>User</code>和<code>Group</code>：指定以哪个用户和组的身份运行软件。</li>
 <li><code>Restart</code>：指定软件在意外退出时是否自动重启。</li>
 <li><code>WantedBy</code>：指定在哪些目标（target）下启用该服务。</li>
</ul>
<ol start="3">
 <li>将服务单元文件移动到适当的位置：将服务单元文件移动到<code>/etc/systemd/system/</code>目录下，以便systemd可以找到它。可以使用以下命令将文件移动到目标位置：</li>
</ol>
<pre><code>sudo mv mysoftware.service /etc/systemd/system/
</code></pre>
<ol start="4">
 <li>重新加载systemd配置：在将服务单元文件放置到正确的位置后，需要重新加载systemd配置，以使其意识到新添加的服务。可以使用以下命令重新加载systemd配置：</li>
</ol>
<pre><code>sudo systemctl daemon-reload
</code></pre>
<ol start="5">
 <li>启动和管理服务：现在，你可以使用systemd来启动、停止、重启和管理你的软件了。以下是一些常用的systemd命令示例：</li>
</ol>
<ul>
 <li>启动服务：<code>sudo systemctl start mysoftware</code></li>
 <li>停止服务：<code>sudo systemctl stop mysoftware</code></li>
 <li>重启服务：<code>sudo systemctl restart mysoftware</code></li>
 <li>查看服务状态：<code>sudo systemctl status mysoftware</code></li>
 <li>设置服务开机自启动：<code>sudo systemctl enable mysoftware</code></li>
 <li>禁用服务开机自启动：<code>sudo systemctl disable mysoftware</code></li>
 <li>查看所有服务service文件 <code>systemctl list-unit-files </code></li>
</ul>
<h2 id="selinux">Selinux</h2>
<p>要关闭 SELinux，你可以按照以下步骤进行操作：</p>
<ol>
 <li>
  <p>打开终端以获取 root 权限（或使用 sudo）。</p>
 </li>
 <li>
  <p>编辑 SELinux 配置文件 <code>/etc/selinux/config</code>，可以使用任何文本编辑器打开该文件。</p>
 </li>
 <li>
  <p>在配置文件中找到 <code>SELINUX</code> 的行，它指定了 SELinux 的模式。可能的取值包括 <code>enforcing</code>（强制模式）、<code>permissive</code>（宽容模式）和 <code>disabled</code>（禁用模式）。</p>
 </li>
 <li>
  <p>将 <code>SELINUX</code> 的值更改为 <code>disabled</code>，即将 SELinux 禁用。</p>
 </li>
 <li>
  <p>保存并关闭配置文件。</p>
 </li>
 <li>
  <p>重新启动系统，使更改生效。</p>
 </li>
</ol>
<p>请注意，禁用 SELinux 可能会降低系统的安全性。在禁用 SELinux 之前，请确保了解系统安全性方面的风险，并确保有其他适当的安全措施来保护系统。</p>
<p>如果你只是想临时禁用 SELinux，而不是永久禁用，你可以运行以下命令：</p>
<pre><code>sudo setenforce 0
</code></pre>
<p>这将将 SELinux 设置为宽容模式，允许所有操作，但不会禁用 SELinux。</p>
<h2 id="friewall">Friewall</h2>
<p>关闭防火墙可能会导致系统的安全性降低，因此在关闭防火墙之前，请确保了解潜在的风险，并确保有其他适当的安全措施来保护系统。如果你仍然希望关闭防火墙，请按照以下步骤进行操作：</p>
<ol>
 <li>
  <p>打开终端以获取 root 权限（或使用 sudo）。</p>
 </li>
 <li>
  <p>检查你的系统上正在运行的防火墙服务。常见的防火墙服务包括 iptables、firewalld 等。你可以运行以下命令来检查当前正在运行的防火墙服务：</p>
  <p>对于 iptables：</p>
  <pre><code>sudo service iptables status
</code></pre>
  <p>对于 firewalld：</p>
  <pre><code>sudo systemctl status firewalld
</code></pre>
  <p>这将显示防火墙服务的状态信息。</p>
 </li>
 <li>
  <p>停止防火墙服务。根据你的系统上正在运行的防火墙服务，运行适当的命令来停止它。例如：</p>
  <p>对于 iptables：</p>
  <pre><code>sudo service iptables stop
</code></pre>
  <p>对于 firewalld：</p>
  <pre><code>sudo systemctl stop firewalld
</code></pre>
  <p>这将停止防火墙服务。</p>
 </li>
 <li>
  <p>禁用防火墙服务。运行适当的命令来禁用防火墙服务，以防止其在系统启动时自动启动。例如：</p>
  <p>对于 iptables：</p>
  <pre><code>sudo chkconfig iptables off
</code></pre>
  <p>对于 firewalld：</p>
  <pre><code>sudo systemctl disable firewalld
</code></pre>
  <p>这将禁用防火墙服务。</p>
 </li>
</ol>
<h2 id="日志">日志</h2>
<pre><code>/var/log/message：记录Linux操作系统常见的系统和服务错误信息
/var/log/boot.log：录了系统在引导过程中发生的事件，就是Linux系统开机自检过程显示的信息
/var/log/lastlog ：记录最后一次用户成功登陆的时间、登陆IP等信息（一般通过命令 lastlog 查看）
/var/log/secure ：Linux系统安全日志，记录用户和工作组变坏情况、用户登陆认证情况
/var/log/btmp ：记录Linux登陆失败的用户、时间以及远程IP地址(lastbm)
/var/log/wtmp：该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件，使用last命令查看
</code></pre>
<p>auth pam 产生的日志</p>
<p>authpriv ssh，ftp 等登录信息的验证信息</p>
<p>cron 时间任务相关</p>
<p>kern 内核</p>
<p>lpr 打印</p>
<p>mail 邮件</p>
<p>mark(syslog)-rsyslog 服务内部的信息，时间标识</p>
<p>news 新闻组</p>
<p>user 用户程序产生的相关信息</p>
<p>日志级别分为：7种日志级别代号0-7</p>
<p>0 debug 有调试信息的，日志信息最多</p>
<p>1 info 一般信息的日志，最常用</p>
<p>2 notice 最具有重要性的普通条件的信息</p>
<p>3 warning 警告级别</p>
<p>4 err 错误级别，阻止某个功能或者模块不能正常工作的信息</p>
<p>5 crit 严重级别，阻止整个系统或者整个软件不能工作的信息</p>
<p>6 alert 需要立刻修改的信息</p>
<p>7 emerg 内核崩溃等严重信息</p>
<p>none 什么都不记录</p>
<p><strong>rsyslog</strong>
 <br>
 rsyslog 是一个功能强大的日志服务，广泛用于许多Linux发行版中。它可以接收来自各种来源的日志消息，并将它们写入适当的日志文件。以下是一些关于 rsyslog 的重要信息：</p>
<ol>
 <li>
  <p><strong>配置文件</strong>：rsyslog 的主要配置文件是 <code>/etc/rsyslog.conf</code>。在该文件中，您可以定义日志消息的接收方式、过滤规则、目标文件以及其他行为。此外，您还可以使用 <code>/etc/rsyslog.d/</code> 目录下的额外配置文件来进一步定制 rsyslog。</p>
 </li>
 <li>
  <p><strong>日志文件</strong>：rsyslog 可以将日志消息写入不同的日志文件。常见的日志文件包括 <code>/var/log/messages</code>、<code>/var/log/syslog</code>、<code>/var/log/auth.log</code> 等。您可以根据需要在配置文件中指定不同的目标文件。</p>
 </li>
 <li>
  <p><strong>过滤规则</strong>：rsyslog 允许您使用过滤规则来选择性地处理日志消息。您可以根据消息的优先级、来源IP、设备名称等条件进行过滤。过滤规则可以帮助您将日志消息分类、转发到不同的文件或远程服务器。</p>
 </li>
 <li>
  <p><strong>远程日志记录</strong>：rsyslog 支持将日志消息转发到远程服务器。您可以配置 rsyslog 以将特定类型的日志消息发送到远程服务器以进行集中管理和分析。</p>
 </li>
 <li>
  <p><strong>模块和插件</strong>：rsyslog 提供了各种模块和插件，可以扩展其功能。例如，您可以使用 omfile 模块将日志消息写入到其他类型的文件（如数据库），使用 ommail 模块将日志消息发送到电子邮件，使用 omstdout 模块将日志消息输出到标准输出等。</p>
 </li>
 <li>
  <p><strong>工具和命令</strong>：rsyslog 提供了一些工具和命令来管理和查询日志消息。例如，您可以使用 <code>rsyslogd</code> 命令启动和停止 rsyslog 服务，使用 <code>logger</code> 命令手动发送日志消息，使用 <code>rsyslog.conf</code> 命令检查配置文件的语法等。</p>
 </li>
</ol>
<p>vim /etc/rsyslog.conf
 <br>
 日志对象(设备):你要对什么东东做日志
 <br>
 日志级别:级别越低，信息越多
 <br>
 日志文件:存储日志的文件</p>
<pre><code>日志对象.日志级别	日志文件
.  大于或者等于后面指定的日志级别
.= 等于后面指定的日志级别
.! 非

例：
*.* 				    		/var/log/mylog
kern.err 						/var/log/kernel.log
*.info;mail.none    /var/log/big.log
mail.info						/var/log/mail.log
cron.info;cron.!err /var/log/newcron
cron.info   				/var/log/newcron
</code></pre>
<h3 id="41日志轮转">4.1、日志轮转</h3>
<pre><code>vim /etc/logrotate.conf
	//全局配置
	weekly     轮转周期    默认一周轮转一次
	rotate 4    轮转次数    默认轮转4次
	create		创建新文件
	dateext	以轮转时刻的时间作为轮转文件的结尾
	//局部配置
	include /etc/logrotate.d
	missingok   在文件不存在的时候也不报错
	create 0644 root utmp
</code></pre>
<p><strong>强制轮转</strong></p>
<pre><code>logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
</code></pre>
<blockquote>
 <p>测试日志轮转，轮转文件/var/log/yum.log
  <br>
  vim /etc/logrotate.d/yum
  <br>
  /var/log/yum.log {
  <br>
  missingok
  <br>
  notifempty
  <br>
  size 30k
  <br>
  yearly
  <br>
  daily
  <br>
  rotate 3
  <br>
  create 0777 root root
  <br>
  }</p>
</blockquote>
<hr>
<blockquote>
 <p>测试：
  <br>
  logrotate /etc/logrotate.conf //手动轮转
  <br>
  ls /var/log/yum*
  <br>
  /var/log/yum.log /var/log/yum.log-20170331
  <br>
  grep 'yum' /var/lib/logrotate/logrotate.status //记录所有日志文件最近轮转的时间
  <br>
  "/var/log/yum.log" 2017-3-31-10:0:23</p>
</blockquote>
<p>date 09011000
 <br>
 logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
 <br>
 2. 日志安全，操作日志的隐藏权限</p>
<pre><code>/etc/logrotate.d/messages
建议测试时先把/etc/logrotate.d/syslog中messages删除
/var/log/messages {
    prerotate
       chattr -a /var/log/messages
    endscript

    #notifempty
    daily
	create 0600 root root
    missingok
   	rotate 5

    postrotate
        chattr +a /var/log/messages
    endscript
}
</code></pre>
<ol start="3">
 <li>为多个日志文件配置日志轮转</li>
</ol>
<pre><code>vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts   
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2&gt; /dev/null` 2&gt; /dev/null || true
    endscript
}
</code></pre>]]></description><guid isPermaLink="false">/archives/149</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Wed, 2 Aug 2023 15:28:00 GMT</pubDate></item><item><title><![CDATA[关于最近的机场测速]]></title><link>https://7boe.top/archives/148</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E5%85%B3%E4%BA%8E%E6%9C%80%E8%BF%91%E7%9A%84%E6%9C%BA%E5%9C%BA%E6%B5%8B%E9%80%9F&amp;url=/archives/148" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E8%BF%99%E6%AE%B5%E6%97%B6%E9%97%B4%E7%9A%84%E6%9C%BA%E5%9C%BA%E6%B5%8B%E9%80%9F" tabindex="-1">这段时间的机场测速</h1>
<blockquote>
 <p>是我之前用过的几家比较不错的，这几天毒药更新了测速图，我把几个比较常见不错的机场图片搬过来看一下
  <br>
  因为没有钱不可能我每家机场都去买一个测速一下/(ㄒoㄒ)/~~</p>
</blockquote>
<h2 id="mesl" tabindex="-1">MESL</h2>
<p>现在这家的机场套餐变更成这样了
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F27%2F64c1e70bb69f4.png&amp;size=m" alt="">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F27%2F64c1e70d9e139.png&amp;size=m" alt=""></p>
<p>官网链接:<a href="https://in.mesl.cloud/#/register?code=aDX1y0rM" target="_blank">邀请链接</a></p>
<p><strong>联通测速：</strong>
 <br>
 <strong>（联通 2023.07.18 晚8点半测速）</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuyaoSS%2FPic%2Fassets%2F34016863%2F4d1373ec-67b6-4b79-8211-2f5da9ab389a&amp;size=m" alt=""></p>
<h2 id="flyingbird" tabindex="-1">FlyingBird</h2>
<blockquote>
 <p>买了好几次，反正就是便宜速度快。</p>
</blockquote>
<p>官网:<a href="https://fbaff01.flyb-aff01.com/auth/register?code=ovWT" target="_blank">飞鸟官网</a>
 <br>
 <strong>现在他家的套餐是这样</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F27%2F64c1e8087c76e.png&amp;size=m" alt=""></p>
<p><strong>联通测速：</strong>
 <br>
 <strong>（联通 2023.07.22 晚9点半测速）</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuyaoSS%2FPic%2Fassets%2F34016863%2F80fc9c1b-cbb9-4a60-8642-abc4e1778bca&amp;size=m" alt=""></p>
<h2 id="%E7%99%BD%E6%9C%88%E5%85%89" tabindex="-1">白月光</h2>
<blockquote>
 <p>这个机场算是高端系列的了，他家有一个三给月套餐比较划算。</p>
</blockquote>
<p>官网:<a href="https://ss.cn88.net/#/register?code=HKUFhYCg" target="_blank">白月光官网</a></p>
<p>他家的常用套餐
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F27%2F64c1f2c4c8161.png&amp;size=m" alt="">
 <br>
 <strong>联通测速：</strong>
 <br>
 <strong>（联通 2023.07.21 晚9点半测速）</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuyaoSS%2FPic%2Fassets%2F34016863%2F4556c707-3bc8-4f15-b162-fed7cd91e53e&amp;size=m" alt=""></p>
<h2 id="%E5%BA%93%E6%B4%9B%E7%B1%B3kuromis" tabindex="-1">库洛米Kuromis</h2>
<blockquote>
 <p>大的来了，这是高端机场里top级别的，看测速图就有数了。</p>
</blockquote>
<p>官网:<a href="https://bit.ly/3zkouvZ" target="_blank">库洛米官网</a></p>
<p>套餐有4个系列，这里是展示3个企业套餐太贵，就没放图片了</p>
<p><strong>联通测速：</strong>
 <br>
 <strong>（联通 2023.07.07 晚8点半测速）</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuyaoSS%2FPic%2Fassets%2F34016863%2F57b507f6-b001-4703-a2b0-b4d555435d6a&amp;size=m" alt=""></p>
<blockquote>
 <p>这里图片均来自与<a href="https://www.duyaoss.com/" target="_blank">毒药</a>因为他网站被中国大陆地区无法访问，故此搬运。</p>
</blockquote>]]></description><guid isPermaLink="false">/archives/148</guid><dc:creator>Celia</dc:creator><category>机场测速</category><category>技术分类</category><pubDate>Thu, 27 Jul 2023 04:26:35 GMT</pubDate></item><item><title><![CDATA[免费的.link域名注册]]></title><link>https://7boe.top/archives/147</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E5%85%8D%E8%B4%B9%E7%9A%84.link%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C&amp;url=/archives/147" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E5%85%8D%E8%B4%B9%E5%9F%9F%E5%90%8D" tabindex="-1">免费域名</h1>
<p>白嫖谁不爱
 <br>
 链接在这里<a href="https://www.dynadot.com/register-your-free-link-domain" target="_blank">免费注册.link</a></p>
<h2 id="%E6%B3%A8%E5%86%8C" tabindex="-1">注册</h2>
<p>点进去链接直接查询想注册的域名就行了</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c07efd69c67.png&amp;size=m" alt=""></p>
<p>被注册底下会提示
 <br>
 <strong>celia.link is taken</strong></p>
<p><strong>看到底下为绿色就可以注册了，然后点next</strong></p>
<h2 id="%E8%B4%A6%E5%8F%B7%E6%B3%A8%E5%86%8C" tabindex="-1">账号注册</h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c07fc6b8aec.png&amp;size=m" alt=""></p>
<p>然后邮箱验证几个验证链接邮件都点击一下，需要你用他那个链接进行登录
 <br>
 登录进来要设置一个验证问题以及生日，尽量好记得</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c08195c1332.png&amp;size=m" alt=""></p>
<p>解锁后才可以设置dns服务器</p>
<h2 id="%E8%BD%AC%E7%A7%BB%E5%88%B0cloudflare" tabindex="-1">转移到cloudflare</h2>
<blockquote>
 <p>为什么要用cloudflare？
  <br>
  这个网站可以帮忙设置解析，方便管理，国内访问也快，有简体中文支持，对你的域名还可以加密以及免费的cdn，还有免费的通配符域名，为什么不用呢？？？</p>
</blockquote>
<p>官方链接<a href="https://7boe.top/cloudflare.com" target="_blank">cloudflare</a></p>
<p>这个账号注册不要说了，简单的很。</p>
<h2 id="%E8%AE%BE%E7%BD%AEcloudflare" tabindex="-1">设置cloudflare</h2>
<p><strong>添加站点</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c08292d60f4.png&amp;size=m" alt=""></p>
<p>输入域名添加
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c0830c21f87.png&amp;size=m" alt=""></p>
<p>选择免费计划
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c0833b10361.png&amp;size=m" alt=""></p>
<p>然后设置dns之前网站上面设置过来，就不用回去设置了。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c0840673bb9.png&amp;size=m" alt=""></p>
<p>然后等一会就接管你的域名了
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F26%2F64c08405b1912.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/147</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Wed, 26 Jul 2023 02:26:14 GMT</pubDate></item><item><title><![CDATA[Jenkins的安装以及使用]]></title><link>https://7boe.top/archives/145</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Jenkins%E7%9A%84%E5%AE%89%E8%A3%85%E4%BB%A5%E5%8F%8A%E4%BD%BF%E7%94%A8&amp;url=/archives/145" width="1" height="1" alt="" style="opacity:0;">
<h1 id="jenkins" tabindex="-1">Jenkins</h1>
<h1 id="%E5%85%B3%E4%BA%8Ejenkins" tabindex="-1">关于Jenkins</h1>
<blockquote>
 <p>Jenkins 是一个开源的自动化构建和持续集成工具，它可以帮助开发团队自动化构建、测试和部署软件项目。以下是关于 Jenkins 的一些常见问题和信息：</p>
</blockquote>
<p><strong>什么是 Jenkins？</strong></p>
<ul>
 <li>Jenkins 是一个用于构建、测试和部署软件项目的自动化工具。它提供了一个可扩展的插件生态系统，可以与各种开发、测试和部署工具集成。</li>
</ul>
<p><strong>Jenkins 的主要功能是什么？</strong></p>
<blockquote>
 <p>Jenkins 的主要功能包括：</p>
</blockquote>
<ul>
 <li>自动化构建：通过定义构建任务和触发器，可以自动构建软件项目。</li>
 <li>持续集成：将开发人员的代码变更集成到共享代码库，并自动进行构建和测试。</li>
 <li>测试和部署：可以执行各种测试任务，并将构建的软件部署到目标环境。</li>
 <li>监控和报告：提供实时监控和报告功能，以便开发团队了解构建和部署的状态。</li>
</ul>
<p><strong>Jenkins 的优势是什么？</strong></p>
<blockquote>
 <p>Jenkins 的优势包括：</p>
</blockquote>
<ul>
 <li>开源和免费：Jenkins 是一个开源项目，可以免费使用和定制。</li>
 <li>可扩展性：Jenkins 提供了丰富的插件生态系统，可以根据需要集成各种工具和技术。</li>
 <li>大型社区支持：Jenkins 拥有庞大的用户社区，提供了丰富的文档、教程和支持资源。</li>
 <li>可定制性：Jenkins 允许用户根据自己的需求和工作流程进行定制和配置。</li>
 <li>强大的插件生态系统：Jenkins 的插件生态系统提供了各种功能和集成选项，可以满足不同项目的需求。</li>
</ul>
<p><strong>Jenkins 如何工作？</strong>
 <br>
 Jenkins 是基于 Java 的应用程序，它通过监听代码库的变更或定期触发构建任务来工作。当触发条件满足时，Jenkins 会执行预定义的构建脚本或命令，进行代码编译、测试和部署等操作。</p>
<p><strong>如何安装和配置 Jenkins？</strong>
 <br>
 Jenkins 可以在各种操作系统上安装，包括 Windows、Linux 和 macOS。你可以从 Jenkins 官方网站下载适用于你的操作系统的安装程序，并按照安装向导进行安装和配置。</p>
<p><strong>Jenkins 的插件是什么？</strong>
 <br>
 Jenkins 的插件是扩展工具，可以增加 Jenkins 的功能和集成选项。插件可以用于与各种开发、构建、测试和部署工具集成，例如 Git、Maven、Docker 等。</p>
<h2 id="jenkins%E7%9A%84%E5%AE%89%E8%A3%85" tabindex="-1">Jenkins的安装</h2>
<blockquote>
 <p>在 CentOS 和 Debian 系统上安装 Jenkins 的步骤有所不同。下面分别介绍在 CentOS 和 Debian 系统上安装 Jenkins 的方法</p>
</blockquote>
<h3 id="centos" tabindex="-1">Centos</h3>
<p><strong>在 CentOS 系统上安装 Jenkins：</strong></p>
<ol>
 <li>
  <p>更新系统软件包：</p>
  <pre><code class="language-bash">sudo yum update
</code></pre>
 </li>
 <li>
  <p>添加 Jenkins 软件包的仓库密钥：</p>
  <pre><code class="language-bash">sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
</code></pre>
 </li>
 <li>
  <p>添加 Jenkins 软件包的仓库：</p>
  <pre><code class="language-bash">sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
</code></pre>
 </li>
 <li>
  <p>安装 Jenkins：</p>
  <pre><code class="language-bash">sudo yum install jenkins
</code></pre>
 </li>
 <li>
  <p>启动 Jenkins 服务：</p>
  <pre><code class="language-bash">sudo systemctl start jenkins
</code></pre>
 </li>
 <li>
  <p>设置 Jenkins 服务开机自启动：</p>
  <pre><code class="language-bash">sudo systemctl enable jenkins
</code></pre>
 </li>
 <li>
  <p>验证 Jenkins 服务是否正在运行：</p>
  <pre><code class="language-bash">sudo systemctl status jenkins
</code></pre>
 </li>
 <li>
  <p>打开 Web 浏览器，访问 <code>http://your_server_ip:8080</code>，将 <code>your_server_ip</code> 替换为你的服务器 IP 地址。按照屏幕上的指示完成 Jenkins 的初始设置。</p>
 </li>
</ol>
<h3 id="debian" tabindex="-1">Debian</h3>
<p><strong>在 Debian 系统上安装 Jenkins：</strong></p>
<ol>
 <li>
  <p>更新系统软件包：</p>
  <pre><code class="language-bash">sudo apt update
</code></pre>
 </li>
 <li>
  <p>添加 Jenkins 软件包的仓库密钥：</p>
  <pre><code class="language-bash">wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
</code></pre>
 </li>
 <li>
  <p>添加 Jenkins 软件包的仓库：</p>
  <pre><code class="language-bash">sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ &gt; /etc/apt/sources.list.d/jenkins.list'
</code></pre>
 </li>
 <li>
  <p>更新软件包列表：</p>
  <pre><code class="language-bash">sudo apt update
</code></pre>
 </li>
 <li>
  <p>安装 Jenkins：</p>
  <pre><code class="language-bash">sudo apt install jenkins
</code></pre>
 </li>
 <li>
  <p>启动 Jenkins 服务：</p>
  <pre><code class="language-bash">sudo systemctl start jenkins
</code></pre>
 </li>
 <li>
  <p>设置 Jenkins 服务开机自启动：</p>
  <pre><code class="language-bash">sudo systemctl enable jenkins
</code></pre>
 </li>
 <li>
  <p>验证 Jenkins 服务是否正在运行：</p>
  <pre><code class="language-bash">sudo systemctl status jenkins
</code></pre>
 </li>
 <li>
  <p>打开 Web 浏览器，访问 <code>http://your_server_ip:8080</code>，将 <code>your_server_ip</code> 替换为你的服务器 IP 地址。按照屏幕上的指示完成 Jenkins 的初始设置。</p>
 </li>
</ol>
<h3 id="java%E9%83%A8%E7%BD%B2" tabindex="-1">Java部署</h3>
<p>如果你是从 Jenkins 的官方网站下载的 Jenkins 软件包，你可以按照以下步骤启动 Jenkins：</p>
<ol>
 <li>
  <p>下载 Jenkins 软件包：</p>
  <ul>
   <li>访问 Jenkins 的官方网站：<a href="https://www.jenkins.io/" target="_blank">https://www.jenkins.io/</a></li>
   <li>点击 “Download”（下载）链接。</li>
   <li>根据你的操作系统选择适当的软件包进行下载。</li>
  </ul>
 </li>
 <li>
  <p>安装 Jenkins 软件包：</p>
  <ul>
   <li>如果你下载的是 Windows 上的安装程序（<code>.msi</code> 文件），双击运行安装程序并按照安装向导进行安装。</li>
   <li>如果你下载的是其他操作系统的软件包（例如 <code>.war</code> 文件），你需要通过命令行安装。</li>
  </ul>
 </li>
 <li>
  <p>启动 Jenkins：</p>
  <ul>
   <li>对于 Windows 用户，你可以在开始菜单中找到 Jenkins，并启动它。</li>
   <li>对于 Linux 或 macOS 用户，你可以通过命令行启动 Jenkins。打开终端，并导航到你安装 Jenkins 的目录。</li>
   <li>如果你下载的是 <code>.war</code> 文件，可以使用以下命令启动 Jenkins：
    <pre><code class="language-bash">java -jar jenkins.war
</code></pre></li>
   <li>如果你下载的是其他类型的软件包（例如 RPM 或 DEB），你需要根据对应的安装方式启动 Jenkins。可以参考软件包的文档或官方指南。</li>
  </ul>
 </li>
 <li>
  <p>等待 Jenkins 启动：</p>
  <ul>
   <li>一旦你启动了 Jenkins，它将在终端或命令行窗口中显示一些日志信息。</li>
   <li>当你看到类似 “Jenkins is fully up and running”（Jenkins 完全启动）的消息时，表示 Jenkins 已经成功启动。</li>
  </ul>
 </li>
 <li>
  <p>访问 Jenkins Web 界面：</p>
  <ul>
   <li>打开你的 Web 浏览器，并访问 <code>http://localhost:8080</code>。</li>
   <li>如果你在本地启动 Jenkins，则可以使用 <code>localhost</code> 作为服务器地址。</li>
   <li>如果你在远程服务器上启动 Jenkins，则需要使用相应的服务器 IP 地址或域名。</li>
  </ul>
 </li>
 <li>
  <p>完成 Jenkins 的初始设置：</p>
  <ul>
   <li>在首次访问 Jenkins 时，它将提示你提供一个初始管理员密码。</li>
   <li>你可以在 Jenkins 启动日志中找到这个密码，并将其输入到 Web 界面中。</li>
   <li>按照屏幕上的指示完成 Jenkins 的初始设置。</li>
  </ul>
 </li>
</ol>
<p>这些是使用官方网站下载的 Jenkins 软件包启动 Jenkins 的一般步骤。根据你的操作系统和软件包类型，可能会有一些细微的差异。请参考相应的文档和指南，以获得更具体的安装和启动说明。</p>
<h3 id="docker%E9%83%A8%E7%BD%B2" tabindex="-1">Docker部署</h3>
<blockquote>
 <p>要使用 Docker 部署 Jenkins，你可以按照以下步骤进行操作：</p>
</blockquote>
<ol>
 <li>
  <p>安装 Docker：</p>
  <ul>
   <li>根据你的操作系统，安装适用于 Docker 的版本。可以参考 Docker 官方文档进行安装：<a href="https://docs.docker.com/get-docker/" target="_blank">https://docs.docker.com/get-docker/</a></li>
  </ul>
 </li>
 <li>
  <p>创建 Jenkins 数据目录：</p>
  <ul>
   <li>在你的主机上创建一个目录，用于存储 Jenkins 的数据。这个目录将用于持久化 Jenkins 的配置和插件等数据。例如，可以创建一个名为 <code>jenkins_home</code> 的目录。</li>
  </ul>
 </li>
 <li>
  <p>启动 Jenkins 容器：</p>
  <ul>
   <li>打开终端或命令行窗口，并使用以下命令启动 Jenkins 容器：
    <pre><code class="language-bash">docker run -d -p 8080:8080 -p 50000:50000 -v /path/to/jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts
</code></pre>
    <ul>
     <li><code>-d</code>：以后台模式运行容器。</li>
     <li><code>-p 8080:8080</code>：将容器的 8080 端口映射到主机的 8080 端口，用于访问 Jenkins Web 界面。</li>
     <li><code>-p 50000:50000</code>：将容器的 50000 端口映射到主机的 50000 端口，用于构建代理通信。</li>
     <li><code>-v /path/to/jenkins_home:/var/jenkins_home</code>：将主机上的 <code>jenkins_home</code> 目录挂载到容器的 <code>/var/jenkins_home</code> 目录，用于持久化 Jenkins 数据。</li>
     <li><code>--name jenkins</code>：指定容器的名称为 “jenkins”。</li>
     <li><code>jenkins/jenkins:lts</code>：使用 Jenkins 的 LTS 版本镜像。你也可以使用其他版本的镜像，根据你的需求进行调整。</li>
    </ul></li>
  </ul>
 </li>
 <li>
  <p>等待 Jenkins 启动：</p>
  <ul>
   <li>当容器启动后，Jenkins 将会运行在容器内部。</li>
   <li>使用以下命令检查容器的状态：
    <pre><code class="language-bash">docker ps
</code></pre>
    <ul>
     <li>如果容器状态为 “Up”，表示 Jenkins 已经成功启动。</li>
    </ul></li>
  </ul>
 </li>
 <li>
  <p>访问 Jenkins Web 界面：</p>
  <ul>
   <li>打开你的 Web 浏览器，并访问 <code>http://localhost:8080</code>。</li>
   <li>如果你在本地启动 Jenkins，则可以使用 <code>localhost</code> 作为服务器地址。</li>
   <li>如果你在远程服务器上启动 Jenkins，则需要使用相应的服务器 IP 地址或域名。</li>
  </ul>
 </li>
 <li>
  <p>完成 Jenkins 的初始设置：</p>
  <ul>
   <li>在首次访问 Jenkins 时，它将提示你提供一个初始管理员密码。</li>
   <li>可以使用以下命令从容器内部获取这个密码：
    <pre><code class="language-bash">docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
</code></pre></li>
   <li>将获取到的密码输入到 Web 界面中，按照屏幕上的指示完成 Jenkins 的初始设置。</li>
  </ul>
 </li>
</ol>
<p>这些是使用 Docker 部署 Jenkins 的一般步骤。你可以根据需要进行适当的调整和配置。请注意，这里使用的是 Jenkins 的官方镜像，你也可以使用其他适合的镜像。</p>
<h2 id="%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">配置文件</h2>
<p>在 Jenkins 安装后，你可能需要修改以下配置文件来进行一些常见的配置：</p>
<ol>
 <li>
  <p><code>jenkins.xml</code>（Windows）或 <code>jenkins.service</code>（Linux）：</p>
  <ul>
   <li>这些文件用于配置 Jenkins 服务的启动参数、JVM 参数等。你可以根据需要修改这些参数，例如调整内存限制、监听的端口等。</li>
   <li>在 Windows 上，<code>jenkins.xml</code> 文件通常位于 Jenkins 的安装目录下。</li>
   <li>在 Linux 上，<code>jenkins.service</code> 文件通常位于 <code>/etc/systemd/system</code> 目录下。</li>
  </ul>
 </li>
 <li>
  <p><code>config.xml</code>：</p>
  <ul>
   <li><code>config.xml</code> 是 Jenkins 的主要配置文件，包含了全局配置和各个作业（Job）的配置。</li>
   <li>你可以通过编辑 <code>config.xml</code> 文件来修改 Jenkins 的全局配置，例如邮件通知设置、构建环境变量、代理设置等。</li>
   <li><code>config.xml</code> 文件通常位于 Jenkins 的数据目录下，可以在 Jenkins Web 界面中找到该目录的路径。</li>
  </ul>
 </li>
 <li>
  <p><code>credentials.xml</code>：</p>
  <ul>
   <li><code>credentials.xml</code> 文件用于存储 Jenkins 的凭据信息，例如用户名和密码、API 密钥等。</li>
   <li>你可以通过编辑 <code>credentials.xml</code> 文件来添加、修改或删除 Jenkins 的凭据。</li>
   <li><code>credentials.xml</code> 文件通常位于 Jenkins 的数据目录下。</li>
  </ul>
 </li>
</ol>
<p>这些是一些常见的 Jenkins 配置文件示例。根据你的具体需求和使用情况，可能还有其他配置文件需要进行修改。请注意，在修改配置文件之前，建议先备份原始文件，以防止意外情况发生。此外，对于某些配置更改，可能需要重启 Jenkins 服务才能使更改生效。</p>]]></description><guid isPermaLink="false">/archives/145</guid><dc:creator>Celia</dc:creator><category>Docker</category><category>技术分类</category><pubDate>Tue, 25 Jul 2023 05:53:11 GMT</pubDate></item><item><title><![CDATA[白月光机场评测]]></title><link>https://7boe.top/archives/146</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E7%99%BD%E6%9C%88%E5%85%89%E6%9C%BA%E5%9C%BA%E8%AF%84%E6%B5%8B&amp;url=/archives/146" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E7%99%BD%E6%9C%88%E5%85%89" tabindex="-1">白月光</h1>
<p><strong>白月光（中转机场）</strong></p>
<blockquote>
 <p>拿在手里也有段时间的一家机场了，测了很多次，效果还可以，所以放出来，BGP 入口 + IEPL 专线。
  <br>
  部分内容复制<a href="https://www.duyaoss.com/archives/10532/" target="_blank">毒药</a>
  <br>
  测速套餐采用66包季度套餐</p>
</blockquote>
<p>邀请码注册都有优惠哦<a href="https://ss.cn88.net/#/register?code=HKUFhYCg" target="_blank">邀请链接</a></p>
<p><strong>其他套餐情况：</strong></p>
<ul>
 <li>小包：66元/季，每月140G流量；132元/半年，264元/年；限制5个公网IP</li>
 <li>中包：84元/季，每月230G流量；168元/半年，336元/年；限制5个公网IP</li>
 <li>大包：120元/季，每月400G流量；240元/半年，480元/年；限制5个公网IP</li>
 <li>超大包：180元/季，每月750G流量；360元/半年，720元/年；限制5个公网IP</li>
 <li>不差钱：210元/季，每月900G流量；420元/半年，840元/年；限制5个公网IP</li>
 <li>旗舰包：2500元/年，每月2500G流量；5000元/2年；限制5个公网IP</li>
</ul>
<p>其他情况：</p>
<ul>
 <li>支持SS</li>
 <li>支付方式：支付宝+微信</li>
</ul>
<p><strong>入口落地分析</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuyaoSS%2FPic%2Fassets%2F34016863%2F4916cb15-91ba-4a55-80e2-f8fd0d7cf890&amp;size=m" alt="大图"></p>
<h2 id="%E9%AB%98%E5%B3%B0%E6%9C%9F%E6%B5%8B%E9%80%9F" tabindex="-1"><strong>高峰期测速</strong></h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F30%2F649ea1f29d68e.png&amp;size=m" alt=""></p>
<p><strong>下载后查看更清晰</strong></p>
<h2 id="%E6%9C%80%E8%BF%91%E6%B5%8B%E9%80%9F" tabindex="-1">最近测速</h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F07%2F06%2F64a6570748b07.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/146</guid><dc:creator>Celia</dc:creator><category>机场测速</category><category>技术分类</category><pubDate>Sun, 9 Jul 2023 04:18:21 GMT</pubDate></item><item><title><![CDATA[一些Nginx使用和Docker的使用命令和技巧]]></title><link>https://7boe.top/archives/144</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E4%B8%80%E4%BA%9BNginx%E4%BD%BF%E7%94%A8%E5%92%8CDocker%E7%9A%84%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%92%8C%E6%8A%80%E5%B7%A7&amp;url=/archives/144" width="1" height="1" alt="" style="opacity:0;">
<h1 id="nginx" tabindex="-1">NGINX</h1>
<p>对于这东西的理解也就是一个高性能web容器吧</p>
<h2 id="nginx%E8%BF%9B%E7%A8%8B%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86" tabindex="-1">NGINX进程工作原理</h2>
<p>NGINX 的进程工作原理可以简要描述为以下几个步骤：</p>
<ol>
 <li>
  <p>主进程启动：当 NGINX 服务启动时，一个主进程（通常是 <code>nginx</code> 进程）会被创建并开始执行。</p>
 </li>
 <li>
  <p>监听端口：主进程会打开配置文件指定的监听端口，并开始监听来自客户端的连接请求。</p>
 </li>
 <li>
  <p>创建工作进程：主进程会创建一定数量的工作进程（通常是 <code>nginx worker</code> 进程），这些工作进程将负责实际处理客户端请求。</p>
 </li>
 <li>
  <p>接收连接：主进程接收到客户端的连接请求后，会将连接分配给一个空闲的工作进程。</p>
 </li>
 <li>
  <p>处理请求：工作进程接收到连接后，开始处理客户端的请求。它会读取请求数据、解析请求头、执行相应的操作（例如返回静态文件、转发请求给后端服务器等）。</p>
 </li>
 <li>
  <p>并发处理：NGINX 的工作进程使用事件驱动的模型，在一个进程中可以同时处理多个并发连接，而不是为每个连接创建一个线程或进程。这种非阻塞的处理方式使得 NGINX 能够高效地处理大量的并发请求。</p>
 </li>
 <li>
  <p>响应返回：处理完客户端请求后，工作进程会生成相应的响应，并将响应返回给客户端。</p>
 </li>
 <li>
  <p>继续监听：工作进程处理完一个请求后，会继续监听新的连接，以便处理更多的请求。</p>
 </li>
 <li>
  <p>信号处理：主进程负责处理系统信号，例如重新加载配置文件、平滑重启等操作。通过发送信号给主进程，可以实现对 NGINX 的动态配置和管理。</p>
 </li>
</ol>
<p>NGINX 的进程模型采用了主进程和多个工作进程的设计，主进程负责管理工作进程、接收连接和处理信号，而工作进程则负责实际的请求处理。这种架构使得 NGINX 能够高效地处理并发请求，并具有良好的稳定性和可靠性。</p>
<h2 id="nginx%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86" tabindex="-1">NGINX工作原理</h2>
<blockquote>
 <p>NGINX 是一款高性能的开源 Web 服务器和反向代理服务器。它的工作原理可以概括为以下几个步骤：</p>
</blockquote>
<ol>
 <li>
  <p>监听端口：NGINX 在服务器上监听一个或多个指定的端口，通常是 80（HTTP）和 443（HTTPS）。</p>
 </li>
 <li>
  <p>接收请求：当客户端发送请求到 NGINX 的监听端口时，NGINX 接收到该请求。</p>
 </li>
 <li>
  <p>处理请求：NGINX 根据预先配置的规则，对请求进行处理。这包括匹配请求的 URL、请求方法、请求头等信息。</p>
 </li>
 <li>
  <p>静态文件处理：如果请求的是静态文件（例如 HTML、CSS、JavaScript、图像等），NGINX 可以直接返回这些文件给客户端，无需转发请求给后端应用服务器。</p>
 </li>
 <li>
  <p>反向代理：如果请求需要经过反向代理，NGINX 可以将请求转发给后端应用服务器处理。NGINX 作为反向代理服务器，可以根据负载均衡算法将请求分发给多个后端服务器，提高系统的性能和可靠性。</p>
 </li>
 <li>
  <p>处理响应：NGINX 接收到后端服务器的响应后，可以对响应进行处理，例如修改响应头、缓存响应内容等。</p>
 </li>
 <li>
  <p>返回响应：最后，NGINX 将处理后的响应返回给客户端。</p>
 </li>
</ol>
<p>NGINX 的高性能主要得益于其事件驱动的异步非阻塞架构。它使用少量的系统资源来处理大量的并发连接，具有出色的性能和可扩展性。此外，NGINX 还支持许多高级功能，如反向代理、负载均衡、SSL/TLS 加密、HTTP 缓存、动态模块等，使其成为一个强大而灵活的 Web 服务器和代理服务器。</p>
<p>关于配置文件</p>
<h2 id="nginx%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4" tabindex="-1">NGINX一些常用命令</h2>
<p>以下是一些常用的 NGINX 命令：</p>
<ol>
 <li>
  <p>启动 NGINX 服务：</p>
  <pre><code class="language-">sudo systemctl start nginx
</code></pre>
 </li>
 <li>
  <p>停止 NGINX 服务：</p>
  <pre><code class="language-">sudo systemctl stop nginx
</code></pre>
 </li>
 <li>
  <p>重新启动 NGINX 服务：</p>
  <pre><code class="language-">sudo systemctl restart nginx
</code></pre>
 </li>
 <li>
  <p>检查 NGINX 配置文件语法是否正确：</p>
  <pre><code class="language-">sudo nginx -t
</code></pre>
 </li>
 <li>
  <p>重新加载 NGINX 配置文件：</p>
  <pre><code class="language-">sudo systemctl reload nginx
</code></pre>
 </li>
 <li>
  <p>查看 NGINX 服务状态：</p>
  <pre><code class="language-">sudo systemctl status nginx
</code></pre>
 </li>
 <li>
  <p>查看 NGINX 日志文件：</p>
  <pre><code class="language-">sudo tail -f /var/log/nginx/error.log  # 错误日志
sudo tail -f /var/log/nginx/access.log  # 访问日志
</code></pre>
 </li>
 <li>
  <p>测试 NGINX 是否在监听指定的端口：</p>
  <pre><code class="language-">sudo netstat -tuln | grep 80  # 替换 80 为你想要检查的端口号
</code></pre>
 </li>
</ol>
<p>**
 <br>
 这些命令可以帮助你管理 NGINX 服务，启动、停止、重新加载配置文件以及查看日志和服务状态。请注意，根据你的系统配置，可能需要使用 <code>sudo</code> 或以 root 用户身份执行这些命令。**</p>
<h2 id="%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9" tabindex="-1">配置文件内容</h2>
<pre><code class="language-">user  www www;   #启动用户
worker_processes auto; 工作进程数量，默认自动
error_log  /www/wwwlogs/nginx_error.log  crit;   #一些错误日志啊
pid        /www/server/nginx/logs/nginx.pid;   #pid进程文件
worker_rlimit_nofile 51200;
    access_log /www/wwwlogs/tcp-access.log tcp_format;
    error_log /www/wwwlogs/tcp-error.log;
    include /www/server/panel/vhost/nginx/tcp/*.conf;   #匹配该文件夹下的其他配置文件
    
    上面是全局块
    
}
events
    {
        use epoll;
        worker_connections 51200;  #最大连接数
        multi_accept on;
    }
    上面是events块
    
http
    {
        include       mime.types;   #文件处理规则
        gzip on;  #压缩开启

http块内包括server块

server
    {
        listen 888;  #监听端口888
        server_name phpmyadmin;   #服务名，用于匹配到该站点
        index index.html index.htm index.php;  #匹配默认页面
        root  /www/server/phpmyadmin;  #网站路径
            location ~ /tmp/ {
                return 403;
            }

        access_log  /www/wwwlogs/access.log;  #网站日志
    }
include /www/server/panel/vhost/nginx/*.conf;   #匹配改文件夹下其他站点规则
}
</code></pre>
<h2 id="nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1" tabindex="-1">NGINX负载均衡</h2>
<p><strong>负载均衡配置写在http配置里面和server块里面好像都可以</strong>
 <br>
 以下是GPT写的一个示例</p>
<pre><code class="language-">http {
    upstream backend {  #这是负载均衡服务器模块，后面是组名可以自定义
        server 127.0.0.1:8080;    #这是加入的服务器，可以设置程成域名
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    server {
        listen 8080;
        server_name 127.0.0.1;

        location / {
            root /www/fzjh1;
            index index.html;
        }
    }

    server {
        listen 8081;
        server_name 127.0.0.1;

        location / {
            root /www/fzjh2;
            index index.html;
        }
    }

    server {
        listen 8082;
        server_name 127.0.0.1;

        location / {
            root /www/fzjh3;
            index index.html;
        }
    }
}
</code></pre>
<h2 id="nginx%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85" tabindex="-1">NGINX编译安装</h2>
<p>安装依赖以及编译环境</p>
<pre><code class="language-">apt install gcc openssl libssl-dev  libpcre3 libpcre3-dev  zlib1g-dev
</code></pre>
<p>生产编译文件，可添加模块</p>
<pre><code class="language-">./configure  --prefix=/usr/local/nginx --with-stream

</code></pre>
<p>编译以及安装</p>
<pre><code class="language-">make &amp; make install
</code></pre>
<h2 id="nginx%E7%BC%96%E8%AF%91%E5%8F%82%E6%95%B0" tabindex="-1">nginx编译参数</h2>
<p>–prefix= 指向安装目录</p>
<p>–sbin-path 指向（执行）程序文件（nginx）</p>
<p>–conf-path= 指向配置文件（nginx.conf）</p>
<p>–error-log-path= 指向错误日志目录</p>
<p>–pid-path= 指向pid文件（nginx.pid）</p>
<p>–lock-path= 指向lock文件（nginx.lock）（安装文件锁定，防止安装文件被别人利用，或自己误操作。）</p>
<p>–user= 指定程序运行时的非特权用户</p>
<p>–group= 指定程序运行时的非特权用户组</p>
<p>–builddir= 指向编译目录</p>
<p>–with-rtsig_module 启用rtsig模块支持（实时信号）</p>
<p>–with-select_module 启用select模块支持（一种轮询模式,不推荐在高载环境下使用）禁用：–without-select_module</p>
<p>–with-poll_module 启用poll模块支持（功能与select相同，与select特性相同，为一种轮询模式,不推荐在高载环境下使用）</p>
<p>–with-file-aio 启用file aio支持（一种APL文件传输格式）</p>
<p>–with-ipv6 启用ipv6支持</p>
<p>–with-http_ssl_module 启用ngx_http_ssl_module支持（使支持https请求，需已安装openssl）</p>
<p>–with-http_realip_module 启用ngx_http_realip_module支持（这个模块允许从请求标头更改客户端的IP地址值，默认为关）</p>
<p>–with-http_addition_module 启用ngx_http_addition_module支持（作为一个输出过滤器，支持不完全缓冲，分部分响应请求）</p>
<p>–with-http_xslt_module 启用ngx_http_xslt_module支持（过滤转换XML请求）</p>
<p>–with-http_image_filter_module 启用ngx_http_image_filter_module支持（传输JPEG/GIF/PNG 图片的一个过滤器）（默认为不启用。gd库要用到）</p>
<p>–with-http_geoip_module 启用ngx_http_geoip_module支持（该模块创建基于与MaxMind GeoIP二进制文件相配的客户端IP地址的ngx_http_geoip_module变量）</p>
<p>–with-http_sub_module 启用ngx_http_sub_module支持（允许用一些其他文本替换nginx响应中的一些文本）</p>
<p>–with-http_dav_module 启用ngx_http_dav_module支持（增加PUT,DELETE,MKCOL：创建集合,COPY和MOVE方法）默认情况下为关闭，需编译开启</p>
<p>–with-http_flv_module 启用ngx_http_flv_module支持（提供寻求内存使用基于时间的偏移量文件）</p>
<p>–with-http_gzip_static_module 启用ngx_http_gzip_static_module支持（在线实时压缩输出数据流）</p>
<p>–with-http_random_index_module 启用ngx_http_random_index_module支持（从目录中随机挑选一个目录索引）</p>
<p>–with-http_secure_link_module 启用ngx_http_secure_link_module支持（计算和检查要求所需的安全链接网址）</p>
<p>–with-http_degradation_module 启用ngx_http_degradation_module支持（允许在内存不足的情况下返回204或444码）</p>
<p>–with-http_stub_status_module 启用ngx_http_stub_status_module支持（获取nginx自上次启动以来的工作状态）</p>
<p>–without-http_charset_module 禁用ngx_http_charset_module支持（重新编码web页面，但只能是一个方向–服务器端到客户端，并且只有一个字节的编码可以被重新编码）</p>
<p>–without-http_gzip_module 禁用ngx_http_gzip_module支持（该模块同-with-http_gzip_static_module功能一样）</p>
<p>–without-http_ssi_module 禁用ngx_http_ssi_module支持（该模块提供了一个在输入端处理处理服务器包含文件（SSI）的过滤器，目前支持SSI命令的列表是不完整的）</p>
<p>–without-http_userid_module 禁用ngx_http_userid_module支持（该模块用来处理用来确定客户端后续请求的cookies）</p>
<p>–without-http_access_module 禁用ngx_http_access_module支持（该模块提供了一个简单的基于主机的访问控制。允许/拒绝基于ip地址）</p>
<p>–without-http_auth_basic_module禁用ngx_http_auth_basic_module（该模块是可以使用用户名和密码基于http基本认证方法来保护你的站点或其部分内容）</p>
<p>–without-http_autoindex_module 禁用disable ngx_http_autoindex_module支持（该模块用于自动生成目录列表，只在ngx_http_index_module模块未找到索引文件时发出请求。）</p>
<p>–without-http_geo_module 禁用ngx_http_geo_module支持（创建一些变量，其值依赖于客户端的IP地址）</p>
<p>–without-http_map_module 禁用ngx_http_map_module支持（使用任意的键/值对设置配置变量）</p>
<p>–without-http_split_clients_module 禁用ngx_http_split_clients_module支持（该模块用来基于某些条件划分用户。条件如：ip地址、报头、cookies等等）</p>
<p>–without-http_referer_module 禁用disable ngx_http_referer_module支持（该模块用来过滤请求，拒绝报头中Referer值不正确的请求）</p>
<p>–without-http_rewrite_module 禁用ngx_http_rewrite_module支持（该模块允许使用正则表达式改变URI，并且根据变量来转向以及选择配置。如果在server级别设置该选项，那么他们将在 location之前生效。如果在location还有更进一步的重写规则，location部分的规则依然会被执行。如果这个URI重写是因为location部分的规则造成的，那么 location部分会再次被执行作为新的URI。 这个循环会执行10次，然后Nginx会返回一个500错误。）</p>
<p>–without-http_proxy_module 禁用ngx_http_proxy_module支持（有关代理服务器）</p>
<p>–without-http_fastcgi_module 禁用ngx_http_fastcgi_module支持（该模块允许Nginx 与FastCGI 进程交互，并通过传递参数来控制FastCGI 进程工作。 ）FastCGI一个常驻型的公共网关接口。</p>
<p>–without-http_uwsgi_module 禁用ngx_http_uwsgi_module支持（该模块用来医用uwsgi协议，uWSGI服务器相关）</p>
<p>–without-http_scgi_module 禁用ngx_http_scgi_module支持（该模块用来启用SCGI协议支持，SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计 更容易实现。）</p>
<p>–without-http_memcached_module 禁用ngx_http_memcached_module支持（该模块用来提供简单的缓存，以提高系统效率）</p>
<p>-without-http_limit_zone_module 禁用ngx_http_limit_zone_module支持（该模块可以针对条件，进行会话的并发连接数控制）</p>
<p>–without-http_limit_req_module 禁用ngx_http_limit_req_module支持（该模块允许你对于一个地址进行请求数量的限制用一个给定的session或一个特定的事件）</p>
<p>–without-http_empty_gif_module 禁用ngx_http_empty_gif_module支持（该模块在内存中常驻了一个1*1的透明GIF图像，可以被非常快速的调用）</p>
<p>–without-http_browser_module 禁用ngx_http_browser_module支持（该模块用来创建依赖于请求报头的值。如果浏览器为modern ，则<span class="katex"><span class="katex-mathml">
   <math xmlns="http://www.w3.org/1998/Math/MathML">
    <semantics>
     <mrow><mi>m</mi><mi>o</mi><mi>d</mi><mi>e</mi><mi>r</mi><msub><mi>n</mi><mi>b</mi></msub><mi>r</mi><mi>o</mi><mi>w</mi><mi>s</mi><mi>e</mi><mi>r</mi><mtext>等于</mtext><mi>m</mi><mi>o</mi><mi>d</mi><mi>e</mi><mi>r</mi><msub><mi>n</mi><mi>b</mi></msub><mi>r</mi><mi>o</mi><mi>w</mi><mi>s</mi><mi>e</mi><msub><mi>r</mi><mi>v</mi></msub><mi>a</mi><mi>l</mi><mi>u</mi><mi>e</mi><mtext>指令分配的值；如果浏览器为</mtext><mi>o</mi><mi>l</mi><mi>d</mi><mtext>，则</mtext></mrow><annotation encoding="application/x-tex">modern_browser等于modern_browser_value指令分配的值；如 果浏览器为old，则</annotation>
    </semantics>
   </math>
  </span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="mord mathnormal">m</span><span class="mord mathnormal">o</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.33610799999999996em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">o</span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal">s</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord cjk_fallback">等</span><span class="mord cjk_fallback">于</span><span class="mord mathnormal">m</span><span class="mord mathnormal">o</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.33610799999999996em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">o</span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal">s</span><span class="mord mathnormal">e</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.151392em;"><span style="top:-2.5500000000000003em;margin-left:-0.02778em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">u</span><span class="mord mathnormal">e</span><span class="mord cjk_fallback">指</span><span class="mord cjk_fallback">令</span><span class="mord cjk_fallback">分</span><span class="mord cjk_fallback">配</span><span class="mord cjk_fallback">的</span><span class="mord cjk_fallback">值</span><span class="mord cjk_fallback">；</span><span class="mord cjk_fallback">如</span><span class="mord cjk_fallback">果</span><span class="mord cjk_fallback">浏</span><span class="mord cjk_fallback">览</span><span class="mord cjk_fallback">器</span><span class="mord cjk_fallback">为</span><span class="mord mathnormal">o</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">d</span><span class="mord cjk_fallback">，</span><span class="mord cjk_fallback">则</span></span></span></span>ancient_browser等于 ancient_browser_value指令分配的值；如果浏览器为 MSIE中的任意版本，则 $msie等于1）</p>
<p>–without-http_upstream_ip_hash_module 禁用ngx_http_upstream_ip_hash_module支持（该模块用于简单的负载均衡）</p>
<p>–with-http_perl_module 启用ngx_http_perl_module支持（该模块使nginx可以直接使用perl或通过ssi调用perl）</p>
<p>–with-perl_modules_path= 设定perl模块路径</p>
<p>–with-perl= 设定perl库文件路径</p>
<p>–http-log-path= 设定access log路径</p>
<p>–http-client-body-temp-path= 设定http客户端请求临时文件路径</p>
<p>–http-proxy-temp-path= 设定http代理临时文件路径</p>
<p>–http-fastcgi-temp-path= 设定http fastcgi临时文件路径</p>
<p>–http-uwsgi-temp-path= 设定http uwsgi临时文件路径</p>
<p>–http-scgi-temp-path= 设定http scgi临时文件路径</p>
<p>-without-http 禁用http server功能</p>
<p>–without-http-cache 禁用http cache功能</p>
<p>–with-mail 启用POP3/IMAP4/SMTP代理模块支持</p>
<p>–with-mail_ssl_module 启用ngx_mail_ssl_module支持</p>
<p>–without-mail_pop3_module 禁用pop3协议（POP3即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。是因特网电子邮件的第一个离线协议标 准,POP3协议允许用户从服务器上把邮件存储到本地主机上,同时根据客户端的操作删除或保存在邮件服务器上的邮件。POP3协议是TCP/IP协议族中的一员，主要用于 支持使用客户端远程管理在服务器上的电子邮件）</p>
<p>–without-mail_imap_module 禁用imap协议（一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息，下载邮件等。IMAP协议运行在TCP/IP协议之上， 使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载，可以通过客户端直接对服务器上的邮件进行操作。）</p>
<p>–without-mail_smtp_module 禁用smtp协议（SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则，由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族，它帮助每台计算机在发送或中转信件时找到下一个目的地。）</p>
<p>–with-google_perftools_module 启用ngx_google_perftools_module支持（调试用，剖析程序性能瓶颈）</p>
<p>–with-cpp_test_module 启用ngx_cpp_test_module支持</p>
<p>–add-module= 启用外部模块支持</p>
<p>–with-cc= 指向C编译器路径</p>
<p>–with-cpp= 指向C预处理路径</p>
<p>–with-cc-opt= 设置C编译器参数（PCRE库，需要指定–with-cc-opt=”-I /usr/local/include”，如果使用select()函数则需要同时增加文件描述符数量，可以通过–with-cc- opt=”-D FD_SETSIZE=2048”指定。）</p>
<p>–with-ld-opt= 设置连接文件参数。（PCRE库，需要指定–with-ld-opt=”-L /usr/local/lib”。）</p>
<p>–with-cpu-opt= 指定编译的CPU，可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64</p>
<p>–without-pcre 禁用pcre库</p>
<p>–with-pcre 启用pcre库</p>
<p>–with-pcre= 指向pcre库文件目录</p>
<p>–with-pcre-opt= 在编译时为pcre库设置附加参数</p>
<p>–with-md5= 指向md5库文件目录（消息摘要算法第五版，用以提供消息的完整性保护）</p>
<p>–with-md5-opt= 在编译时为md5库设置附加参数</p>
<p>–with-md5-asm 使用md5汇编源</p>
<p>–with-sha1= 指向sha1库目录（数字签名算法，主要用于数字签名）</p>
<p>–with-sha1-opt= 在编译时为sha1库设置附加参数</p>
<p>–with-sha1-asm 使用sha1汇编源</p>
<p>–with-zlib= 指向zlib库目录</p>
<p>–with-zlib-opt= 在编译时为zlib设置附加参数</p>
<p>–with-zlib-asm= 为指定的CPU使用zlib汇编源进行优化，CPU类型为pentium, pentiumpro</p>
<p>–with-libatomic 为原子内存的更新操作的实现提供一个架构</p>
<p>–with-libatomic= 指向libatomic_ops安装目录</p>
<p>–with-openssl= 指向openssl安装目录</p>
<p>–with-openssl-opt 在编译时为openssl设置附加参数</p>
<p>–with-debug 启用debug日志</p>
<h1 id="docker" tabindex="-1">Docker</h1>
<p><strong>我把他理解为一个可以搭建任何虚拟环境的容器</strong></p>
<h2 id="%E5%85%B3%E4%BA%8Edocker%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4" tabindex="-1">关于docker一些常用的命令</h2>
<p>Docker 是一种流行的容器化平台，用于构建、部署和运行应用程序。下面是一些常用的 Docker 命令：</p>
<ol>
 <li>
  <p><strong>docker run</strong>: 运行一个容器。</p>
  <pre><code class="language-">docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
</code></pre>
 </li>
 <li>
  <p><strong>docker build</strong>: 构建一个镜像。</p>
  <pre><code class="language-">docker build [OPTIONS] PATH | URL | -
</code></pre>
 </li>
 <li>
  <p><strong>docker pull</strong>: 从 Docker 镜像仓库中拉取一个镜像。</p>
  <pre><code class="language-">docker pull [OPTIONS] NAME[:TAG|@DIGEST]
</code></pre>
 </li>
 <li>
  <p><strong>docker push</strong>: 将一个镜像推送到 Docker 镜像仓库。</p>
  <pre><code class="language-">docker push [OPTIONS] NAME[:TAG]
</code></pre>
 </li>
 <li>
  <p><strong>docker images</strong>: 列出本地的镜像。</p>
  <pre><code class="language-">docker images [OPTIONS] [REPOSITORY[:TAG]]
</code></pre>
 </li>
 <li>
  <p><strong>docker ps</strong>: 列出正在运行的容器。</p>
  <pre><code class="language-">docker ps [OPTIONS]
</code></pre>
 </li>
 <li>
  <p><strong>docker stop</strong>: 停止一个或多个容器。</p>
  <pre><code class="language-">docker stop [OPTIONS] CONTAINER [CONTAINER...]
</code></pre>
 </li>
 <li>
  <p><strong>docker rm</strong>: 删除一个或多个容器。</p>
  <pre><code class="language-">docker rm [OPTIONS] CONTAINER [CONTAINER...]
</code></pre>
 </li>
 <li>
  <p><strong>docker rmi</strong>: 删除一个或多个镜像。</p>
  <pre><code class="language-">docker rmi [OPTIONS] IMAGE [IMAGE...]
</code></pre>
 </li>
 <li>
  <p><strong>docker exec</strong>: 在正在运行的容器中执行命令。</p>
  <pre><code class="language-">docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
</code></pre>
 </li>
 <li>
  <p>docker 清理构建缓存</p>
 </li>
</ol>
<pre><code class="language-">docker builder prune
</code></pre>
<h2 id="%E4%B8%80%E4%BA%9B%E5%90%AF%E5%8A%A8%E5%8F%82%E6%95%B0" tabindex="-1">一些启动参数</h2>
<p>当在Docker中使用<code>docker run</code>命令时，你可以通过添加其他参数来控制容器的行为和配置。以下是一些常用的<code>docker run</code>命令的其他参数：</p>
<ul>
 <li><code>-d</code>：以后台（守护进程）模式运行容器。</li>
 <li><code>-it</code>：启动一个交互式终端，并将其连接到容器的标准输入、输出和错误（通常与<code>-d</code>一起使用）。</li>
 <li><code>--name &lt;容器名称&gt;</code>：为容器指定一个名称。</li>
 <li><code>-e &lt;变量名&gt;=&lt;值&gt;</code>：设置环境变量。</li>
 <li><code>-v &lt;本地路径&gt;:&lt;容器路径&gt;</code>：将本地文件系统的路径挂载到容器内的路径。</li>
 <li><code>--network=&lt;网络名称&gt;</code>：将容器连接到指定的Docker网络。</li>
 <li><code>--link &lt;容器名称或ID&gt;:&lt;别名&gt;</code>：连接到另一个容器，并在当前容器中设置一个别名。</li>
 <li><code>-p &lt;主机端口&gt;:&lt;容器端口&gt;</code>：将主机的端口映射到容器的端口。</li>
 <li><code>--restart=&lt;策略&gt;</code>：指定容器的重启策略，例如<code>no</code>、<code>on-failure</code>或<code>always</code>。</li>
 <li><code>--rm</code>：容器退出时自动删除容器。</li>
 <li><code>--privileged</code>：给容器分配所有特权，这将允许容器访问主机上的所有设备。</li>
</ul>
<p>这只是一些常见的<code>docker run</code>命令的参数，还有更多参数可以根据需要使用。你可以通过运行<code>docker run --help</code>命令来查看所有可用参数的完整列表和说明。</p>
<p><strong>更改重新启动策略</strong></p>
<pre><code class="language-">docker update --restart=策略 容器ID或名称

</code></pre>
<blockquote>
 <p>no：不自动重启容器。
  <br>
  on-failure：仅在容器非正常退出时重启容器（退出状态码不为 0）。
  <br>
  always：总是重启容器，无论退出状态码是什么。
  <br>
  unless-stopped：除非手动停止容器，否则总是重启容器。</p>
</blockquote>
<h2 id="dockr%E6%8E%A8%E9%80%81%E5%88%B0%E4%BB%93%E5%BA%93" tabindex="-1">dockr推送到仓库</h2>
<p>要将一个镜像推送到Docker仓库，你需要完成以下步骤：</p>
<ol>
 <li>
  <p>登录到Docker仓库：使用<code>docker login</code>命令登录到目标Docker仓库。你需要提供Docker仓库的地址、用户名和密码。</p>
  <pre><code class="language-">docker login &lt;仓库地址&gt;
</code></pre>
  <p>例如：</p>
  <pre><code class="language-">docker login myregistry.example.com
</code></pre>
 </li>
 <li>
  <p>标记镜像：使用<code>docker tag</code>命令给要推送的镜像打上合适的标签。标签的格式通常是<code>&lt;仓库地址&gt;/&lt;用户名&gt;/&lt;镜像名称&gt;:&lt;标签&gt;</code>。</p>
  <pre><code class="language-">docker tag &lt;本地镜像名称&gt; &lt;仓库地址&gt;/&lt;用户名&gt;/&lt;镜像名称&gt;:&lt;标签&gt;
</code></pre>
  <p>例如：</p>
  <pre><code class="language-">docker tag myimage:latest myregistry.example.com/myuser/myimage:latest
</code></pre>
 </li>
 <li>
  <p>推送镜像：使用<code>docker push</code>命令将标记的镜像推送到Docker仓库。</p>
  <pre><code class="language-">docker push &lt;仓库地址&gt;/&lt;用户名&gt;/&lt;镜像名称&gt;:&lt;标签&gt;
</code></pre>
  <p>例如：</p>
  <pre><code class="language-">docker push myregistry.example.com/myuser/myimage:latest
</code></pre>
  <p>这将把镜像上传到Docker仓库中。</p>
 </li>
</ol>
<p>请注意，以上步骤中的仓库地址、用户名、镜像名称和标签应根据你的实际情况进行替换。</p>
<p>容器以及创建好的情况下，如何带参数执行</p>
<h2 id="docker%E7%BD%91%E7%BB%9C" tabindex="-1">Docker网络</h2>
<p>断开容器与当前网络的连接</p>
<pre><code class="language-">docker network disconnect 当前网络 容器ID或名称

</code></pre>
<p>启动容器并将网络模式设置为桥接</p>
<pre><code class="language-">docker start --network=bridge 容器ID或名称
</code></pre>
<p>创建一个新的桥接网络</p>
<pre><code class="language-">docker network create --driver bridge 新网络名称
</code></pre>
<p>将容器连接到新的桥接网络</p>
<pre><code class="language-">docker network connect 新网络名称 容器ID或名称

</code></pre>
<p>创建一个桥接网络</p>
<pre><code class="language-">docker network create --driver bridge my-bridge-network
</code></pre>
<p>运行容器并连接到桥接网络</p>
<pre><code class="language-">docker run --network=my-bridge-network --name=my-container -d image-name
</code></pre>
<p>创建一个自定义的桥接网络，指定网段为 192.x.x.x。例如，创建一个名为 my-bridge-network 的桥接网络，并指定子网为 192.168.0.0/24</p>
<pre><code class="language-">docker network create --driver bridge --subnet=192.168.0.0/24 my-bridge-network
</code></pre>
<p>运行容器并连接到自定义的桥接网络，并指定容器的 IP 地址为 192.168.0.x，其中 x 是一个可用的 IP 地址</p>
<pre><code class="language-">docker run --network=my-bridge-network --ip=192.168.0.x --name=my-container -d image-name
</code></pre>]]></description><guid isPermaLink="false">/archives/144</guid><dc:creator>Celia</dc:creator><category>Docker</category><category>技术分类</category><pubDate>Fri, 7 Jul 2023 08:54:05 GMT</pubDate></item><item><title><![CDATA[GITHUB项目搭建自己的BingGPT]]></title><link>https://7boe.top/archives/143</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84BingGPT&amp;url=/archives/143" width="1" height="1" alt="" style="opacity:0;">
<h1 id="newbing" tabindex="-1">NewBING</h1>
<p>项目名称：NewBingGoGo-Web
 <br>
 项目作者地址：<a href="https://github.com/jianjianai/NewBingGoGo-Web" target="_blank">BingGPT</a></p>
<blockquote>
 <p>大概也是借助微软的newbing接口的机器人web页面
  <br>
  页面很好看，没有别的，因为国内没法访问newbing机器人，可以自己用香港服务器搭建一个也可以，反正不要钱
  <br>
  本文采用Docker搭建，会用的直接去克隆项目下来构建镜像就可以了。</p>
</blockquote>
<h2 id="readme" tabindex="-1">README</h2>
<p>NewBingGoGo-web</p>
<p>一个基于微软OpenAI ChatGPT GPT4的New Bing接口的Web服务。
 <br>
 提供了好看的对话页面。
 <br>
 实现了微软New Bing的大多数功能，还添加了一些自己的特色功能。
 <br>
 开源免费。</p>
<h2 id="%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD%E5%B1%95%E7%A4%BA" tabindex="-1">主要功能展示</h2>
<h3 id="%E8%81%8A%E5%A4%A9%E5%8A%9F%E8%83%BD" tabindex="-1">聊天功能</h3>
<p>聊天实现了NewBing的大多数功能，搜索，画图，天气，地图等等。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fjianjianai%2FNewBingGoGo-Web%2Fassets%2F59829816%2Ff951030f-7941-4ec7-887c-355d003a67be&amp;size=m" alt="1"></p>
<h3 id="%E5%88%9B%E4%BD%9C%E5%8A%9F%E8%83%BD" tabindex="-1">创作功能</h3>
<p>创作实现了NewBing侧边栏的撰写的大多数功能，可更具需求生成文章。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fjianjianai%2FNewBingGoGo-Web%2Fassets%2F59829816%2Fc6469529-0571-4a5d-8161-1a9707f52592&amp;size=m" alt="1 2"></p>
<h3 id="%E5%B0%8F%E7%AA%97%E5%8A%9F%E8%83%BD-(%E6%8F%92%E4%BB%B6%E4%B8%93%E5%B1%9E)" tabindex="-1">小窗功能 (插件专属)</h3>
<p>小窗实现了NewBing侧边栏的根据当前页面信息问答的功能，可以在同一个页面中同时打开多个小窗同时问答，高效地查阅资料和完成文章编辑工作。
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fjianjianai%2FNewBingGoGo-Web%2Fassets%2F59829816%2F09d6cf75-f870-4c04-8809-70a3d7bc9817&amp;size=m" alt="1 1"></p>
<p>演示站点：</p>
<ul>
 <li>repl java <a href="https://newbinggogo-web--jianjianai.repl.co" target="_blank">https://newbinggogo-web--jianjianai.repl.co</a> (没配置账号)</li>
 <li>java <a href="https://chat.jja8.cn/" target="_blank">https://chat.jja8.cn/</a> (加了一个我小号，轻掠)</li>
 <li>cloudflareWorker.js <a href="https://bingweb.jja8.cn/" target="_blank">https://bingweb.jja8.cn/</a> (没配置账号)</li>
</ul>
<h2 id="%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D" tabindex="-1">功能介绍</h2>
<p>此服务可直接通过网页访问也可以作为NewBingGoGo插件的魔法链接服务使用。</p>
<h4 id="%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE" tabindex="-1"><strong>直接访问</strong></h4>
<p>直接访问需要在配置文件中设置共享账号，可以设置多个共享账号随机访问。</p>
<h4 id="%E4%BD%9C%E4%B8%BA%E9%AD%94%E6%B3%95%E9%93%BE%E6%8E%A5" tabindex="-1"><strong>作为魔法链接</strong></h4>
<p>作为魔法链接使用时，不会使用配置文件中的共享账号。用户需要登录自己的微软账号。</p>
<h2 id="%E9%83%A8%E7%BD%B2%E6%96%B9%E6%B3%95" tabindex="-1">部署方法</h2>
<p><a href="https://github.com/jianjianai/NewBingGoGo-Web/wiki/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8" target="_blank">快速入门 wiki</a></p>
<h3 id="%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2%E5%88%B0%E5%85%8D%E8%B4%B9%E7%9A%84%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">一键部署到免费的云服务器</h3>
<table>
 <thead>
  <tr>
   <th>服务商 点击图标一键部署</th>
   <th>简介</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><a href="https://railway.app/template/GE_YVq?referralCode=s40fic" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Frailway.app%2Fbutton.svg&amp;size=m" alt="Deploy on Railway"></a></td>
   <td>Railway</td>
  </tr>
  <tr>
   <td><a href="https://render.com/deploy?repo=https://github.com/jianjianai/NewBingGoGo-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Frender.com%2Fimages%2Fdeploy-to-render-button.svg&amp;size=m" alt="Deploy to Render"></a></td>
   <td>Render</td>
  </tr>
  <tr>
   <td><a href="https://replit.com/@jianjianai/NewBingGoGo-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=&amp;size=m" alt="Deploy to Replit"></a></td>
   <td>replit</td>
  </tr>
 </tbody>
</table>
<h2 id="%E6%B3%A8%E6%84%8F%E5%8C%BA%E5%88%86" tabindex="-1">注意区分</h2>
<h3 id="newbinggogo-web" tabindex="-1">NewBingGoGo-web</h3>
<p>NewBingGoGo-web是一个网页服务，用户可以直接打开网页，在网页上聊天。
 <br>
 但是由于网页的限制，用户是不能在网页上登录自己的微软账号的，必须使用服务端上配置的共享账号。</p>
<h3 id="newbinggogo" tabindex="-1">NewBingGoGo</h3>
<p>NewBingGoGo是一个浏览器插件，浏览器插件不同于网页，浏览器插件的权限更高。
 <br>
 所以在使用NewBingGoGo插件的时候，NewBingGoGo插件会从浏览器中自动获取当前登录的微软账号。</p>
<h3 id="newbinggogo-web-%E4%BD%9C%E4%B8%BA-newbinggogo-%E7%9A%84%E9%AD%94%E6%B3%95%E9%93%BE%E6%8E%A5" tabindex="-1">NewBingGoGo-web 作为 NewBingGoGo 的魔法链接</h3>
<p>NewBingGoGo-web既可以是一个网页服务，也可以是NewBingGoGo的魔法链接服务。当NewBingGoGo设置好魔法链接之后，就可以通过NewBingGoGo-web来代理聊天。
 <br>
 这个时候NewBingGoGo-web不会使用服务端上配置的共享账号，而是使用用户浏览器中当前登录的微软账号。</p>
<h3 id="%E6%80%BB%E7%BB%93" tabindex="-1">总结</h3>
<p>搭建NewBingGoGo-web服务后，如果想直接打开网页使用则需要配置共享账号。如果仅仅作为NewBingGoGo的魔法链接使用则不需要配置共享账号。</p>
<h2 id="%E5%85%B3%E4%BA%8E" tabindex="-1">关于</h2>
<p>交流群：601156371</p>
<h2 id="%E6%9B%B4%E5%8A%A0%E5%BC%BA%E5%A4%A7%E7%9A%84newbinggogo%E6%8F%92%E4%BB%B6" tabindex="-1">更加强大的NewBingGoGo插件</h2>
<p>浏览器插件版的NewBingGoGo不受到网页的限制，更加强大。可以登录自己的微软账号，速度更快，更稳定。</p>
<p><a href="https://gitee.com/jja8/NewBingGoGo" target="_blank">NewBingGoGo : 简单开始和NewBing聊天 gitee</a></p>
<table>
 <thead>
  <tr>
   <th>功能</th>
   <th>插件版</th>
   <th>web版</th>
   <th>描述</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>聊天</td>
   <td>✔</td>
   <td>✔</td>
   <td>和New Bing对话，提出问题。</td>
  </tr>
  <tr>
   <td>生成图片</td>
   <td>✔</td>
   <td>✔</td>
   <td>在有更创造力选项中让New Bing生成图片</td>
  </tr>
  <tr>
   <td>提示词</td>
   <td>✔</td>
   <td>✔</td>
   <td>使用提示词使AI更好地理解需求</td>
  </tr>
  <tr>
   <td>免登录</td>
   <td>❌</td>
   <td>✔</td>
   <td>无需登录，直接使用。</td>
  </tr>
  <tr>
   <td>创作</td>
   <td>✔</td>
   <td>✔</td>
   <td>使用New Bing生成文章，Edge浏览器New Bing侧边栏的撰写功能</td>
  </tr>
  <tr>
   <td>小窗</td>
   <td>✔</td>
   <td>❌</td>
   <td>在页面中打开小窗，可根据当前页面内容对话。Edge浏览器侧边栏的聊天功能</td>
  </tr>
  <tr>
   <td>聊天记录</td>
   <td>✔</td>
   <td>✔</td>
   <td>保存聊天记录，可查看或继续聊天</td>
  </tr>
  <tr>
   <td>登录微软账号</td>
   <td>✔</td>
   <td>❌</td>
   <td>登录微软账号，使用自己的账号访问New Bing</td>
  </tr>
  <tr>
   <td>内容卡片</td>
   <td>✔</td>
   <td>✔</td>
   <td>显示天气，查找图片，地图等等。</td>
  </tr>
  <tr>
   <td>通过机器人验证</td>
   <td>✔</td>
   <td>✔</td>
   <td>当请求频繁时，微软要求通过机器人验证，就是输入验证码</td>
  </tr>
 </tbody>
</table>
<h2 id="docker%E6%90%AD%E5%BB%BA%E6%96%B9%E6%B3%95" tabindex="-1">Docker搭建方法</h2>
<p>克隆下来后，直接在项目文件内执行</p>
<pre><code class="language-">docker build -t bing .
</code></pre>
<p>构建好镜像后直接运行就可以了</p>
<pre><code class="language-">docker run -d --name bingGPT -p 81:80 bing
</code></pre>
<p>然后上反向代理就可以用域名访问啦</p>]]></description><guid isPermaLink="false">/archives/143</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>技术分类</category><pubDate>Thu, 29 Jun 2023 03:00:11 GMT</pubDate></item><item><title><![CDATA[Git使用以及推送代码到Github]]></title><link>https://7boe.top/archives/142</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Git%E4%BD%BF%E7%94%A8%E4%BB%A5%E5%8F%8A%E6%8E%A8%E9%80%81%E4%BB%A3%E7%A0%81%E5%88%B0Github&amp;url=/archives/142" width="1" height="1" alt="" style="opacity:0;">
<h1 id="git%E4%BD%BF%E7%94%A8" tabindex="-1">GIT使用</h1>
<ul>
 <li>
  <p>创建Github账户。打开 <a href="https://github.com" target="_blank">https://github.com</a> 并注册一个新账户。</p>
 </li>
 <li>
  <p>安装Git。如果您的系统尚未安装Git，则需要先安装它。可以参考Git官方文档以获取更多详细信息。</p>
 </li>
 <li>
  <p>配置Git用户名和电子邮件地址。在终端或命令提示符窗口中，运行以下命令以设置您的Git用户名和电子邮件地址：</p>
 </li>
</ul>
<blockquote>
 <p>安装git后需要设置github用户名以及邮箱,内容替换成自己的</p>
</blockquote>
<pre><code class="language-">git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"
</code></pre>
<blockquote>
 <p>首先要有本地仓库</p>
</blockquote>
<ul>
 <li>
  <p><strong>在Github上创建一个新的代码仓库</strong></p>
 </li>
 <li>
  <p><strong>从终端命令行中进入本地代码仓库目录，并初始化仓库：</strong></p>
 </li>
</ul>
<pre><code class="language-">git init
</code></pre>
<ul>
 <li><strong>将您的代码添加到本地仓库缓冲区：</strong></li>
</ul>
<pre><code class="language-">git add .
</code></pre>
<ul>
 <li><strong>为Github分配一个远程仓库：</strong></li>
</ul>
<pre><code class="language-">git remote add origin https://github.com/username/repo.git
</code></pre>
<ul>
 <li><strong>查看本地分支</strong></li>
</ul>
<pre><code class="language-">git branch
</code></pre>
<blockquote>
 <p>该命令会列出当前本地仓库中存在的所有分支，并用星号标识当前所在的分支。例如，以下是一个示例输出：</p>
</blockquote>
<pre><code class="language-">* main
  feature-1
  feature-2
</code></pre>
<ul>
 <li><strong>查看远程分支</strong></li>
</ul>
<pre><code class="language-">git branch -r
</code></pre>
<ul>
 <li><strong>创建分支</strong></li>
</ul>
<pre><code class="language-">git checkout -b new-branch
</code></pre>
<ul>
 <li><strong>将本地仓库推送到 GitHub 上，需要使用 git push 命令，并指定远程仓库的名称和分支名称。具体命令如下：</strong></li>
</ul>
<pre><code class="language-">git push origin master:master      #例如，将本地的 master 分支推送到 GitHub 上的 origin 仓库的 master 分支
git push &lt;远程仓库名称&gt; &lt;本地分支名称&gt;:&lt;远程分支名称&gt;
</code></pre>
<ul>
 <li><strong>设置仓库名称</strong></li>
</ul>
<pre><code class="language-">git remote add &lt;远程仓库名称&gt; &lt;远程仓库 URL&gt;
</code></pre>
<blockquote>
 <p>例如，如果你想要将一个 GitHub 仓库添加到本地仓库，并将其命名为 myrepo，可以使用以下命令：</p>
</blockquote>
<pre><code class="language-">git remote add myrepo https://github.com/username/myrepo.git

</code></pre>
<blockquote>
 <p>添加完成后，你就可以使用 git push 命令将本地分支推送到该远程仓库，命令如下：</p>
</blockquote>
<pre><code class="language-">git push myrepo &lt;本地分支名称&gt;:&lt;远程分支名称&gt;
</code></pre>
<ul>
 <li><strong>删除分支</strong></li>
</ul>
<pre><code class="language-">git branch -d &lt;branch-name&gt;
</code></pre>
<blockquote>
 <p>其中，branch-name是要删除的分支名称。需要注意的是，如果该分支包含未合并的更改，则删除分支时会出现错误。这时需要使用“-D”选项强制删除分支。</p>
</blockquote>
<ul>
 <li><strong>删除远程分支</strong></li>
</ul>
<pre><code class="language-">git push origin --delete test
  
</code></pre>
<ul>
 <li><strong>切换分支</strong></li>
</ul>
<pre><code class="language-">git checkout &lt;branch-name&gt; #其中，“&lt;branch-name&gt;”是要切换到的分支名称。
</code></pre>
<ul>
 <li><strong>创建新分支并切换到该分支</strong></li>
</ul>
<pre><code class="language-">git checkout -b new-feature
</code></pre>
<ul>
 <li><strong>分支合并</strong></li>
</ul>
<blockquote>
 <p>首先，需要切换到要合并的目标分支上，例如：</p>
</blockquote>
<pre><code class="language-">git checkout target-branch
</code></pre>
<blockquote>
 <p>然后，使用 git merge 命令将源分支合并到目标分支上，例如：</p>
</blockquote>
<pre><code class="language-">git merge source-branch
</code></pre>
<ul>
 <li><strong>查看git状态</strong></li>
</ul>
<pre><code class="language-">git status
</code></pre>
<ul>
 <li><strong>比较文件的不同，即暂存区和工作区的差异。</strong></li>
</ul>
<pre><code class="language-">git diff
</code></pre>
<ul>
 <li><strong>连接远程仓库并且命名</strong></li>
</ul>
<p><strong>您可以使用以下命令在 Git 中为仓库设置名称：</strong></p>
<pre><code class="language-">git remote add &lt;remote name&gt; &lt;remote repository URL&gt;
</code></pre>
<blockquote>
 <p>请将 <code>&lt;remote name&gt;</code> 替换为您想要设置的名称，<code>&lt;remote repository URL&gt;</code> 替换为您的远程仓库的 URL。例如，如果您想将远程仓库的名称设置为 <code>origin</code>，则可以使用以下命令：</p>
</blockquote>
<pre><code class="language-">git remote add origin &lt;remote repository URL&gt;
</code></pre>
<blockquote>
 <p>**请注意，这只是将远程仓库的名称设置为 <code>origin</code>，您可以将其替换为您想要的任何名称</p>
</blockquote>
<ul>
 <li><strong>重新命名仓库</strong></li>
</ul>
<p><strong>您可以使用以下命令在 Git 中为仓库重命名</strong></p>
<pre><code class="language-">git remote rename &lt;old name&gt; &lt;new name&gt;
</code></pre>
<blockquote>
 <p><strong>请将 <code>&lt;old name&gt;</code> 替换为您想要重命名的旧名称，<code>&lt;new name&gt;</code> 替换为您想要设置的新名称。例如，如果您想将远程仓库的名称从 <code>origin</code> 改为 <code>new-origin</code>，则可以使用以下命令：</strong></p>
</blockquote>
<pre><code class="language-">git remote rename origin new-origin
</code></pre>
<p>请注意，这只是将远程仓库的名称从 <code>origin</code> 改为 <code>new-origin</code>，您可以将其替换为您想要的任何名称。</p>
<hr>
<h1 id="%E6%8E%A8%E9%80%81%E5%88%B0github" tabindex="-1">推送到GITHUB</h1>
<p><strong>提交你的更改</strong></p>
<pre><code class="language-">git commit -m "your commit message"
</code></pre>
<p><strong>拉取远程仓库中最新的更改：</strong></p>
<pre><code class="language-">git pull origin main
</code></pre>
<p><strong>推送代码更改到Github仓库：</strong></p>
<pre><code class="language-">git push origin main    #main是分支，更改到你需要提交的分支也行
</code></pre>
<p><strong>提交到hero并且对更改进行描述</strong></p>
<pre><code class="language-">git commit -m "描述"
</code></pre>]]></description><guid isPermaLink="false">/archives/142</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>技术分类</category><pubDate>Fri, 23 Jun 2023 09:48:13 GMT</pubDate></item><item><title><![CDATA[PVE下安装OPENWRT以及配置]]></title><link>https://7boe.top/archives/141</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=PVE%E4%B8%8B%E5%AE%89%E8%A3%85OPENWRT%E4%BB%A5%E5%8F%8A%E9%85%8D%E7%BD%AE&amp;url=/archives/141" width="1" height="1" alt="" style="opacity:0;">
<h1 id="pve" tabindex="-1">PVE</h1>
<ul>
 <li><strong>现在pve里面上传镜像文件
   <br> 如图所示</strong></li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bc82834fe4.png&amp;size=m" alt="PVE"></p>
<h2 id="%E5%AE%89%E8%A3%85openwrt" tabindex="-1">安装openwrt</h2>
<ul>
 <li>
  <p>登录PVE管理UI，选中PVE节点，点击“创建虚拟机”，填写虚拟机名称（例如Openwrt）
   <br>
   <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B1.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1792%2Ch_1602%2Finterlace%2C1%23&amp;size=m" alt=""></p>
 </li>
 <li>
  <p>CD/DVD选择“不适用任何介质”，操作系统和版本默认即可，点击“下一步”。</p>
 </li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B2.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1600%2Ch_1166%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<ul>
 <li>没有其他需求的话 系统选项卡全部默认，点击“下一步”。</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bc9991fe17.png&amp;size=m" alt=""></p>
<ul>
 <li>硬盘不用改，之后会删除，然后用刚刚下载的img镜像创建虚拟磁盘。</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bca18d8026.png&amp;size=m" alt=""></p>
<ul>
 <li>CPU核心数量按需添加，一般双核足够了</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bca41cb8f0.png&amp;size=m" alt=""></p>
<ul>
 <li>内存x86高大全版本内存一定要奢侈点我这里给了2G不过一般1G有时候都用不掉，根据自己后期使用的插件数量和DOCKER来算，系统有富余就多加一点，一般不用超高2GB，点击“下一步”</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bcabde4aa7.png&amp;size=m" alt=""></p>
<ul>
 <li>
  <p>PVE虚拟机可选网卡模型（虚拟网卡）有Intel E1000、VirtIO（半虚拟化）、Realtek RTL8139和VMware vmxnet3四种。建议选用默认的VirtIO（半虚拟化），其性能和效率最高。
   <br>
   <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bcb2ab2d6d.png&amp;size=m" alt=""></p>
 </li>
 <li>
  <p>最后确认下所有设置和参数，点击完成。
   <br>
   <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B8.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1600%2Ch_1172%2Finterlace%2C1%23&amp;size=m" alt=""></p>
 </li>
</ul>
<h2 id="%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9B%E5%BB%BA%E5%AE%8C%E6%88%90" tabindex="-1"><strong>虚拟机创建完成</strong></h2>
<h2 id="%E5%AE%89%E8%A3%85%E9%95%9C%E5%83%8F%E6%96%87%E4%BB%B6" tabindex="-1">安装镜像文件</h2>
<ul>
 <li>分离不用的硬盘：选择刚刚创建的“Openwrt”虚拟机 &gt; 硬件 &gt; 硬盘(scsi0) &gt; 点击“分离”</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B9.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1600%2Ch_672%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<ul>
 <li>删除不用的硬盘和光驱：选中“未使用的磁盘0”，点击“删除”；再用同样的方法删除不用的光驱</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B10.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1200%2Ch_594%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<ul>
 <li><strong>添加启动盘</strong></li>
</ul>
<blockquote>
 <p>把镜像转成虚拟磁盘并导入到虚拟机：选择“pve”节点 &gt; shell &gt; 输入以下命令并回车</p>
</blockquote>
<p><strong>这里用到命令行，在pve的shell里面输入，qm importdisk是PVE导入磁盘到虚拟机的工具，后面的参数‘102’是Openwrt虚拟机的编号，‘/var/lib/vz/template/iso/openwrt.img’是刚才上传Openwrt镜像的完整目录，‘local-lvm’是PVE储存虚拟磁盘的存储空间</strong></p>
<pre><code class="language-">qm importdisk [这里替换成你创建的虚拟机id] /var/lib/vz/template/iso/这里是你的镜像名称直接按tab键给他显示出来补全即可 local-lvm
</code></pre>
<p><strong>上面是样式，正常你打进去要这样</strong></p>
<pre><code class="language-">qm importdisk 102 /var/lib/vz/template/iso/openwrt.img local-lvm
</code></pre>
<p><strong>完事了以后会出现</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B13.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_2048%2Ch_390%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<ul>
 <li>
  <p>导入成功后在‘Openwrt’虚拟机的“硬件”选项卡就能看到一个“未使用的磁盘0”，选中它点击编辑，弹出配置窗口，设备类型选“sata”SATA仿真也可以勾上，最后点击添加
   <br>
   <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B14.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1600%2Ch_1334%2Finterlace%2C1%23&amp;size=m" alt=""></p>
 </li>
 <li>
  <p>切换到虚拟机的“选项”选项卡，双击“引导顺序”，第一引导项选“Disk ‘sata0’”</p>
 </li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B15.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1430%2Ch_960%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<h2 id="%E6%B7%BB%E5%8A%A0%E8%99%9A%E6%8B%9F%E7%BD%91%E5%8D%A1" tabindex="-1">添加虚拟网卡</h2>
<blockquote>
 <p>PVE安装完后系统只会创建一个虚拟网桥，前面创建虚拟机的时候添加的“vmbr0”对应openwrt软路由的“eth0网卡”，默认是软路由LAN口；所以还要创建一个“vmbr1”对应软路由的“eth1网卡”，用作软路由的WAN口：</p>
</blockquote>
<p>选择“pve”节点 &gt; 网络 &gt; 创建 &gt; Linux Bridge &gt; 桥接名称填写“vmbr1” &gt; 端口填写其他未使用的网卡名称 &gt; 最后点击“创建”。桥接是你有个网口就桥接几个</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B16.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_2048%2Ch_900%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<ul>
 <li>添加虚拟网卡到虚拟机：选择“Openwrt”虚拟机 &gt; 硬件 &gt; 添加 &gt; 网络设备 &gt; 桥接选“vmbr1” &gt; 网卡模型选“Virto” &gt; 最后点击“添加”。你有几个网口就添加几个</li>
</ul>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcdn.10bests.com%2Fwp-content%2Fuploads%2F2020%2F04%2FPVE%25E5%25AE%2589%25E8%25A3%2585OpenwrtLEDE%25E8%25BD%25AF%25E8%25B7%25AF%25E7%2594%25B1%25E6%2595%2599%25E7%25A8%258B17.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cm_fill%2Cw_1600%2Ch_1078%2Finterlace%2C1%23&amp;size=m" alt=""></p>
<h2 id="openwrt%2Flede%E8%AE%BE%E7%BD%AE" tabindex="-1">Openwrt/LEDE设置</h2>
<blockquote>
 <p>插wan口进去，电脑连上后在接口里面设置lan口ip和接口数就行了
  <br>
  在网络接口里面设置</p>
</blockquote>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bcf7ed0698.png&amp;size=m" alt="">
 <br>
 局域网内访问PVE
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F06%2F16%2F648bcf7ecfc33.png&amp;size=m" alt=""></p>]]></description><guid isPermaLink="false">/archives/141</guid><dc:creator>Celia</dc:creator><category>软路由</category><category>技术分类</category><pubDate>Fri, 16 Jun 2023 02:58:15 GMT</pubDate></item><item><title><![CDATA[MYSQL常用指令以及安装]]></title><link>https://7boe.top/archives/140</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=MYSQL%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4%E4%BB%A5%E5%8F%8A%E5%AE%89%E8%A3%85&amp;url=/archives/140" width="1" height="1" alt="" style="opacity:0;">
<h1 id="mysql" tabindex="-1">MYSQL</h1>
<blockquote>
 <p>在Debian软件包中以及更名mariadb</p>
</blockquote>
<p>安装直接就是</p>
<pre><code class="language-">apt install mariadb-server
</code></pre>
<h2 id="%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E8%A3%85" tabindex="-1">二进制安装</h2>
<p><strong>创建用户组</strong></p>
<pre><code class="language-">groupadd -r mysql &amp;&amp; useradd -r -g mysql -s /sbin/nologin -M mysql
</code></pre>
<p><strong>创建文件目录以及更改权限</strong></p>
<pre><code class="language-">mkdir -p /mysql/data &amp;&amp; chown mysql:mysql /mysql/data
mkdir -p /mysql/log &amp;&amp; chown mysql:mysql /mysql/log
mkdir -p /var/lib/mysql &amp;&amp; chown mysql:mysql /var/lib/mysql
</code></pre>
<p>环境变量</p>
<pre><code class="language-">vim /etc/profile
export MYSQL_BASE=/usr/local/mysql

export PATH=$MYSQL_BASE/bin:$PATH
</code></pre>
<p>my.cnf配置</p>
<pre><code class="language-">
[mysqld]
#basic settings
secure_file_priv =
server-id = 3306
port = 3306
user = mysql
autocommit = 1
character_set_server = utf8mb4
socket = /var/lib/mysql
skip_name_resolve = 1
max_connections = 1000
basedir = /usr/local/mysql
datadir = /mysql/data
pid-file = /run/mysql
transaction_isolation = READ-COMMITTED
join_buffer_size = 134217728
tmp_table_size = 67108864
tmpdir = /tmp
max_allowed_packet = 16777216
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
interactive_timeout = 1800
wait_timeout = 1800
sort_buffer_size = 33554432
#log settings
log_error = error.log
slow_query_log = on
slow_query_log_file = slow.log
expire_logs_days = 7
long_query_time = 3
log_bin = bin.log
sync_binlog = 1
binlog_format = row 
#innodb settings
innodb_buffer_pool_size = 2048M
innodb_data_file_path = ibdata1:1G:autoextend
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lock_wait_timeout = 5
innodb_log_file_size = 500M
innodb_log_buffer_size = 16777216
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864
innodb_flush_log_at_trx_commit = 2
log_bin_trust_function_creators=1
#set client
 
[client]
port=3306
socket=/var/lib/mysql
</code></pre>
<p>初始化</p>
<pre><code class="language-">/usr/local/mysql/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize --user=mysql
</code></pre>
<h2 id="%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4" tabindex="-1">常用命令</h2>
<h3 id="%E5%88%9D%E5%A7%8B%E5%8C%96%E5%8C%96%E5%91%BD%E4%BB%A4" tabindex="-1">初始化化命令</h3>
<pre><code class="language-">mysql_secure_installation
</code></pre>
<p><strong>会有大概步骤，内容大概是</strong></p>
<ul>
 <li>第一步确认你的root密码</li>
 <li>第二步询问您是否要切换为使用 unix_socket 身份验证方式 选择N即可</li>
 <li>第三步是否要更改默认root密码 上面改过了，选择N</li>
 <li>第四步是否删除默认匿名账户 选择Y</li>
 <li>第五步是否运行root账户远程连接 需要的话选择Y</li>
 <li>第六步是否删除测试数据库 选择Y</li>
 <li>第七部是否刷新权限 选择Y</li>
</ul>
<p><strong>到这基本就完成了</strong></p>
<h3 id="%E5%BA%93%E5%86%85%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4" tabindex="-1">库内基本命令</h3>
<p><strong>查看所有库</strong></p>
<pre><code class="language-">SHOW DATABASES;
</code></pre>
<p><strong>查看特定的库</strong></p>
<pre><code class="language-">USE database_name;
SHOW TABLES;
</code></pre>
<p><strong>查看mysql中的用户以及主机权限</strong></p>
<pre><code class="language-">SELECT User, Host, authentication_string FROM mysql.user;
</code></pre>
<p><strong>为 root 用户授予远程访问权限</strong></p>
<pre><code class="language-">GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
</code></pre>
<p><strong>刷新权限</strong></p>
<pre><code class="language-">FLUSH PRIVILEGES;
</code></pre>
<p><strong>远程连接到指定的数据库</strong></p>
<pre><code class="language-">mysql -u root -p -h server_ip_address
</code></pre>
<p><strong>创建数据库</strong></p>
<pre><code class="language-">CREATE DATABASE newdatabase;
</code></pre>
<p><strong>创建一个新的用户并为其分配权限</strong></p>
<pre><code class="language-">CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON newdatabase.* TO 'newuser'@'localhost';
</code></pre>
<blockquote>
 <p><strong>账户为newuser密码为password自行修改@后面是登陆的方式改成%允许远程改成ip地址是指定一个ip访问,下面是库名和允许登陆的用户和远程权限。</strong></p>
</blockquote>
<p><strong>授权远程计算机访问指定的库</strong></p>
<pre><code class="language-">GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.2' IDENTIFIED BY 'mypassword';
</code></pre>
<p><strong>指定库名连接</strong></p>
<pre><code class="language-">mysql -u myuser -p -h server_ip_address mydatabase
</code></pre>
<p><strong>修改 MySQL 的配置文件 my.cnf，以允许远程连接</strong></p>
<pre><code class="language-"># bind-address = 127.0.0.1
bind-address = 0.0.0.0
</code></pre>]]></description><guid isPermaLink="false">/archives/140</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Thu, 8 Jun 2023 01:39:56 GMT</pubDate></item><item><title><![CDATA[PVE中好用的脚本以及温度换核]]></title><link>https://7boe.top/archives/139</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=PVE%E4%B8%AD%E5%A5%BD%E7%94%A8%E7%9A%84%E8%84%9A%E6%9C%AC%E4%BB%A5%E5%8F%8A%E6%B8%A9%E5%BA%A6%E6%8D%A2%E6%A0%B8&amp;url=/archives/139" width="1" height="1" alt="" style="opacity:0;">
<h1 id="pve脚本">PVE脚本</h1>
<p>本篇文章全部源自于网络收藏并非原创声明</p>
<h2 id="all-pve脚本">all pve脚本</h2>
<pre><code>bash &lt;(curl -sSL https://ghfast.top/github.com/Mapleawaa/PVE-Tools-9/blob/main/PVE-Tools.sh)
</code></pre>
<h2 id="pve显示温度">PVE显示温度</h2>
<pre><code>(curl -Lf -o /tmp/temp.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) &amp;&amp; chmod +x /tmp/temp.sh &amp;&amp; /tmp/temp.sh remod
</code></pre>
<h2 id="pve换源">Pve换源</h2>
<p>按照命令一直执行就行了，没有坑</p>
<p>GitHub上的项目:<a href="https://github.com/xiangfeidexiaohuo/ProxmoxVE-7.0-DIY">PVE集合项目</a></p>
<p><strong>必须保证pve系统能联网，没联网，没法换源。</strong></p>
<p><strong>SSH登录到pve后台，然后一条一条的执行命令</strong></p>
<h3 id="1处理掉企业源">1.处理掉企业源</h3>
<pre><code>rm -rf /etc/apt/sources.list.d/pve-install-repo.list
</code></pre>
<pre><code>echo "#deb https://enterprise.proxmox.com/debian/pve Bullseye pve-enterprise" &gt; /etc/apt/sources.list.d/pve-enterprise.list
</code></pre>
<h3 id="2开始换源">2.开始换源</h3>
<pre><code>wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
</code></pre>
<pre><code>echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription" &gt; /etc/apt/sources.list.d/pve-no-subscription.list
</code></pre>
<pre><code>echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-pacific bullseye main" &gt; /etc/apt/sources.list.d/ceph.list
</code></pre>
<pre><code>sed -i.bak "s#http://download.proxmox.com/debian#https://mirrors.ustc.edu.cn/proxmox/debian#g" /usr/share/perl5/PVE/CLI/pveceph.pm
</code></pre>
<pre><code>sed -i.bak "s#ftp.debian.org/debian#mirrors.aliyun.com/debian#g" /etc/apt/sources.list
</code></pre>
<pre><code>sed -i "s#security.debian.org#mirrors.aliyun.com/debian-security#g" /etc/apt/sources.list
</code></pre>
<pre><code>echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" &gt;&gt;  /etc/apt/sources.list
</code></pre>
<h3 id="3最后更新">3.最后更新</h3>
<pre><code>apt update &amp;&amp; apt dist-upgrade -y
</code></pre>
<h2 id="pve升级内核">PVE升级内核</h2>
<ul>
 <li>
  <p>PVE7.x目前官方默认内核是5.15，找到个第三方的6.0内核，也可以玩玩。</p>
 </li>
 <li>
  <p>仅适用于PVE 7.x，PVE6.x绕道。</p>
 </li>
 <li>
  <p>仅适用于动手能力强的，小白绕道!</p>
 </li>
 <li>
  <p>升级内核可能有翻车的风险，风险自行承担！</p>
 </li>
</ul>
<h3 id="升级60内核之前请先牢记当前pve的内核版本号后面回退要用">升级6.0内核之前，请先牢记当前pve的内核版本号，后面回退要用。</h3>
<p><strong>查看内核指令</strong></p>
<pre><code>uname -a
</code></pre>
<h3 id="添加存储库的gpg密钥终端执行">添加存储库的GPG密钥，终端执行：</h3>
<pre><code>curl -1sLf 'https://dl.cloudsmith.io/public/pve-edge/kernel/gpg.8EC01CCF309B98E7.key' | gpg --dearmor -o /usr/share/keyrings/pve-edge-kernel.gpg
</code></pre>
<h3 id="设置pve-edge-kernel存储库终端执行">设置pve-edge-kernel存储库，终端执行：</h3>
<pre><code>echo "deb [signed-by=/usr/share/keyrings/pve-edge-kernel.gpg] https://dl.cloudsmith.io/public/pve-edge/kernel/deb/debian bullseye main" &gt; /etc/apt/sources.list.d/pve-edge-kernel.list
</code></pre>
<h3 id="安装内核终端执行">安装内核，终端执行：</h3>
<pre><code>apt update
</code></pre>
<pre><code>apt install pve-kernel-6.0-edge
</code></pre>
<h3 id="重启以后内核就升级到60了">重启以后，内核就升级到6.0了。</h3>
<pre><code>reboot
</code></pre>
<blockquote>
 <p>查看内核更新没，可去下面的网址看看，若有新版，重复第三步的操作。</p>
</blockquote>
<p><a href="https://github.com/fabianishere/pve-edge-kernel/releases">查看内核更新</a></p>
<blockquote>
 <p>已经升级到第三方内核，如果你在wed界面“更新”，看到更新，就不要胡乱更新了。</p>
</blockquote>
<h3 id="回退">回退</h3>
<p>如果需要回退内核，利用proxmox-boot-tool回退，终端执行：</p>
<pre><code>proxmox-boot-tool kernel pin 升级前的内核版本号

</code></pre>
<p><strong>升级前我的内核版本号是：5.15.64-1-pve，所以命令如下：</strong></p>
<pre><code>proxmox-boot-tool kernel pin 5.15.64-1-pve

</code></pre>
<pre><code>proxmox-boot-tool refresh
</code></pre>
<p><strong>执行完第7步的两条命令后，系统重启，内核就回退了。
  <br> 然后看到内核切回了，然后终端运行：</strong></p>
<pre><code>rm -rf /etc/default/grub.d/proxmox-kernel-pin.cfg
</code></pre>
<p><strong>以后就能正常使用“升级”来更新PVE。</strong></p>
<h2 id="换源">换源</h2>
<p><strong>pve的软件源</strong>
 <br>
 默认在这个位置
 <br>
 <code>/etc/apt/sources.list.d/pve-enterprise.list</code></p>
<p>换成这个</p>
<pre><code>deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription
</code></pre>
<p><strong>更换lxc容器源</strong></p>
<p>将 <code>/usr/share/perl5/PVE/APLInfo.pm</code> 文件中默认的源地址 <code>http://download.proxmox.com</code> 替换为 <code>https://mirrors.tuna.tsinghua.edu.cn/proxmox</code> 即可。</p>
<pre><code>sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
</code></pre>
<p>然后重新启动服务</p>
<pre><code>systemctl restart pvedaemon.service
</code></pre>]]></description><guid isPermaLink="false">/archives/139</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>软路由</category><category>技术分类</category><pubDate>Fri, 2 Jun 2023 02:37:50 GMT</pubDate></item><item><title><![CDATA[ZeroTierOne异地组网和搭建moon服务器低延迟VPN]]></title><link>https://7boe.top/archives/138</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=ZeroTierOne%E5%BC%82%E5%9C%B0%E7%BB%84%E7%BD%91%E5%92%8C%E6%90%AD%E5%BB%BAmoon%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BD%8E%E5%BB%B6%E8%BF%9FVPN&amp;url=/archives/138" width="1" height="1" alt="" style="opacity:0;">
<h1 id="zerotierone" tabindex="-1">ZeroTierOne</h1>
<p>部分内容引用自知乎和csdn</p>
<blockquote>
 <p>最近在做内网穿透，了解到有很多方案，打算都尝试一下，如果有不对的地方，欢迎指正，如果有更好的方案，欢迎提出建议
  <br>
  先说一下需求：Linux设备是连接在用户路由器上，用户没有公网IP，然后希望用户可以通过手机APP或者网页随时随地的访问设备
  <br>
  方案：目前我能找到的内网穿透的方案主要有以下几种:
  <br>
  Frp，Ngrok，Natapp，Spike，花生壳，Zerotier</p>
</blockquote>
<p><strong>我用过的内网穿透方案都不太好用，主要是只能穿透单个服务以及端口，切大多数要钱</strong></p>
<p><a href="https://www.zerotier.com/" target="_blank">zerotier</a>
 <br>
 去官网下载客户端windows版本和linux都有，本篇文章会已最简单的方式告诉你如何搭建自己的大内网。</p>
<h2 id="%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B" tabindex="-1">搭建教程</h2>
<p><strong>注册账号这个都不用讲了官网直接login,直接GITHUB登录最快</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fhanbeikai%2Fmy_pic_repository%2Fmaster%2Fimage_repository%2F20201112230514.png&amp;size=m" alt="alt"></p>
<h3 id="%E5%88%9B%E5%BB%BAnetwork%E9%85%8D%E7%BD%AE" tabindex="-1">创建NETWORK配置</h3>
<p>直接点就行了
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fhanbeikai%2Fmy_pic_repository%2Fmaster%2Fimage_repository%2F20201112230645.png&amp;size=m" alt="img"></p>
<p>点id进去配置一下简单的设置
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fhanbeikai%2Fmy_pic_repository%2Fmaster%2Fimage_repository%2F20201112230306.png&amp;size=m" alt="img">
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fhanbeikai%2Fmy_pic_repository%2Fmaster%2Fimage_repository%2F20201112234054.png&amp;size=m" alt="img"></p>
<p><strong>配置一下ip段方便记录就行了，然后下面是配置加入的用户</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F05%2F29%2F64741a73da642.png&amp;size=m" alt="img"></p>
<p><strong>windows里面下载客服端地址：<a href="https://download.zerotier.com/dist/ZeroTier%20One.msi" target="_blank">zerotier</a>
  <br> 安装好后一定要powershell管理员模式
  <br> 里面的指令我总结几个常用的</strong></p>
<p><strong>liunx下指令一样</strong></p>
<pre><code class="language-">zerotier-cli join [要加入的网络id]
zerotier-cli listpeers   #列出加入的网络设备有哪些，有时候刷新慢的很，需要重启服务才行
zerotier-cli listmoons   #列出设置的moons服务器，会把你1加入的moons服务器列出来一般只能加入一台
zerotier-cli orbit [moons服务器id] [moons服务器id]  #注意这边id是要打两边，不是我打错了注意！！！
zerotier-cli deorbit [moons服务器id] [moons服务器id]   #这边是退出moons服务器的指令，需要设置别的moons服务器需要先退出。
</code></pre>
<p><strong>Linux一键安装脚本，默认会安装到/var/lib/zerotier</strong></p>
<pre><code class="language-">curl -s https://install.zerotier.com | sudo bash
</code></pre>
<h2 id="%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84moon%E6%9C%8D%E5%8A%A1%E5%99%A8" tabindex="-1">搭建自己的moon服务器</h2>
<p><strong>因为是国外服务器，延迟比较高，所以这里采用阿里云香港服务器，带宽30m的
  <br> 实测搭建后ping延迟60内</strong></p>
<p>Linux搭建服务器，其实windows下做服务器指令基本一样，原理操作一样。</p>
<pre><code class="language-">systemctl start zerotier-one.service  #启动服务
systemctl enable zerotier-one.service  #开机自启服务
zerotier-cli join e5cd7a9e1c86361e   #先加入网络id，这个id替换成你的就行了
cd /var/lib/zerotier-one/  #到软件目录下去
zerotier-idtool initmoon identity.public &gt; moon.json  #生成moons服务器配置
vim moon.json  #编辑moons配置文件
</code></pre>
<p><strong>配置文件里面大概这样</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic3.zhimg.com%2F80%2Fv2-262bff377eab3b0d975c39731f23931a_720w.webp&amp;size=m" alt="img"></p>
<p><strong>需要修改的内容</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fpic3.zhimg.com%2F80%2Fv2-e9d6bcef3d194354be4556d215aff5b2_720w.webp&amp;size=m" alt="img">
 <br>
 <strong>这里面的是服务器ipv4地址，以及9993moon默认服务器端口，记得用/不是：</strong>
 <br>
 <ins><strong>两边引号不要忘了注意！！！！！！</strong></ins>
 <br>
 然后esc按冒号键直接wq报错退出</p>
<h3 id="%E7%94%9F%E6%88%90%E7%AD%BE%E5%90%8D%E6%96%87%E4%BB%B6" tabindex="-1">生成签名文件</h3>
<pre><code class="language-">zerotier-idtool genmoon moon.json
</code></pre>
<p>**执行之后会生产一个000000xxxx.moon的文件，将这个文件通过宝塔面板下载本地，后面xxx是你的设备id，记住这个后面要用
 <br>
 **
 <br>
 <strong>将moon节点加入网络。创建moons.d文件夹，并把签名文件移动到文件夹内
  <br> 原本是没有这个目录的，创建一个就行了</strong></p>
<p>把上面00000xxxx的那个文件放进去，就可以了</p>
<pre><code class="language-">systemctl restart zerotier-one   #重启服务就行了
</code></pre>
<p>到此搭建完成，接下来讲如何选择到moon上去</p>
<p>windows下powershell管理员模式</p>
<pre><code class="language-">zerotier-cli orbit ed2c88f24 ed2c88f24  #后面是你的moons服务器的id，要输入两次
zerotier-cli listmoons  #查看是否加入成功，一般输入后会需要缓一下，没法直接列出来，要等一下，然后会输出你moon上的配置

</code></pre>
<p><strong>详解，这里面的leaf是以及加入的设备，planet是官方的根服务器，moon是你加入的moon服务器，加入后输入指令</strong></p>
<pre><code class="language-">zerotier-cli listpeers #看到尾部有moon字样就设置成功了
</code></pre>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fattachment.moyann.com%2Fmsl_la%2F2021%2F02%2F10%2F622062050995360%2F1612962203.png&amp;size=m" alt="img"></p>
<h2 id="%E6%B5%8B%E8%AF%95" tabindex="-1">测试</h2>
<p><strong>直接ping到moon服务器的延迟，当然测试ip要用虚拟局域网的ip测试ping
  <br> 然后加入其他的设备进行测试香港延迟一般60左右。</strong></p>
<h2 id="%E8%87%AA%E5%BB%BAplanet%E6%96%B9%E6%B3%95" tabindex="-1">自建planet方法</h2>
<blockquote>
 <p>这个方法目前是编译planet文件，让节点直接中自己的服务器，并且删除其他官方节点</p>
</blockquote>
<p>GITHUB项目:<a href="https://github.com/Jonnyan404/zerotier-planet.git" target="_blank">docker搭建方式</a>
 <br>
 GITEE:<a href="https://gitee.com/opopop880/ztncui" target="_blank">脚本搭建方式</a>
 <br>
 <strong>这两种搭建方式都可以生产一个面板，把自己的几台设备加入到面板当中</strong></p>
<p><strong>liunx里面搭建</strong></p>
<pre><code class="language-">wget https://cdn.jsdelivr.net/gh/kaaass/ZeroTierOne@releases/download/mkmoonworld-1.0/mkmoonworld-x86
</code></pre>
<p>下载编译文件</p>
<pre><code class="language-">./mkmoonworld-x86_64 ./moon.json
mv world.bin planet
</code></pre>
<p><strong>编译完成后改一个名字，然后替换到zerotier更目录里面的planet文件就可以了，每一个客户端也替换，亲测本地打洞省内延迟10ms</strong></p>]]></description><guid isPermaLink="false">/archives/138</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Mon, 29 May 2023 03:34:47 GMT</pubDate></item><item><title><![CDATA[GITHUB项目网易云解灰]]></title><link>https://7boe.top/archives/137</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E7%BD%91%E6%98%93%E4%BA%91%E8%A7%A3%E7%81%B0&amp;url=/archives/137" width="1" height="1" alt="" style="opacity:0;">
<h2 id="unblockneteasemusic" tabindex="-1">UnblockNeteaseMusic</h2>
<blockquote>
 <p>关于解锁网易云音乐客户端变灰歌曲
  <br>
  比较忌讳的话题，涉及到某些人利益，本文章是属于转载分享类，不涉及商业牟利，仅供学习参考，请在24小时内删除。</p>
</blockquote>
<p>本文章转自GITHUB分享
 <br>
 GITHUB链接:<a href="https://github.com/UnblockNeteaseMusic/server" target="_blank">作者仓库</a>
 <br>
 如何搭建以及使用会放到后面
 <br>
 先看作者自述</p>
<h2 id="readme" tabindex="-1">README</h2>
<!-- Thanks to https://zhconvert.org's Chinese (China) converter ! -->
<img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F47980314-0e3f1700-e102-11e8-8857-e3436ecc8beb.png&amp;size=m" alt="logo" width="140" height="140" align="right">
<h3 id="unblockneteasemusic-1" tabindex="-1">UnblockNeteaseMusic</h3>
<p>解锁网易云音乐客户端变灰歌曲</p>
<p><a href="https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver?ref=badge_shield" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fapp.fossa.com%2Fapi%2Fprojects%2Fgit%252Bgithub.com%252FUnblockNeteaseMusic%252Fserver.svg%3Ftype%3Dshield&amp;size=m" alt="FOSSA Status"></a></p>
<h3 id="%E7%89%B9%E6%80%A7" tabindex="-1">特性</h3>
<ul>
 <li>支援多个音源，替换变灰歌曲链接
  <ul>
   <li>支援的完整音源清单可以见下方〈音源清单〉处。</li>
  </ul></li>
 <li>为请求增加 <code>X-Real-IP</code> 参数解锁海外限制，支持指定网易云服务器 IP，支持设置上游 HTTP / HTTPS 代理</li>
 <li>完整的流量代理功能 (HTTP / HTTPS)，可直接作为系统代理 (同时支持 PAC)</li>
</ul>
<h3 id="%E8%BF%90%E8%A1%8C" tabindex="-1">运行</h3>
<h4 id="%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%E5%8F%AF%E8%BF%90%E8%A1%8C%E6%96%87%E4%BB%B6" tabindex="-1">直接打开可运行文件</h4>
<p>去右侧的 Releases 找到最新版本，然后在下方的 Assets 找到符合你系统架构的可运行文件。下载回来后点两下即可使用。</p>
<blockquote>
 <p>macOS 因为签名问题，暂时不提供可运行文件。请先按照其他做法使用。</p>
</blockquote>
<h4 id="npm-%E5%AE%89%E8%A3%85" tabindex="-1">NPM 安装</h4>
<h5 id="%E5%AE%89%E8%A3%85%E6%88%90%E4%BE%9D%E8%B5%96" tabindex="-1">安装成依赖</h5>
<pre><code class="language-bash">npm install @unblockneteasemusic/server
yarn add @unblockneteasemusic/server # for Yarn users
</code></pre>
<h5 id="%E7%94%A8-npx-%E8%BF%90%E8%A1%8C" tabindex="-1">用 NPX 运行</h5>
<pre><code class="language-bash">npx -p @unblockneteasemusic/server unblockneteasemusic
</code></pre>
<h3 id="%E6%B3%A8%E5%86%8C%E6%88%90-windows-%E6%9C%8D%E5%8A%A1" tabindex="-1">注册成 Windows 服务</h3>
<h4 id="%E5%AE%89%E8%A3%85%E6%9C%8D%E5%8A%A1" tabindex="-1">安装服务</h4>
<p>直接 <code>clone</code> 或下载本项目，在项目根目录运行 <code>node ./nw.js</code>。会有弹窗，直接确定即可。如果有安全管家等软件可能会阻止，直接允许即可。运行成功后可在电脑服务中看到该服务。</p>
<h4 id="%E9%85%8D%E7%BD%AE" tabindex="-1">配置</h4>
<p>http 代理使用 <code>127.0.0.1</code>，端口默认使用 <code>8080</code>。</p>
<p>如果想要添加启动参数和环境变量，请在项目根目录中的 <code>nw.js</code> 中配置 <code>scriptOptions</code> 和 <code>env</code>。</p>
<blockquote>
 <p>如果想要卸载已安装的服务，请再次运行 <code>node ./nw.js</code>。</p>
 <p>安装服务后，会在项目根目录生成 <code>daemon</code> 文件夹。可在这里查看日志。</p>
</blockquote>
<h3 id="docker-%E4%BD%9C%E6%B3%95" tabindex="-1">Docker 作法</h3>
<h4 id="docker-hub" tabindex="-1">Docker Hub</h4>
<p>见 <a href="https://hub.docker.com/repository/docker/pan93412/unblock-netease-music-enhanced" target="_blank">pan93412/unblock-netease-music-enhanced</a>
 <br>
 。<code>latest</code> 是从 <code>enhanced</code> 组建的最新版本；<code>release</code> 是最新 tag 的版本。</p>
<p>直接运行 <code>pan93412/unblock-netease-music-enhanced</code> 的命令如下：</p>
<pre><code class="language-bash">docker run pan93412/unblock-netease-music-enhanced
</code></pre>
<p>若要更新 UnblockNeteaseMusic，请运行以下命令后重新 <code>run</code>：</p>
<pre><code class="language-">docker pull pan93412/unblock-netease-music-enhanced
</code></pre>
<p>若要指定环境变量，您可以往 <code>docker run</code> 传入 <code>-e</code>，就像这样：</p>
<pre><code class="language-bash">docker run -e JSON_LOG=true -e LOG_LEVEL=debug pan93412/unblock-netease-music-enhanced
</code></pre>
<p>若要传入配置参数，只要在 <code>docker run</code> 的 image 之后传入参数即可：</p>
<pre><code class="language-bash">docker run pan93412/unblock-netease-music-enhanced -o bilibili -p 1234
</code></pre>
<h4 id="%E8%87%AA%E8%A1%8C%E7%BC%96%E8%AF%91" tabindex="-1">自行编译</h4>
<pre><code class="language-bash">git clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic
cd UnblockNeteaseMusic
docker-compose up
</code></pre>
<h3 id="%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8-repo-%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC" tabindex="-1">直接使用 Repo 最新版本</h3>
<pre><code class="language-bash">git clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic
cd UnblockNeteaseMusic
node app.js # 建议使用 screen / tmux 把 app.js 挂后台
</code></pre>
<p>更新：</p>
<pre><code class="language-">git pull
</code></pre>
<h4 id="%E7%BC%96%E8%AF%91%E6%9C%80%E6%96%B0%E7%9A%84-package" tabindex="-1">编译最新的 package</h4>
<pre><code class="language-bash">yarn
yarn build
node app.js # 即可使用 repo 的最新开发内容
</code></pre>
<h4 id="%E9%87%87%E7%94%A8%EF%BC%88%E8%80%8C%E4%B8%8D%E7%BC%96%E8%AF%91%EF%BC%89%E6%9C%80%E6%96%B0%E7%9A%84-package" tabindex="-1">采用（而不编译）最新的 package</h4>
<pre><code class="language-bash">yarn
DEVELOPMENT=true yarn node app.js
</code></pre>
<h3 id="betterncm-%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E5%99%A8" tabindex="-1">BetterNCM 一键安装器</h3>
<p>请移步至 <a href="https://github.com/ReviveUnblockNCMInstaller/RevivedUnblockInstaller" target="_blank">RevivedUnblockInstaller</a>。</p>
<h3 id="android-xposed-%E6%A8%A1%E5%9D%97" tabindex="-1">Android Xposed 模块</h3>
<p>请移步至 <a href="https://github.com/nining377/dolby_beta" target="_blank">杜比大喇叭 β 版</a>。</p>
<h3 id="openwrt-luci-%E6%8F%92%E4%BB%B6" tabindex="-1">OpenWrt LuCI 插件</h3>
<p>请移步至 <a href="https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic" target="_blank">luci-app-unblockneteasemusic</a>。</p>
<h3 id="%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0" tabindex="-1">配置参数</h3>
<pre><code class="language-bash">$ unblockneteasemusic -h
usage: unblockneteasemusic [-v] [-p http[:https]] [-a address] [-u url] [-f host]
                           [-o source [source ...]] [-t token] [-e url] [-s]
                           [-h]

optional arguments:
  -v, --version                   output the version number
  -p port, --port http[:https]    specify server port
  -a address, --address address   specify server host
  -u url, --proxy-url url         request through upstream proxy
  -f host, --force-host host      force the netease server ip
  -o source [source ...], --match-order source [source ...]
                                  set priority of sources
  -t token, --token token         set up proxy authentication
  -e url, --endpoint url          replace virtual endpoint with public host
  -s, --strict                    enable proxy limitation
  -c, --cnrelay host:port         Mainland China relay to get music url
  -h, --help                      output usage information
</code></pre>
<h3 id="%E9%9F%B3%E6%BA%90%E6%B8%85%E5%8D%95" tabindex="-1">音源清单</h3>
<p>将有兴趣的音源代号用 <code>-o</code> 传入 UNM 即可使用，像这样：</p>
<pre><code class="language-bash">node app.js -o bilibili ytdlp
</code></pre>
<table>
 <thead>
  <tr>
   <th>名称</th>
   <th>代号</th>
   <th>默认启用</th>
   <th>注意事项</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>QQ 音乐</td>
   <td><code>qq</code></td>
   <td></td>
   <td>需要准备自己的 <code>QQ_COOKIE</code>（请参阅下方〈环境变量〉处）。必须使用 QQ 登录。</td>
  </tr>
  <tr>
   <td>酷狗音乐</td>
   <td><code>kugou</code></td>
   <td>✅</td>
   <td></td>
  </tr>
  <tr>
   <td>酷我音乐</td>
   <td><code>kuwo</code></td>
   <td>✅</td>
   <td></td>
  </tr>
  <tr>
   <td>咪咕音乐</td>
   <td><code>migu</code></td>
   <td>✅</td>
   <td>需要准备自己的 <code>MIGU_COOKIE</code>（请参阅下方〈环境变量〉处）。</td>
  </tr>
  <tr>
   <td>JOOX</td>
   <td><code>joox</code></td>
   <td></td>
   <td>需要准备自己的 <code>JOOX_COOKIE</code>（请参阅下方〈环境变量〉处）。似乎有严格地区限制。</td>
  </tr>
  <tr>
   <td>YouTube（纯 JS 解析方式）</td>
   <td><code>youtube</code></td>
   <td></td>
   <td>需要 Google 认定的<strong>非中国大陆区域</strong> IP 地址。</td>
  </tr>
  <tr>
   <td>yt-download</td>
   <td><code>ytdownload</code></td>
   <td></td>
   <td><strong>似乎不能使用</strong>。</td>
  </tr>
  <tr>
   <td>YouTube（通过 <code>youtube-dl</code>)</td>
   <td><code>youtubedl</code></td>
   <td></td>
   <td>需要自行安装 <code>youtube-dl</code>。</td>
  </tr>
  <tr>
   <td>YouTube（通过 <code>yt-dlp</code>)</td>
   <td><code>ytdlp</code></td>
   <td>✅</td>
   <td>需要自行安装 <code>yt-dlp</code>（<code>youtube-dl</code> 仍在活跃维护的 fork）。</td>
  </tr>
  <tr>
   <td>B 站音乐</td>
   <td><code>bilibili</code></td>
   <td>✅</td>
   <td></td>
  </tr>
  <tr>
   <td>第三方网易云 API</td>
   <td><code>pyncmd</code></td>
   <td></td>
   <td></td>
  </tr>
 </tbody>
</table>
<h3 id="%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F" tabindex="-1">环境变量</h3>
<table>
 <thead>
  <tr>
   <th>变量名称</th>
   <th>类型</th>
   <th>描述</th>
   <th>示例</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>ENABLE_FLAC</td>
   <td>bool</td>
   <td>激活无损音质获取</td>
   <td><code>ENABLE_FLAC=true</code></td>
  </tr>
  <tr>
   <td>ENABLE_LOCAL_VIP</td>
   <td>str</td>
   <td>激活本地黑胶 VIP，可选值：<code>true</code>（等同于 CVIP）、<code>cvip</code> 和 <code>svip</code></td>
   <td><code>ENABLE_LOCAL_VIP=svip</code></td>
  </tr>
  <tr>
   <td>LOCAL_VIP_UID</td>
   <td>str</td>
   <td>仅对这些 UID 激活本地黑胶 VIP，默认为对全部用户生效</td>
   <td><code>LOCAL_VIP_UID=123456789,1234,123456</code></td>
  </tr>
  <tr>
   <td>ENABLE_HTTPDNS</td>
   <td>bool</td>
   <td>激活故障的 Netease HTTPDNS 查询（不建议）</td>
   <td><code>ENABLE_HTTPDNS=true</code></td>
  </tr>
  <tr>
   <td>BLOCK_ADS</td>
   <td>bool</td>
   <td>屏蔽应用内部分广告</td>
   <td><code>BLOCK_ADS=true</code></td>
  </tr>
  <tr>
   <td>DISABLE_UPGRADE_CHECK</td>
   <td>bool</td>
   <td>禁用更新检测</td>
   <td><code>DISABLE_UPGRADE_CHECK=true</code></td>
  </tr>
  <tr>
   <td>DEVELOPMENT</td>
   <td>bool</td>
   <td>激活开发模式。需要自己用 <code>yarn</code> 安装依赖 (dependencies)</td>
   <td><code>DEVELOPMENT=true</code></td>
  </tr>
  <tr>
   <td>FOLLOW_SOURCE_ORDER</td>
   <td>bool</td>
   <td>严格按照配置音源的顺序进行查询</td>
   <td><code>FOLLOW_SOURCE_ORDER=true</code></td>
  </tr>
  <tr>
   <td>JSON_LOG</td>
   <td>bool</td>
   <td>输出机器可读的 JSON 记录格式</td>
   <td><code>JSON_LOG=true</code></td>
  </tr>
  <tr>
   <td>NO_CACHE</td>
   <td>bool</td>
   <td>停用 cache</td>
   <td><code>NO_CACHE=true</code></td>
  </tr>
  <tr>
   <td>MIN_BR</td>
   <td>int</td>
   <td>允许的最低源音质，小于该值将被替换</td>
   <td><code>MIN_BR=320000</code></td>
  </tr>
  <tr>
   <td>SELECT_MAX_BR</td>
   <td>bool</td>
   <td>选择所有音源中的最高码率替换音频</td>
   <td><code>SELECT_MAX_BR=true</code></td>
  </tr>
  <tr>
   <td>LOG_LEVEL</td>
   <td>str</td>
   <td>日志输出等级。请见〈日志等级〉部分。</td>
   <td><code>LOG_LEVEL=debug</code></td>
  </tr>
  <tr>
   <td>LOG_FILE</td>
   <td>str</td>
   <td>从 Pino 端设置日志输出的文件位置。也可以用 <code>*sh</code> 的输出重导向功能 (<code>node app.js &gt;&gt; app.log</code>) 代替</td>
   <td><code>LOG_FILE=app.log</code></td>
  </tr>
  <tr>
   <td>JOOX_COOKIE</td>
   <td>str</td>
   <td>JOOX 音源的 wmid 和 session_key cookie</td>
   <td><code>JOOX_COOKIE="wmid=&lt;your_wmid&gt;; session_key=&lt;your_session_key&gt;"</code></td>
  </tr>
  <tr>
   <td>MIGU_COOKIE</td>
   <td>str</td>
   <td>咪咕音源的 aversionid cookie</td>
   <td><code>MIGU_COOKIE="&lt;your_aversionid&gt;"</code></td>
  </tr>
  <tr>
   <td>QQ_COOKIE</td>
   <td>str</td>
   <td>QQ 音源的 uin 和 qm_keyst cookie</td>
   <td><code>QQ_COOKIE="uin=&lt;your_uin&gt;; qm_keyst=&lt;your_qm_keyst&gt;"</code></td>
  </tr>
  <tr>
   <td>YOUTUBE_KEY</td>
   <td>str</td>
   <td>Youtube 音源的 Data API v3 Key</td>
   <td><code>YOUTUBE_KEY="&lt;your_data_api_key&gt;"</code></td>
  </tr>
  <tr>
   <td>SIGN_CERT</td>
   <td>path</td>
   <td>自定义证书文件</td>
   <td><code>SIGN_CERT="./server.crt"</code></td>
  </tr>
  <tr>
   <td>SIGN_KEY</td>
   <td>path</td>
   <td>自定义密钥文件</td>
   <td><code>SIGN_KEY="./server.key"</code></td>
  </tr>
  <tr>
   <td>SEARCH_ALBUM</td>
   <td>bool</td>
   <td>在其他音源搜索歌曲时携带专辑名称（默认搜索条件 <code>歌曲名 - 歌手</code>，启用后搜索条件 <code>歌曲名 - 歌手 专辑名</code>）</td>
   <td><code>SEARCH_ALBUM=true</code></td>
  </tr>
 </tbody>
</table>
<h4 id="%E6%97%A5%E5%BF%97%E7%AD%89%E7%BA%A7-(log_level)" tabindex="-1">日志等级 (<code>LOG_LEVEL</code>)</h4>
<p>这些是常用的值：</p>
<ul>
 <li><code>debug</code>: 输出所有记录（调试用）</li>
 <li><code>info</code>: 只输出一般资讯（默认值）</li>
 <li><code>error</code>: 只在出严重问题时输出</li>
</ul>
<p>详细请参见 <a href="https://github.com/pinojs/pino/blob/master/docs/api.md#level-string" target="_blank">Pino 对此的说明</a>。</p>
<h3 id="%E4%BD%BF%E7%94%A8" tabindex="-1">使用</h3>
<p><strong>警告</strong>：本项目不提供在线 demo，请不要轻易信任使用他人提供的公开代理服务，以免发生安全问题</p>
<p><strong>若将服务部署到公网，强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) <code>-s</code> 限制代理范围 (需使用 PAC 或 hosts)，<s>或激活 Proxy Authentication <code>-t &lt;name&gt;:&lt;password&gt;</code> 设置代理用户名密码</s> (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效，请不要使用)，以防代理被他人滥用</strong></p>
<p>支持 Windows 客户端，UWP 客户端，Android 客户端，Linux 客户端 (1.2 版本以上需要自签证书 MITM，启动客户端需要增加 <code>--ignore-certificate-errors</code> 参数)，macOS 客户端 (726 版本以上需要自签证书)，iOS 客户端 (配置 https endpoint 或使用自签证书) 和网页版 (需要自签证书，需要脚本配合)</p>
<p>目前除 UWP 外其它客户端均优先请求 HTTPS 接口，<s>默认配置下本代理对网易云所有 HTTPS API 连接返回空数据，促使客户端降级使用 HTTP 接口</s> (新版 Linux 客户端和 macOS 客户端已无法降级)</p>
<p>因 UWP 应用存在网络隔离，限制流量发送到本机，若使用的代理在 localhost，或修改的 hosts 指向 localhost，需为 “网易云音乐 UWP” 手工开启 loopback 才能使用，请以<strong>管理员身份</strong>运行命令</p>
<pre><code class="language-powershell">checknetisolation loopbackexempt -a -n="1F8B0F94.122165AE053F_j2p0p5q0044a6"
</code></pre>
<h4 id="%E6%96%B9%E6%B3%95-1.-%E4%BF%AE%E6%94%B9-hosts" tabindex="-1">方法 1. 修改 hosts</h4>
<p>向 hosts 文件添加两条规则</p>
<pre><code class="language-hosts">&lt;Server IP&gt; music.163.com
&lt;Server IP&gt; interface.music.163.com
</code></pre>
<blockquote>
 <p>使用此方法必须监听 80 端口 <code>-p 80</code></p>
 <p><strong>若在本机运行程序</strong>，请指定网易云服务器 IP <code>-f xxx.xxx.xxx.xxx</code> (可在修改 hosts 前通过 <code>ping music.163.com</code> 获得) <strong>或</strong> 使用代理 <code>-u http(s)://xxx.xxx.xxx.xxx:xxx</code>，以防请求死循环</p>
 <p><strong>Android 客户端下修改 hosts 无法直接使用</strong>，原因和解决方法详见<a href="https://jixun.moe/post/netease-android-hosts-bypass/" target="_blank">云音乐安卓又搞事啦</a>，<a href="https://jixun.moe/post/android-block-netease-without-root/" target="_blank">安卓免 root 绕过网易云音乐 IP 限制</a></p>
</blockquote>
<h4 id="%E6%96%B9%E6%B3%95-2.-%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86" tabindex="-1">方法 2. 设置代理</h4>
<p>PAC 自动代理脚本地址 <code>http://&lt;Server Name:PORT&gt;/proxy.pac</code></p>
<p>全局代理地址填写服务器地址和端口号即可</p>
<table>
 <thead>
  <tr>
   <th style="text-align:left">平台</th>
   <th style="text-align:left">基础设置</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td style="text-align:left">Windows</td>
   <td style="text-align:left">设置 &gt; 工具 &gt; 自定义代理 (客户端内)</td>
  </tr>
  <tr>
   <td style="text-align:left">UWP</td>
   <td style="text-align:left">Windows 设置 &gt; 网络和 Internet &gt; 代理</td>
  </tr>
  <tr>
   <td style="text-align:left">Linux</td>
   <td style="text-align:left">系统设置 &gt; 网络 &gt; 网络代理</td>
  </tr>
  <tr>
   <td style="text-align:left">macOS</td>
   <td style="text-align:left">系统偏好设置 &gt; 网络 &gt; 高级 &gt; 代理</td>
  </tr>
  <tr>
   <td style="text-align:left">Android</td>
   <td style="text-align:left">WLAN &gt; 修改网络 &gt; 高级选项 &gt; 代理</td>
  </tr>
  <tr>
   <td style="text-align:left">iOS</td>
   <td style="text-align:left">无线局域网 &gt; HTTP 代理 &gt; 配置代理</td>
  </tr>
 </tbody>
</table>
<blockquote>
 <p>代理工具和方法有很多请自行探索，欢迎在 issues 讨论</p>
</blockquote>
<h4 id="%E2%9C%B3-%E6%96%B9%E6%B3%95-3.-%E8%B0%83%E7%94%A8%E6%8E%A5%E5%8F%A3" tabindex="-1">✳ 方法 3. 调用接口</h4>
<p>作为依赖库使用</p>
<pre><code class="language-javascript">const match = require('@unblockneteasemusic/server');

/**
 * Set proxy or hosts if needed
 */
global.proxy = require('url').parse('http://127.0.0.1:1080');
global.hosts = { 'i.y.qq.com': '59.37.96.220' };

/**
 * Find matching song from other platforms
 * @param {Number} id netease song id
 * @param {Array&lt;String&gt;||undefined} source support qq, xiami, baidu, kugou, kuwo, migu, joox
 * @return {Promise&lt;Object&gt;}
 */
match(418602084, ['qq', 'kuwo', 'migu']).then(console.log);
</code></pre>
<h4 id="%E8%A8%AD%E5%AE%9A-https-%E6%86%91%E8%AD%89" tabindex="-1">設定 HTTPS 憑證</h4>
<p>新版的 NeteaseMusic 需要 HTTPS 才能使用。证书的设置教学可参阅<a href="https://github.com/UnblockNeteaseMusic/server/discussions/426" target="_blank">《安裝 UNM 的 HTTPS 憑證》</a>一文。</p>
<h3 id="%E6%95%88%E6%9E%9C" tabindex="-1">效果</h3>
<h4 id="windows-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">Windows 客户端</h4>
<img alt="Windows 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F60316017-87de8a80-999b-11e9-9381-16d40efbe7f6.png&amp;size=m" width="100%">
<h4 id="uwp-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">UWP 客户端</h4>
<img alt="UWP 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F52215123-5a028780-28ce-11e9-8491-08c4c5dac3b4.png&amp;size=m" width="100%">
<h4 id="linux-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">Linux 客户端</h4>
<img alt="Linux 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F60316169-18b56600-999c-11e9-8ae5-5cd168b0edae.png&amp;size=m" width="100%">
<h4 id="macos-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">macOS 客户端</h4>
<img alt="macOS 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F52196035-51418f80-2895-11e9-8f33-78a631cdf151.png&amp;size=m" width="100%">
<h4 id="android-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">Android 客户端</h4>
<img alt="Android 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F57972549-eabd2900-79ce-11e9-8fef-95cb60906298.png&amp;size=m" width="50%">
<h4 id="ios-%E5%AE%A2%E6%88%B7%E7%AB%AF" tabindex="-1">iOS 客户端</h4>
<img alt="iOS 客户端" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F26399680%2F57972440-f90a4580-79cc-11e9-8dbf-6150ee299b9c.jpg&amp;size=m" width="50%">
<h3 id="%E8%87%B4%E8%B0%A2" tabindex="-1">致谢</h3>
<p>感谢大佬们为逆向 eapi 所做的努力</p>
<p>使用的其它平台音源 API 出自</p>
<p><a href="https://github.com/trazyn/ieaseMusic" target="_blank">trazyn/ieaseMusic</a></p>
<p><a href="https://github.com/listen1/listen1_chrome_extension" target="_blank">listen1/listen1_chrome_extension</a></p>
<p>向所有同类项目致敬</p>
<p><a href="https://github.com/EraserKing/CloudMusicGear" target="_blank">EraserKing/CloudMusicGear</a></p>
<p><a href="https://github.com/EraserKing/Unblock163MusicClient" target="_blank">EraserKing/Unblock163MusicClient</a></p>
<p><a href="https://github.com/ITJesse/UnblockNeteaseMusic/" target="_blank">ITJesse/UnblockNeteaseMusic</a></p>
<p><a href="https://github.com/bin456789/Unblock163MusicClient-Xposed" target="_blank">bin456789/Unblock163MusicClient-Xposed</a></p>
<p><a href="https://github.com/YiuChoi/Unlock163Music" target="_blank">YiuChoi/Unlock163Music</a></p>
<p><a href="https://github.com/yi-ji/NeteaseMusicAbroad" target="_blank">yi-ji/NeteaseMusicAbroad</a></p>
<p><a href="https://github.com/stomakun/NeteaseReverseLadder/" target="_blank">stomakun/NeteaseReverseLadder</a></p>
<p><a href="https://github.com/fengjueming/unblock-NetEaseMusic" target="_blank">fengjueming/unblock-NetEaseMusic</a></p>
<p><a href="https://github.com/acgotaku/NetEaseMusicWorld" target="_blank">acgotaku/NetEaseMusicWorld</a></p>
<p><a href="https://github.com/mengskysama/163-Cloud-Music-Unlock" target="_blank">mengskysama/163-Cloud-Music-Unlock</a></p>
<p><a href="https://github.com/azureplus/163-music-unlock" target="_blank">azureplus/163-music-unlock</a></p>
<p><a href="https://github.com/typcn/163music-mac-client-unlock" target="_blank">typcn/163music-mac-client-unlock</a></p>
<h3 id="%E8%AE%B8%E5%8F%AF" tabindex="-1">许可</h3>
<p>(Original project) <a href="https://github.com/nondanee/UnblockNeteaseMusic" target="_blank">nondanee/UnblockNeteaseMusic</a>: <a href="https://github.com/nondanee/UnblockNeteaseMusic/blob/master/LICENSE" target="_blank">MIT</a></p>
<p>(This project) <a href="https://github.com/UnblockNeteaseMusic/server" target="_blank">UnblockNeteaseMusic/server</a>: <a href="https://spdx.org/licenses/LGPL-3.0-only.html" target="_blank">LGPL-3.0-only</a></p>
<p><a href="https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver?ref=badge_large" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fapp.fossa.com%2Fapi%2Fprojects%2Fgit%252Bgithub.com%252FUnblockNeteaseMusic%252Fserver.svg%3Ftype%3Dlarge&amp;size=m" alt="FOSSA Status"></a></p>
<h2 id="%E6%90%AD%E5%BB%BA%E6%96%B9%E5%BC%8F" tabindex="-1">搭建方式</h2>
<p><strong>DOCKER</strong></p>
<blockquote>
 <p>目前使用DOCKER感觉还是可以的，毕竟能持久化运行且稳定，可以考虑搭建本地，因为搭建服务器所有的网易云流量会走服务器，且占用内存比较高
  <br>
  ，而且可以对接上篇文章，搭建的网易云在线播放器，进行解除灰色。</p>
</blockquote>
<pre><code class="language-">git clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic
cd UnblockNeteaseMusic
docker-compose up
</code></pre>
<p>DOCKER-COMPOSE</p>
<pre><code class="language-">version: '3'

services:
    unblockneteasemusic:
        build: .
        environment:
            NODE_ENV: production

        # Change sources here
        # command: ["-o", "bilibili", "kugou", "kuwo", "ytdlp"]

        ports:
            - ${HTTP_PROXY_PORT:-8080}:8080
            - ${HTTPS_PROXY_PORT:-8081}:8081
</code></pre>
<h2 id="%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8" tabindex="-1">如何使用</h2>
<p><strong>搭建完成后打开网易云</strong>
 <br>
 <strong>在设置里面翻到最后，找到代理服务器，输入本地ip，然后端口填写从DOCKER中映射出来的端口，例如什么的http端口8080
  <br> 就可以了然后重启网易云，周杰伦歌曲就可以听了。</strong></p>]]></description><guid isPermaLink="false">/archives/137</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>技术分类</category><pubDate>Mon, 15 May 2023 08:45:50 GMT</pubDate></item><item><title><![CDATA[GitHub项目之个人音乐网站]]></title><link>https://7boe.top/archives/136</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GitHub%E9%A1%B9%E7%9B%AE%E4%B9%8B%E4%B8%AA%E4%BA%BA%E9%9F%B3%E4%B9%90%E7%BD%91%E7%AB%99&amp;url=/archives/136" width="1" height="1" alt="" style="opacity:0;">
<h1 id="splayer%E9%A1%B9%E7%9B%AE" tabindex="-1">SPlayer项目</h1>
<blockquote>
 <p><strong>这是imsyy大佬的项目之一，我很多东西也有在用他的，原因是他很多东西做的都很好看，可以去他的github主页看看</strong></p>
</blockquote>
<p><strong>GITHUB:<a href="https://github.com/imsyy" target="_blank">作者地址</a>
  <br> 本项目地址:<a href="https://github.com/imsyy/SPlayer" target="_blank">此项目仓库</a></strong></p>
<p><strong>我的DEMO:<a href="https://wyy.7boe.top" target="_blank">登录使用更方便</a>
  <br> 我的网易云解除灰色:<a href="https://unm.7boe.top" target="_blank"> unm解灰</a>
  <br> 我的网易云api:<a href="https://api.7boe.top" target="_blank">网易云api调用接口</a></strong>
 <br>
 可以使用<a href="https://vercel.com/" target="_blank">vercel一键部署</a></p>
<hr>
<blockquote>
 <p>需要用到的其他api
  <br>
  解除网易云灰色:<a href="https://github.com/imsyy/UNM-Server" target="_blank">还是这个大佬写的项目</a>
  <br>
  用于解除网易云没有版权的音乐,下面有vercel一键部署
  <br>
  <a href="https://vercel.com/new/clone?repository-url=https://github.com/imsyy/UNM-Server" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fvercel.com%2Fbutton&amp;size=m" alt="Deploy with Vercel"></a></p>
</blockquote>
<hr>
<blockquote>
 <p>仓库<a href="https://github.com/Binaryify/NeteaseCloudMusicApi" target="_blank">网易云api接口调用</a>
  <br>
  可以去仓库看一下使用方法，嫌麻烦直接点下面一键部署然后链接GITHUB，然后输入项目名称就可以了，最好绑定一个域名方便记住api
  <br>
  <a href="https://vercel.com/new/clone?repository-url=https://github.com/Binaryify/NeteaseCloudMusicApi" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fvercel.com%2Fbutton&amp;size=m" alt="Deploy with Vercel"></a></p>
</blockquote>
<p><strong>不想手动搭建的伙伴可以直接api填写我的</strong></p>
<h2 id="readme" tabindex="-1">README</h2>
<div align="center">
 <img alt="logo" height="80" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fimsyy%2FSPlayer%2Fmaster%2Fpublic%2Fimages%2Flogo%2Ffavicon.png&amp;size=m">
 <h2>SPlayer</h2>
 <p>一个简约的在线音乐播放器</p>
 <img alt="main" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Fimsyy%2FSPlayer%2Fmaster%2Fscreenshots%2Fmain.png&amp;size=m">
</div>
<br>
<h3 id="%E8%AF%B4%E6%98%8E" tabindex="-1">说明</h3>
<ul>
 <li>本项目采用 <a href="https://cn.vuejs.org/" target="_blank">Vue 3</a> 全家桶和 <a href="https://www.naiveui.com/" target="_blank">Naïve UI</a> 组件库及 <code>SCSS</code> 开发</li>
 <li>目前主要以 <code>Web</code> 端为主，可能暂时不会考虑使用 <code>Electron</code> 构建客户端</li>
 <li>仅对移动端做了基础适配，<strong>不保证功能全部可用</strong></li>
 <li>欢迎各位大佬指点和 <code>Star</code> 哦 😍</li>
</ul>
<h3 id="%F0%9F%91%80-demo" tabindex="-1">👀 Demo</h3>
<ul>
 <li><a href="https://music.imsyy.top/" target="_blank">SPlayer</a></li>
</ul>
<h3 id="%F0%9F%8E%89-%E5%8A%9F%E8%83%BD" tabindex="-1">🎉 功能</h3>
<ul>
 <li>支持扫码登录</li>
 <li>支持手机号登录（上游接口暂时无法使用）</li>
 <li>自动进行每日签到及云贝签到</li>
 <li>支持 <a href="https://github.com/UnblockNeteaseMusic/server" target="_blank">UnblockNeteaseMusic</a>，自动替换变灰歌曲
  <ul>
   <li>由于酷我音源不支持 <code>https</code>，故网页端替换可能不全面</li>
  </ul></li>
 <li>下载歌曲（最高支持 Hi-Res）</li>
 <li>新建歌单及歌单编辑</li>
 <li>收藏 / 取消收藏歌单或歌手</li>
 <li>每日推荐歌曲</li>
 <li>私人 FM</li>
 <li>云盘音乐上传</li>
 <li>云盘内歌曲播放</li>
 <li>云盘内歌曲纠正</li>
 <li>云盘歌曲删除</li>
 <li>支持逐字歌词</li>
 <li>歌词滚动以及歌词翻译</li>
 <li>MV 与视频播放</li>
 <li>音乐频谱显示（ 暂时去除，还待完善 ）</li>
 <li>音乐渐入渐出</li>
 <li>支持 PWA</li>
 <li>支持评论区及评论点赞</li>
 <li>明暗模式自动 / 手动切换</li>
 <li>移动端基础适配</li>
</ul>
<h4 id="%E5%BE%85%E5%8A%9E" tabindex="-1">待办</h4>
<ul class="contains-task-list">
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 电台节目支持</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 发表评论</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> <code>i18n</code> 支持</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 重构（写成屎山了） 🤣</li>
</ul>
<h3 id="%F0%9F%98%8D-screenshots" tabindex="-1">😍 Screenshots</h3>
<details>
 <summary>主页面</summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fscreenshots%2FSPlayer%2520-%2520%25E4%25B8%25BB%25E9%25A1%25B5%25E9%259D%25A2.png&amp;size=m" alt="主页面"></p>
</details>
<details>
 <summary>播放页面</summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fscreenshots%2FSPlayer%2520-%2520%25E6%2592%25AD%25E6%2594%25BE%25E9%25A1%25B5%25E9%259D%25A2.png&amp;size=m" alt="播放页面"></p>
</details>
<details>
 <summary>发现页面</summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fscreenshots%2FSPlayer%2520-%2520%25E5%258F%2591%25E7%258E%25B0%25E9%25A1%25B5%25E9%259D%25A2.png&amp;size=m" alt="发现页面"></p>
</details>
<details>
 <summary>歌单页面</summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fscreenshots%2FSPlayer%2520-%2520%25E6%25AD%258C%25E5%258D%2595%25E9%25A1%25B5%25E9%259D%25A2.png&amp;size=m" alt="歌单页面"></p>
</details>
<details>
 <summary>评论页面</summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fscreenshots%2FSPlayer%2520-%2520%25E8%25AF%2584%25E8%25AE%25BA%25E9%25A1%25B5%25E9%259D%25A2.png&amp;size=m" alt="评论页面"></p>
</details>
<h3 id="%E2%9A%99%EF%B8%8F-%E9%83%A8%E7%BD%B2" tabindex="-1">⚙️ 部署</h3>
<blockquote>
 <p>Vercel 等托管平台可在 Fork 后一键导入并自动部署</p>
</blockquote>
<h3 id="api-%E6%9C%8D%E5%8A%A1%EF%BC%88%E5%BF%85%E9%9C%80%EF%BC%89" tabindex="-1">API 服务（必需）</h3>
<blockquote>
 <p>本程序依赖 <a href="https://github.com/Binaryify/NeteaseCloudMusicApi" target="_blank">NeteaseCloudMusicApi</a> 运行，请确保您已成功部署该项目</p>
</blockquote>
<ul>
 <li>请在根目录下的 <code>.env</code> 文件中的 <code>VITE_MUSIC_API</code> 中填入 API 地址（必需）</li>
</ul>
<pre><code class="language-js">VITE_MUSIC_API = "your api url"
</code></pre>
<h3 id="%E7%BD%91%E6%98%93%E4%BA%91%E8%A7%A3%E7%81%B0-api%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89" tabindex="-1">网易云解灰 API（可选）</h3>
<p>如需使用网易云解灰服务，请前往 <a href="https://github.com/imsyy/UNM-Server" target="_blank">UNM-Server</a> 部署在线 API 服务并将 <code>API</code> 地址填入 <code>.env</code> 环境变量中，该服务用于网页端替换无法播放或无版权的歌曲。如不需要该服务，请前往站点的 <code>全局设置</code> 中关闭</p>
<h3 id="%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96" tabindex="-1">安装依赖</h3>
<pre><code class="language-bash">pnpm install
# 或者
yarn install
# 或者
npm install
</code></pre>
<h3 id="%E5%BC%80%E5%8F%91" tabindex="-1">开发</h3>
<pre><code class="language-bash">pnpm dev
# 或者
yarn dev
# 或者
npm dev
</code></pre>
<h3 id="%E6%9E%84%E5%BB%BA" tabindex="-1">构建</h3>
<pre><code class="language-bash">pnpm build
# 或者
yarn build
# 或者
npm build
</code></pre>
<p>构建完成后可将生成的 <code>dist</code> 文件夹内的文件上传至服务器</p>
<h3 id="%F0%9F%98%98-%E9%B8%A3%E8%B0%A2" tabindex="-1">😘 鸣谢</h3>
<p>特此感谢为本项目提供支持与灵感的项目</p>
<ul>
 <li><a href="https://github.com/Binaryify/NeteaseCloudMusicApi" target="_blank">NeteaseCloudMusicApi</a></li>
 <li><a href="https://github.com/qier222/YesPlayMusic" target="_blank">YesPlayMusic</a></li>
 <li><a href="https://github.com/UnblockNeteaseMusic/server" target="_blank">UnblockNeteaseMusic</a></li>
 <li><a href="https://github.com/Project-And-Factory/BlurLyric" target="_blank">BlurLyric</a></li>
 <li><a href="https://github.com/maomao1996/Vue-mmPlayer" target="_blank">Vue-mmPlayer</a></li>
</ul>
<h3 id="%F0%9F%93%9C-%E5%BC%80%E6%BA%90%E8%AE%B8%E5%8F%AF" tabindex="-1">📜 开源许可</h3>
<ul>
 <li><strong>本项目仅供个人学习研究使用，禁止用于商业及非法用途</strong></li>
 <li>本项目基于 <a href="https://opensource.org/license/mit/" target="_blank">MIT license</a> 许可进行开源</li>
</ul>
<h3 id="%F0%9F%93%A2-%E5%85%8D%E8%B4%A3%E5%A3%B0%E6%98%8E" tabindex="-1">📢 免责声明</h3>
<p>本项目使用了网易云音乐的第三方 API 服务，<strong>仅供个人学习研究使用，禁止用于商业及非法用途。</strong> 本项目旨在提供一个前端练手的实战项目，用于帮助开发者提升技能水平和对前端技术的理解</p>
<p>同时，本项目开发者承诺 <strong>严格遵守相关法律法规和网易云音乐 API 使用协议，不会利用本项目进行任何违法活动。</strong> 如因使用本项目而引起的任何纠纷或责任，均由使用者自行承担。<strong>本项目开发者不承担任何因使用本项目而导致的任何直接或间接责任，并保留追究使用者违法行为的权利</strong></p>
<p>请使用者在使用本项目时遵守相关法律法规，<strong>不要将本项目用于任何商业及非法用途。如有违反，一切后果由使用者自负。</strong> 同时，使用者应该自行承担因使用本项目而带来的风险和责任。本项目开发者不对本项目所提供的服务和内容做出任何保证</p>
<h2 id="%E5%85%B3%E4%BA%8E%E9%83%A8%E7%BD%B2" tabindex="-1">关于部署</h2>
<blockquote>
 <p>当然这个网站当然也是可以托管到上面那个平台去部署，但是国内访问可能 不太行。建议此网站直接本地构建，然后构建完成后在dist文件内就可以看到网页代码了，上传网站就ok了</p>
</blockquote>
<h2 id="%E8%BF%98%E6%9C%89%E4%B8%80%E4%BB%B6%E4%BA%8B" tabindex="-1">还有一件事</h2>
<p><strong>目前解除灰色，移动端有BUG…emmm我也不知道怎么回事，手机访问网站周杰伦歌没法听，电脑可以，很怪，等大佬修复吧。</strong></p>]]></description><guid isPermaLink="false">/archives/136</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>Docker</category><category>技术分类</category><pubDate>Fri, 12 May 2023 07:10:52 GMT</pubDate></item><item><title><![CDATA[GITHUB项目|好用的在线记事本memos]]></title><link>https://7boe.top/archives/135</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%7C%E5%A5%BD%E7%94%A8%E7%9A%84%E5%9C%A8%E7%BA%BF%E8%AE%B0%E4%BA%8B%E6%9C%ACmemos&amp;url=/archives/135" width="1" height="1" alt="" style="opacity:0;">
<h1 id="memos" tabindex="-1">Memos</h1>
<blockquote>
 <p><strong>是一个在线的记事本以及笔记，可以和别人一起分享笔记，额怎么说呢，就类似，金山文档，石墨文档，云雀文档这种，不过这种也是快速搭建的小项目</strong></p>
</blockquote>
<p>作者GITHUB地址:<a href="https://github.com/usememos/memos" target="_blank">Memos</a>
 <br>
 我的DEMO:<a href="https://book.7boe.top/" target="_blank">自用且长期维护</a></p>
<blockquote>
 <p>当然这里也同样有GPT功能可以直接在AI一栏直接问话，拷打GPT</p>
</blockquote>
<h2 id="%E7%9C%8B%E7%9C%8B%E4%BD%9C%E8%80%85%E6%80%8E%E4%B9%88%E8%AF%B4" tabindex="-1">看看作者怎么说</h2>
<p><strong>README</strong></p>
<p><strong>memos</strong></p>
<img height="72px" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fusememos.com%2Flogo.webp&amp;size=m" alt="✍️ memos" align="right">
<p>A lightweight, self-hosted memo hub. Open Source and Free forever.</p>
<p><a href="https://usememos.com/docs">Documentation</a> •
 <br>
 <a href="https://demo.usememos.com/">Live Demo</a> •
 <br>
 Discuss in <a href="https://discord.gg/tfPJa4UmAv">Discord</a> / <a href="https://t.me/+-_tNF1k70UU4ZTc9">Telegram</a></p>
<p><a href="https://github.com/usememos/memos/stargazers"><img alt="GitHub stars" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2Fusememos%2Fmemos%3Flogo%3Dgithub&amp;size=m"></a> <a href="https://discord.gg/tfPJa4UmAv"><img alt="Discord" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2Fdiscord-chat-5865f2%3Flogo%3Ddiscord%26logoColor%3Df5f5f5&amp;size=m"></a></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fusememos.com%2Fdemo.webp&amp;size=m" alt="demo"></p>
<h3 id="key-points" tabindex="-1">Key points</h3>
<ul>
 <li>Open source and free forever</li>
 <li>Self-hosting with Docker in seconds</li>
 <li>Markdown support</li>
 <li>Customizable and sharable</li>
 <li>RESTful API for self-service</li>
</ul>
<h3 id="deploy-with-docker-in-seconds" tabindex="-1">Deploy with Docker in seconds</h3>
<pre><code class="language-bash">docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest
</code></pre>
<blockquote>
 <p>The <code>~/.memos/</code> directory will be used as the data directory on your local machine, while <code>/var/opt/memos</code> is the directory of the volume in Docker and should not be modified.</p>
</blockquote>
<p>Learn more about <a href="https://usememos.com/docs#installation" target="_blank">other installation methods</a>.</p>
<h3 id="contribution" tabindex="-1">Contribution</h3>
<p>Contributions are what make the open-source community such an amazing place to learn, inspire, and create. We greatly appreciate any contributions you make. Thank you for being a part of our community! 🥰</p>
<a href="https://github.com/usememos/memos/graphs/contributors"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcontrib.rocks%2Fimage%3Frepo%3Dusememos%2Fmemos&amp;size=m"> </a>
<hr>
<ul>
 <li><a href="https://memos.moe/" target="_blank">Moe Memos</a> - Third party client for iOS and Android</li>
 <li><a href="https://github.com/lmm214/memos-bber" target="_blank">lmm214/memos-bber</a> - Chrome extension</li>
 <li><a href="https://github.com/Rabithua/memos_wmp" target="_blank">Rabithua/memos_wmp</a> - WeChat MiniProgram</li>
 <li><a href="https://github.com/qazxcdswe123/telegramMemoBot" target="_blank">qazxcdswe123/telegramMemoBot</a> - Telegram bot</li>
 <li><a href="https://github.com/eallion/memos.top" target="_blank">eallion/memos.top</a> - Static page rendered with the Memos API</li>
 <li><a href="https://github.com/EINDEX/logseq-memos-sync" target="_blank">eindex/logseq-memos-sync</a> - Logseq plugin</li>
 <li><a href="https://github.com/JakeLaoyu/memos-import-from-flomo" target="_blank">JakeLaoyu/memos-import-from-flomo</a> - Import data. Support from flomo, wechat reading</li>
 <li><a href="https://sharecuts.cn/shortcut/12640" target="_blank">Send to memos</a> - A shortcut for iOS</li>
 <li><a href="https://www.raycast.com/JakeYu/memos" target="_blank">Memos Raycast Extension</a> - Raycast extension</li>
 <li><a href="https://github.com/xudaolong/memos-desktop" target="_blank">Memos Desktop</a> - Third party client for MacOS and Windows</li>
 <li><a href="https://github.com/BarryYangi/MemosGallery" target="_blank">MemosGallery</a> - A static Gallery rendered with the Memos API</li>
</ul>
<h3 id="acknowledgements" tabindex="-1">Acknowledgements</h3>
<ul>
 <li>Thanks <a href="https://www.uffizzi.com/" target="_blank">Uffizzi</a> for sponsoring preview environments for PRs.</li>
</ul>
<h3 id="star-history" tabindex="-1">Star history</h3>
<p><a href="https://star-history.com/#usememos/memos&amp;Date" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fapi.star-history.com%2Fsvg%3Frepos%3Dusememos%2Fmemos%26type%3DDate&amp;size=m" alt="Star History Chart"></a></p>
<h2 id="docker%E6%90%AD%E5%BB%BA" tabindex="-1">DOCKER搭建</h2>
<p><strong>一条命令的事,注意更改储存地址以及端口</strong></p>
<pre><code class="language-">docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest
</code></pre>
<h2 id="docker-compose" tabindex="-1">DOCKER-COMPOSE</h2>
<blockquote>
 <p>会用的直接拿回去粘贴使用就行了</p>
</blockquote>
<pre><code class="language-">version: "3.0"
services:
  memos:
    image: neosmemo/memos:latest
    container_name: memos
    volumes:
      - ~/.memos/:/var/opt/memos
    ports:
      - 5230:5230
</code></pre>
<p><strong>更新的话应该是</strong></p>
<pre><code class="language-">docker-compose pull
</code></pre>
<p><strong>然后后台跑起来</strong></p>
<pre><code class="language-">docker-compose up -d
</code></pre>
<hr>]]></description><guid isPermaLink="false">/archives/135</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>Docker</category><category>技术分类</category><pubDate>Sat, 6 May 2023 02:10:31 GMT</pubDate></item><item><title><![CDATA[GITHUB项目分享之GPT潘多拉]]></title><link>https://7boe.top/archives/134</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E5%88%86%E4%BA%AB%E4%B9%8BGPT%E6%BD%98%E5%A4%9A%E6%8B%89&amp;url=/archives/134" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E6%BD%98%E5%A4%9A%E6%8B%89" tabindex="-1">潘多拉</h1>
<h2 id="%E5%85%B3%E4%BA%8E%E8%AF%A5%E9%A1%B9%E7%9B%AE" tabindex="-1">关于该项目</h2>
<blockquote>
 <p>潘多拉，一个让你呼呼顺畅的ChatGPT。Pandora，一个帮助你顺畅呼吸的ChatGPT。
  <br>
  作者地址：<a href="https://github.com/pengzhile/pandora" target="_blank">潘多拉</a></p>
</blockquote>
<hr>
<p><strong>项目的作用是什么？</strong>
 <br>
 一样还是围绕GPT系列，只是这期是一个福利项目吧。</p>
<p><strong>看看作者怎么说</strong></p>
<h2 id="readme" tabindex="-1">README</h2>
<p>潘多拉 (Pandora)，一个让你呼吸顺畅的 ChatGPT。</p>
<p>潘多拉实现了网页版 ChatGPT 的主要操作。后端优化，绕过 Cloudflare，速度喜人。</p>
<!-- PROJECT SHIELDS -->
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2Fpython-%253E%253D3.7-green&amp;size=m" alt="Python version">
 <br>
 <a href="https://github.com/pengzhile/pandora/issues" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fissues-raw%2Fpengzhile%2Fpandora&amp;size=m" alt="Issues"></a>
 <br>
 <a href="https://github.com/pengzhile/pandora/commits/master" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Flast-commit%2Fpengzhile%2Fpandora%2Fmaster&amp;size=m" alt="Commits"></a>
 <br>
 <a href="https://pypi.python.org/pypi/pandora-chatgpt" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fpypi%2Fv%2Fpandora-chatgpt.svg&amp;size=m" alt="PyPi"></a>
 <br>
 <a href="https://pypi.python.org/pypi/pandora-chatgpt" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fstatic.pepy.tech%2Fbadge%2Fpandora-chatgpt&amp;size=m" alt="Downloads"></a>
 <br>
 <a href="https://github.com/pengzhile/pandora/actions/workflows/python-publish.yml" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Factions%2Fworkflows%2Fpython-publish.yml%2Fbadge.svg&amp;size=m" alt="PyPi workflow"></a>
 <br>
 <a href="https://github.com/pengzhile/pandora/actions/workflows/docker-publish.yml" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Factions%2Fworkflows%2Fdocker-publish.yml%2Fbadge.svg&amp;size=m" alt="Docker workflow"></a>
 <br>
 <a href="https://discord.gg/QBkd9JAaWa" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fdiscord%2F1098772912242163795%3Flabel%3DDiscord&amp;size=m" alt="Discord"></a></p>
<h3 id="%E4%BD%93%E9%AA%8C%E5%9C%B0%E5%9D%80" tabindex="-1">体验地址</h3>
<ul>
 <li>点击 <a href="https://chat.zhile.io" target="_blank" title="Pandora Cloud体验地址">https://chat.zhile.io</a></li>
 <li>登录不可用，暂时需要官方登录，然后访问 <a href="http://chat.openai.com/api/auth/session" target="_blank">这里</a> 拿 <code>Access Token</code></li>
 <li><code>Access Token</code> 有效期 <code>14</code> 天，期间访问<strong>不需要梯子</strong>。这意味着你在手机上也可随意使用。</li>
 <li>这个页面上还包含一个共享账号的链接，<strong>没有账号</strong>的可以点进去体验一下。</li>
</ul>
<h3 id="chatgpt%E4%BD%BF%E7%94%A8%E6%97%B6%E5%8F%AF%E8%83%BD%E4%BC%9A%E9%81%87%E5%88%B0%EF%BC%9A" tabindex="-1">ChatGPT使用时可能会遇到：</h3>
<h3 id="1.-please-stand-by%2C-while-we-are-checking-your-browser%E2%80%A6" tabindex="-1">1. Please stand by, while we are checking your browser…</h3>
<h3 id="%E5%8A%A8%E4%B8%8D%E5%8A%A8%E6%9D%A5%E4%B8%80%E4%B8%8B%EF%BC%8C%E6%9C%89%E6%97%B6%E5%80%99%E8%BF%98%E4%B8%8D%E5%8A%A8%E6%88%96%E8%80%85%E5%87%BA%E4%BA%BA%E6%9C%BA%E9%AA%8C%E8%AF%81%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">&nbsp;&nbsp;&nbsp;动不动来一下，有时候还不动或者出人机验证。痛！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft0.png&amp;size=m" alt="t0"></p>
<h3 id="2.-access-denied.-you-do-not-have-access-to-chat.openai.com." tabindex="-1">2. Access denied. You do not have access to <a href="http://chat.openai.com" target="_blank">chat.openai.com</a>.</h3>
<h3 id="%E7%BB%8F%E5%85%B8%E9%97%AE%E9%A2%98%EF%BC%8C%E5%8F%AA%E8%83%BD%E5%88%B0%E5%A4%84%E6%89%BE%E5%8F%AF%E7%94%A8vpn%EF%BC%8C%E8%B4%B9%E6%97%B6%E8%B4%B9%E5%8A%9B%EF%BC%8C%E6%9B%B4%E8%B4%B9%E9%92%B1%E3%80%82%E7%A7%BB%E5%8A%A8%E7%AB%AF%E8%AE%BF%E9%97%AE%E6%9B%B4%E9%9A%BE%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">&nbsp;&nbsp;&nbsp;经典问题，只能到处找可用VPN，费时费力，更费钱。移动端访问更难。痛！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft1.png&amp;size=m" alt="t1"></p>
<h3 id="3.-chatgpt-is-at-capacity-right-now" tabindex="-1">3. ChatGPT is at capacity right now</h3>
<h3 id="%E7%B3%BB%E7%BB%9F%E8%B4%9F%E8%BD%BD%E9%AB%98%EF%BC%8C%E7%99%BD%E5%AB%96%E7%94%A8%E6%88%B7%E4%B8%8D%E7%BB%99%E7%94%A8%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">&nbsp;&nbsp;&nbsp;系统负载高，白嫖用户不给用。痛！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft2.png&amp;size=m" alt="t2"></p>
<h3 id="4.-this-content-may-violate-our-content-policy." tabindex="-1">4. This content may violate our <u>content policy</u>.</h3>
<h3 id="%E9%81%93%E5%BE%B7%E5%AE%A1%E6%9F%A5%EF%BC%8C%E5%A4%9A%E8%A7%A6%E5%8F%91%E5%87%A0%E6%AC%A1%E5%8F%AF%E8%83%BD%E5%B0%B1%E5%B0%81%E5%8F%B7%E4%BA%86%E3%80%82%E7%97%9B%EF%BC%81%EF%BC%81%EF%BC%81" tabindex="-1">&nbsp;&nbsp;&nbsp;道德审查，多触发几次可能就封号了。痛！！！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft3.png&amp;size=m" alt="t3"></p>
<h3 id="5.-something-went-wrong." tabindex="-1">5. Something went wrong.</h3>
<h3 id="%E5%90%83%E7%9D%80%E7%81%AB%E9%94%85%E5%94%B1%E7%9D%80%E6%AD%8C%EF%BC%8C%E7%AA%81%E7%84%B6%E5%B0%B1%E5%87%BA%E6%95%85%E9%9A%9C%E4%BA%86%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">&nbsp;&nbsp;&nbsp;吃着火锅唱着歌，突然就出故障了。痛！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft4.png&amp;size=m" alt="t4"></p>
<h3 id="6.-%E8%BE%93%E5%87%BA%E4%BB%A3%E7%A0%81%E6%97%B6%E4%B8%AD%E6%96%AD%EF%BC%8C%E4%BD%86%E6%98%AF%E5%8D%B4%E6%B2%A1%E6%9C%89%E4%B8%80%E4%B8%AA-continue-generating-%E6%8C%89%E9%92%AE%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">6. 输出代码时中断，但是却没有一个 <code>Continue generating</code> 按钮。痛！</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft5.png&amp;size=m" alt="t5">
 <br>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Ft6.png&amp;size=m" alt="t6"></p>
<h3 id="7.-%E8%B9%A6%E5%AD%97%E6%85%A2%E5%90%9E%E5%90%9E%EF%BC%8C%E5%8D%A1%E9%A1%BF%E4%B8%8D%E6%B5%81%E7%95%85%EF%BC%8C%E4%B8%8D%E7%9F%A5%E9%81%93%E7%9A%84%E7%94%9A%E8%87%B3%E6%83%B3%E6%8D%A2%E7%94%B5%E8%84%91%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">7. 蹦字慢吞吞，卡顿不流畅，不知道的甚至想换电脑。痛！</h3>
<h3 id="8.-%E6%83%B3%E6%8A%8A-chatgpt-%E6%8E%A5%E5%88%B0%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%EF%BC%8C%E7%BB%93%E6%9E%9C%E5%8F%AA%E8%83%BD%E6%8E%A5%E4%B8%AA%E5%B7%AE%E5%BC%BA%E4%BA%BA%E6%84%8F%E7%9A%84-gpt-3.5-turbo%E3%80%82%E7%97%9B%EF%BC%81" tabindex="-1">8. 想把 <code>ChatGPT</code> 接到其他系统，结果只能接个差强人意的 <code>gpt-3.5-turbo</code>。痛！</h3>
<h3 id="%E4%B8%80%E6%AC%A1%E7%9C%8B%E5%AE%8C%E4%B8%8A%E9%9D%A2%E7%9A%84%E5%99%A9%E6%A2%A6%EF%BC%8C%E8%A1%80%E5%8E%8B%E4%B8%8A%E6%9D%A5%E4%BA%86%EF%BC%8C%E6%8B%B3%E5%A4%B4%E7%A1%AC%E4%BA%86%EF%BC%81%E5%A4%AA%E7%97%9B%E4%BA%86%EF%BC%81%EF%BC%81%EF%BC%81%E4%BB%A5%E4%B8%8A%E7%97%9B%E7%82%B9%EF%BC%8Cpandora-%E4%B8%80%E6%AC%A1%E5%85%A8%E9%83%A8%E8%A7%A3%E5%86%B3%E3%80%82" tabindex="-1"><em>一次看完上面的噩梦，血压上来了，拳头硬了！太痛了！！！以上痛点，<code>Pandora</code> 一次全部解决。</em></h3>
<h3 id="%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE" tabindex="-1">界面截图</h3>
<details>
 <summary> 
  <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs05.png&amp;size=m" alt="alt Screenshot5">
   <br>
   <br>
   <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs10.jpeg&amp;size=m" alt="alt Screenshot10"></p> 
 </summary>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs01.png&amp;size=m" alt="alt Screenshot1">
  <br>
  <br>
  <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs02.png&amp;size=m" alt="alt Screenshot2">
  <br>
  <br>
  <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs03.png&amp;size=m" alt="alt Screenshot3">
  <br>
  <br>
  <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs04.png&amp;size=m" alt="alt Screenshot4">
  <br>
  <br>
  <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs06.png&amp;size=m" alt="alt Screenshot6">
  <br>
  <br>
  <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fpengzhile%2Fpandora%2Fraw%2Fmaster%2Fdoc%2Fimages%2Fs11.jpeg&amp;size=m" alt="alt Screenshot11"></p>
</details>
<h3 id="%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E8%BF%90%E8%A1%8C" tabindex="-1">如何搭建运行</h3>
<ul>
 <li>访问 <a href="https://github.com/pengzhile/pandora/blob/master/doc/wiki.md" target="_blank">doc/wiki.md</a> 获得详细指导。</li>
</ul>
<h3 id="%E5%85%B6%E4%BB%96%E8%AF%B4%E6%98%8E" tabindex="-1">其他说明</h3>
<ul>
 <li>项目是站在其他巨人的肩膀上，感谢！</li>
 <li>报错、BUG之类的提出<code>Issue</code>，我会修复。</li>
 <li>因为之后<code>ChatGPT</code>的API变动，我可能不会跟进修复。</li>
 <li>喜欢的可以给颗星，都是老朋友了。</li>
 <li>不影响<code>PHP是世界上最好的编程语言！</code></li>
</ul>
<h3 id="%E8%B4%A1%E7%8C%AE%E8%80%85%E4%BB%AC" tabindex="-1">贡献者们</h3>
<blockquote>
 <p>感谢所有让这个项目变得更好的贡献者们！</p>
</blockquote>
<p><a href="https://github.com/pengzhile/pandora/graphs/contributors" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcontrib.rocks%2Fimage%3Frepo%3Dpengzhile%2Fpandora&amp;size=m" alt="Star History Chart"></a></p>
<h3 id="star%E5%8E%86%E5%8F%B2" tabindex="-1">Star历史</h3>
<h2 id="" tabindex="-1"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fapi.star-history.com%2Fsvg%3Frepos%3Dpengzhile%2Fpandora%26type%3DDate&amp;size=m" alt="Star History Chart"></h2>
<h2 id="%E6%B2%A1%E7%9C%8B%E6%87%82%EF%BC%9F%EF%BC%9F%EF%BC%9F" tabindex="-1">没看懂？？？</h2>
<p><strong>？？？？</strong></p>
<blockquote>
 <p>我也觉得这个项目更别的没什么区别
  <br>
  但是</p>
</blockquote>
<p><strong>别人东西也都做好了<a href="https://chat.zhile.io/" target="_blank">直接用</a>
  <br> 提供了一堆免费的GPT使用方式，放到你的浏览器书签里面再也不怕没有GPT用了</strong>
 <br>
 51快乐，水下博客(づ￣3￣)づ╭❤～</p>]]></description><guid isPermaLink="false">/archives/134</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Fri, 28 Apr 2023 06:15:09 GMT</pubDate></item><item><title><![CDATA[KEY被用完了]]></title><link>https://7boe.top/archives/132</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=KEY%E8%A2%AB%E7%94%A8%E5%AE%8C%E4%BA%86&amp;url=/archives/132" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E6%B2%A1%E5%8A%9E%E6%B3%95%E4%B8%80%E7%9B%B4%E7%BB%99%E5%88%AB%E4%BA%BA%E7%94%A8%E5%93%8E" tabindex="-1">没办法一直给别人用哎</h2>
<p><strong>本来现在openai对于地区登录要求就严格，我随便开放了几个对接apikey的网站，两天就被用完了，现在openai封号就算了，key的额度现在也就5刀，之前还是18刀的</strong></p>
<blockquote>
 <p><strong>如果需要账号加apikey整个购买的话可以直接联系我也行</strong>
  <br>
  QQ:2911074976</p>
</blockquote>
<p><strong>
  <ins>整号加5刀key10块钱
   <br>
   单个账号无额度5块钱吧，当个饭钱</ins>
 </strong></p>
<blockquote>
 <p><strong>希望有人看，别一直用我的KEY了，用AgentGPT，很消耗key的。</strong>
  <br>
  用的话可以在设置里面输入自己的key</p>
</blockquote>]]></description><guid isPermaLink="false">/archives/132</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>技术分类</category><pubDate>Mon, 24 Apr 2023 09:37:12 GMT</pubDate></item><item><title><![CDATA[GITHUB项目之AUTOGPT，全自动生产力。]]></title><link>https://7boe.top/archives/131</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E4%B9%8BAUTOGPT%EF%BC%8C%E5%85%A8%E8%87%AA%E5%8A%A8%E7%94%9F%E4%BA%A7%E5%8A%9B%E3%80%82&amp;url=/archives/131" width="1" height="1" alt="" style="opacity:0;">
<h2 id="autogpt" tabindex="-1">AUTOGPT</h2>
<p><strong>GTIHUB新项目</strong></p>
<blockquote>
 <p>之前在B站大火，说是能完爆GPT，但是其实也是用到openai的key</p>
</blockquote>
<p>
 <ins>不过这几个项目又对GPT进行优化，使用起来是让GPT不停的输出，然后进行内容完善，确实相当的强，同时也是，比较吃额度</ins>
</p>
<p>GITHUB作者:<a href="https://github.com/Significant-Gravitas/Auto-GPT" target="_blank">AUTOGPT</a></p>
<p><strong>这个项目目前已经有95.6K的start了，出来不久。</strong></p>
<p>这个项目是用py进行开发的有会用的可以自己下下来搭建一下。</p>
<p><strong>但是这个东西一开始我也看不懂，基于这个项目上，又一个大佬开发出来的，AgentGPT</strong></p>
<h2 id="agentgpt" tabindex="-1">AgentGPT</h2>
<p><strong>这个是主角，因为我已经搭建好了一个这样的网站，只要输入自己的key就可以使用了</strong></p>
<p>
 <ins>要是不输入key的话一分钟就崩溃了，没法持久化运行，而且这个东西确实吃额度。</ins>
</p>
<p><strong>GITHUB作者:<a href="https://github.com/reworkd/AgentGPT" target="_blank">GITHUB仓库</a>
  <br> 作者搭建的:<a href="https://agentgpt.reworkd.ai/" target="_blank">官方</a>
  <br> 网络不好的话可以用我搭建的<a href="https://auto.7boe.top" target="_blank">DEMO</a></strong></p>
<blockquote>
 <p>如何搭建看一下官方的REDAME</p>
</blockquote>
<h3 id="redame" tabindex="-1">REDAME</h3>
<p align="center"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2Freworkd%2FAgentGPT%2Fmain%2Fpublic%2Fbanner.png%3Ftoken%3DGHSAT0AAAAAAB7JND3U3VGGF3UYYHGYO4RAZBSDJAQ&amp;size=m" height="300"></p>
<p align="center"><em>🤖 Assemble, configure, and deploy autonomous AI Agents in your browser. 🤖 </em></p>
<p align="center"><img alt="Node version" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fstatic%2Fv1%3Flabel%3Dnode%26message%3D%2520%253E%3D16.0.0%26logo%3Dnode.js%26color%3D2334D058&amp;size=m"> <a href="https://github.com/reworkd/AgentGPT/blob/master/README.md"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2Flang-English-blue.svg&amp;size=m" alt="English"></a> <a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.zh-HANS.md"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2Flang-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87-red.svg&amp;size=m" alt="简体中文"></a> <a href="https://github.com/reworkd/AgentGPT/blob/master/docs/README.hu-Cs4K1Sr4C.md"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2Flang-Hungarian-red.svg&amp;size=m" alt="Hungarian"></a></p>
<p align="center"><a href="https://agentgpt.reworkd.ai">🔗 Short link</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://7boe.top#-getting-started">🤝 Contribute</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://twitter.com/asimdotshrestha/status/1644883727707959296">🐦 Twitter</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://discord.gg/3PccggEG">📢 Discord</a></p>
<hr>
<p><strong>💝 Support the Advancement of AgentGPT!! 💝</strong></p>
<p align="center">Join us in fueling the development of AgentGPT, an open-source project pushing the boundaries of AI autonomy! We're facing challenges in covering the operational costs 💸, including in-house API and other infrastructure expenses, which is projected to grow to around $150 USD per day 💳🤕 Your sponsorship would drive progress by helping us scale up resources, enhance features and functionality, and continue to iterate on this exciting project! 🚀</p>
<p align="center">By sponsoring this free, open-source project, you not only have the opportunity to have your avatar/logo featured below, but also get the exclusive chance to chat with the founders!🗣️</p>
<p align="center"><a href="https://github.com/sponsors/reworkd-admin">👉 Click here</a> to support the project</p>
<div align="center" dir="auto">
 <a href="https://github.com/Faitltd" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FFaitltd.png&amp;size=m" width="50px" alt="faithltd" style="max-width:100%;"> </a> <a href="https://github.com/mojosolo" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fmojosolo.png&amp;size=m" width="50px" alt="mojosolo" style="max-width:100%;"> </a> <a href="https://github.com/0xmatchmaker" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2F0xmatchmaker.png&amp;size=m" width="50px" alt="0xmatchmaker" style="max-width:100%;"> </a> <a href="https://github.com/arthurbnhm" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Farthurbnhm.png&amp;size=m" width="50px" alt="arthurbnhm" style="max-width:100%;"> </a> <a href="https://github.com/durairajasivam" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fdurairajasivam.png&amp;size=m" width="50px" alt="durairajasivam" style="max-width:100%;"> </a> <a href="https://github.com/zoelidity" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fzoelidity.png&amp;size=m" width="50px" alt="zoelidity" style="max-width:100%;"> </a> <a href="https://github.com/jd3655" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fjd3655.png&amp;size=m" width="50px" alt="jd3655" style="max-width:100%;"> </a> <a href="https://github.com/busseyl" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fbusseyl.png&amp;size=m" width="50px" alt="busseyl" style="max-width:100%;"> </a> <a href="https://github.com/lisa-ee" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Flisa-ee.png&amp;size=m" width="50px" alt="lisa-ee" style="max-width:100%;"> </a> <a href="https://github.com/VulcanT" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FVulcanT.png&amp;size=m" width="50px" alt="VulcanT" style="max-width:100%;"> </a> <a href="https://github.com/kman62" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fkman62.png&amp;size=m" width="50px" alt="kman62" style="max-width:100%;"> </a> <a href="https://github.com/Haithamhaj" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FHaithamhaj.png&amp;size=m" width="50px" alt="Haithamhaj" style="max-width:100%;"> </a> <a href="https://github.com/SwftCoins" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FSwftCoins.png&amp;size=m" width="50px" alt="SwftCoins" style="max-width:100%;"> </a> <a href="https://github.com/ChevalierzA" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FChevalierzA.png&amp;size=m" width="50px" alt="ChevalierzA" style="max-width:100%;"> </a> <a href="https://github.com/research-developer" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fresearch-developer.png&amp;size=m" width="50px" alt="research-developer" style="max-width:100%;"> </a> <a href="https://github.com/FelixAI2023" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FFelixAI2023.png&amp;size=m" width="50px" alt="FelixAI2023" style="max-width:100%;"> </a> <a href="https://github.com/Mitchell-Coder-New" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FMitchell-Coder-New.png&amp;size=m" width="50px" alt="Mitchell-Coder-New" style="max-width:100%;"> </a> <a href="https://github.com/nnkostov" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fnnkostov.png&amp;size=m" width="50px" alt="nnkostov" style="max-width:100%;"> </a> <a href="https://github.com/cmtadvogados" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fcmtadvogados.png&amp;size=m" width="50px" alt="cmtadvogados" style="max-width:100%;"> </a> <a href="https://github.com/Sphilly05" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FSphilly05.png&amp;size=m" width="50px" alt="Sphilly05" style="max-width:100%;"> </a> <a href="https://github.com/Tweezamiza" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FTweezamiza.png&amp;size=m" width="50px" alt="Tweezamiza" style="max-width:100%;"> </a> <a href="https://github.com/mrayonnaise" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fmrayonnaise.png&amp;size=m" width="50px" alt="mrayonnaise" style="max-width:100%;"> </a> <a href="https://github.com/floriank" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Ffloriank.png&amp;size=m" width="50px" alt="floriank" style="max-width:100%;"> </a> <a href="https://github.com/localecho" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Flocalecho.png&amp;size=m" width="50px" alt="localecho" style="max-width:100%;"> </a> <a href="https://github.com/hnishi3" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fhnishi3.png&amp;size=m" width="50px" alt="hnishi3" style="max-width:100%;"> </a> <a href="https://github.com/fireheat135" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Ffireheat135.png&amp;size=m" width="50px" alt="fireheat135" style="max-width:100%;"> </a> <a href="https://github.com/DuanChaori" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDuanChaori.png&amp;size=m" width="50px" alt="DuanChaori" style="max-width:100%;"> </a> <a href="https://github.com/jukwaphil1" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fjukwaphil1.png&amp;size=m" width="50px" alt="jukwaphil1" style="max-width:100%;"> </a> <a href="https://github.com/sorrynothing" style="display: inline-block;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fsorrynothing.png&amp;size=m" width="50px" alt="sorrynothing" style="max-width:100%;"> </a>
</div>
<hr>
<p>AgentGPT allows you to configure and deploy Autonomous AI agents.
 <br>
 Name your own custom AI and have it embark on any goal imaginable.
 <br>
 It will attempt to reach the goal by thinking of tasks to do, executing them, and learning from the results 🚀.</p>
<p>🎉 Roadmap</p>
<p>This platform is currently in beta, we are currently working on:</p>
<ul>
 <li>Long term memory via a vector DB 🧠</li>
 <li>Web browsing capabilities via LangChain 🌐</li>
 <li>Interaction with websites and people 👨‍👩‍👦</li>
 <li>Writing capabilities via a document API 📄</li>
 <li>Saving agent runs 💾</li>
 <li>Users and authentication 🔐</li>
 <li>Stripe integration for a lower limit paid version (So we can stop worrying about infra costs) 💵</li>
</ul>
<p>More Coming soon…</p>
<p>🚀 Tech Stack</p>
<ul>
 <li>✅ <strong>Bootstrapping</strong>: <a href="https://create.t3.gg" target="_blank">create-t3-app</a>.</li>
 <li>✅ <strong>Framework</strong>: <a href="https://nextjs.org/" target="_blank">Nextjs 13 + Typescript</a>.</li>
 <li>✅ <strong>Auth</strong>: <a href="https://next-auth.js.org" target="_blank">Next-Auth.js</a></li>
 <li>✅ <strong>ORM</strong>: <a href="https://prisma.io" target="_blank">Prisma</a>.</li>
 <li>✅ <strong>Database</strong>: <a href="https://supabase.com/" target="_blank">Supabase</a>.</li>
 <li>✅ <strong>Styling</strong>: <a href="https://tailwindcss.com" target="_blank">TailwindCSS + HeadlessUI</a>.</li>
 <li>✅ <strong>Typescript Schema Validation</strong>: <a href="https://github.com/colinhacks/zod" target="_blank">Zod</a>.</li>
 <li>✅ <strong>End-to-end typesafe API</strong>: <a href="https://trpc.io/" target="_blank">tRPC</a>.</li>
</ul>
<p>👨‍🚀 Getting Started</p>
<p>🐳 Docker Setup</p>
<p>The easiest way to run AgentGPT locally is by using docker.
 <br>
 A convenient setup script is provided to help you get started.</p>
<pre><code class="language-bash">./setup.sh --docker
</code></pre>
<p>👷 Local Development Setup</p>
<p>If you wish to develop AgentGPT locally, the easiest way is to
 <br>
 use the provided setup script.</p>
<pre><code class="language-bash">./setup.sh --local
</code></pre>
<p>🛠️ Manual Setup</p>
<blockquote>
 <p>🚧 You will need <a href="https://nodejs.org/en/" target="_blank">Nodejs +18 (LTS recommended)</a> installed.</p>
</blockquote>
<ol>
 <li>Fork this project:</li>
</ol>
<ul>
 <li><a href="https://github.com/reworkd/AgentGPT/fork" target="_blank">Click here</a>.</li>
</ul>
<ol start="2">
 <li>Clone the repository:</li>
</ol>
<pre><code class="language-bash">git clone git@github.com:YOU_USER/AgentGPT.git
</code></pre>
<ol start="3">
 <li>Install dependencies:</li>
</ol>
<pre><code class="language-bash">cd AgentGPT
npm install
</code></pre>
<ol start="4">
 <li>Create a <strong>.env</strong> file with the following content:</li>
</ol>
<blockquote>
 <p>🚧 The environment variables must match the following <a href="https://github.com/reworkd/AgentGPT/blob/main/src/env/schema.mjs" target="_blank">schema</a>.</p>
</blockquote>
<pre><code class="language-bash"># Deployment Environment:
NODE_ENV=development

# Next Auth config:
# Generate a secret with `openssl rand -base64 32`
NEXTAUTH_SECRET=changeme
NEXTAUTH_URL=http://localhost:3000
DATABASE_URL=file:./db.sqlite

# Your open api key
OPENAI_API_KEY=changeme
</code></pre>
<ol start="5">
 <li>Modify prisma schema to use sqlite:</li>
</ol>
<pre><code class="language-bash">./prisma/useSqlite.sh
</code></pre>
<p><strong>Note:</strong> This only needs to be done if you wish to use sqlite.</p>
<ol start="6">
 <li>Ready 🥳, now run:</li>
</ol>
<pre><code class="language-bash"># Create database migrations
npx prisma db push
npm run dev
</code></pre>
<p>🚀 GitHub Codespaces</p>
<p>Set up AgentGPT in the cloud immediately by using <a href="https://github.com/features/codespaces" target="_blank">GitHub Codespaces</a>.</p>
<ol>
 <li>From the GitHub repo, click the green “Code” button and select “Codespaces”.</li>
 <li>Create a new Codespace or select a previous one you’ve already created.</li>
 <li>Codespaces opens in a separate tab in your browser.</li>
 <li>In terminal, run <code>bash ./setup.sh --local</code></li>
 <li>When prompted in terminal, add your OpenAI API key.</li>
 <li>Click “Open in browser” when the build process completes.</li>
</ol>
<ul>
 <li>To shut AgentGPT down, enter Ctrl+C in Terminal.</li>
 <li>To restart AgentGPT, run <code>npm run dev</code> in Terminal.</li>
</ul>
<p>Run the project 🥳</p>
<pre><code class="language-">npm run dev
</code></pre>
<hr>
<p>🙌🏻 Our Sponsers Continued 🙌🏻</p>
<div align="center" dir="auto">
 <a href="https://github.com/Trecares" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FTrecares.png&amp;size=m" width="50px" alt="Trecares" style="max-width:100%;"> </a> <a href="https://github.com/oryanmoshe" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Foryanmoshe.png&amp;size=m" width="50px" alt="oryanmoshe" style="max-width:100%;"> </a> <a href="https://github.com/rekimcn" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Frekimcn.png&amp;size=m" width="50px" alt="rekimcn" style="max-width:100%;"> </a> <a href="https://github.com/qwe777897" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fqwe777897.png&amp;size=m" width="50px" alt="qwe777897" style="max-width:100%;"> </a> <a href="https://github.com/ClayNelson" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FClayNelson.png&amp;size=m" width="50px" alt="ClayNelson" style="max-width:100%;"> </a> <a href="https://github.com/xuxizhen" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fxuxizhen.png&amp;size=m" width="50px" alt="xuxizhen" style="max-width:100%;"> </a> <a href="https://github.com/destro225" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fdestro225.png&amp;size=m" width="50px" alt="destro225" style="max-width:100%;"> </a> <a href="https://github.com/mouhaxp" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fmouhaxp.png&amp;size=m" width="50px" alt="mouhaxp" style="max-width:100%;"> </a> <a href="https://github.com/carlosbartolomeu" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fcarlosbartolomeu.png&amp;size=m" width="50px" alt="carlosbartolomeu" style="max-width:100%;"> </a> <a href="https://github.com/Agronobeetles" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FAgronobeetles.png&amp;size=m" width="50px" alt="Agronobeetles " style="max-width:100%;"> </a> <a href="https://github.com/CloudyGuyThompson" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FCloudyGuyThompson.png&amp;size=m" width="50px" alt="CloudyGuyThompson" style="max-width:100%;"> </a> <a href="https://github.com/xinghz" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fxinghz.png&amp;size=m" width="50px" alt="xinghz" style="max-width:100%;"> </a> <a href="https://github.com/Jaimbart" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FJaimbart.png&amp;size=m" width="50px" alt="Jaimbart" style="max-width:100%;"> </a> <a href="https://github.com/Jhonvolt17" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FJhonvolt17.png&amp;size=m" width="50px" alt="Jhonvolt17" style="max-width:100%;"> </a> <a href="https://github.com/koltziver" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fkoltziver.png&amp;size=m" width="50px" alt="koltziver" style="max-width:100%;"> </a> <a href="https://github.com/sirswali" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2Fsirswali.png&amp;size=m" width="50px" alt="sirswali" style="max-width:100%;"> </a> <a href="https://github.com/DixonFyre" style="display: inline-block; margin-right: 20px;"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FDixonFyre.png&amp;size=m" width="50px" alt="DixonFyre" style="max-width:100%;"> </a>
</div>
<h2 id="%E6%90%AD%E5%BB%BA%E6%96%B9%E5%BC%8F" tabindex="-1">搭建方式</h2>
<h3 id="npm%E6%90%AD%E5%BB%BA" tabindex="-1">NPM搭建</h3>
<p><strong>先克隆下来仓库</strong></p>
<pre><code class="language-">git clone https://github.com/reworkd/AgentGPT.git
</code></pre>
<p>然后进到目录里面去</p>
<pre><code class="language-">cd AgentGPT
</code></pre>
<p>npm运行的话</p>
<blockquote>
 <p>npm install</p>
</blockquote>
<p>创建一个包含以下内容的.env文件：
 <br>
 其实重命名就可以了</p>
<pre><code class="language-">mv .env.example .env
</code></pre>
<p>如何在后台持久化用npm运行，先安装pm2管理器</p>
<pre><code class="language-">npm install pm2 -g
</code></pre>
<p>在根目录运行</p>
<pre><code class="language-">pm2 start npm --name "my-app" -- run dev            #my-app 换成你能记住的名字
</code></pre>
<p>运行起来后，可以用以下命令查看 两个都行</p>
<pre><code class="language-">pm2 status
pm2 list
</code></pre>
<h3 id="%E7%BB%93%E6%9D%9F-pm2-%E8%BF%9B%E7%A8%8B" tabindex="-1">结束 pm2 进程</h3>
<ol>
 <li>
  <p>列出当前运行的进程。</p>
  <pre><code class="language-">pm2 status
</code></pre>
  <p>该命令将显示所有正在由 pm2 管理的进程的列表。请找到您希望终止的进程的名称或 ID。</p>
 </li>
 <li>
  <p>终止指定的进程。</p>
  <pre><code class="language-">pm2 stop &lt;name|id&gt;
</code></pre>
  <p>在这里，将 <code>&lt;name|id&gt;</code> 替换为要终止的进程的名称或 ID。例如，如果要停止名为 <code>my-app</code> 的进程，则可以执行以下命令：</p>
  <pre><code class="language-">pm2 stop my-app
</code></pre>
  <p>如果您不知道进程的名称或 ID，可以使用 <code>pm2 list</code> 命令列出所有进程的详细信息。</p>
 </li>
 <li>
  <p>删除指定的进程。</p>
  <pre><code class="language-">pm2 delete &lt;name|id&gt;
</code></pre>
  <p>此命令将完全删除指定的进程，并从 pm2 中删除它的配置。在这里，将 <code>&lt;name|id&gt;</code> 替换为要删除的进程的名称或 ID。例如，如果要删除名为 <code>my-app</code> 的进程，则可以执行以下命令：</p>
  <pre><code class="language-">pm2 delete my-app
</code></pre>
 </li>
</ol>
<p>请注意，如果您想停止并删除所有正在运行的 pm2 进程，可以使用 <code>pm2 kill</code> 命令。此命令将停止所有 pm2 进程并退出 pm2 进程管理器。</p>
<h3 id="%E5%85%B3%E9%97%AD%E8%87%AA%E5%90%AF" tabindex="-1">关闭自启</h3>
<ol>
 <li>
  <p>显示 pm2 当前配置。</p>
  <pre><code class="language-">pm2 startup
</code></pre>
  <p>该命令将显示当前的 pm2 启动配置，并提供一个命令，可用于将 pm2 添加到系统服务中以在启动时自动启动。</p>
 </li>
 <li>
  <p>删除 pm2 的自启动配置。</p>
  <p>首先使用 <code>pm2 unstartup</code> 命令来删除 pm2 自启动配置。此命令将删除通过 <code>pm2 startup</code> 命令添加的所有配置文件。</p>
  <pre><code class="language-">pm2 unstartup
</code></pre>
 </li>
 <li>
  <p>（可选）手动删除 pm2 的自启动配置。</p>
  <p>如果 <code>pm2 unstartup</code> 命令无法删除 pm2 自启动配置，您可以手动从系统服务中删除它。具体而言，您需要找到 pm2 自启动脚本并将其删除。</p>
  <p>在大多数情况下，pm2 自启动脚本位于 <code>/etc/init.d/pm2-init.sh</code> 或 <code>/usr/local/etc/rc.d/pm2-init.sh</code> 目录中。如果您找不到此脚本，则可能需要搜索整个系统以查找相应的配置文件。</p>
 </li>
</ol>
<p>请注意，这些步骤将从系统启动时删除 pm2 自启动配置。如果您稍后需要重新启动 pm2 自启动，请使用 <code>pm2 startup</code> 命令重新添加自启动配置。</p>
<h2 id="docker%E6%90%AD%E5%BB%BA" tabindex="-1">DOCKER搭建</h2>
<p><strong>在本地运行 AgentGPT 的最简单方法是使用 docker。提供了一个方便的设置脚本来帮助您入门。</strong></p>
<pre><code class="language-">./setup.sh --docker
</code></pre>
<blockquote>
 <p>他会要求你输入apikey，在本地构建docker镜像，然后启动容器。</p>
</blockquote>
<h2 id="nginx%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%8C%E7%94%A8%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE" tabindex="-1">NGINX反向代理，用域名访问</h2>
<h3 id="%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">配置文件</h3>
<p><strong>其实原来来讲都懂，直接创建一个新的网站，配置文件写进去</strong></p>
<pre><code class="language-">server {
  listen 80;
  server_name your-domain.com;

  location / {
    proxy_pass http://backend-server:port;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
</code></pre>
<p>
 <ins>在上面的配置中，您需要将 <a href="http://your-domain.com" target="_blank">your-domain.com</a> 替换为您的域名或 IP 地址，将 backend-server 替换为您的IP地址，将 port 替换为您的后端服务器端口号。</ins>
</p>
<h3 id="%E9%87%8D%E5%90%AFnginx" tabindex="-1">重启NGINX</h3>
<p>保存并关闭配置文件后，使用 <code>nginx -t</code> 命令检查配置是否正确。如果没有错误，则重新加载 Nginx 配置：</p>
<pre><code class="language-">systemctl reload nginx
</code></pre>
<p>然后，您可以使用浏览器或其他工具测试 Nginx 反向代理是否正常工作。通过访问您的域名或 IP 地址，Nginx 应该会将请求转发到您的后端服务器，并返回响应给客户端。</p>
<p>总之，Nginx 反向代理是一种强大的技术，可帮助您构建高性能、可扩展的 Web 应用程序和服务。</p>]]></description><guid isPermaLink="false">/archives/131</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Thu, 20 Apr 2023 03:02:36 GMT</pubDate></item><item><title><![CDATA[GITHUB项目之GPT项目系列推荐]]></title><link>https://7boe.top/archives/130</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E4%B9%8BGPT%E9%A1%B9%E7%9B%AE%E7%B3%BB%E5%88%97%E6%8E%A8%E8%8D%90&amp;url=/archives/130" width="1" height="1" alt="" style="opacity:0;">
<h2 id="github%E4%B8%8A%E7%9A%84gpt%E9%A1%B9%E7%9B%AE" tabindex="-1">GITHUB上的GPT项目</h2>
<p><strong>在GITHUB上还有好多类似于ChatGPT-WEB这种项目，此次来分享一下还有哪些其他类似于这种的项目</strong>
 <br>
 CHATGPT-WEB:<a href="https://github.com/Chanzhaoyu/chatgpt-web" target="_blank">GITHUB</a>
 <br>
 我搭建的:<a href="https://gpt.7boe.top" target="_blank">GPT</a></p>
<p>
 <ins>这个就不用在说了，很多人再用。</ins>
</p>
<blockquote>
 <p>此项目用
  <ins>Rayliway</ins>
  搭建，此网站目前以及被墙。所有在上面搭建的项目需要全部用梯子上网。</p>
</blockquote>
<p><strong>现在搭建这种GPT网站基本上用vercel比较多了，这个目前没有被墙，而且不超过使用限制也是不要钱，这个网站基本上来讲和上面那个都是一样的，也是一个一键构建的网站。</strong>
 <br>
 官网链接:<a href="https://7boe.top/vercel.com" target="_blank">vercel</a></p>
<p>
 <ins>下面所有推荐的项目全是用vercel搭建的</ins>
</p>
<h2 id="chatgpt-jcm" tabindex="-1">ChatGPT-JCM</h2>
<blockquote>
 <p>这个是b站上一个大佬开发的，会一直不断完善，界面总体来讲比较美观
  <br>
  项目地址:<a href="https://github.com/202252197/ChatGPT_JCM" target="_blank">GITHUB</a>
  <br>
  我搭建的:<a href="https://chat.7boe.top" target="_blank">DEMO</a></p>
</blockquote>
<h3 id="readme" tabindex="-1">README</h3>
<div align="center">
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicPI3N.png&amp;size=m">
</div>
<a href="https://github.com/202252197"> <img width="800" src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub-profile-trophy.vercel.app%2F%3Fusername%3D202252197%26column%3D7%26theme%3Dgruvbox%26no-frame%3Dtrue&amp;size=m"> </a>
<div>声明：此项目只发布于 GitHub，基于 BSD-3-Clause license 协议，免费且作为开源学习使用。并且不会有任何形式的卖号、付费服务、卖key等行为。谨防受骗。 项目使用Vue2进行开发，给大家提供一个方便使用的OpenAI web 管理界面，有好的建议和bug欢迎大家提出来，项目会一直开源和代码优化，方便对openai进行入门了解使用，后期会接入后端，实现更丰富的功能。</div>
<blockquote>
 <p>🤭记得点个小星星Starred</p>
</blockquote>
<p>会话
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicM7uP.png&amp;size=m" alt="webui4.5">
 <br>
 模型
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMKez.png&amp;size=m" alt="webui4.5">
 <br>
 微调模型
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicM9Zb.png&amp;size=m" alt="webui4.5">
 <br>
 文件
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMdBA.png&amp;size=m" alt="webui4.5">
 <br>
 多种prompt角色
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMO4p.png&amp;size=m" alt="webui4.5">
 <br>
 中英文切换
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMLaw.png&amp;size=m" alt="webui4.5">
 <br>
 适配手机&amp;平板</p>
<div>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMzet.png&amp;size=m" alt="drawing" width="270px"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMeHX.png&amp;size=m" alt="drawing" width="280px"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMGkc.png&amp;size=m" alt="drawing" width="270px">
</div>
<div>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F09%2FicMh9o.png&amp;size=m" alt="drawing">
</div>
<p>应用程序（2K的Star再更新）</p>
<p>部署步骤</p>
<p>参考视频
 <br>
 <a href="https://www.bilibili.com/video/BV1iL411k7pC" target="_blank">https://www.bilibili.com/video/BV1iL411k7pC</a> 本地和云服务器部署视频</p>
<p>本地部署</p>
<pre><code class="language-">npm install
npm run serve
npm run build
</code></pre>
<p>在线体验地址 (需要使用自己的OpenAI KEY)</p>
<blockquote>
 <p><a href="https://huggingface.co/spaces/junchenmo/OpenAI-Manager" target="_blank">https://huggingface.co/spaces/junchenmo/OpenAI-Manager</a></p>
</blockquote>
<p>国内在线体验地址 (没kx再或者没有KEY–省点用)</p>
<blockquote>
 <p><a href="https://175.178.88.119/learn.html" target="_blank">https://175.178.88.119/learn.html</a></p>
</blockquote>
<p>OpenAI-Key设置以及自定义设置
 <br>
 在.env.serve中添加代码</p>
<pre><code class="language-">VUE_APP_OPENAI_API_KEY='你的openai api key'
</code></pre>
<p>在/src/store/mutation-types.js</p>
<p>可以在此文件中设置AI头像+用户头像+用户名称</p>
<p>Docker部署(暂时不是最新的镜像)</p>
<p>构建镜像
 <br>
 使用以下命令构建镜像，其中 “jcm-chatgpt” 是您想要给镜像取的名称，“.” 表示 Dockerfile 在当前目录中。</p>
<pre><code class="language-">docker build -t jcm-chatgpt .
</code></pre>
<p>运行镜像
 <br>
 构建完成后，可以使用以下命令运行镜像，其中 “my-container” 是您想要给容器取的名称。该命令会将容器端口 80 映射到本地机器的端口 80。</p>
<pre><code class="language-">docker run --name my-chatgpt -p 80:80 jcm-chatgpt
</code></pre>
<p>技术栈</p>
<table>
 <thead>
  <tr>
   <th>名称</th>
   <th>版本</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>vue</td>
   <td>2.6.14</td>
  </tr>
  <tr>
   <td>element-ui</td>
   <td>2.15.12</td>
  </tr>
  <tr>
   <td>NodeJS</td>
   <td>14+</td>
  </tr>
 </tbody>
</table>
<p>项目进度（对标OpenAI官方接口文档）</p>
<table>
 <thead>
  <tr>
   <th>接口</th>
   <th>描述</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>List Models</td>
   <td>获取模型列表</td>
  </tr>
  <tr>
   <td>Completion</td>
   <td>text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001, davinci, curie, babbage, ada模型</td>
  </tr>
  <tr>
   <td>Chat Completion</td>
   <td>gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301模型</td>
  </tr>
  <tr>
   <td>Create edit</td>
   <td>创建编辑(待…)</td>
  </tr>
  <tr>
   <td>Create Image</td>
   <td>根据描述生成图片</td>
  </tr>
  <tr>
   <td>Create image edit</td>
   <td>根据上传的图片结合输入的描述生成图片</td>
  </tr>
  <tr>
   <td>Create Image Variation</td>
   <td>根据上传的图片生成变体图片</td>
  </tr>
  <tr>
   <td>Create embeddings</td>
   <td>创建向量查询(可以实现PDF对话)(待…)</td>
  </tr>
  <tr>
   <td>Create transcription</td>
   <td>语音转换为文字</td>
  </tr>
  <tr>
   <td>Create translation</td>
   <td>一个或多个来源语言的语音或音频文件翻译成目标语言</td>
  </tr>
  <tr>
   <td>List files</td>
   <td>文件列表</td>
  </tr>
  <tr>
   <td>Upload file</td>
   <td>上传文件</td>
  </tr>
  <tr>
   <td>Delete file</td>
   <td>删除文件</td>
  </tr>
  <tr>
   <td>Retrieve file</td>
   <td>检索文件信息</td>
  </tr>
  <tr>
   <td>Retrieve file content</td>
   <td>检索文件内容(OpenAI为了防止滥用,只要plus用户才可以使用)</td>
  </tr>
  <tr>
   <td>Create fine-tune</td>
   <td>创建微调</td>
  </tr>
  <tr>
   <td>List fine-tunes</td>
   <td>微调列表</td>
  </tr>
  <tr>
   <td>Retrieve fine-tune</td>
   <td>检索微调信息</td>
  </tr>
  <tr>
   <td>Cancel fine-tune</td>
   <td>取消微调</td>
  </tr>
  <tr>
   <td>List fine-tune events</td>
   <td>微调事件列表(待…)</td>
  </tr>
  <tr>
   <td>Delete fine-tune model</td>
   <td>删除微调模型</td>
  </tr>
  <tr>
   <td>Create moderation</td>
   <td>创建审核</td>
  </tr>
  <tr>
   <td>List engines</td>
   <td>引擎列表(已弃用)</td>
  </tr>
  <tr>
   <td>Retrieve engine</td>
   <td>检索引擎信息(已弃用)</td>
  </tr>
  <tr>
   <td>多会话储存和上下文逻辑</td>
   <td>GPT3.5模型支持上下文逻辑,多窗口上下文对话</td>
  </tr>
  <tr>
   <td>导出导入数据</td>
   <td>支持导出当前会话，导出全部会话，导入当前会话，导出当前会话，清除当前会话，清除全部会话</td>
  </tr>
  <tr>
   <td>聊天截图到本地图片</td>
   <td>截图功能，有缺陷只能截图当前窗口的图片，建议QQ长截图（暂时取消）</td>
  </tr>
  <tr>
   <td>更换聊天窗口背景</td>
   <td>支持输入背景图片URL，暂时取消并保留此功能，没太大意义（暂时取消）</td>
  </tr>
  <tr>
   <td>角色扮演</td>
   <td>内置多角色prompt</td>
  </tr>
  <tr>
   <td>界面多语言</td>
   <td>支持中英文语言</td>
  </tr>
  <tr>
   <td>更换主题</td>
   <td>待开发</td>
  </tr>
  <tr>
   <td>增加后端实现更多功能</td>
   <td>待开发</td>
  </tr>
  <tr>
   <td>More</td>
   <td>待开发</td>
  </tr>
 </tbody>
</table>
<p>贡献者</p>
<div>
 <a href="https://github.com/202252197/ChatGPT_JCM/graphs/contributors"> <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcontrib.rocks%2Fimage%3Frepo%3D202252197%2FChatGPT_JCM&amp;size=m"> </a>
</div>
<p>进学习群加V</p>
<div>
 发广告秒踢，不解决其他项目问题，只针对本项目进行优化增加功能 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fi.328888.xyz%2F2023%2F04%2F03%2FiHKA4H.jpeg&amp;size=m" alt="drawing" width="300px" height="300px">
</div>
<p>Star History
 <br>
 <a href="https://star-history.com/#202252197/ChatGPT_JCM&amp;Timeline" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fapi.star-history.com%2Fsvg%3Frepos%3D202252197%2FChatGPT_JCM%26type%3DTimeline&amp;size=m" alt="Star History Chart"></a></p>
<p>免责声明
 <br>
 这不是官方的OpenAI产品。这是一个个人项目，与OpenAI没有任何关系。不要起诉我。</p>
<p><a href="https://github.com/202252197/ChatGPT_JCM"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2F202252197%2FChatGPT_JCM&amp;size=m"></a>
 <br>
 <a href="https://github.com/202252197/ChatGPT_JCM"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Flast-commit%2F202252197%2FChatGPT_JCM&amp;size=m"></a>
 <br>
 <a href="https://github.com/202252197/ChatGPT_JCM"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Frelease%2F202252197%2FChatGPT_JCM&amp;size=m"></a>
 <br>
 <a href="https://github.com/202252197/ChatGPT_JCM"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Fdownloads%2F202252197%2FChatGPT_JCM%2Ftotal&amp;size=m"></a>
 <br>
 <a href="https://github.com/202252197/ChatGPT_JCM"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fgithub%2Flicense%2F202252197%2FChatGPT_JCM&amp;size=m"></a></p>
<p></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fprofile-counter.glitch.me%2F202252197%2Fcount.svg&amp;size=m" alt="Visitor Count"></p>
<h2 id="chatgpt-next-web" tabindex="-1">ChatGPT-Next-Web</h2>
<p><strong>一个可以让别人自己输入key来调用的网站，省的自己的key被用光最好的方法</strong>
 <br>
 <ins>当然界面我认为也是第二美观的，这些仓库都是可以foke下来，这样更新同步比较方便。</ins></p>
<p>官方项目地址:<a href="https://github.com/Yidadaa/ChatGPT-Next-Web" target="_blank">GTIHUB</a>
 <br>
 我搭建的:<a href="https://next.7boe.top" target="_blank">NEXT</a></p>
<h3 id="readme-1" tabindex="-1">README</h3>
<div align="center">
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FYidadaa%2FChatGPT-Next-Web%2F072a35b4ee1940fb23264731038403c563638150%2Fdocs%2Fimages%2Ficon.svg&amp;size=m" alt="icon">
 <p>CHATGPT-NEXT
  <br>
  English / <a href="https://7boe.top/./README_CN.md" target="_blank">简体中文</a></p>
 <p>One-Click to deploy well-designed ChatGPT web UI on Vercel.</p>
 <p>一键免费部署你的私人 ChatGPT 网页应用。</p>
 <p><a href="https://chat-gpt-next-web.vercel.app/" target="_blank">Demo</a> / <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues" target="_blank">Issues</a> / <a href="https://discord.gg/zrhvHCr79N" target="_blank">Join Discord</a> / <a href="https://www.buymeacoffee.com/yidadaa" target="_blank">Buy Me a Coffee</a></p>
 <p><a href="https://chat-gpt-next-web.vercel.app/" target="_blank">演示</a> / <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues" target="_blank">反馈</a> / <a href="https://user-images.githubusercontent.com/16968934/231789746-41f34d05-6ef9-43f3-a1d1-ff109d4c3c14.jpg" target="_blank">QQ 群</a> / <a href="https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg" target="_blank">打赏开发者</a></p>
 <p><a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&amp;env=OPENAI_API_KEY&amp;env=CODE&amp;project-name=chatgpt-next-web&amp;repository-name=ChatGPT-Next-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fvercel.com%2Fbutton&amp;size=m" alt="Deploy with Vercel"></a></p>
 <p><a href="https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgitpod.io%2Fbutton%2Fopen-in-gitpod.svg&amp;size=m" alt="Open in Gitpod"></a></p>
 <p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web%2Fblob%2Fmain%2Fdocs%2Fimages%2Fcover.png%3Fraw%3Dtrue&amp;size=m" alt="cover"></p>
</div>
<p>Features</p>
<ul>
 <li><strong>Deploy for free with one-click</strong> on Vercel in under 1 minute</li>
 <li>Privacy first, all data stored locally in the browser</li>
 <li>Responsive design, dark mode and PWA</li>
 <li>Fast first screen loading speed (~100kb), support streaming response</li>
 <li>Awesome prompts powered by <a href="https://github.com/PlexPt/awesome-chatgpt-prompts-zh" target="_blank">awesome-chatgpt-prompts-zh</a> and <a href="https://github.com/f/awesome-chatgpt-prompts" target="_blank">awesome-chatgpt-prompts</a></li>
 <li>Automatically compresses chat history to support long conversations while also saving your tokens</li>
 <li>One-click export all chat history with full Markdown support</li>
 <li>I18n supported</li>
</ul>
<p>Roadmap</p>
<ul class="contains-task-list">
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> System Prompt: pin a user defined prompt as system prompt <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues/138" target="_blank">#138</a></li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> User Prompt: user can edit and save custom prompts to prompt list</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> Prompt Template: create a new chat with pre-defined in-context prompts</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> Share as image, share to ShareGPT</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> Desktop App with tauri</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> Self-host Model: support llama, alpaca, ChatGLM, BELLE etc.</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> Plugins: support network search, calculator, any other apis etc. <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165" target="_blank">#165</a></li>
</ul>
<p>Not in Plan</p>
<ul>
 <li>User login, accounts, cloud sync</li>
 <li>UI text customize</li>
</ul>
<p>主要功能</p>
<ul>
 <li>在 1 分钟内使用 Vercel <strong>免费一键部署</strong></li>
 <li>精心设计的 UI，响应式设计，支持深色模式，支持 PWA</li>
 <li>极快的首屏加载速度（~100kb），支持流式响应</li>
 <li>隐私安全，所有数据保存在用户浏览器本地</li>
 <li>海量的内置 prompt 列表，来自<a href="https://github.com/PlexPt/awesome-chatgpt-prompts-zh" target="_blank">中文</a>和<a href="https://github.com/f/awesome-chatgpt-prompts" target="_blank">英文</a></li>
 <li>自动压缩上下文聊天记录，在节省 Token 的同时支持超长对话</li>
 <li>一键导出聊天记录，完整的 Markdown 支持</li>
 <li>拥有自己的域名？好上加好，绑定后即可在任何地方<strong>无障碍</strong>快速访问</li>
</ul>
<p>开发计划</p>
<ul class="contains-task-list">
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 为每个对话设置系统 Prompt <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues/138" target="_blank">#138</a></li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 允许用户自行编辑内置 Prompt 列表</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 提示词模板：使用预制上下文快速定制新对话</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 分享为图片，分享到 ShareGPT</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 使用 tauri 打包桌面应用</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 支持自部署的大语言模型</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 插件机制，支持联网搜索、计算器、调用其他平台 api <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165" target="_blank">#165</a></li>
</ul>
<p>不会开发的功能</p>
<ul>
 <li>界面文字自定义</li>
 <li>用户登录、账号管理、消息云同步</li>
</ul>
<p>Get Started</p>
<blockquote>
 <p><a href="https://7boe.top/./README_CN.md#%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8" target="_blank">简体中文 &gt; 如何开始使用</a></p>
</blockquote>
<ol>
 <li>Get <a href="https://platform.openai.com/account/api-keys" target="_blank">OpenAI API Key</a>;</li>
 <li>Click
  <br>
  <a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&amp;env=OPENAI_API_KEY&amp;env=CODE&amp;project-name=chatgpt-next-web&amp;repository-name=ChatGPT-Next-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fvercel.com%2Fbutton&amp;size=m" alt="Deploy with Vercel"></a>, remember that <code>CODE</code> is your page password;</li>
 <li>Enjoy 😃</li>
</ol>
<p>FAQ</p>
<p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/docs/faq-cn.md" target="_blank">简体中文 &gt; 常见问题</a></p>
<p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/docs/faq-cn.md" target="_blank">English &gt; FAQ</a></p>
<p>Keep Updated</p>
<blockquote>
 <p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E4%BF%9D%E6%8C%81%E6%9B%B4%E6%96%B0" target="_blank">简体中文 &gt; 如何保持代码更新</a></p>
</blockquote>
<p>If you have deployed your own project with just one click following the steps above, you may encounter the issue of “Updates Available” constantly showing up. This is because Vercel will create a new project for you by default instead of forking this project, resulting in the inability to detect updates correctly.</p>
<p>We recommend that you follow the steps below to re-deploy:</p>
<ul>
 <li>Delete the original repository;</li>
 <li>Use the fork button in the upper right corner of the page to fork this project;</li>
 <li>Choose and deploy in Vercel again, <a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/docs/vercel-cn.md" target="_blank">please see the detailed tutorial</a>.</li>
</ul>
<p>Enable Automatic Updates</p>
<p>After forking the project, due to the limitations imposed by Github, you need to manually enable Workflows and Upstream Sync Action on the Actions page of the forked project. Once enabled, automatic updates will be scheduled every hour:</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web%2Fblob%2Fmain%2Fdocs%2Fimages%2Fenable-actions.jpg&amp;size=m" alt="Automatic Updates"></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web%2Fraw%2Fmain%2Fdocs%2Fimages%2Fenable-actions-sync.jpg&amp;size=m" alt="Enable Automatic Updates"></p>
<p>Manually Updating Code</p>
<p>If you want to update instantly, you can check out the <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork" target="_blank">Github documentation</a> to learn how to synchronize a forked project with upstream code.</p>
<p>You can star or watch this project or follow author to get release notifictions in time.</p>
<p>Access Password</p>
<blockquote>
 <p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E9%85%8D%E7%BD%AE%E9%A1%B5%E9%9D%A2%E8%AE%BF%E9%97%AE%E5%AF%86%E7%A0%81" target="_blank">简体中文 &gt; 如何增加访问密码</a></p>
</blockquote>
<p>This project provides limited access control. Please add an environment variable named <code>CODE</code> on the vercel environment variables page. The value should be passwords separated by comma like this:</p>
<pre><code class="language-">code1,code2,code3
</code></pre>
<p>After adding or modifying this environment variable, please redeploy the project for the changes to take effect.</p>
<p>Environment Variables</p>
<blockquote>
 <p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F" target="_blank">简体中文 &gt; 如何配置 api key、访问密码、接口代理</a></p>
</blockquote>
<p><code>OPENAI_API_KEY</code> (required)</p>
<p>Your openai api key.</p>
<p><code>CODE</code> (optional)</p>
<p>Access passsword, separated by comma.</p>
<p><code>BASE_URL</code> (optional)</p>
<blockquote>
 <p>Default: <code>https://api.openai.com</code></p>
</blockquote>
<blockquote>
 <p>Examples: <code>http://your-openai-proxy.com</code></p>
</blockquote>
<p>Override openai api request base url.</p>
<p>Development</p>
<blockquote>
 <p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E5%BC%80%E5%8F%91" target="_blank">简体中文 &gt; 如何进行二次开发</a></p>
</blockquote>
<p><a href="https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgitpod.io%2Fbutton%2Fopen-in-gitpod.svg&amp;size=m" alt="Open in Gitpod"></a></p>
<p>Before starting development, you must create a new <code>.env.local</code> file at project root, and place your api key into it:</p>
<pre><code class="language-">OPENAI_API_KEY=&lt;your api key here&gt;
</code></pre>
<p>Local Development</p>
<pre><code class="language-shell"># 1. install nodejs and yarn first
# 2. config local env vars in `.env.local`
# 3. run
yarn install
yarn dev
</code></pre>
<p>Deployment</p>
<blockquote>
 <p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E9%83%A8%E7%BD%B2" target="_blank">简体中文 &gt; 如何部署到私人服务器</a></p>
</blockquote>
<p>Docker (Recommended)</p>
<pre><code class="language-shell">docker pull yidadaa/chatgpt-next-web

docker run -d -p 3000:3000 \
   -e OPENAI_API_KEY="sk-xxxx" \
   -e CODE="your-password" \
   yidadaa/chatgpt-next-web
</code></pre>
<p>You can start service behind a proxy:</p>
<pre><code class="language-shell">docker run -d -p 3000:3000 \
   -e OPENAI_API_KEY="sk-xxxx" \
   -e CODE="your-password" \
   -e PROXY_URL="http://localhost:7890" \
   yidadaa/chatgpt-next-web
</code></pre>
<p>Shell</p>
<pre><code class="language-shell">bash &lt;(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/scripts/setup.sh)
</code></pre>
<p>Screenshots</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web%2Fblob%2Fmain%2Fdocs%2Fimages%2Fsettings.png&amp;size=m" alt="Settings"></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web%2Fraw%2Fmain%2Fdocs%2Fimages%2Fmore.png&amp;size=m" alt="More"></p>
<p>Donation</p>
<p><a href="https://www.buymeacoffee.com/yidadaa" target="_blank">Buy Me a Coffee</a></p>
<p>Special Thanks</p>
<p>Sponsor</p>
<blockquote>
 <p>仅列出捐赠金额 &gt;= 100RMB 的用户。</p>
</blockquote>
<p><a href="https://github.com/mushan0x0" target="_blank">@mushan0x0</a>
 <br>
 <a href="https://github.com/ClarenceDan" target="_blank">@ClarenceDan</a>
 <br>
 <a href="https://github.com/zhangjia" target="_blank">@zhangjia</a>
 <br>
 <a href="https://github.com/hoochanlon" target="_blank">@hoochanlon</a>
 <br>
 <a href="https://github.com/relativequantum" target="_blank">@relativequantum</a>
 <br>
 <a href="https://github.com/desenmeng" target="_blank">@desenmeng</a>
 <br>
 <a href="https://github.com/webees" target="_blank">@webees</a>
 <br>
 <a href="https://github.com/chazzhou" target="_blank">@chazzhou</a>
 <br>
 <a href="https://github.com/hauy" target="_blank">@hauy</a>
 <br>
 <a href="https://github.com/Corwin006" target="_blank">@Corwin006</a>
 <br>
 <a href="https://github.com/yankunsong" target="_blank">@yankunsong</a>
 <br>
 <a href="https://github.com/ypwhs" target="_blank">@ypwhs</a>
 <br>
 <a href="https://github.com/fxxxchao" target="_blank">@fxxxchao</a></p>
<p>Contributor</p>
<p><a href="https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors" target="_blank">Contributors</a></p>
<p>LICENSE</p>
<p><a href="https://github.com/kattgu7/Anti-996-License/blob/master/LICENSE_CN_EN" target="_blank">Anti 996 License</a></p>
<p><span class="joe_lamp"></span>
 <br>
 先写到这里，还有其他3个项目写到下一篇文章里面，BAY</p>]]></description><guid isPermaLink="false">/archives/130</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Wed, 19 Apr 2023 06:08:02 GMT</pubDate></item><item><title><![CDATA[GITHUB项目个人起始页imsyy]]></title><link>https://7boe.top/archives/129</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E4%B8%AA%E4%BA%BA%E8%B5%B7%E5%A7%8B%E9%A1%B5imsyy&amp;url=/archives/129" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E8%B5%B7%E5%A7%8B%E9%A1%B5" tabindex="-1">起始页</h2>
<p>GITHUB:<a href="https://github.com/imsyy/home" target="_blank">作者页面</a>
 <br>
 我搭建好的DEMO:<a href="https://www.7boe.top" target="_blank">起始页</a></p>
<h2 id="readme" tabindex="-1">README</h2>
<p>简体中文 | <a href="https://7boe.top/./README_EN.md" target="_blank">English</a></p>
<p><strong></strong></p>
<h2><strong>無名の主页</strong></h2>
简单的小主页，原来的看够了，重新弄了一个
<p></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fs2.loli.net%2F2022%2F07%2F14%2FK5JigfvDoNewtuS.webp&amp;size=m" alt="無名の主页"></p>
<blockquote>
 <p>主页的 Logo 字体已经过压缩，若用本站 Logo 以外的字母会变回默认字体，这里是 <a href="https://file.4everland.app/font/Other/Pacifico-Regular.ttf" target="_blank">完整字体</a></p>
</blockquote>
<h3 id="demo" tabindex="-1">Demo</h3>
<blockquote>
 <p>由于 CDN 缓存原因，查看最新效果可能需要 <code>Ctrl</code> + <code>F5</code> 强制刷新浏览器缓存</p>
</blockquote>
<ul>
 <li><a href="https://www.imsyy.top" target="_blank">無名の主页</a></li>
 <li><a href="https://home-imsyy.vercel.app/" target="_blank">無名の主页 - 备用线路</a></li>
</ul>
<h3 id="%E5%8A%9F%E8%83%BD" tabindex="-1">功能</h3>
<ul class="contains-task-list">
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 载入动画</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 站点简介</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> Hitokoto 一言</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 日期及时间</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 实时天气</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 时光进度条</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 音乐播放器</li>
 <li class="task-list-item"><input class="task-list-item-checkbox" checked disabled type="checkbox"> 移动端适配</li>
</ul>
<ul class="contains-task-list">
 <li class="task-list-item"><input class="task-list-item-checkbox" disabled type="checkbox"> 播放器取消使用 Aplayer</li>
</ul>
<h3 id="%E9%83%A8%E7%BD%B2" tabindex="-1">部署</h3>
<ul>
 <li>
  <p><strong>安装</strong> <a href="https://nodejs.org/zh-cn/" target="_blank">node.js</a> <strong>环境</strong></p>
  <blockquote>
   <p>node &gt; 16.16.0
    <br>
    npm &gt; 8.15.0</p>
  </blockquote>
 </li>
 <li>
  <p>然后以 <strong>管理员权限</strong> 运行 <code>cmd</code> 终端，并 <code>cd</code> 到 项目根目录</p>
 </li>
 <li>
  <p>在 <code>终端</code> 中输入：</p>
 </li>
</ul>
<pre><code class="language-bash"># 安装 yarn
npm install -g yarn

# 安装依赖
yarn install

# 预览
yarn dev

# 构建
yarn build
</code></pre>
<blockquote>
 <p>构建完成后，静态资源会在 <strong><code>dist</code> 目录</strong> 中生成，可将 <strong><code>dist</code> 文件夹下的文件</strong>上传至服务器，也可使用 <code>Vercel</code> 等托管平台一键导入并自动部署</p>
</blockquote>
<h3 id="%E5%A4%A9%E6%B0%94" tabindex="-1">天气</h3>
<p>天气及地区获取需要 <code>高德开放平台</code> 相关 API</p>
<ul>
 <li>前往 <a href="https://console.amap.com/dev/index" target="_blank">高德开放平台控制台</a> 创建一个 <code>Web 服务</code> 类型的 <code>Key</code>，并将 <code>Key</code> 填入 <code>.env</code> 中的 <code>VITE_WEATHER_KEY</code> 中</li>
</ul>
<p>也可自行更换其他方式</p>
<h3 id="%E9%9F%B3%E4%B9%90" tabindex="-1">音乐</h3>
<blockquote>
 <p>本项目采用了基于 <code>MetingJS</code> 的 <code>Aplayer</code> 音乐播放器，可实现快速自定义歌单
  <br>
  *仅支持 <strong>中国大陆地区</strong></p>
</blockquote>
<p>请在 <code>.env</code> 文件中更改歌曲相关参数即可实现自定义歌单列表</p>
<pre><code class="language-bash"># 歌曲 API 地址
VITE_SONG_API = "https://api-meting.imsyy.top"
# 歌曲服务器 ( netease-网易云, tencent-qq音乐 )
VITE_SONG_SERVER = "netease"
# 播放类型 ( song-歌曲, playlist-播放列表, album-专辑, search-搜索, artist-艺术家 )
VITE_SONG_TYPE = "playlist"
# 播放 ID
VITE_SONG_ID = "7452421335"
</code></pre>
<h3 id="%E5%AD%97%E4%BD%93" tabindex="-1">字体</h3>
<p>现采用 <code>HarmonyOS Sans</code> 开源字体，采用字体拆分，提升加载速度</p>
<blockquote>
 <p>由于本站 <code>CDN</code> 已开启防盗链，<strong>非本站域名不可访问</strong>，请将字体引入链接更改为下方内容，否则 <strong>自定义字体将失效</strong></p>
 <p><code>https://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css</code></p>
</blockquote>
<details>
 <summary>旧版方式</summary>
 <blockquote>
  <p>由于本项目引入了中文字体，需要压缩中文字体以提高网页加载速度（ 也可以取消使用中文字体 ）</p>
 </blockquote>
 <h4 id="%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E5%8E%BB%E9%99%A4%E7%B9%81%E4%BD%93" tabindex="-1">中文字体去除繁体</h4>
 <ul>
  <li>安装 <code>Python 3.7</code> 和 <code>pip</code></li>
  <li>运行 <code>pip install fonttools</code></li>
  <li>下载 <a href="https://gist.githubusercontent.com/imaegoo/d64e5088b723c2e02c40985f55ff12db/raw/5ebd2ce49418c73459a9dfe050483409306a6c1d/sc_unicode.txt" target="_blank">sc_unicode.txt</a></li>
  <li>运行 <code>pyftsubset 字体名称.ttf --unicodes-file=sc_unicode.txt</code></li>
 </ul>
 <h4 id="%E5%AD%97%E4%BD%93%E8%BF%9B%E4%B8%80%E6%AD%A5%E5%8E%8B%E7%BC%A9" tabindex="-1">字体进一步压缩</h4>
 <ul>
  <li>编译安装 <code>Google woff2</code></li>
 </ul>
 <pre><code class="language-bash">sudo apt-get install -y git g++ make
git clone --recursive https://github.com/google/woff2.git
cd woff2
make clean all
</code></pre>
 <ul>
  <li>再压缩字体</li>
 </ul>
 <pre><code class="language-">./woff2_compress ./字体名称.ttf
</code></pre>
 <ul>
  <li>最终可对原字体进行缓加载，<strong>先行加载压缩后的字体</strong></li>
 </ul>
 <blockquote>
  <p>详细信息可前往 <a href="https://www.imaegoo.com/2020/chinese-font-compress/" target="_blank">虹墨空间站</a> 查看原文</p>
 </blockquote>
</details>
<h3 id="%E6%8A%80%E6%9C%AF%E6%A0%88" tabindex="-1">技术栈</h3>
<ul>
 <li><a href="https://cn.vuejs.org/" target="_blank">Vue</a></li>
 <li><a href="https://vitejs.cn/vite3-cn/" target="_blank">Vite</a></li>
 <li><a href="https://pinia.vuejs.org/zh/" target="_blank">Pinia</a></li>
 <li><a href="https://iconpark.oceanengine.com/official" target="_blank">IconPark</a></li>
 <li><a href="https://xicons.org/" target="_blank">xicons</a></li>
 <li><a href="https://aplayer.js.org/" target="_blank">Aplayer</a></li>
</ul>
<h3 id="api" tabindex="-1">API</h3>
<ul>
 <li><a href="https://api.wuenci.com/meting/api/" target="_blank">MetingAPI By 武恩赐</a></li>
 <li><a href="https://api.ixiaowai.cn/" target="_blank">小歪 API</a></li>
 <li><a href="https://lbs.amap.com/" target="_blank">高德开放平台</a></li>
 <li><a href="https://hitokoto.cn/" target="_blank">Hitokoto 一言</a></li>
</ul>
<p><a title="SSL" target="_blank" href="https://myssl.com/seal/detail?domain=blog.imsyy.top"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2FMySSL-%E5%AE%89%E5%85%A8%E8%AE%A4%E8%AF%81-brightgreen&amp;size=m"></a>&nbsp;<a title="CDN" target="_blank" href="https://cdnjs.com/"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2FCDN-Cloudflare-blue&amp;size=m"></a>&nbsp;<a title="Copyright" target="_blank" href="https://imsyy.top/"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fimg.shields.io%2Fbadge%2FCopyright%2520%25C2%25A9%25202020--2023-%25E7%2584%25A1%25E5%2590%258D-red&amp;size=m"></a></p>
<h2 id="%E9%9C%80%E8%A6%81%E4%BF%AE%E6%94%B9%E7%9A%84%E4%B8%9C%E8%A5%BF" tabindex="-1">需要修改的东西</h2>
<p>文件里面有底部备案以及社交链接，和右边网站链接，以及播放器信息，在env变量里面配置就可以了。
 <br>
 配置完成后构建出来的东西就是自己修改的页面了，不需要构建完成后在去找源码改，那样比较麻烦。</p>
<h2 id="%E5%9B%BE%E6%A0%87" tabindex="-1">图标</h2>
<p>如果需要修改一些图片，建议去阿里巴巴矢量图标库寻找，大多数单色图标都是底部透明，这样也方便适配网页。
 <br>
 阿里巴巴图标库：<a href="https://www.iconfont.cn/" target="_blank">图标</a></p>]]></description><guid isPermaLink="false">/archives/129</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>技术分类</category><pubDate>Fri, 14 Apr 2023 08:22:51 GMT</pubDate></item><item><title><![CDATA[GITHub项目之littlelink-custom（精美的个人主页）]]></title><link>https://7boe.top/archives/107</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHub%E9%A1%B9%E7%9B%AE%E4%B9%8Blittlelink-custom%EF%BC%88%E7%B2%BE%E7%BE%8E%E7%9A%84%E4%B8%AA%E4%BA%BA%E4%B8%BB%E9%A1%B5%EF%BC%89&amp;url=/archives/107" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E5%AE%9A%E5%88%B6%E5%8C%96%E4%B8%AA%E4%BA%BA%E4%B8%BB%E9%A1%B5" tabindex="-1">定制化个人主页</h2>
<p><strong>GITHUB项目：<a href="https://github.com/JulianPrieber/littlelink-custom" target="_blank">主页</a>
  <br> 已经建好的<a href="https://w.7boe.top" target="_blank">demo</a></strong></p>
<h2 id="%E5%8A%9F%E8%83%BD(%E6%9C%BA%E7%BF%BB)" tabindex="-1">功能(机翻)</h2>
<ul>
 <li>
  <p>LittleLink Custom为在线管理和共享链接提供了独特的解决方案。我们的平台提供了一个类似于 Linktree的网站，让用户可以克服在社交媒体平台上只能添加一个链接的限制。通过链接到您的 LittleLink 自定义页面，用户可以在一个方便的位置轻松访问他们需要的所有链接。</p>
 </li>
 <li>
  <p>我们的平台允许用户在他们自己的网络服务器或网络托管提供商上托管他们的链接，确保轻松访问和控制他们的在线状态。此外，其他用户可以注册并创建自己的链接，这使其成为希望管理多个链接的企业和组织的理想解决方案。</p>
 </li>
 <li>
  <p>我们的平台还包括一个管理面板，使用户能够轻松访问其他用户的链接，使其成为希望管理多个链接的企业和组织的理想解决方案。总体而言，LittleLink Custom 为简化在线状态提供了高效且用户友好的解决方案。</p>
 </li>
</ul>
<h2 id="%E5%85%B3%E4%BA%8E" tabindex="-1">关于</h2>
<ul>
 <li>
  <p>LittleLink Custom是LittleLink Admin的一个分支，其既定目标是使管理面板更易于使用和设置，以供没有经验的用户和初次使用的用户使用，并添加了许多围绕个人用户 LittleLink 页面的自定义主题的自定义功能。</p>
 </li>
 <li>
  <p>LittleLink Custom 的开发是为了简化 LittleLink 和 LittleLink Admin 的使用和设置，适用于编码经验最少或网络托管知识有限的个人。该项目的设计方式允许将LittleLink 自定义目录的实现拖放到Web 主机的根目录中，从而无需进行源代码操作或处理复杂的终端命令。</p>
 </li>
 <li>
  <p>除了用户友好的设置过程外，此分支还提供了许多增强用户体验的自定义功能，包括根据操作系统或浏览器主题设置自动应用的深色模式，以及用于美观响应式设计的浅色不显眼的CSS 动画. 这些和其他小的变化结合起来，提供了一个实质性的功能集，使LittleLink Custom 与其他分支区分开来。</p>
 </li>
</ul>
<h2 id="%E6%BC%94%E7%A4%BA" tabindex="-1">演示</h2>
<p><strong>尝试现场演示 LittleLink 页面及其所有功能
  <br> 这是网站的完整演示，具有登录和注册功能。请随时注册您的帐户并试用 LittleLink Custom 的所有功能。</strong></p>
<p><a href="https://littlelink-custom.llc.ovh/" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fbadges%2Flive_demo.png&amp;size=m" alt="img"></a></p>
<h2 id="%E7%89%B9%E5%BE%81" tabindex="-1">特征</h2>
<table>
 <thead>
  <tr>
   <th>功能</th>
   <th>LittleLink 定制</th>
   <th>LittleLink 管理员¹</th>
   <th>小林克</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>创建一个包含 30 多个按钮的链接页面</td>
   <td>✔️</td>
   <td>✔️</td>
   <td>✔️</td>
  </tr>
  <tr>
   <td>免代码设置</td>
   <td>✔️</td>
   <td>✔️</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>订购链接</td>
   <td>✔️</td>
   <td>✔️</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>计算点击次数</td>
   <td>✔️</td>
   <td>✔️</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>管理用户、页面和链接</td>
   <td>✔️</td>
   <td>✔️</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>自动暗模式检测</td>
   <td>✔️</td>
   <td>✖️²</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>通过拖放排列链接</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>按钮悬停动画</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>自定义链接选项</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>个人用户的社交分享预览</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>有新版本更新通知</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>内置 SMTP 服务器</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>用于编辑文本的可视化 HTML 编辑器</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>不用命令行设置</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>自定义主题支持</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>内置更新程序</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>支持 Font Awesome 的按钮编辑器</td>
   <td>✔️</td>
   <td>❌</td>
   <td>❌</td>
  </tr>
  <tr>
   <td>外部分析支持</td>
   <td>✔️</td>
   <td>❌</td>
   <td>➖</td>
  </tr>
  <tr>
   <td>能够自定义主页</td>
   <td>✔️</td>
   <td></td>
   <td></td>
  </tr>
 </tbody>
</table>
<p><strong>如果您在浏览器或操作系统中的首选主题设置为深色，则所有 LittleLink 自定义页面都会自动应用深色模式主题。</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fmarketing%2Fdark_mode.png&amp;size=m" alt="img"></p>
<p><strong>轻量级 CSS 动画</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fmarketing%2Fcss_animations.gif&amp;size=m" alt="img"></p>
<p><strong>自定义主题</strong></p>
<p><strong>使用主题自定义 LittleLink Custom 实例的外观。主题使您只需单击几下即可更改网站的外观。用户可以提交自己制作的主题供大家下载使用。</strong></p>
<blockquote>
 <p>通过设计自己的主题做出贡献。您可以在下面阅读有关贡献的更多信息。</p>
</blockquote>
<table>
 <thead>
  <tr>
   <th><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F60265788%2F169555321-0bc67664-ce3f-48e7-a4c2-9988a3079ce4.png&amp;size=m" alt="alt text 1"></th>
   <th><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F60265788%2F169555323-8972dfe4-f46e-45f1-a3fc-1b0fc226147d.png&amp;size=m" alt="alt text 2"></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F60265788%2F169555309-811ea607-b4f0-4ef5-8d99-92026995371d.png&amp;size=m" alt="alt text 3"></td>
   <td><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F60265788%2F169555313-557428e6-a1c3-42dc-b6e4-bca72e4f570a.png&amp;size=m" alt="alt text 4"></td>
  </tr>
 </tbody>
</table>
<p>您可以在此处找到所有可用的主题： <a href="http://littlelink-custom.com/themes" target="_blank">littlelink-custom.com/themes</a></p>
<p><strong>如何添加主题</strong></p>
<ul>
 <li>
  <p>如何将主题添加到您的 LittleLink 自定义实例您可以将下载的主题添加到管理面板上的 LittleLink 自定义实例。导航到“主题”选项卡并滚动到页面底部。</p>
 </li>
 <li>
  <p>现在单击选择文件并选择您下载的主题 zip 文件。现在点击“上传主题”，您现在应该可以选择您上传的主题了。</p>
 </li>
</ul>
<p><strong>设想主题由用户为用户制作。</strong></p>
<blockquote>
 <p>如果您对 CSS 有所了解，请考虑制作您自己的主题并将其添加到公共目录中。一切都记录在专用的 GitHub 存储库中。</p>
</blockquote>
<p><a href="http://github.com/JulianPrieber/llc-themes/tree/main/contributing" target="_blank">github.com/JulianPrieber/llc-themes/tree/main/contributing</a></p>
<p><strong>内置按钮编辑器的无限按钮组合</strong></p>
<p><strong>使用您想要的多种颜色创建自定义背景颜色和渐变。</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fmarketing%2Fcolors_gradients.png&amp;size=m" alt="img"></p>
<p><strong>内置更新程序</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fmarketing%2Fupdater.png&amp;size=m" alt="img"></p>
<p><strong>安装</strong></p>
<ul>
 <li>
  <p>下载安装步骤：</p>
 </li>
 <li>
  <p>下载最新版本的 LittleLink Custom 并将文件夹“littlelink-custom”或该文件夹的内容放在您网站的根目录中。就是这样！无需编码，无需命令行设置，即插即用。</p>
 </li>
</ul>
<p><strong>浏览第一个设置页面：</strong>
 <br>
 首次访问您的实例时，您将看到第一个设置页面。</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F60265788%2F204514743-5da1ae4e-4fb0-45e4-bbf3-183595c08d99.png&amp;size=m" alt="img"></p>
<h2 id="docker" tabindex="-1">DOCKER</h2>
<p><a href="https://github.com/JulianPrieber/llc-docker" target="_blank"><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fraw.githubusercontent.com%2FLittleLink-Custom%2Fbranding%2Fmain%2Fmarketing%2Fdocker_edition.png&amp;size=m" alt="img"></a></p>
<ul>
 <li>
  <p>LittleLink Custom的官方 docker 版本。这个 docker 镜像是一个易于设置的解决方案，包含运行 LittleLink Custom 所需的一切。</p>
 </li>
 <li>
  <p>LittleLink Custom 的 docker 版本保留了原始版本的所有功能和自定义选项。</p>
 </li>
</ul>
<p><strong>这个 docker 基于Alpine Linux，一个设计小巧、简单和安全的 Linux 发行版。Web 服务器运行Apache2，这是一款免费的开源跨平台 Web 服务器软件。docker 自带PHP 8.0以实现高兼容性和性能。</strong></p>
<p><strong>使用 docker 就像拉取和部署一样简单。</strong></p>
<blockquote>
 <p>docker pull julianprieber/littlelink-custom</p>
</blockquote>
<p>DOCKERHUB:<a href="https://hub.docker.com/r/julianprieber/littlelink-custom" target="_blank">镜像位置</a></p>
<h2 id="docker%E5%AE%89%E8%A3%85%E6%96%B9%E5%BC%8F" tabindex="-1">DOCKER安装方式</h2>
<p>创建储存卷</p>
<pre><code class="language-">docker volume create llc
</code></pre>
<p>修改一些内容然后执行
 <br>
 例</p>
<pre><code class="language-">docker run --detach \
    --name littlelink-custom \
    --hostname littlelink-custom \
    --env HTTP_SERVER_NAME="www.example.xyz" \               # 改成自己的域名
    --env HTTPS_SERVER_NAME="www.example.xyz" \            # 改成自己的域名
    --env SERVER_ADMIN="admin@example.xyz" \
    --env TZ="Europe/Berlin" \
    --env PHP_MEMORY_LIMIT="512M" \
    --env UPLOAD_MAX_FILESIZE="16M" \
    --publish 80:80 \
    --publish 443:443 \
    --restart unless-stopped \
    --mount source=llc,target=/htdocs \
    julianprieber/littlelink-custom\
</code></pre>
<h2 id="docker-compose" tabindex="-1">Docker Compose</h2>
<pre><code class="language-">version: "3.8"

services:

  littlelink-custom:
    hostname: 'littlelink-custom'
    image: 'julianprieber/littlelink-custom:latest'
    environment:
      TZ: 'Europe/Berlin'
      SERVER_ADMIN: 'youremail@gmail.com'
      HTTP_SERVER_NAME: 'yourdomain.com'
      HTTPS_SERVER_NAME: 'yourdomain.com'
      LOG_LEVEL: 'info'
      PHP_MEMORY_LIMIT: '256M'
      UPLOAD_MAX_FILESIZE: '8M'
    volumes:
      - '/opt/docker/configs/littlelink/config/.env:/htdocs/.env:rw'
      - '/opt/docker/configs/littlelink/config/advanced-config.php:/htdocs/config/advanced-config.php:rw'
      - '/opt/docker/configs/littlelink/config/img:/htdocs/img:rw'
    ports:
      - '8088:80'
      - '8090:443'
    restart: unless-stopped
    networks:
      - 'mariadb'
      - 'misc'
      - 'redis'
networks:
  misc:
    external: true
    name: 'misc'
  mariadb:
    external: true
    name: 'db-mariadb'
  redis:
    external: true
    name: 'db-redis'
</code></pre>]]></description><guid isPermaLink="false">/archives/107</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>网站搭建</category><category>Docker</category><category>技术分类</category><pubDate>Fri, 7 Apr 2023 07:26:01 GMT</pubDate></item><item><title><![CDATA[Linux之升级内核以及系统]]></title><link>https://7boe.top/archives/108</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E4%B9%8B%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8%E4%BB%A5%E5%8F%8A%E7%B3%BB%E7%BB%9F&amp;url=/archives/108" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8" tabindex="-1">升级内核</h1>
<p><strong>第一步也是最重要的一步，如果是vps的话直接创建快照即可</strong></p>
<blockquote>
 <p>为什么升级?</p>
</blockquote>
<p><em>这不是讲废话吗？种种因素也好，其实有些东西不需要升级也能用，可能一升级后再也开不开机了，也不排除这种情况</em></p>
<h2 id="%E5%BC%95%E8%A8%80" tabindex="-1">引言</h2>
<ul>
 <li>
  <p>工作中有时会遇到系统版本过旧，无法满足安全扫描后的安全要求，系统漏洞数量多，处理难度较大，这时，我们就需要升级OS或Linux内核版本；</p>
 </li>
 <li>
  <p>Linux 内核版本分为主线（mailine stable ）、稳定和长期版本。所有内核版本都可以在内核开发官方网站上获取。</p>
 </li>
 <li>
  <p>主线版本（kernel-ml）代表整个 Linux 内核的一个树干，新的主线版本每 2-3 个月发布一次，所有的新功能及特性都将会包含主线版本中。</p>
 </li>
 <li>
  <p>稳定内核则是在主线版本中，被认为是稳定的那些。稳定内核的任何错误修复都将从主线树中继承，也就是主线内核出现的任何错误 (包括之前的任何旧版本内核的错误和 BUG) 在得到修复之后才会被指定为稳定内核，所以在通常情况下，稳定内核既有内核新功能，同时 BUG 也是最少的内核版本。稳定内核的更新发布依赖于主线内核 (直到下一个主线内核可用)，稳定的内核更新是根据需要发布的，通常是每 3 个月。而对于长期文档内核版本，通常提供几个长期维护内核版本，用于较早的内核树错误修复后的更新。这些内核只应用重要的错误修复，通常不会有非常频繁的更新。</p>
 </li>
 <li>
  <p>主线、稳定和长期都是活动内核版本，由 Linus Torvalds 及 Linux 内核组织维护和发布。 而我们平时所使用的 Linux 发行版的内核都为分发(第三方)内核，许多 Linux 发行版都提供自己的长期维护（Lts）内核版本，这些内核可能是也可能不是基于内核开发人员维护的。因此分发版本的内核版本由发行版的厂商决定并有自己的维护周期，通常由分发版更新时一起发布。中的ml是就是最新的版本</p>
 </li>
</ul>
<blockquote>
 <p>原文链接：<a href="https://blog.csdn.net/ximenjianxue/article/details/120432863" target="_blank">https://blog.csdn.net/ximenjianxue/article/details/120432863</a></p>
</blockquote>
<h2 id="%E5%8D%87%E7%BA%A7%E6%93%8D%E4%BD%9C" tabindex="-1">升级操作</h2>
<p>我们一般使用安装新内核来完成升级而非直接升级内核，安装新内核不会覆盖旧内核，而升级会导致新内核直接替换旧内核，可能会导致系统无法启动，安装也可以让我们在升级后有回滚的选择，确认正常后再删除老内核,。</p>
<h2 id="%E5%8D%87%E7%BA%A7%E5%89%8D%E7%A1%AE%E8%AE%A4" tabindex="-1">升级前确认</h2>
<p>
 <ins>内核版本：uname -r或-a</ins>
</p>
<blockquote>
 <p>当然也可以 uname -rsm</p>
</blockquote>
<h2 id="debian%E7%B3%BB%E5%88%97" tabindex="-1">Debian系列</h2>
<h2 id="%E6%B3%A8%E5%85%A5%E5%86%85%E6%A0%B8%E6%BA%90" tabindex="-1">注入内核源</h2>
<p><strong>直接vim到源文件里面更新就行了</strong></p>
<pre><code class="language-">vim /etc/apt/sources.list
</code></pre>
<p>添加这个内核源文件</p>
<blockquote>
 <p>deb <a href="http://mirrors.aliyun.com/debian" target="_blank">http://mirrors.aliyun.com/debian</a> buster-backports main</p>
</blockquote>
<p>上面是Debian10的源
 <br>
 如果要更新Debian11的还要换成11的源</p>
<h3 id="%E6%9B%B4%E6%96%B0" tabindex="-1">更新</h3>
<p><strong>下面命令一条一条执行</strong></p>
<blockquote>
 <p>apt -t buster-backports install linux-image-amd64
  <br>
  apt -t buster-backports install linux-headers-amd64
  <br>
  apt update-grub</p>
</blockquote>
<p><strong>Debian11</strong></p>
<blockquote>
 <p>apt -t bullseye-backports install linux-image-amd64
  <br>
  apt -t bullseye-backports install linux-headers-amd64</p>
</blockquote>
<p><strong>执行完成后可以选择</strong></p>
<blockquote>
 <p>apt autoClean</p>
</blockquote>
<p>
 <ins>清理一些更新的缓存</ins>
 <br>
 <strong>直接重启也行</strong>
</p>
<blockquote>
 <p>reboot</p>
</blockquote>
<p><strong>重启后还是一样查看内核命令就行了
  <br> 如果需要删除旧内核</strong>
 <br>
 <ins>先查看内核输出列表就行了</ins></p>
<blockquote>
 <p>dpkg --list | grep linux-image</p>
</blockquote>
<p>
 <ins>然后删除不需要的内核后面是内核版本号换掉然后执行</ins>
</p>
<blockquote>
 <p>apt purge linux-image-***</p>
</blockquote>
<h3 id="%E5%8D%87%E7%BA%A7%E7%B3%BB%E7%BB%9F" tabindex="-1">升级系统</h3>
<p><strong>需要升级系统的话</strong>
 <br>
 先添加官方的源
 <br>
 例如阿里云的源，还是到更新源文件的列表里
 <br>
 添加如下（Debian11）</p>
<pre><code class="language-">deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
</code></pre>
<p>
 <ins>全部替换掉也行</ins>
 <br>
 直接
</p>
<blockquote>
 <p>apt update &amp;&amp;apt full-upgrade -y</p>
</blockquote>
<p>
 <ins>然后静候半小时就可以了
  <br>
  中途会提示一些选择框，可以一路yes，如果出问题还是回快照吧</ins>
</p>
<p>需要升级Debian12的话可以使用清华大学的源</p>
<pre><code class="language-"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
</code></pre>
<p>还是一样更新，更新玩了以后
 <br>
 清除一些不用的软件或者依赖包就行了</p>
<pre><code class="language-">apt autoremove -y &amp;&amp; apt autoclean -y
sudo apt autoremove --purge
sudo apt clean
sudo apt autoclean
</code></pre>
<p>到这里就结束了有什么可以补充的直接评论指点一下</p>
<h2 id="centos%E7%B3%BB%E7%BB%9F" tabindex="-1">Centos系统</h2>
<p>要在CentOS上升级内核，您可以按照以下步骤进行操作：</p>
<ol>
 <li>检查当前内核版本：运行以下命令来确定您当前正在使用的内核版本：</li>
</ol>
<pre><code class="language-">uname -r
</code></pre>
<p>这将显示当前正在运行的内核版本号。</p>
<ol start="2">
 <li>更新系统软件包：在升级内核之前，确保您的系统已经更新到最新的软件包。运行以下命令来更新系统：</li>
</ol>
<pre><code class="language-">sudo yum update
</code></pre>
<p>这将更新您的系统上的所有软件包。</p>
<ol start="3">
 <li>安装ELRepo存储库：ELRepo是一个第三方存储库，提供了最新的内核版本。运行以下命令来安装ELRepo存储库：</li>
</ol>
<pre><code class="language-">sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
</code></pre>
<ol start="4">
 <li>安装新的内核：运行以下命令来安装最新的稳定内核版本：</li>
</ol>
<pre><code class="language-">sudo yum --enablerepo=elrepo-kernel install kernel-ml
</code></pre>
<p>这将安装ELRepo存储库中的最新内核版本。长期维护版本kernel-lt 如需更新最新稳定版选择kernel-ml</p>
<ol start="5">
 <li>查看内核启动顺序</li>
</ol>
<pre><code class="language-">awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg

0 : CentOS Linux (5.4.108-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-20210128140208453518997635111697) 7 (Core)
</code></pre>
<ol start="6">
 <li>更新GRUB配置：在安装新内核后，需要更新GRUB引导加载程序的配置文件。运行以下命令来更新GRUB配置：</li>
</ol>
<pre><code class="language-">sudo grub2-mkconfig -o /boot/grub2/grub.cfg
</code></pre>
<p>安装辅助工具grub2</p>
<pre><code class="language-">yum install -y grub2-pc
</code></pre>
<p>设置内核默认启动顺序</p>
<pre><code class="language-">grub2-set-default 0
</code></pre>
<p>在系统重新启动后，它将使用新安装的内核。</p>
<p>请注意，升级内核可能会对系统产生一些风险，例如与硬件兼容性或系统稳定性相关的问题。在进行内核升级之前，建议您备份重要数据，并确保您了解如何恢复到之前的内核版本，以防出现问题。</p>
<p>此外，上述步骤适用于CentOS 7。如果您使用的是其他版本的CentOS，请根据相应版本的文档或官方指南进行操作。</p>]]></description><guid isPermaLink="false">/archives/108</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Thu, 6 Apr 2023 01:54:51 GMT</pubDate></item><item><title><![CDATA[GITHUB项目之ChatGPT_JCM]]></title><link>https://7boe.top/archives/133</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=GITHUB%E9%A1%B9%E7%9B%AE%E4%B9%8BChatGPT_JCM&amp;url=/archives/133" width="1" height="1" alt="" style="opacity:0;">
<h2 id="chatgpt_jcm" tabindex="-1">ChatGPT_JCM</h2>
<blockquote>
 <p>声明<strong>这是一个GitHub开源项目</strong>
  <br>
  原作者链接<a href="https://github.com/202252197/ChatGPT_JCM" target="_blank">GitHub项目地址</a></p>
</blockquote>
<h2 id="%E9%A1%B9%E7%9B%AE%E5%B1%95%E7%A4%BA%E5%9B%BE" tabindex="-1">项目展示图</h2>
<h3 id="%E4%BC%9A%E8%AF%9D" tabindex="-1">会话</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcamo.githubusercontent.com%2F4876e28b4ddde69da029a51f737cae198f63f042232da98409410389b42b8f00%2F68747470733a2f2f692e3332383838382e78797a2f323032332f30332f32362f6944494b66642e6a706567&amp;size=m" alt="img"></p>
<h3 id="%E6%A8%A1%E5%9E%8B" tabindex="-1">模型</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcamo.githubusercontent.com%2F07bd029145b8321b5c4bff18469ced7de1e7d4732c5e3b8e6ba5df6e81a75602%2F68747470733a2f2f692e3332383838382e78797a2f323032332f30332f32362f69444976634e2e6a706567&amp;size=m" alt="img"></p>
<h3 id="%E5%BE%AE%E8%B0%83%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8" tabindex="-1">微调模型列表</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcamo.githubusercontent.com%2F7325daabf992861ecbea27b6b9a393cb219eeb633473ef745da45c094fda8f15%2F68747470733a2f2f692e3332383838382e78797a2f323032332f30332f32362f694449736e6f2e6a706567&amp;size=m" alt="img"></p>
<h3 id="%E5%9B%BE%E7%89%87" tabindex="-1">图片</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fcamo.githubusercontent.com%2F8ee1dd29f47473336b2696cdfd23ce6ba27c7aeca6c2028a7d18fbb5c6e41737%2F68747470733a2f2f692e3332383838382e78797a2f323032332f30332f32362f694449456f452e6a706567&amp;size=m" alt="img"></p>
<h3 id="%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8" tabindex="-1">如何使用</h3>
<p>如果你会使用npm的话，直接<a href="https://github.com/202252197/ChatGPT_JCM.git" target="_blank">克隆该链接</a>就可以到本地了然后直接编译</p>
<h3 id="%E6%9E%84%E5%BB%BA%E8%BF%90%E8%A1%8C" tabindex="-1">构建运行</h3>
<p><strong>安装依赖包</strong></p>
<blockquote>
 <p>npm install</p>
</blockquote>
<p><strong>运行</strong></p>
<blockquote>
 <p>npm run serve</p>
</blockquote>
<p><strong>编译</strong></p>
<blockquote>
 <p>npm run build</p>
</blockquote>
<h2 id="openai-key%E8%AE%BE%E7%BD%AE%E4%BB%A5%E5%8F%8A%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%BE%E7%BD%AE" tabindex="-1">OpenAI-Key设置以及自定义设置</h2>
<p>
 <ins>文件克隆到本地后会有一个.env.serve文件</ins>
 <br>
 在里面添加年度apikey即可会面在网页中会直接显示余额
</p>
<blockquote>
 <p>向别人开放的情况下不输入即可</p>
</blockquote>
<p><strong>在.env.serve中添加代码</strong></p>
<blockquote>
 <p>VUE_APP_OPENAI_API_KEY=‘你的openai api key’</p>
</blockquote>
<p>添加头像在/src/store/mutation-types.js 可以在此文件中设置AI头像+用户头像+用户名称</p>
<h2 id="docker%E9%83%A8%E7%BD%B2" tabindex="-1">Docker部署</h2>
<p>Docker目前我也没事过，出现问题可以去作者那里提出完善<a href="https://github.com/202252197/ChatGPT_JCM/issues" target="_blank">issues</a></p>
<p>使用以下命令构建镜像，其中 “jcm-chatgpt” 是您想要给镜像取的名称，“.” 表示 Dockerfile 在当前目录中</p>
<h3 id="docker%E6%9E%84%E5%BB%BA" tabindex="-1">Docker构建</h3>
<pre><code class="language-">docker build -t jcm-chatgpt .
</code></pre>
<h3 id="%E8%BF%90%E8%A1%8C%E9%95%9C%E5%83%8F" tabindex="-1">运行镜像</h3>
<pre><code class="language-">docker run --name my-chatgpt -p 80:80 jcm-chatgpt
</code></pre>
<h2 id="about" tabindex="-1">About</h2>
<p><strong>
  <ins>OpenAI管理界面，聚合了OpenAI的所有接口进行界面操作(所有模型、图片、音频、微调、文件)等，支持Markdown格式(公式、图表，表格)等，GPT4接口官方只是在申请阶段，后期会一点一点的将OpenAI接口进行接入大家支持一下呗，微信群号在下方，右上角点个Star，我会一直更新下去，大家一起学习，一起加油，一起努力，一起成长。有招java开发的还望大佬内推一下感谢、感谢。</ins>
 </strong></p>]]></description><guid isPermaLink="false">/archives/133</guid><dc:creator>Celia</dc:creator><category>GITHUB项目</category><category>技术分类</category><pubDate>Tue, 28 Mar 2023 01:54:39 GMT</pubDate></item><item><title><![CDATA[使用CFW的parsers功能自动插入负载均衡策略组实现多线程下载带宽叠加]]></title><link>https://7boe.top/archives/109</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E4%BD%BF%E7%94%A8CFW%E7%9A%84parsers%E5%8A%9F%E8%83%BD%E8%87%AA%E5%8A%A8%E6%8F%92%E5%85%A5%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E7%AD%96%E7%95%A5%E7%BB%84%E5%AE%9E%E7%8E%B0%E5%A4%9A%E7%BA%BF%E7%A8%8B%E4%B8%8B%E8%BD%BD%E5%B8%A6%E5%AE%BD%E5%8F%A0%E5%8A%A0&amp;url=/archives/109" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E6%9C%AC%E5%9C%B0%E8%AE%A2%E9%98%85%E8%BD%AC%E6%8D%A2" tabindex="-1">本地订阅转换</h2>
<blockquote>
 <p><a href="https://acl4ssr-sub.github.io/" target="_blank">转换地址</a>
  <br>
  <a href="https://github.com/tindy2013/subconverter" target="_blank">GIHhub原作者官方项目</a></p>
</blockquote>
<p>下载win64位压缩包
 <br>
 <a href="https://github.com/tindy2013/subconverter/releases/download/v0.7.2/subconverter_win64.7z" target="_blank">官方GitHub下载</a></p>
<h3 id="cfw%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1" tabindex="-1"><em>CFW自动添加负载均衡</em></h3>
<pre><code class="language-">parsers:
  - reg: 'slbable$'
    yaml:
      append-proxy-groups:
        - name: ⚖️ 负载均衡-散列
          type: load-balance
          url: 'http://www.google.com/generate_204'
          interval: 300
          strategy: consistent-hashing
        - name: ⚖️ 负载均衡-轮询
          type: load-balance
          url: 'http://www.google.com/generate_204'
          interval: 300
          strategy: round-robin
      commands:
        - proxy-groups.⚖️ 负载均衡-散列.proxies=[]proxyNames
        - proxy-groups.0.proxies.0+⚖️ 负载均衡-散列
        - proxy-groups.⚖️ 负载均衡-轮询.proxies=[]proxyNames
        - proxy-groups.0.proxies.0+⚖️ 负载均衡-轮询
</code></pre>
<p>添加到预处理脚本里面
 <br>
 预处理规则
 <ins>#slbable</ins></p>
<h3 id="%E6%89%8B%E5%8A%A8%E6%B7%BB%E5%8A%A0%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1" tabindex="-1">手动添加负载均衡</h3>
<blockquote>
 <p>添加到第一个代理策略组
  <br>
  - ⚖️ 负载均衡-轮询
  <br>
  - ⚖️ 负载均衡-散列</p>
</blockquote>
<blockquote>
 <p>添加代理策略组</p>
</blockquote>
<pre><code class="language-">- name: ⚖️ 负载均衡-散列
    type: load-balance
    url: http://www.google.com/generate_204
    interval: 300
    strategy: consistent-hashing
    proxies:
      - P1
      - P2
      - P3
  - name: ⚖️ 负载均衡-轮询
    type: load-balance
    url: http://www.google.com/generate_204
    interval: 300
    strategy: round-robin
    proxies:
      - P1
      - P2
      - P3
</code></pre>
<p>内容转载自油管不良林
 <br>
 仅供学习，技术无罪</p>
<iframe width="610" height="343" src="https://www.youtube.com/embed/dxYdec9csl4" title="负载均衡实现多线程下载带宽叠加，完美配合CDN优选IP，详解clash负载均衡原理及使用教程，实现机场订阅节点故障自动转移，使用CFW的parsers功能自动插入负载均衡策略组" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<blockquote>
 <p>AI 总结视频：负载均衡实现多线程下载带宽叠加，完美配合CDN优选IP，详解clash负载均衡原理及使用教程，实现机场订阅节点故障自动转移，使用CFW的parsers功能自动插入负载均衡策略组</p>
</blockquote>
<ul>
 <li>本视频教大家通过clash的负载均衡实现多线程下载带宽叠加和CDN优选IP配合，以及机场订阅节点故障自动转移等功能。</li>
 <li>0:00 - 📈通过负载均衡实现宽带叠加，提高节点利用率。</li>
 <li>0:13 - 💻CDN选IP方法已大大提高IP优选效率，可快速让一个节点用出100个节点的效果。</li>
 <li>0:27 - 💡使用负载均衡突破单节点数据传输瓶颈和运营商、目标网站对单个连接的限速。</li>
 <li>0:44 - 📡使用clash的负载均衡功能，使手机端或电脑端或软路由等设备同时使用多个节点实现宽带叠加。</li>
 <li>0:53 - 🔁通过节点故障自动转移获得更稳定的上网体验，与CDN优选配合的非常完美，不仅限于CDN。</li>
 <li>1:13 - 📚clash负载均衡原理简介：请求先发给本机电脑clash开启的socks代理，再转发给某个节点服务器，实现科学上网。</li>
 <li>4:25 - ✅演示如何使用本地订阅转换网址在clash中添加节点并通过负载均衡策略组实现多节点使用和机场节点完美兼容。</li>
 <li>6:22 - 🔄clash支持散列和轮询两种负载均衡策略，可通过对节点的检测判断节点是否正常使用。</li>
 <li>11:28 - 💽parsers功能可以用来实现自动插入负载均衡策略组，同时保证使用同一二级域名可避免风控严格的网站来回跳IP导致被风控。</li>
</ul>
<p>#BibiGPT <a href="https://b.jimmylv.cn" target="_blank">https://b.jimmylv.cn</a> @吕立青_JimmyLv
 <br>
 BV1fX4y1Q7Ux</p>]]></description><guid isPermaLink="false">/archives/109</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Thu, 23 Mar 2023 02:26:30 GMT</pubDate></item><item><title><![CDATA[ChatGPT谷歌好用的扩展以及网站]]></title><link>https://7boe.top/archives/110</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=ChatGPT%E8%B0%B7%E6%AD%8C%E5%A5%BD%E7%94%A8%E7%9A%84%E6%89%A9%E5%B1%95%E4%BB%A5%E5%8F%8A%E7%BD%91%E7%AB%99&amp;url=/archives/110" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E6%89%A9%E5%B1%95%E7%B1%BB" tabindex="-1">扩展类</h2>
<p><strong>AIPRM for ChatGPT</strong></p>
<p>可以使用模板让GPT变换语气以及使用模板</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F6411540b5a340.png&amp;size=m" alt="图片"></p>
<p><strong>WebChatGPT：可访问互联网的 ChatGPT</strong></p>
<p>让GPT连接网络，可以实时查看最新事假，例如推特</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F6411548615308.png&amp;size=m" alt="img"></p>
<p><strong>ChatGPT for Google</strong></p>
<p>可以让GPT在搜索引擎上直接回答问题，需要设置apikey</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F6411553be3f87.png&amp;size=m" alt="img"></p>
<h2 id="%E7%BD%91%E9%A1%B5%E7%89%88%E6%9C%AC" tabindex="-1">网页版本</h2>
<blockquote>
 <p>目前好用的站点</p>
</blockquote>
<p><strong>BIBIGPT</strong></p>
<p>链接在这里<a href="https://b.jimmylv.cn/" target="_blank">BIBIGPT</a>
 <br>
 主要功能用于一键总结视频内容，支持哔哩哔哩和YouTube
 <br>
 GitHub项目：<a href="https://github.com/JimmyLv/BibiGPT" target="_blank">BIBI</a>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F6411553be3f87.png&amp;size=m" alt="img"></p>
<blockquote>
 <p>另一个也是是扩展，不过也是页面的，聚合了new bing和ChatGPT</p>
</blockquote>
<p><strong>ChatHub - All-in-one chatbot client</strong></p>
<p><em>需要填写ChatGPT的key，new bing的话只需要在当前浏览器登录微软账号有登录记录即可，需要已经通过候补名单</em></p>
<p><em>二合一</em></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F641157713cf31.png&amp;size=m" alt="img"></p>
<blockquote>
 <p>当然，现在目前最常见的也还有自己搭建web端，直接调用apikey进行回答，例如我搭建的<a href="https://gpt.7boe.top" target="_blank">GPTWEB</a></p>
</blockquote>
<p>搭建方法在<a href="https://7boe.top/archives/docker%E6%90%AD%E5%BB%BA%E6%96%B0%E7%9A%84gptweb%E7%89%88%E6%9C%AC" target="_blank">这里提到过</a></p>]]></description><guid isPermaLink="false">/archives/110</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Wed, 15 Mar 2023 05:31:13 GMT</pubDate></item><item><title><![CDATA[Nmap使用参数以及指令]]></title><link>https://7boe.top/archives/111</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Nmap%E4%BD%BF%E7%94%A8%E5%8F%82%E6%95%B0%E4%BB%A5%E5%8F%8A%E6%8C%87%E4%BB%A4&amp;url=/archives/111" width="1" height="1" alt="" style="opacity:0;">
<h2 id="nmap" tabindex="-1">Nmap</h2>
<h3 id="%E4%BB%8B%E7%BB%8D****" tabindex="-1">介绍****</h3>
<ul>
 <li>
  <p>nmap是一款网络扫描和主机检测工具，它可以帮助用户识别本地网络上的主机、端口和服务，并提供相关的安全评估和漏洞扫描功能。nmap支持多种扫描方式和技术，包括TCP SYN扫描、UDP扫描、OS检测、版本探测、服务识别等，能够快速、准确地发现目标网络中的各种设备和服务，同时也可以用于测试和评估自己的网络安全性。</p>
 </li>
 <li>
  <p>除了基本的端口扫描和主机探测功能外，nmap还提供了许多高级选项和脚本，如针对特定服务或漏洞的扫描、数据包分析和操作系统指纹识别等。这些功能使得nmap成为了广泛应用于信息安全、系统管理、网络工程等领域的强大工具之一。</p>
 </li>
</ul>
<h3 id="%E5%9F%BA%E6%9C%AC%E5%B8%B8%E8%A7%81%E5%8F%82%E6%95%B0" tabindex="-1">基本常见参数</h3>
<pre><code class="language-">nmap命令的常用参数如下：

-sS：使用TCP SYN扫描方式进行端口扫描。

-sU：使用UDP扫描方式进行端口扫描。

-A：激活操作系统识别、版本探测和脚本扫描等高级功能。

-p：指定要扫描的端口范围，如-p1-100表示扫描1到100号端口。

-oN：将扫描结果保存到指定文件中。

-v：输出详细的扫描信息和进度。

-T&lt;0-5&gt;：设置扫描速度，取值范围为0（最慢）到5（最快）。

--top-ports：指定要扫描的热门端口列表，如--top-ports 10表示扫描前10个热门端口。

-sV：启用服务和应用程序版本检测功能。

-sP：使用ping扫描方式进行主机发现。

-iL：从指定文件中读取IP地址或主机名列表进行扫描。

-Pn：跳过主机存活性检测，直接对目标主机进行端口扫描。

以上是一些常用的nmap参数，它们可以根据具体需求进行组合和调整，以实现更加精准和高效的网络扫描和安全评估。
</code></pre>
<h3 id="%E5%85%A8%E9%9D%A2%E5%8F%82%E6%95%B0" tabindex="-1">全面参数</h3>
<pre><code class="language-">nmap命令有很多参数，以下是一些常用的和重要的参数列表。

全局选项
-6：使用IPv6协议进行扫描

--datadir &lt;dirname&gt;：从指定目录加载Nmap数据文件

--randomize-hosts：以随机顺序扫描主机

--version：显示版本信息并退出

扫描技术选项
-Pn：跳过主机存活性检测，直接对目标主机进行端口扫描

-sS：使用TCP SYN扫描方式进行端口扫描

-sT：使用TCP connect()扫描方式进行端口扫描

-sU：使用UDP扫描方式进行端口扫描

-sN：使用TCP NULL扫描方式进行端口扫描

-sF：使用TCP FIN扫描方式进行端口扫描

-sX：使用TCP Xmas扫描方式进行端口扫描

-sA：使用TCP ACK扫描方式进行端口扫描

输出选项
-oN &lt;file&gt;：将扫描结果保存至文件

-oX &lt;file&gt;：将扫描结果保存至XML格式文件

-oG &lt;file&gt;：将扫描结果保存至grep可读的文本文件

-oA &lt;basename&gt;：将扫描结果保存至给定基本名的所有格式文件中

-v：输出详细的扫描信息和进度

-vv：输出更加详细的扫描信息和进度

-d &lt;level&gt;：设置调试级别（0-9）

端口和服务发现选项
-p &lt;port ranges&gt;：指定要扫描的端口范围

--top-ports &lt;number&gt;：指定要扫描的热门端口数

-sV：启用服务和应用程序版本检测功能

-I &lt;interface&gt;：指定源网络接口

操作系统检测选项
-O：启用操作系统检测功能

--osscan-guess：尝试识别未知操作系统

脚本选项
--script=&lt;Lua scripts&gt;：执行指定的Nmap脚本

--script-args=&lt;arguments&gt;：为脚本提供参数

性能和优化选项
-T&lt;0-5&gt;：设置扫描速度，取值范围为0（最慢）到5（最快）

--max-retries &lt;tries&gt;：设置主机测试的最大重试次数

--max-scan-delay &lt;time&gt;：设置最大扫描延迟时间

--min-parallelism &lt;numprobes&gt;：设置最小并行探测次数

--min-rate &lt;number&gt;：设置最小扫描速率

以上是常用的Nmap参数，它们可以根据具体需要进行组合和调整，以实现更加精准和高效的网络扫描和安全评估。

</code></pre>]]></description><guid isPermaLink="false">/archives/111</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Wed, 8 Mar 2023 06:16:26 GMT</pubDate></item><item><title><![CDATA[Docker搭建新的GPTweb版本]]></title><link>https://7boe.top/archives/112</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Docker%E6%90%AD%E5%BB%BA%E6%96%B0%E7%9A%84GPTweb%E7%89%88%E6%9C%AC&amp;url=/archives/112" width="1" height="1" alt="" style="opacity:0;">
<h2 id="chatgptweb%E9%A1%B9%E7%9B%AE" tabindex="-1">ChatGPTWeb项目</h2>
<p>本次采用GitHub上开源项目的
 <ins>GPTweb</ins></p>
<blockquote>
 <p>原GitHub作者<a href="https://github.com/Chanzhaoyu/chatgpt-web" target="_blank">gptweb</a>
  <br>
  使用<a href="https://7boe.top/railway.app" target="_blank">railway.app</a>编译环境，一键生成，也可以使用Docker</p>
</blockquote>
<h3 id="railway.app" tabindex="-1">railway.app</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F03%2F%25E5%25BE%25AE%25E4%25BF%25A1%25E6%2588%25AA%25E5%259B%25BE_20230306110126.png&amp;size=m" alt="微信截图_20230306110126"></p>
<p><strong>如果有登入railway.app
  <br> 这可以直接跳转到搭建页码，然后会默认foke该仓库
  <br> 建议提前登录GitHub</strong></p>
<p>第一次foke仓库直接填写网页版toke就可以了因为网页版gpt会更聪明点</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F03%2F%25E5%25BE%25AE%25E4%25BF%25A1%25E6%2588%25AA%25E5%259B%25BE_20230306110509.png&amp;size=m" alt="微信截图_20230306110509"></p>
<p><strong>以后搭建需要手动填写变量，其他无需跳转，提前登录openai账号
  <br> 点击链接可以直接获取toke</strong></p>
<p>
 <ins><a href="https://chat.openai.com/api/auth/session" target="_blank">网页版toke获取</a></ins>
 <br>
 <ins>api的话后头可以自己创建<a href="https://platform.openai.com/overview" target="_blank">api版本</a></ins>
</p>
<p><strong>其他端口和超时时间自己可以设置，需要代理的话也可以设置支持socks5
  <br> 等待铁路搭建完成后可以在设置里调整开向妇联网</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F03%2F%25E5%25BE%25AE%25E4%25BF%25A1%25E6%2588%25AA%25E5%259B%25BE_20230306111114.png&amp;size=m" alt="微信截图_20230306111114">
 <br>
 设置解析到cname就可以用自己的域名访问了
 <br>
 例如我已经做好的
 <br>
 <a href="https://7boe.top/gpt.7boe.top" target="_blank">ChatGPT</a></p>
<h3 id="docker%E6%90%AD%E5%BB%BA%E6%96%B9%E5%BC%8F" tabindex="-1">Docker搭建方式</h3>
<p>安装docker 使用compose模板直接安装</p>
<pre><code class="language-">version: '3'

services:
  app:
    image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可
    ports:
      - 3002:3002
    environment:
      # 二选一
      OPENAI_API_KEY: xxxxxx
      # 二选一
      OPENAI_ACCESS_TOKEN: xxxxxx
      # API接口地址，可选，设置 OPENAI_API_KEY 时可用
      OPENAI_API_BASE_URL: xxxx
      # 反向代理，可选
      API_REVERSE_PROXY: xxx
      # 访问权限密钥，可选
      AUTH_SECRET_KEY: xxx
      # 超时，单位毫秒，可选
      TIMEOUT_MS: 60000
      # Socks代理，可选，和 SOCKS_PROXY_PORT 一起时生效
      SOCKS_PROXY_HOST: xxxx
      # Socks代理端口，可选，和 SOCKS_PROXY_HOST 一起时生效
      SOCKS_PROXY_PORT: xxxx
</code></pre>
<p>内容自行换，toke填写一个即可</p>]]></description><guid isPermaLink="false">/archives/112</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Mon, 6 Mar 2023 03:11:40 GMT</pubDate></item><item><title><![CDATA[WD西部数据机场评测]]></title><link>https://7boe.top/archives/113</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=WD%E8%A5%BF%E9%83%A8%E6%95%B0%E6%8D%AE%E6%9C%BA%E5%9C%BA%E8%AF%84%E6%B5%8B&amp;url=/archives/113" width="1" height="1" alt="" style="opacity:0;">
<h2 id="西部数据中转机场">西部数据（中转机场）</h2>
<p>++++最近大佬推荐的一家机场，节点广港 IEPL 中转，流媒体稳定解锁 NF 和其他主流媒体资源，速度不错；华北 + 东北自动识别去京港京日，江浙沪自动识别去沪港。++++
 <br>
 *<em><strong>稳定性还不错。</strong></em></p>
<p>****套餐情况：</p>
<blockquote>
 <p>轻量套餐：20元/月，每月200G流量；仅限账户本人使用；
  <br>
  标准套餐：40元/月，每月400G流量；仅限账户本人使用；
  <br>
  专业套餐：60元/月，每月600G流量；仅限账户本人使用；</p>
</blockquote>
<p><strong>其他情况：</strong></p>
<blockquote>
 <p>支持Trojan，支持Surge，Clash等
  <br>
  支付方式：支付宝+USDT</p>
</blockquote>
<p><strong>官网连接：</strong><a href="https://fuqing.cz/aff.php?aff=3525">西部数据</a></p>
<h2 id="入口落地分析数据测试来着喵酷评测内容来在毒药">入口落地分析（数据测试来着喵酷，评测内容来在毒药）</h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F221208676-45c8441f-c5a3-4a8a-a90a-a0670dce7299.png%23vwid%3D1939%26vhei%3D4236&amp;size=m" alt="imge"></p>
<p><strong>电信测速：</strong>
 <br>
 <strong>2023.9.28 下午16点</strong>
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F09%2F28%2F65153e1829cd4.png&amp;size=m" alt="img"></p>
<p><strong>联通测速：</strong></p>
<p><strong>（联通 2023.02.24 晚9点半测速）</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F221208172-93e675f5-6069-4445-b6c8-a332f1f1d02d.png%23vwid%3D3525%26vhei%3D3946&amp;size=m" alt="imge"></p>
<p><strong>（联通 2023.01.30 晚7点测速）</strong></p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F215468444-9671d6ba-0ca6-432a-8041-8e003f8e65df.png%23vwid%3D3407%26vhei%3D3946&amp;size=m" alt="imge"></p>
<blockquote>
 <p>具体长期测试结果原文章<a href="https://www.duyaoss.com/archives/7536/">毒药</a></p>
</blockquote>
<p>订阅后</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F03%2Fimage.png&amp;size=m" alt="image"></p>
<p>手机端5G速度下跑满500M，比较推荐★★★☆☆</p>
<p>20元套餐测试跑分图</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F03%2F15%2F641161fe03eb7.png&amp;size=m" alt="img"></p>]]></description><guid isPermaLink="false">/archives/113</guid><dc:creator>Celia</dc:creator><category>机场测速</category><pubDate>Fri, 3 Mar 2023 09:43:38 GMT</pubDate></item><item><title><![CDATA[MESL机场评测]]></title><link>https://7boe.top/archives/114</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=MESL%E6%9C%BA%E5%9C%BA%E8%AF%84%E6%B5%8B&amp;url=/archives/114" width="1" height="1" alt="" style="opacity:0;">
<h2 id="mesl%E6%9C%BA%E5%9C%BA" tabindex="-1">MESL机场</h2>
<blockquote>
 <p>部分内容转载毒药机场评测</p>
</blockquote>
<h3 id="mesl%EF%BC%88%E4%B8%AD%E8%BD%AC%E6%9C%BA%E5%9C%BA%EF%BC%89" tabindex="-1">MESL（中转机场）</h3>
<blockquote>
 <p>半年前开的一家机场，线路类型还比较丰富，流媒体解锁不错，阿里电信移动等入口,稳定性不错</p>
</blockquote>
<p>套餐情况</p>
<blockquote>
 <p>Standard TV 100G：14元/月，每月100G流量，39元/季，145元/年；允许同时在线5个公网IP
  <br>
  Premium TV 100G：20元/月，每月100G流量，56元/季，198元/年；允许同时在线5个公网IP；增加阿里云专线
  <br>
  Standard TV 200G：26元/月，每月200G流量，75元/季，275元/年；允许同时在线5个公网IP
  <br>
  Premium TV 200G：39元/月，每月200G流量，109元/季，380元/年；允许同时在线5个公网IP；增加阿里云专线
  <br>
  Standard TV 300G：36元/月，每月300G流量，99元/季，365元/年；允许同时在线5个公网IP
  <br>
  Premium TV 300G：56元/月，每月300G流量，158元/季，588元/年；允许同时在线5个公网IP；增加阿里云专线</p>
</blockquote>
<p>付款方式</p>
<blockquote>
 <p>支持SS
  <br>
  支付方式：支付宝+USDT</p>
</blockquote>
<p>入口落地分析</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F214599013-b10b873e-c89f-4d10-91a6-f679e2aed869.png%23vwid%3D1966%26vhei%3D4410&amp;size=m" alt="图片alt"></p>
<h3 id="%E8%81%94%E9%80%9A%E6%B5%8B%E9%80%9F" tabindex="-1">联通测速</h3>
<p>（联通 2023.01.25 晚9点半测速）</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F214599091-7b206b59-9f0d-486b-b4b0-9d2890e10778.png%23vwid%3D3443%26vhei%3D4004&amp;size=m" alt="图片alt"></p>
<h3 id="%E7%94%B5%E4%BF%A1%E6%B5%8B%E9%80%9F" tabindex="-1">电信测速</h3>
<p>（电信 2023.01.25 晚9点半测速）</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F214599108-fde397f7-88c4-433d-9865-4b5982540706.png%23vwid%3D3451%26vhei%3D4004&amp;size=m" alt="图片alt"></p>
<h3 id="%E7%A7%BB%E5%8A%A8%E6%B5%8B%E9%80%9F" tabindex="-1">移动测速</h3>
<p>(移动 2023.01.25 晚9点半测速)</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fuser-images.githubusercontent.com%2F34016863%2F214599104-51492322-1e16-4756-87c1-12be2a73ca3d.png%23vwid%3D3438%26vhei%3D4004&amp;size=m" alt="图片alt"></p>
<p>以上内容转自毒药机场评测
 <br>
 <a href="https://www.duyaoss.com/archives/11004/" target="_blank">毒药</a></p>
<h3 id="%E8%B4%AD%E5%85%A5%E4%BD%93%E9%AA%8C" tabindex="-1">购入体验</h3>
<p>MESL主页</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F02%2Fimage.png&amp;size=m" alt="image"></p>
<p>节点状态</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F02%2Fimage-1676617275122.png&amp;size=m" alt="image-1676617275122"></p>
<p>安徽联通延迟</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F02%2Fimage-1676617296727.png&amp;size=m" alt="image-1676617296727"></p>
<p>YouTube百兆跑满</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F02%2Fimage-1676617342841.png&amp;size=m" alt="image-1676617342841"></p>
<p>订阅方式</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2023%2F02%2Fimage-1676617452266.png&amp;size=m" alt="image-1676617452266"></p>
<h2 id="%E6%9C%80%E6%96%B0%E6%B5%8B%E9%80%9F%E5%9B%BE20230505%E8%A1%A5" tabindex="-1">最新测速图20230505补</h2>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=https%3A%2F%2Fali.7boe.top%2F2023%2F05%2F05%2F6454a04398261.png&amp;size=m" alt="MIKO">
 <br>
 建议下载后观看</p>
<blockquote>
 <p>14块钱购入
  <br>
  香港节点较多延迟低
  <br>
  值得入手
  <br>
  注册连接
  <br>
  <a href="https://in.mesl.cloud/#/register?code=aDX1y0rM" target="_blank">MESL</a></p>
</blockquote>]]></description><guid isPermaLink="false">/archives/114</guid><dc:creator>Celia</dc:creator><category>机场测速</category><category>技术分类</category><pubDate>Fri, 17 Feb 2023 07:08:27 GMT</pubDate></item><item><title><![CDATA[ChatGPT接入微信]]></title><link>https://7boe.top/archives/115</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=ChatGPT%E6%8E%A5%E5%85%A5%E5%BE%AE%E4%BF%A1&amp;url=/archives/115" width="1" height="1" alt="" style="opacity:0;">
<h3 id="%E5%BE%AE%E4%BF%A1%E6%8E%A5%E5%85%A5%E6%96%B9%E5%BC%8F" tabindex="-1">微信接入方式</h3>
<p>使用GitHub上提供的本地部署或者服务器部署</p>
<blockquote>
 <p>作者GitHub主页：<a href="https://github.com/zhayujie/chatgpt-on-wechat" target="_blank">https://github.com/zhayujie/chatgpt-on-wechat</a></p>
</blockquote>
<h3 id="%E5%88%9B%E5%BB%BAopenai%E8%B4%A6%E5%8F%B7" tabindex="-1">创建OpenAi账号</h3>
<blockquote>
 <p><a href="http://openai.com" target="_blank">openai.com</a>
  <br>
  官网注册需要国外手机号注册</p>
</blockquote>
<h3 id="%E7%8E%AF%E5%A2%83" tabindex="-1">环境</h3>
<p>持Linux、MacOS、Windows系统（可在Linux服务器上长期运行），同时需要安装Python。
 <br>
 本次搭建在Kali下测试
 <br>
 基于Debian的系统</p>
<p>1.克隆GitHub代码并且进入目录</p>
<pre><code class="language-">git clone https://github.com/zhayujie/chatgpt-on-wechat
cd chatgpt-on-wechat/
</code></pre>
<p>2.安装所需要核心依赖</p>
<pre><code class="language-">pip3 install itchat-uos==1.5.0.dev0
pip3 install --upgrade openai
</code></pre>
<h3 id="%E9%85%8D%E7%BD%AE%E7%B1%BB" tabindex="-1">配置类</h3>
<p>配置文件的模板在根目录的config-template.json中，需要复制模板创建最有效的config.json文件
 <br>
 复制文件</p>
<pre><code class="language-">cp config-template.json config.json
</code></pre>
<p>然后在config.json中填入配置，下面是对默认配置的说明，可根据需要进行自定义修改</p>
<h3 id="config.json%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E7%A4%BA%E4%BE%8B" tabindex="-1">config.json文件内容示例</h3>
<pre><code class="language-">{ 
  "open_ai_api_key": "YOUR API KEY",                # 填入上面创建的 OpenAI API KEY
  "single_chat_prefix": ["@bot"],     # 私聊时文本需要包含该前缀才能触发机器人回复
  "single_chat_reply_prefix": "[bot] ",            # 私聊时自动回复的前缀，用于区分真人
  "group_chat_prefix": ["@bot"],                  # 群聊时包含该前缀则会触发机器人回复
  "group_name_white_list": ["需要响应的群名称"],     # 开启自动回复的群名称列表
  "image_create_prefix": ["画", "看", "找"],                   # 开启图片回复的前缀
  "conversation_max_tokens": 1000,                           # 支持上下文记忆的最多字符数
  "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题，并且可以使用多种语言与人交流。"  
  # 人格描述
}
</code></pre>
<h2 id="%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E%EF%BC%9A" tabindex="-1">配置说明：</h2>
<ul>
 <li>
  <p>个人聊天
   <br>
   个人聊天中，需要以“bot”或“@bot”为开头的内容触摸发器人，对应配置项<strong>single_chat_prefix</strong>(如果不需要以之前触摸发可以填写"single_chat_prefix": [“”])
   <br>
   机器人回复的内容会以“[bot]”作为前显，以区分真人，对应的配置项为<strong>single_chat_reply_prefix</strong>(如果不需要前显可以填写"single_chat_reply_prefix": “”)</p>
 </li>
 <li>
  <p>群聊天
   <br>
   群聊天中，群名称需要配置在<strong>group_name_white_list</strong> 中才能开启群聊自动回复。如果想对所有群聊有效，可以直接填写"group_name_white_list": [“ALL_GROUP”]
   <br>
   默认只需要被人@就会触发机器人自动回复；另外群聊天中只需要检测到以“@bot” 开头的内容，同样会自动回复（方便自己，察觉）<strong>group_chat_prefix</strong>
   <br>
   可选配置:group_name_keyword_white_list配置项支持模糊匹配群名称，配置项则支持模匹配群消息内容，使用方法与上面描述的两个配置项相) group_chat_keywordcontributed by elay 。</p>
 </li>
 <li>
  <p>其他配置
   <br>
   对于图像生成，在满足个人或群体接触发件外，还需要额外的关键词前来接触发，对应配置image_create_prefix
   <br>
   Openai对话对话图片的的参数配置（自由度，回复 ，，，，等等） bot/openai/open_ai_bot.py
   <br>
   conversation_max_tokens：表示能足够记忆的上下文最大单词数（一问一答为一组对话，如果累积的对话单词数超出限制，就会优先移去最早的一组对话）
   <br>
   character_desc配置中保存着你对机器人说的一段话，他会记住这段话并作他的设定，你可以为他定制任何人格 (关于会谈上文的更多内容参考问题)举例</p>
 </li>
</ul>
<h3 id="%E8%BF%90%E8%A1%8C" tabindex="-1">运行</h3>
<ol>
 <li>本地运行
  <br>
  如果是开机本地运行，直接在项目根目录下执行</li>
</ol>
<pre><code class="language-">python3 app.py
</code></pre>
<ol start="2">
 <li>服务部署
  <br>
  使用nohup命令在后台运行程序</li>
</ol>
<pre><code class="language-">touch nohup.out                                   &gt;首次运行需要新建日志文件                     
nohup python3 app.py &amp; tail -f nohup.out         &gt; 在后台运行程序并通过日志输出二维码
</code></pre>
<p>登录程序运行服务器服务器后，此时后，此时ctrl+c日志
 <ins>ps -ef | grep <a href="http://app.py" target="_blank">app.py</a> | grep -v grep</ins>
 日志kill日志日志关闭后如果想重新打开只需要输入
 <ins>tail -f nohup.out。</ins></p>
<blockquote>
 <p><strong>注意</strong>：如果扫码后手机提示登录验证需要等5s，而最终的二维码重新刷新并提示Log in time out, reloading QR code，此时需要参考此issue修改一次即可。
  <br>
  <strong>多账号支持</strong>：将项目复制多份，分别启动程序，使用不同账号扫描码登录即可实时同步运行
  <br>
  <strong>特殊指令</strong>：用户向机器发送#清除记忆即可清空该使用用户的上下文字记忆</p>
</blockquote>]]></description><guid isPermaLink="false">/archives/115</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Wed, 15 Feb 2023 06:10:36 GMT</pubDate></item><item><title><![CDATA[Linux的SSH开启方法]]></title><link>https://7boe.top/archives/116</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E7%9A%84SSH%E5%BC%80%E5%90%AF%E6%96%B9%E6%B3%95&amp;url=/archives/116" width="1" height="1" alt="" style="opacity:0;">
<h2 id="debian%E7%B3%BB%E7%BB%9F%E5%92%8Cubuntu" tabindex="-1">Debian系统和ubuntu</h2>
<blockquote>
 <p>有自带的ssh服务的话直接到 /etc/ssh下去改config文件
  <br>
  vim /etc/ssh/sshd_config</p>
</blockquote>
<p>用#注释掉端口和ip
 <br>
 允许用户远程登录注释PermitRootLogin</p>
<p>查看服务是否开启成功</p>
<pre><code class="language-">sudo service ssh status 
</code></pre>
<p>开启服务</p>
<pre><code class="language-">service ssh start
</code></pre>
<p>重启服务</p>
<pre><code class="language-">service ssh restart
</code></pre>
<p>如果出现</p>
<p>Loaded: error (Reason: No such file or directory)
 <br>
 提示的话，说名没有安装ssh服务</p>
<p>如果出现</p>
<p>Active: inactive (dead)</p>
<p>说明已经安装了ssh服务，但是没有开启。</p>
<h2>Centos和其他</h2>
<p>需要安装ssh服务</p>
<pre><code class="language-">sudo yum install sshd
</code></pre>
<p>开启ssh服务</p>
<pre><code class="language-">sudo service sshd start
</code></pre>
<h2 id="%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E6%9C%8D%E5%8A%A1" tabindex="-1">开机自启服务</h2>
<p>把sshd加入到开机自启里面</p>
<ul>
 <li>写入配置文件</li>
</ul>
<pre><code class="language-">vim /etc/systemd/system/sshd.service
</code></pre>
<ul>
 <li>配置文件内容</li>
</ul>
<pre><code class="language-">[Unit]
Description=OpenSSH server daemon
After=network.target auditd.service

[Service]
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
</code></pre>
<ul>
 <li>启用服务</li>
</ul>
<pre><code class="language-">systemctl enable sshd.service
</code></pre>]]></description><guid isPermaLink="false">/archives/116</guid><dc:creator>Celia</dc:creator><category>技术分类</category><pubDate>Thu, 9 Feb 2023 06:43:11 GMT</pubDate></item><item><title><![CDATA[Markdown基本语法以及使用]]></title><link>https://7boe.top/archives/100</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Markdown%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95%E4%BB%A5%E5%8F%8A%E4%BD%BF%E7%94%A8&amp;url=/archives/100" width="1" height="1" alt="" style="opacity:0;">
<h1 id="markdown%E6%98%AF%E4%B8%80%E7%A7%8D%E7%BA%AF%E6%96%87%E6%9C%AC%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80%E3%80%82%E9%80%9A%E8%BF%87%E7%AE%80%E5%8D%95%E7%9A%84%E6%A0%87%E8%AE%B0%E8%AF%AD%E6%B3%95%EF%BC%8C%E5%AE%83%E5%8F%AF%E4%BB%A5%E4%BD%BF%E6%99%AE%E9%80%9A%E6%96%87%E6%9C%AC%E5%86%85%E5%AE%B9%E5%85%B7%E6%9C%89%E4%B8%80%E5%AE%9A%E7%9A%84%E6%A0%BC%E5%BC%8F%E3%80%82%EF%BC%88%E6%96%87%E7%AB%A0%E5%86%85%E5%AE%B9%E5%BC%95%E7%94%A8%E7%BD%91%E7%BB%9C%EF%BC%89" tabindex="-1">Markdown是一种纯文本格式的标记语言。通过简单的标记语法，它可以使普通文本内容具有一定的格式。（文章内容引用网络）</h1>
<p>优点：</p>
<ul>
 <li>1、因为是纯文本，所以只要支持Markdown的地方都能获得一样的编辑效果，可以让作者摆脱排版的困扰，专心写作。</li>
 <li>2、操作简单。比如:WYSIWYG编辑时标记个标题，先选中内容，再点击导航栏的标题按钮，选择几级标题。要三个步骤。而Markdown只需要在标题内容前加#即可</li>
</ul>
<p>缺点：</p>
<ul>
 <li>1、需要记一些语法（当然，是很简单。五分钟学会）。</li>
 <li>2、有些平台不支持Markdown编辑模式。</li>
</ul>
<p>还好，简书是支持Markdown编辑模式的。</p>
<h2 id="%E4%B8%80%E3%80%81%E6%A0%87%E9%A2%98" tabindex="-1">一、标题</h2>
<p>在想要设置为标题的文字前面加#来表示
 <br>
 一个#是一级标题，二个#是二级标题，以此类推。支持六级标题。</p>
<p>注：标准语法一般在#后跟个空格再写文字，貌似简书不加空格也行。</p>
<p>示例：</p>
<pre><code class="language-（文本）"># 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题
</code></pre>
<h2 id="%E4%BA%8C%E3%80%81%E5%AD%97%E4%BD%93" tabindex="-1">二、字体</h2>
<p>加粗
 <br>
 <strong>要加粗的文字左右分别用两个*号包起来</strong></p>
<p>斜体
 <br>
 <em>要倾斜的文字左右分别用一个</em>号包起来*</p>
<p>斜体加粗
 <br>
 <strong><em>要倾斜和加粗的文字左右分别用三个</em>号包起来</strong>*</p>
<p>删除线
 <br>
 <s>要加删除线的文字左右分别用两个</s>号包起来~~</p>
<h2 id="%E4%B8%89%E3%80%81%E5%BC%95%E7%94%A8" tabindex="-1">三、引用</h2>
<ul>
 <li>在引用的文字前加&gt;即可。引用也可以嵌套，如加两个&gt;&gt;三个&gt;&gt;&gt;
  <br>
  n个…
  <br>
  貌似可以一直加下去，但没神马卵用</li>
</ul>
<p>示例：</p>
<blockquote>
 <p>这是引用的内容</p>
 <blockquote>
  <p>这是引用的内容</p>
  <blockquote>
   <blockquote>
    <blockquote>
     <blockquote>
      <blockquote>
       <blockquote>
        <blockquote>
         <blockquote>
          <p>这是引用的内容</p>
         </blockquote>
        </blockquote>
       </blockquote>
      </blockquote>
     </blockquote>
    </blockquote>
   </blockquote>
  </blockquote>
 </blockquote>
</blockquote>
<h2 id="%E5%9B%9B%E3%80%81%E5%88%86%E5%89%B2%E7%BA%BF" tabindex="-1">四、分割线</h2>
<p>三个或者三个以上的 - 或者 * 都可以。</p>
<p>示例：</p>
<hr>
<hr>
<h2 id="%E4%BA%94%E3%80%81%E5%9B%BE%E7%89%87" tabindex="-1">五、图片</h2>
<p>语法</p>
<pre><code class="language-">![图片alt](图片地址 ''图片title'')
</code></pre>
<p>图片alt就是显示在图片下面的文字，相当于对图片内容的解释。
 <br>
 图片title是图片的标题，当鼠标移到图片上时显示的内容。title可加可不加</p>
<p>例</p>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2FiTab-z8e8qy.jpg&amp;size=m" alt="iTab-z8e8qy"></p>
<h2 id="%E5%85%AD%E3%80%81%E8%B6%85%E9%93%BE%E6%8E%A5" tabindex="-1">六、超链接</h2>
<pre><code class="language-">[超链接名](超链接地址 "超链接title")
title可加可不加
</code></pre>
<p>例</p>
<pre><code class="language-">[简书](http://jianshu.com)
[百度](http://baidu.com)
</code></pre>
<p>注：Markdown本身语法不支持链接在新页面中打开，貌似简书做了处理，是可以的。别的平台可能就不行了，如果想要在新页面中打开的话可以用html语言的a标签代替。</p>
<pre><code class="language-">&lt;a href="超链接地址" target="_blank"&gt;超链接名&lt;/a&gt;

示例
&lt;a href="https://www.jianshu.com/u/1f5ac0cf6a8b" target="_blank"&gt;简书&lt;/a&gt;
</code></pre>
<h2 id="%E8%A1%A8%E6%A0%BC" tabindex="-1">表格</h2>
<table>
 <thead>
  <tr>
   <th>name</th>
   <th>Wang</th>
   <th>Wei</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>1111</td>
   <td>1111</td>
   <td>1111</td>
  </tr>
 </tbody>
</table>
<p>例如</p>
<pre><code class="language-">name|Wang|Wei
-----|----|------
1111|1111|1111
</code></pre>
<blockquote>
 <p>常用的目前就这么多，我也不清楚哎(づ￣3￣)づ╭❤～</p>
</blockquote>]]></description><guid isPermaLink="false">/archives/100</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><pubDate>Mon, 9 Jan 2023 06:09:46 GMT</pubDate></item><item><title><![CDATA[网站常用代码以及美化（源自网络）]]></title><link>https://7boe.top/archives/101</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E7%BD%91%E7%AB%99%E5%B8%B8%E7%94%A8%E4%BB%A3%E7%A0%81%E4%BB%A5%E5%8F%8A%E7%BE%8E%E5%8C%96%EF%BC%88%E6%BA%90%E8%87%AA%E7%BD%91%E7%BB%9C%EF%BC%89&amp;url=/archives/101" width="1" height="1" alt="" style="opacity:0;">
<h2 id="飘落特效">飘落特效</h2>
<h3 id="白点">白点</h3>
<pre><code>&lt;script src='https://api.vvhan.com/api/snow'&gt;&lt;/script&gt;
    &lt;script src="https://unpkg.com/magic-snowflakes/dist/snowflakes.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
    var sf = new Snowflakes({
    color: "#FFFFFF",
    count: 66,
    minOpacity: 0.3,
    maxOpacity: 1
});
&lt;/script&gt;
</code></pre>
<h3 id="雪花">雪花</h3>
<pre><code>&lt;script src="https://cdn.jsdelivr.net/gh/xh8039/static-assets/public/js/snow-falling.min.js"&gt;&lt;/script&gt;
</code></pre>
<h3 id="树叶飘落代码">树叶飘落代码</h3>
<pre><code>&lt;script src="https://cdn.bootcss.com/jquery/1.2.3/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.mom1.cn/1/su.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;jQuery(document).ready(function($){
$('body').wpSuperSnow({
flakes: ['https://cdn.mom1.cn/1/007.png','https://cdn.mom1.cn/1//006.png','https://cdn.mom1.cn/1//004.png','https://cdn.mom1.cn/1/002.png','https://cdn.mom1.cn/1/001.png','https://cdn.mom1.cn/1/003.png','https://cdn.mom1.cn/1/002.png','https://cdn.mom1.cn/1/001.png'],
totalFlakes: '290',
zIndex: '999999',
maxSize: '30',
maxDuration: '20',
useFlakeTrans: false
});
});&lt;/script&gt;
</code></pre>
<h3 id="博客加灯笼">博客加灯笼</h3>
<pre><code>&lt;div class="deng-box"&gt;
&lt;div class="deng"&gt;
&lt;div class="xian"&gt;&lt;/div&gt;
&lt;div class="deng-a"&gt;
&lt;div class="deng-b"&gt;&lt;div class="deng-t"&gt;春节&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="shui shui-a"&gt;&lt;div class="shui-c"&gt;&lt;/div&gt;&lt;div class="shui-b"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
 
&lt;div class="deng-box1"&gt;
&lt;div class="deng"&gt;
&lt;div class="xian"&gt;&lt;/div&gt;
&lt;div class="deng-a"&gt;
&lt;div class="deng-b"&gt;&lt;div class="deng-t"&gt;快乐&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="shui shui-a"&gt;&lt;div class="shui-c"&gt;&lt;/div&gt;&lt;div class="shui-b"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
  .deng-box {
    position: fixed;
    top: -30px;
    left: 220px;
    z-index: 9999;
    pointer-events: none;
}
 
.deng-box1 {
    position: fixed;
    top: -30px;
    right: 222px;
    z-index: 9999;
    pointer-events: none;
}
 
.deng-box1 .deng {
    position: relative;
    width: 120px;
    height: 90px;
    margin: 50px;
    background: #d8000f;
    background: rgba(216, 0, 15, 0.8);
    border-radius: 50% 50%;
    -webkit-transform-origin: 50% -100px;
    -webkit-animation: swing 5s infinite ease-in-out;
    box-shadow: -5px 5px 30px 4px rgba(252, 144, 61, 1);
}
 
.deng {
    position: relative;
    width: 120px;
    height: 90px;
    margin: 50px;
    background: #d8000f;
    background: rgba(216, 0, 15, 0.8);
    border-radius: 50% 50%;
    -webkit-transform-origin: 50% -100px;
    -webkit-animation: swing 3s infinite ease-in-out;
    box-shadow: -5px 5px 50px 4px rgba(250, 108, 0, 1);
}
 
.deng-a {
    width: 100px;
    height: 90px;
    background: #d8000f;
    background: rgba(216, 0, 15, 0.1);
    margin: 12px 8px 8px 10px;
    border-radius: 50% 50%;
    border: 2px solid #dc8f03;
}
 
.deng-b {
    width: 45px;
    height: 90px;
    background: #d8000f;
    background: rgba(216, 0, 15, 0.1);
    margin: -2px 8px 8px 26px;
    border-radius: 50% 50%;
    border: 2px solid #dc8f03;
}
 
.xian {
    position: absolute;
    top: -20px;
    left: 60px;
    width: 2px;
    height: 20px;
    background: #dc8f03;
}
 
.shui-a {
    position: relative;
    width: 5px;
    height: 20px;
    margin: -5px 0 0 59px;
    -webkit-animation: swing 4s infinite ease-in-out;
    -webkit-transform-origin: 50% -45px;
    background: #ffa500;
    border-radius: 0 0 5px 5px;
}
 
.shui-b {
    position: absolute;
    top: 14px;
    left: -2px;
    width: 10px;
    height: 10px;
    background: #dc8f03;
    border-radius: 50%;
}
 
.shui-c {
    position: absolute;
    top: 18px;
    left: -2px;
    width: 10px;
    height: 35px;
    background: #ffa500;
    border-radius: 0 0 0 5px;
}
 
.deng:before {
    position: absolute;
    top: -7px;
    left: 29px;
    height: 12px;
    width: 60px;
    content: " ";
    display: block;
    z-index: 999;
    border-radius: 5px 5px 0 0;
    border: solid 1px #dc8f03;
    background: #ffa500;
    background: linear-gradient(to right, #dc8f03, #ffa500, #dc8f03, #ffa500, #dc8f03);
}
 
.deng:after {
    position: absolute;
    bottom: -7px;
    left: 10px;
    height: 12px;
    width: 60px;
    content: " ";
    display: block;
    margin-left: 20px;
    border-radius: 0 0 5px 5px;
    border: solid 1px #dc8f03;
    background: #ffa500;
    background: linear-gradient(to right, #dc8f03, #ffa500, #dc8f03, #ffa500, #dc8f03);
}
 
.deng-t {
    font-family: 华文行楷,Arial,Lucida Grande,Tahoma,sans-serif;
    font-size: 1.5rem;
    color: #ffa500;
    font-weight: bold;
    line-height: 42px;
    text-align: center;
    width: 25px;  
    margin: 0 auto;  
     
}
 
.night .deng-t, 
.night .deng-box, 
.night .deng-box1 {
    background: transparent !important;
}
 
@-moz-keyframes swing {
    0% {
        -moz-transform: rotate(-10deg)
    }
 
    50% {
        -moz-transform: rotate(10deg)
    }
 
    100% {
        -moz-transform: rotate(-10deg)
    }
}
 
@-webkit-keyframes swing {
    0% {
        -webkit-transform: rotate(-10deg)
    }
 
    50% {
        -webkit-transform: rotate(10deg)
    }
 
    100% {
        -webkit-transform: rotate(-10deg)
    }
}
&lt;/style&gt;
</code></pre>
<p>持续更新</p>]]></description><guid isPermaLink="false">/archives/101</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><pubDate>Fri, 6 Jan 2023 04:52:36 GMT</pubDate></item><item><title><![CDATA[WordPress博客安装以及主题]]></title><link>https://7boe.top/archives/102</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=WordPress%E5%8D%9A%E5%AE%A2%E5%AE%89%E8%A3%85%E4%BB%A5%E5%8F%8A%E4%B8%BB%E9%A2%98&amp;url=/archives/102" width="1" height="1" alt="" style="opacity:0;">
<h2 id="下载wordpress官方安装包">下载WordPress官方安装包</h2>
<p>下载解压到wwwroot下文章根目录</p>
<pre><code>https://cn.wordpress.org/latest-zh_CN.zip
</code></pre>
<h2 id="主题站以及主题推荐">主题站以及主题推荐</h2>
<h3 id="主题全站付费主题">主题全站付费主题</h3>
<p><a href="https://www.wpbit.cn/">https://www.wpbit.cn/</a></p>
<p><a href="https://www.iztwp.com/theme">https://www.iztwp.com/theme</a></p>
<h3 id="子比主题">子比主题</h3>
<p>没别的就是贵
 <br>
 <a href="https://www.zibll.com/pay-zibll">https://www.zibll.com/pay-zibll</a></p>
<h3 id="pink主题">Pink主题</h3>
<p>399元
 <br>
 <a href="https://kam.space/?p=17">https://kam.space/?p=17</a></p>
<h3 id="argon主题">argon主题</h3>
<p>作者站
 <br>
 <a href="https://solstice23.top/">https://solstice23.top/</a>
 <br>
 GitHub
 <br>
 <a href="https://github.com/solstice23/argon-theme">https://github.com/solstice23/argon-theme</a></p>
<h3 id="lolimeow主题">lolimeow主题</h3>
<p>作者站<a href="https://www.boxmoe.com/">https://www.boxmoe.com/</a></p>
<p></p>
<h3 id="theme-sakurairo主题">Theme Sakurairo主题</h3>
<p>GitHub
 <br>
 <a href="https://github.com/mirai-mamori/Sakurairo">https://github.com/mirai-mamori/Sakurairo</a></p>
<h3 id="原版sakura主题">原版Sakura主题</h3>
<p>GitHub
 <br>
 <a href="https://github.com/mashirozx/sakura/tree/3.x">https://github.com/mashirozx/sakura/tree/3.x</a></p>]]></description><guid isPermaLink="false">/archives/102</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Wed, 28 Dec 2022 06:22:02 GMT</pubDate></item><item><title><![CDATA[Linux安装Typecho博客]]></title><link>https://7boe.top/archives/103</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E5%AE%89%E8%A3%85Typecho%E5%8D%9A%E5%AE%A2&amp;url=/archives/103" width="1" height="1" alt="" style="opacity:0;">
<h2 id="在官网下载官网文件">在官网下载官网文件</h2>
<p><a href="https://typecho.org/download%5Btypecho%E5%AE%98%E6%96%B9%E4%B8%8B%E8%BD%BD">https://typecho.org/download[typecho官方下载</a>](<a href="https://typecho.org/download">https://typecho.org/download</a>)</p>
<p>解压到wwwroot目录里
 <br>
 对接数据库</p>
<p>主题在themes目录下
 <br>
 直接解压到里面然后在控制面板里外观上进行选择跟换</p>
<h2 id="好看的主题以及主题站">好看的主题以及主题站</h2>
<h3 id="主题">主题</h3>
<h4 id="typecho-butterfly主题">Typecho-Butterfly主题</h4>
<p>hexo的Butterfly改版
 <br>
 GitHub</p>
<p><a href="https://github.com/wehaox/Typecho-Butterfly">https://github.com/wehaox/Typecho-Butterfly</a></p>
<p>作者主题站</p>
<p><a href="https://blog.wehaox.com/">https://blog.wehaox.com/</a></p>
<h4 id="joe主题">JOE主题</h4>
<p><a href="https://github.com/HaoOuBa/Joe">https://github.com/HaoOuBa/Joe</a></p>
<h4 id="cuteen5主题">Cuteen5主题</h4>
<p>88元
 <br>
 <a href="https://blog.zwying.com/archives/76.html">https://blog.zwying.com/archives/76.html</a></p>
<h4 id="handsome主题">handsome主题</h4>
<p><a href="https://www.ihewro.com/archives/489/">https://www.ihewro.com/archives/489/</a></p>
<h4 id="dinner主题">Dinner主题</h4>
<p><a href="https://blog.zezeshe.com/archives/dinner-typecho-theme.html">https://blog.zezeshe.com/archives/dinner-typecho-theme.html</a></p>
<h3 id="主题站">主题站</h3>
<p><a href="https://www.npc.ink/">https://www.npc.ink/</a></p>
<p><a href="https://www.typecho.me/">https://www.typecho.me/</a></p>]]></description><guid isPermaLink="false">/archives/103</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>技术分类</category><pubDate>Wed, 28 Dec 2022 05:51:57 GMT</pubDate></item><item><title><![CDATA[网站播放器调用]]></title><link>https://7boe.top/archives/117</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E7%BD%91%E7%AB%99%E6%92%AD%E6%94%BE%E5%99%A8%E8%B0%83%E7%94%A8&amp;url=/archives/117" width="1" height="1" alt="" style="opacity:0;">
<h2 id="网站添加播放器">网站添加播放器</h2>
<p>本网站播放使用来源</p>
<p><a href="https://myhkw.cn/">明月浩空网</a></p>
<p>文章内容应用<a href="https://www.ywsj.cf/archives/wang-zhan-zhuang-xiu---gei-ni-de-wang-zhan-tian-jia-mian-fei-yin-le-bo-fang-qi">有云转晴</a></p>
<h3 id="使用方法">使用方法</h3>
<p>功能：</p>
<p>1.支持手机端播放
 <br>
 2.支持皮肤的更换==
 <br>
 3.支持自动播放
 <br>
 4.支持左右位置的调整
 <br>
 5.支持歌词的显示
 <br>
 6.支持自定义歌曲的添加</p>
<pre><code>
免注册体验：将此段播放器代码插入到网页最底部的&lt;/body&gt;&lt;/html&gt;标签之前

可选参数：0关闭 1开启
皮肤更换：skin="player" [player/mini/swhite/cover]#需付费，可忽略
手机加载：m="0" [0/1]
自动播放：au="0" [0/1]
左右位置：lr="r" [l/r]
</code></pre>
<h4 id="引用链接样式">引用链接样式</h4>
<pre><code>&lt;script src="https://myhkw.cn/api/player/demo" id="myhk" key="demo" skin="player" lr="l" m="1"&gt;&lt;/script&gt;
</code></pre>
<h4 id="非必要类">非必要类</h4>
<p>（非必要）如果提示jQuery问题，请将此段代码插入到网站的之前，或播放器代码之前</p>
<pre><code>&lt;script src="https://myhkw.cn/player/js/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;
</code></pre>
<p>其余所有配置文件加载需要在该作者网站内注册后调整</p>]]></description><guid isPermaLink="false">/archives/117</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><pubDate>Mon, 28 Nov 2022 03:27:07 GMT</pubDate></item><item><title><![CDATA[Docker常用命令]]></title><link>https://7boe.top/archives/118</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;url=/archives/118" width="1" height="1" alt="" style="opacity:0;">
<h2 id="镜像管理容器管理">镜像管理&amp;容器管理</h2>
<h3 id="docker镜像管理命令">docker镜像管理命令</h3>
<table>
 <thead>
  <tr>
   <th>镜像管理命令</th>
   <th>说明</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>docker images</td>
   <td>查看本机镜像</td>
  </tr>
  <tr>
   <td>docker search 镜像名称</td>
   <td>从官方仓库查找镜像</td>
  </tr>
  <tr>
   <td>docker pull 镜像名称:标签</td>
   <td>下载镜像</td>
  </tr>
  <tr>
   <td>docker push 镜像名称:标签</td>
   <td>上传镜像</td>
  </tr>
  <tr>
   <td>docker save 镜像名称:标签 -o 备份镜像名称.tar</td>
   <td>备份镜像为tar包</td>
  </tr>
  <tr>
   <td>docker load -i 备份镜像名称</td>
   <td>导入备份的镜像文件</td>
  </tr>
  <tr>
   <td>docker rmi 镜像名称:标签</td>
   <td>删除镜像（必须先删除该镜像启动的所有容器</td>
  </tr>
  <tr>
   <td>docker history 镜像名称:标签</td>
   <td>查看镜像的制作历史</td>
  </tr>
  <tr>
   <td>docker inspect 镜像名称:标签</td>
   <td>查看镜像的详细信息</td>
  </tr>
  <tr>
   <td>docker tag 镜像名称:标签 新的镜像名称:新的标签</td>
   <td>创建新的镜像名称和标签</td>
  </tr>
 </tbody>
</table>
<h3 id="docker容器管理命令">docker容器管理命令</h3>
<table>
 <thead>
  <tr>
   <th>容器管理命令</th>
   <th>说明</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>docker run -it(d) 镜像名称:标签 启动命令</td>
   <td>创建启动并进入一个容器，后台容器使用参数 d</td>
  </tr>
  <tr>
   <td>docker ps</td>
   <td>查看容器 -a 所有容器，包含未启动的，-q 只显示id</td>
  </tr>
  <tr>
   <td>docker rm 容器ID</td>
   <td>-f 强制删除，支持命令重入</td>
  </tr>
  <tr>
   <td>docker start ·stop ·restart 容器id</td>
   <td>启动、停止、重启容器</td>
  </tr>
  <tr>
   <td>docker cp 本机文件路径 容器id:容器内路径</td>
   <td>把本机文件拷贝到容器内（上传）</td>
  </tr>
  <tr>
   <td>docker cp 容器id:容器内路径 本机文件路径</td>
   <td>把容器内文件拷贝到本机（下载）</td>
  </tr>
  <tr>
   <td>docker inspect 容器ID</td>
   <td>查看容器的详细信息</td>
  </tr>
  <tr>
   <td>docker attach 容器id</td>
   <td>进入容器的默认进程，退出后容器会关闭</td>
  </tr>
  <tr>
   <td>docker attach 容器id [ctrl+p, ctrl+q]</td>
   <td>进入容器以后，退出容器而不关闭容器的方法</td>
  </tr>
  <tr>
   <td>docker exec -it 容器id 启动命令</td>
   <td>进入容器新的进程，退出后容器不会关闭</td>
  </tr>
 </tbody>
</table>
<blockquote>
 <p>docker run 启动一个新的容器
  <br>
  -i 交互式，-t 终端， -d 在后台启动
  <br>
  -restart-always #开机自启动</p>
</blockquote>
<h2 id="docker-compoes">docker-compoes</h2>
<p>手动安装</p>
<pre><code>sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

</code></pre>]]></description><guid isPermaLink="false">/archives/118</guid><dc:creator>Celia</dc:creator><category>Docker</category><pubDate>Mon, 28 Nov 2022 00:59:22 GMT</pubDate></item><item><title><![CDATA[Linux安装哪吒监控面板]]></title><link>https://7boe.top/archives/119</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Linux%E5%AE%89%E8%A3%85%E5%93%AA%E5%90%92%E7%9B%91%E6%8E%A7%E9%9D%A2%E6%9D%BF&amp;url=/archives/119" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E9%9C%80%E8%A6%81%E7%9A%84%E6%93%8D%E4%BD%9C" tabindex="-1">域名解析需要的操作</h2>
<p>开始之前，请先确定你搭建探针的域名</p>
<p>强烈建议用两个(子)域名做解析
 <br>
 第一个是面板的域名，套CDN比较方便
 <br>
 第二个仅仅解析到面板服务器的域名，用于客户端连接服务端试用（说白了就是把你的被监控端指向这个更快的域名）</p>
<p>比如我的neza.7boe.com作为面板的域名，还有一个lsky.haoduck.com是用来记录面板服务器的IP</p>
<p>暂且将两个域名都解析到部署面板服务器的IP</p>
<h2 id="github%E4%B8%8A%E9%9C%80%E8%A6%81%E7%9A%84%E6%93%8D%E4%BD%9C" tabindex="-1">GitHub上需要的操作</h2>
<p>得到GitHub账号ID
 <br>
 如果没有Github账号，先注册</p>
<p>浏览器中打开https://api.github.com/users/你的GitHub用户名</p>
<p>先打开：<a href="https://github.com/settings/developers%EF%BC%8C%E7%84%B6%E5%90%8E%E7%82%B9%E5%87%BBNew" target="_blank">https://github.com/settings/developers，然后点击New</a> OAuth App按钮
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071430436.png&amp;size=m" alt="image-1668071430436"></p>
<h3 id="oauth-apps%E7%9A%84client-id%E5%92%8Cclient-secrets" tabindex="-1">OAuth Apps的Client ID和Client secrets</h3>
<p><img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071507901.png&amp;size=m" alt="image-1668071507901"></p>
<h2 id="%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%83%A8%E7%BD%B2%E9%9D%A2%E6%9D%BF%E6%9C%8D%E5%8A%A1" tabindex="-1">服务端部署面板服务</h2>
<p>国外服务器</p>
<pre><code class="language-">curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh &amp;&amp; chmod +x nezha.sh 
sudo ./nezha.sh
</code></pre>
<p>国内服务器</p>
<pre><code class="language-">curl -L https://raw.sevencdn.com/naiba/nezha/master/script/install.sh -o nezha.sh &amp;&amp; chmod +x nezha.sh
sudo ./nezha.sh
</code></pre>
<p>按1进行安装面板，</p>
<p>接着就要输入前面记录下来的GITHUB账号ID、OAUTHAPP的CLIENT ID、OAUTHAPP的CLIENT SECRETS 按照提示输入
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071590042.png&amp;size=m" alt="image-1668071590042"></p>
<h2 id="%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AEnginx" tabindex="-1">反向代理配置Nginx</h2>
<pre><code class="language-">location /
{
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
}
location /ws
{
proxy_pass http://127.0.0.1:8008;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
</code></pre>
<p>配置完成后回到之前GitHub上
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071634575.png&amp;size=m" alt="image-1668071634575"></p>
<h2 id="%E5%85%B3%E4%BA%8E%E5%AE%A2%E6%88%B7%E7%AB%AF(%E8%A2%AB%E7%9B%91%E6%8E%A7%E6%9C%BA%E5%99%A8)%E9%9C%80%E8%A6%81%E7%9A%84%E6%93%8D%E4%BD%9C" tabindex="-1">关于客户端(被监控机器)需要的操作</h2>
<p>访问 <a href="https://xn--6qqv7i2xdt95b" target="_blank">https://你的域名</a> 到页面并登陆后台。</p>
<p>到服务器页面添加服务器
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071682354.png&amp;size=m" alt="image-1668071682354"></p>
<p>把脚本复制到被控机器里面
 <br>
 安装Agent
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage-1668071742737.png&amp;size=m" alt="image-1668071742737"></p>
<blockquote>
 <p>解析到面板IP的域名地址选择另一个域名、面板RPC端口(默认5555)、服务器AGENT ID、服务器AGENT 密钥
  <br>
  有多台被监控机器时，按照此步骤在控制面板添加服务器，在被监控机执行脚本填写ID和密钥就可以了</p>
</blockquote>]]></description><guid isPermaLink="false">/archives/119</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><pubDate>Thu, 10 Nov 2022 09:08:59 GMT</pubDate></item><item><title><![CDATA[网站搭建：Lksy图床项目]]></title><link>https://7boe.top/archives/120</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=%E7%BD%91%E7%AB%99%E6%90%AD%E5%BB%BA%EF%BC%9ALksy%E5%9B%BE%E5%BA%8A%E9%A1%B9%E7%9B%AE&amp;url=/archives/120" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E5%AE%89%E8%A3%85%E5%85%B0%E7%A9%BA%E5%9B%BE%E5%BA%8A" tabindex="-1">安装兰空图床</h2>
<h3 id="%E5%AE%89%E8%A3%85%E6%96%B9%E5%BC%8F" tabindex="-1">安装方式</h3>
<p>bt面板</p>
<pre><code class="language-">https://github.com/lsky-org/lsky-pro
</code></pre>
<p>先下载到服务器文件里面
 <br>
 <img src="https://7boe.top/apis/api.storage.halo.run/v1alpha1/thumbnails/-/via-uri?uri=%2Fupload%2F2022%2F11%2Fimage.png&amp;size=m" alt="image">
 <br>
 添加站点
 <br>
 php要求8.0安装扩展fileinfo
 <br>
 站点目录设置/public
 <br>
 伪静态填写</p>
<pre><code class="language-">location / {
  try_files $uri $uri/ /index.php?$query_string;
}
</code></pre>
<p>域名解析后登录站点进行安装</p>
<h3 id="docker-compose%E5%AE%89%E8%A3%85" tabindex="-1">Docker-compose安装</h3>
<pre><code class="language-">version: '3.3'
services:
  lsky-pro-docker:
    container_name: lsky-pro
    restart: always
    ports:
      - '127.0.0.1:9080:80'
    volumes:
      - './data:/var/www/html'
    image: 'halcyonazure/lsky-pro-docker:latest'
</code></pre>
<h3 id="docker%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2" tabindex="-1">Docker一键部署</h3>
<pre><code class="language-">docker run -d \
    --name lsky-pro \
    --restart unless-stopped \
    -p 9080:80 \
    -v /usr/local/lsky-pro:/var/www/html \
    halcyonazure/lsky-pro-docker:latest
</code></pre>
<p>反向代理</p>
<pre><code class="language-">            location /{
    proxy_pass http://127.0.0.1:9080;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    add_header X-Cache $upstream_cache_status;
}
</code></pre>
<p>官方镜像仓库
 <br>
 <a href="https://hub.docker.com/r/dko0/lsky-pro" target="_blank">https://hub.docker.com/r/dko0/lsky-pro</a>
 <br>
 官方文档
 <br>
 <a href="https://docs.lsky.pro/" target="_blank">https://docs.lsky.pro/</a>
 <br>
 文章内容引用
 <br>
 <a href="https://www.hash070.top/archives/lsky-pro-docker-deploy.html" target="_blank">https://www.hash070.top/archives/lsky-pro-docker-deploy.html</a></p>
<h3 id="%E6%9B%B4%E6%96%B0" tabindex="-1">更新</h3>
<pre><code class="language-">cp -r /root/data/docker_data/lsky-pro/lsky-pro-data /root/data/docker_data/lsky-pro/lsky-pro-data.archive  # 万事先备份，以防万一

cp -r /root/data/docker_data/lsky-pro/db /root/data/docker_data/lsky-pro/db.archive #数据库也备份一下

cd /root/data/docker_data/lsky-pro  # 进入docker-compose所在的文件夹

docker-compose pull    # 拉取最新的镜像

docker-compose up -d   # 重新更新当前镜像
</code></pre>
<h3 id="%E5%8D%B8%E8%BD%BD" tabindex="-1">卸载</h3>
<pre><code class="language-">cd /root/data/docker_data/lsky-pro  # 进入docker-compose所在的文件夹

docker-compose down    # 停止容器，此时不会删除映射到本地的数据

rm -rf /root/data/docker_data//root/data/docker_data/lsky-pro  # 完全删除映射到本地的数据
</code></pre>]]></description><guid isPermaLink="false">/archives/120</guid><dc:creator>Celia</dc:creator><category>网站搭建</category><category>Docker</category><pubDate>Thu, 3 Nov 2022 06:21:38 GMT</pubDate></item><item><title><![CDATA[Docker项目：在服务器上搭建私有云盘]]></title><link>https://7boe.top/archives/121</link><description><![CDATA[<img src="https://7boe.top/plugins/feed/assets/telemetry.gif?title=Docker%E9%A1%B9%E7%9B%AE%EF%BC%9A%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%90%AD%E5%BB%BA%E7%A7%81%E6%9C%89%E4%BA%91%E7%9B%98&amp;url=/archives/121" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%E6%90%AD%E5%BB%BA%E6%96%B9%E5%BC%8F" tabindex="-1">搭建方式</h2>
<h3 id="linux%E6%9C%AC%E6%9C%BA%E6%90%AD%E5%BB%BA" tabindex="-1">Linux本机搭建</h3>
<pre><code class="language-">curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install
</code></pre>
<h3 id="%E6%9B%B4%E6%96%B0" tabindex="-1">更新</h3>
<pre><code class="language-">curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s update
</code></pre>
<p>安装更新路径</p>
<pre><code class="language-"># 安装

curl -fsSL "https://nn.ci/alist.sh" | bash -s install /root

# 更新

curl -fsSL "https://nn.ci/alist.sh" | bash -s update /root

# 卸载

curl -fsSL "https://nn.ci/alist.sh" | bash -s uninstall /root
</code></pre>
<h3 id="docker%E6%90%AD%E5%BB%BA" tabindex="-1">Docker搭建</h3>
<pre><code class="language-">docker logs alist
# 或者
docker exec -it alist ./alist -password
</code></pre>
<h3 id="%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93" tabindex="-1">镜像仓库</h3>
<pre><code class="language-">xhofe/alist:latest
</code></pre>
<h3 id="%E5%88%9B%E5%BB%BA%E5%AE%B9%E5%99%A8" tabindex="-1">创建容器</h3>
<pre><code class="language-">docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest
</code></pre>
<h3 id="%E5%AE%98%E7%BD%91%E6%96%87%E6%A1%A3" tabindex="-1">官网文档</h3>
<p><a href="https://alist-doc.nn.ci/docs/intro" target="_blank">https://alist-doc.nn.ci/docs/intro</a></p>
<h3 id="%E6%8C%87%E5%AE%9A%E7%89%88%E6%9C%AC" tabindex="-1">指定版本</h3>
<p><a href="https://hub.docker.com/r/xhofe/alist" target="_blank">https://hub.docker.com/r/xhofe/alist</a></p>
<h3 id="nginx%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86" tabindex="-1">Nginx反向代理</h3>
<pre><code class="language-">location / {
    proxy_pass http://127.0.0.1:5244/;
    rewrite ^/(.*)$ /$1 break;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade-Insecure-Requests 1;
    proxy_set_header X-Forwarded-Proto https;
}
</code></pre>
<p>文章内容引用
 <br>
 <a href="https://blog.laoda.de/archives/docker-install-alist" target="_blank">https://blog.laoda.de/archives/docker-install-alist</a></p>
<h3 id="docker%E6%9B%B4%E6%96%B0%E6%96%B9%E5%BC%8F" tabindex="-1">Docker更新方式</h3>
<pre><code class="language-">docker stop alist  #停止alist容器


docker rm -f alist  #删除alist容器，因为之前映射到了本地，所以数据不会被删除


cp -r /root/data/docker_data/alist /root/data/docker_data/alist.bak  #可选，如果不放心，可以备份一下数据


docker pull xhofe/alist:latest  #拉取最新的alist镜像


docker run -d --restart=always -v /root/data/docker_data/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest    #运行安装命令，注意-v挂载的路径与原来相同
</code></pre>
<h3 id="%E4%BD%BF%E7%94%A8aria2%E4%B8%8B%E8%BD%BD" tabindex="-1">使用aria2下载</h3>
<p>安装aria2</p>
<pre><code class="language-">wget -N git.io/aria2.sh &amp;&amp; chmod +x aria2.sh
</code></pre>]]></description><guid isPermaLink="false">/archives/121</guid><dc:creator>Celia</dc:creator><category>Docker</category><pubDate>Thu, 3 Nov 2022 02:46:51 GMT</pubDate></item></channel></rss>