<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>mGod</title>
  
  
  <link href="https://www.meng.me/atom.xml" rel="self"/>
  
  <link href="https://www.meng.me/"/>
  <updated>2026-06-06T09:11:09.618Z</updated>
  <id>https://www.meng.me/</id>
  
  <author>
    <name>mGod</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Minecraft服务器管理MOD上线！</title>
    <link href="https://www.meng.me/posts/28064.html"/>
    <id>https://www.meng.me/posts/28064.html</id>
    <published>2026-06-06T06:50:24.000Z</published>
    <updated>2026-06-06T09:11:09.618Z</updated>
    
    <content type="html"><![CDATA[<p><code>mc-login-verify</code> 开源地址：<a href="https://github.com/mgodex/mc-login-verify">https://github.com/mgodex/mc-login-verify</a><br><img src="/postsImages/2026/mc-login-verify/1.png" alt="mc-login-verify1"></p><span id="more"></span><h2 id="来源"><a href="#来源" class="headerlink" title="来源"></a>来源</h2><p>最近搭建了一台MC服务器，想着做个身份验证，就写了一个mod，这也是为什么叫做 <code>mc-login-verify</code> ，但是随着需求增加，逐渐脱离了身份验证的单需求，现在其实也可以叫做服务器管理（简单版），当然，后续可能越来越大，越来越完善。</p><h2 id="版本"><a href="#版本" class="headerlink" title="版本"></a>版本</h2><p>暂时没有做测试，但是理论上版本号是通的。我的是Minecraft Java版 1.21.1、NeoForge 21.1.1</p><h2 id="功能介绍"><a href="#功能介绍" class="headerlink" title="功能介绍"></a>功能介绍</h2><p>1、身份验证：玩家必须绑定您的身份验证平台才能进入游戏，此验证平台您可选择自行搭建或免费使用我们的微信小程序。<br>2、服务器状态：在小程序中查看服务器状态，例如CPU、内存、硬盘、在线人数、版本等等。<br>3、玩家列表：在小程序中查看在线玩家列表。<br>4、踢出和拉黑：在小程序中踢出、拉黑某个玩家。<br>5、远程终端：在小程序中远程发送命令到游戏服务器终端。<br>更多功能开发中，同时也欢迎提出你的需求，也许下一个免费定制需求就属于你！</p><h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><blockquote><p>统一说明：<br>配置文件：<code>config</code>下的<code>mc_login_verify-server.toml</code><br>服务器地址：公网IP加<code>queryPort</code>端口<br>例如公网IP是：<code>1.1.1.1</code> ，端口是25577，那么你需要填写：<code>1.1.1.1:25577</code>，同时你也可以访问这个地址，能看到内容就是成功，否则请检查配置是否启用、防火墙是否放开、端口是否冲突等问题。</p></blockquote><h3 id="服主（使用官方）"><a href="#服主（使用官方）" class="headerlink" title="服主（使用官方）"></a>服主（使用官方）</h3><ul><li>在github中下载最新版 <code>mc-login-verify</code> ，放入服务器Mods中。下载地址: <a href="https://github.com/mgodex/mc-login-verify/actions">github</a> </li><li>打开微信小程序 <code>萌灵小助手</code> ，进入后注册账号（便于您后续管理您的服务器）。</li><li>分别进入：《控制台》 - 《MC面板》 - 《管理游戏》。<blockquote><p>当然，你也可以直接扫描下方二维码直接进入页面：<br><img src="/postsImages/2026/mc-login-verify/2.png" width="150" height="150"></p></blockquote></li><li>点击“添加服务器”按钮，随意输入一个名字，以便于您区分您的服务器。</li><li>复制你的插件连接地址，填入入mod的配置文件的<code>authUrl</code>中。<blockquote><p>配置文件为：<code>config</code>下的<code>mc_login_verify-server.toml</code></p></blockquote></li><li>如果您需要管理器管理功能，把<code>queryControl</code>下的<code>enableQueryControl</code>改为<code>true</code>，记得重启服务器。验证是否生效只需要访问您的服务器公网ip加配置的<code>queryPort</code>端口即可，看到下图就表示启动成功。如果无法访问，请检查防火墙配置或是否端口冲突。<blockquote><p> <img src="/postsImages/2026/mc-login-verify/3.png" alt="mc-login-verify1"></p></blockquote></li><li>在小程序中找到刚刚创建的服务器点击“编辑连接”，第一行服务器地址就是你的服务器公网IP加上配置文件中的<code>queryPort</code>端口，例如公网IP是：<code>1.1.1.1</code> ，端口是25577，那么你需要填写：<code>1.1.1.1:25577</code>。把刚刚配置文件中的<code>token</code>填入第二行密钥Token。</li></ul><p>至此就完成了服务器绑定，您可点击“查看面板”进入管理页面。</p><h3 id="服主（自行搭建）"><a href="#服主（自行搭建）" class="headerlink" title="服主（自行搭建）"></a>服主（自行搭建）</h3><p>通过我们的开源地址自行下载编译，通过mod提供的api也可以自行使用任何语言编写平台。因为项目很简单，这里不做过多介绍。</p><h3 id="用户"><a href="#用户" class="headerlink" title="用户"></a>用户</h3><p>首先您需要知道服务器id，知道id后直接绑定您的角色名字即可，角色名就是你的人物头顶上那个名字。直接扫描下方二维码绑定即可。</p><blockquote><img src="/postsImages/2026/mc-login-verify/2.png" width="150" height="150"></blockquote><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="服主"><a href="#服主" class="headerlink" title="服主"></a>服主</h3><p>1、为什么小程序查看面板报错<br>答：一般是未开启或地址或密钥配置错误。</p><blockquote><p>开启检查方法：配置文件中<code>enableQueryControl</code>是否为true</p><p>地址检查方法：在浏览器打开你填写的地址，看是否能看到内容，可以就是正常的。请注意，此地址需要是公网地址，如果你是自己搭建的平台，和服务器在同一个局域网也没问题。</p><p>密钥检查方法：查看配置文件，token和小程序输入的密钥是否一致。</p></blockquote><p>2、我有多台服务器如何管理<br>答：同样的，平台和服务器绑定即可。</p><h3 id="用户-1"><a href="#用户-1" class="headerlink" title="用户"></a>用户</h3><p>1、换电脑了提示被其他设备绑定<br>答：为了账号安全，每次进入服务器会自动绑定机器码，更换服务器去小程序“MC面板”中点“换绑”即可正常进入服务器。</p><p>2、绑定的时候提示用户名存在<br>答：本平台用户名是唯一的，如果被占用请更换用户名，无法更换请联系客服处理。</p><p>3、多个账号可以绑定吗？<br>答：可以，只要用户名不重复即可。</p><p>4、不同服务器需要分开绑定吗？<br>答：本程序是开源的，任何MC服主都可以使用，每个服务器都会生成一个ID，所以如果访问不同服务器需要分别绑定自己的账号。</p><p>更多资讯请关注：<br><a href="https://mc.meng.me/">MC-Mgod</a><br><a href="https://github.com/mgodex/mc-login-verify/actions">github</a> </p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;code&gt;mc-login-verify&lt;/code&gt; 开源地址：&lt;a href=&quot;https://github.com/mgodex/mc-login-verify&quot;&gt;https://github.com/mgodex/mc-login-verify&lt;/a&gt;&lt;br&gt;&lt;img src=&quot;/postsImages/2026/mc-login-verify/1.png&quot; alt=&quot;mc-login-verify1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="Minecraft" scheme="https://www.meng.me/tags/Minecraft/"/>
    
  </entry>
  
  <entry>
    <title>A6000搭配LM Studio带来的Token自由</title>
    <link href="https://www.meng.me/posts/8577.html"/>
    <id>https://www.meng.me/posts/8577.html</id>
    <published>2026-04-22T01:56:10.000Z</published>
    <updated>2026-04-22T03:13:40.436Z</updated>
    
    <content type="html"><![CDATA[<p>之前使用了Ollama跑大模型，听起来LM Studio更加容易上手，这期来尝试下LM Studio。<br><img src="/postsImages/2026/lmStudio-start-model/1.jpg" alt="lmStudio-start-model1"></p><span id="more"></span><h2 id="前置说明"><a href="#前置说明" class="headerlink" title="前置说明"></a>前置说明</h2><p>依然是先看配置，本次运行机器为ubuntu系统。</p><table><thead><tr><th align="left">硬件</th><th align="left">型号&#x2F;规格</th><th align="left">关键参数</th></tr></thead><tbody><tr><td align="left">CPU (处理器)</td><td align="left">AMD Ryzen 9 5900X</td><td align="left">12核心 &#x2F; 24线程，最高加速频率 4.95GHz</td></tr><tr><td align="left">GPU (显卡)</td><td align="left">双显卡配置</td><td align="left">1. NVIDIA GeForce RTX 3090 (24GB 显存)<br>2. NVIDIA RTX A6000 (48GB 显存)</td></tr><tr><td align="left">RAM (内存)</td><td align="left">128 GB</td><td align="left">无</td></tr></tbody></table><p><img src="/postsImages/2026/lmStudio-start-model/2.png" alt="lmStudio-start-model2"></p><h2 id="安装及配置"><a href="#安装及配置" class="headerlink" title="安装及配置"></a>安装及配置</h2><blockquote><p>LM Studio 下载：<a href="https://lmstudio.ai/download">https://lmstudio.ai/download</a><br>LM Studio 官方主页：<a href="https://lmstudio.ai/">https://lmstudio.ai</a></p></blockquote><p>也有无头模式：</p><blockquote><p>Mac &#x2F; Linux<br><code>curl -fsSL https://lmstudio.ai/install.sh | bash</code></p><p>Windows<br><code>irm https://lmstudio.ai/install.ps1 | iex</code></p></blockquote><p>也提供了SDK：</p><blockquote><p>JS SDK<br><code>npm install @lmstudio/sdk</code><br>Docs: <a href="https://lmstudio.ai/docs/sdk">lmstudio-js</a> </p><p>Python SDK<br><code>pip install lmstudio</code><br>Docs: <a href="https://lmstudio.ai/docs/python">lmstudio-python</a> </p></blockquote><p><img src="/postsImages/2026/lmStudio-start-model/3.png" alt="lmStudio-start-model3"></p><p>安装同样很简单，下载了打开Install就好了。<br>下载之后要把<code>Serve on Local Network</code>打开，否则只能本地访问。<br>因为ubuntu不方便截图，所以这里截图用windows系统安装的LM Studio，后续的使用由ubuntu上的LM Studio提供服务。<br><img src="/postsImages/2026/lmStudio-start-model/4.png" alt="lmStudio-start-model4"></p><h2 id="模型库及下载使用"><a href="#模型库及下载使用" class="headerlink" title="模型库及下载使用"></a>模型库及下载使用</h2><p>LM Studio会给你一些推荐，同时如果有超出机器配置的选择也会有对应的提示。<br><img src="/postsImages/2026/lmStudio-start-model/5.png" alt="lmStudio-start-model5"><br>上面的显卡配置截图就是已经跑了<code>zai-org/glm-4.7-flash - 24.61 GB</code>后的，可以通过<code>lms status</code>命令查看。<br><img src="/postsImages/2026/lmStudio-start-model/6.png" alt="lmStudio-start-model6"><br>接口依然openAi：<code>http://127.0.0.1:1234/v1</code>，依然用OpenCode来操作试试。</p><h2 id="OpenCode安装及使用"><a href="#OpenCode安装及使用" class="headerlink" title="OpenCode安装及使用"></a>OpenCode安装及使用</h2><p>回到Mac，先下载OpenCode，下载地址：<a href="https://opencode.ai/zh/download">https://opencode.ai/zh/download</a><br>我这里下载的桌面版，点击左下角齿轮设置图标，进入设置窗口点击供应商，选择自定义提供商。<br><img src="/postsImages/2026/ollama-opencode/8.png" alt="ollamaAndOpencode8"></p><blockquote><p>供应商ID：随意填写<br>显示名称：随意填写<br>基础URL：<a href="http://127.0.0.1:1234/v1">http://127.0.0.1:1234/v1</a><br>模型model-id：zai-org&#x2F;glm-4.7-flash<br>模型显示名称：随意填写</p></blockquote><p>基础URL中的IP和端口根据自身情况填写，模型model-id填写LM Studio中使用的，可输入 <code>lms status</code> 查看。</p><p>在OpenCode中选择自己的模型使用即可。<br><img src="/postsImages/2026/lmStudio-start-model/7.png" alt="lmStudio-start-model7"><br>自己搭了一个数据集成平台，上面有看板，刚好可以贴一下。<br><img src="/postsImages/2026/lmStudio-start-model/8.png" alt="lmStudio-start-model8"></p><p>可以看到速度等都是完全满足且有空余，这个模型只是示例，当模型聪明、token自由时，你想用来做什么？</p><h2 id="演示引用"><a href="#演示引用" class="headerlink" title="演示引用"></a>演示引用</h2><p>从官方博客看到几个内容，引用分享。</p><h3 id="并行请求"><a href="#并行请求" class="headerlink" title="并行请求"></a>并行请求</h3><div id="player_2026-1"></div><script type="text/javascript" src="https://npm.elemecdn.com/dplayer/dist/DPlayer.min.js"></script><script type="text/javascript">var player = new DPlayer({    container: document.getElementById('player_2026-1'),    video: {        url: 'https://files.lmstudio.ai/parallel-gui.mp4',        type: 'auto'      }});</script><h3 id="全新-CLI-体验"><a href="#全新-CLI-体验" class="headerlink" title="全新 CLI 体验"></a>全新 CLI 体验</h3><div id="player_2026-2"></div><script type="text/javascript" src="https://npm.elemecdn.com/dplayer/dist/DPlayer.min.js"></script><script type="text/javascript">var player = new DPlayer({    container: document.getElementById('player_2026-2'),    video: {        url: 'https://files.lmstudio.ai/lms-chat.mov',        type: 'auto'      }});</script>]]></content>
    
    
    <summary type="html">&lt;p&gt;之前使用了Ollama跑大模型，听起来LM Studio更加容易上手，这期来尝试下LM Studio。&lt;br&gt;&lt;img src=&quot;/postsImages/2026/lmStudio-start-model/1.jpg&quot; alt=&quot;lmStudio-start-model1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="LM Studio" scheme="https://www.meng.me/tags/LM-Studio/"/>
    
  </entry>
  
  <entry>
    <title>OpenCode连接局域网Ollama大模型</title>
    <link href="https://www.meng.me/posts/43331.html"/>
    <id>https://www.meng.me/posts/43331.html</id>
    <published>2026-04-13T02:30:00.000Z</published>
    <updated>2026-04-13T05:43:10.287Z</updated>
    
    <content type="html"><![CDATA[<p>AI时代来了？尝试下本地部署大模型进行代码编写。<br><img src="/postsImages/2026/ollama-opencode/1.jpg" alt="ollamaAndOpencode1"></p><span id="more"></span><h2 id="前置说明"><a href="#前置说明" class="headerlink" title="前置说明"></a>前置说明</h2><p>在Windows电脑上部署Ollama并运行模型，在同局域网的Mac上运行OpenCode使用。Windows的配置如下：<br><img src="/postsImages/2026/ollama-opencode/2.png" alt="ollamaAndOpencode2"></p><h2 id="安装及配置"><a href="#安装及配置" class="headerlink" title="安装及配置"></a>安装及配置</h2><blockquote><p>Ollama 下载：<a href="https://ollama.com/download">https://ollama.com/download</a><br>Ollama 官方主页：<a href="https://ollama.com/">https://ollama.com</a><br>Ollama 官方 GitHub 源代码仓库：<a href="https://github.com/ollama/ollama/">https://github.com/ollama/ollama/</a></p></blockquote><p><img src="/postsImages/2026/ollama-opencode/3.png" alt="ollamaAndOpencode3"></p><p>安装很简单，下载了打开Install就好了。安装完成后需要配置Ollama的监听网络地址，否则只能本地访问。<br>在环境变量中配置：</p><blockquote><p>变量名(N)： <code>OLLAMA_HOST</code><br>值： <code>0.0.0.0:11434</code> </p></blockquote><p><img src="/postsImages/2026/ollama-opencode/4.png" alt="ollamaAndOpencode4"><br>以下是 Ollama 的环境变量配置说明：</p><table><thead><tr><th>参数</th><th>标识与配置</th></tr></thead><tbody><tr><td>OLLAMA_MODELS</td><td>表示模型文件的存放目录，默认目录为<strong>当前用户目录</strong>即  <code>C:\Users%username%.ollama\models</code><br />Windows 系统 <strong>建议不要放在C盘</strong>，可放在其他盘（如 <code>E:\ollama\models</code>）</td></tr><tr><td>OLLAMA_HOST</td><td>表示ollama 服务监听的网络地址，默认为<strong>127.0.0.1</strong> <br />如果想要允许其他电脑访问 Ollama（如局域网中的其他电脑），<strong>建议设置</strong>成 <strong>0.0.0.0</strong></td></tr><tr><td>OLLAMA_PORT</td><td>表示ollama 服务监听的默认端口，默认为<strong>11434</strong> <br />如果端口有冲突，可以修改设置成其他端口（如<strong>8080</strong>等）</td></tr><tr><td>OLLAMA_ORIGINS</td><td>表示HTTP 客户端的请求来源，使用半角逗号分隔列表<br />如果本地使用不受限制，可以设置成星号 <code>*</code></td></tr><tr><td>OLLAMA_KEEP_ALIVE</td><td>表示大模型加载到内存中后的存活时间，默认为<strong>5m</strong>即 5 分钟<br />（如纯数字300 代表 300 秒，0 代表处理请求响应后立即卸载模型，任何负数则表示一直存活）<br />建议设置成 <strong>24h</strong> ，即模型在内存中保持 24 小时，提高访问速度</td></tr><tr><td>OLLAMA_NUM_PARALLEL</td><td>表示请求处理的并发数量，默认为<strong>1</strong> （即单并发串行处理请求）<br />建议按照实际需求进行调整</td></tr><tr><td>OLLAMA_MAX_QUEUE</td><td>表示请求队列长度，默认值为<strong>512</strong> <br />建议按照实际需求进行调整，超过队列长度的请求会被抛弃</td></tr><tr><td>OLLAMA_DEBUG</td><td>表示输出 Debug 日志，应用研发阶段可以设置成<strong>1</strong> （即输出详细日志信息，便于排查问题）</td></tr><tr><td>OLLAMA_MAX_LOADED_MODELS</td><td>表示最多同时加载到内存中模型的数量，默认为<strong>1</strong> （即只能有 1 个模型在内存中）</td></tr></tbody></table><blockquote><p>值得注意的是，Ollama模型默认存储在C盘，建议配置 <code>OLLAMA_MODELS</code> 来更改存储位置。当然，也可以通过桌面客户端的 <code>Settings</code> 中 <code>Model location</code> 直接修改。</p></blockquote><blockquote><p>配置完记得重启 Ollama 服务 或者 重新启动你的 命令提示符 (CMD) 或 PowerShell 窗口，才能让新的环境变量生效。</p></blockquote><h2 id="模型库及下载使用"><a href="#模型库及下载使用" class="headerlink" title="模型库及下载使用"></a>模型库及下载使用</h2><p>模型库地址：<a href="https://ollama.com/library">https://ollama.com/library</a><br>找到想要的模型直接启动，我这里选择了<a href="https://ollama.com/library/qwen2.5-coder">qwen2.5-coder</a> ，因为跑模型的电脑配置摆在这里，所以这里测试qwen2.5-coder:3b和7b的模型。<br>启动命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ollama run qwen2.5-coder:3b</span><br><span class="line"></span><br><span class="line">ollama run qwen2.5-coder:7b</span><br></pre></td></tr></table></figure><p><img src="/postsImages/2026/ollama-opencode/5.png" alt="ollamaAndOpencode5"></p><p>顺便我们也测试下Tokens<br><img src="/postsImages/2026/ollama-opencode/6.png" alt="ollamaAndOpencode6"><br><img src="/postsImages/2026/ollama-opencode/7.png" alt="ollamaAndOpencode7"></p><h2 id="OpenCode安装及使用"><a href="#OpenCode安装及使用" class="headerlink" title="OpenCode安装及使用"></a>OpenCode安装及使用</h2><p>回到Mac，先下载OpenCode，下载地址：<a href="https://opencode.ai/zh/download">https://opencode.ai/zh/download</a><br>我这里下载的桌面版，点击左下角齿轮设置图标，进入设置窗口点击供应商，选择自定义提供商。<br><img src="/postsImages/2026/ollama-opencode/8.png" alt="ollamaAndOpencode8"></p><blockquote><p>供应商ID：随意填写<br>显示名称：随意填写<br>基础URL：<a href="http://10.67.181.146:11434/v1">http://10.67.181.146:11434/v1</a><br>模型model-id：qwen2.5-coder:3b<br>模型显示名称：随意填写</p></blockquote><p>基础URL中的IP和端口根据自身情况填写，模型model-id填写Ollama中使用的，可输入 <code>ollama list</code> 查看。</p><p>在OpenCode中选择自己的模型使用即可。<br><img src="/postsImages/2026/ollama-opencode/9.png" alt="ollamaAndOpencode9"><br>当然，这只是示例，这是代码生成模型，不是函数调用模型。</p><p>来玩一下适配的instruct版本试试： <code>qwen2.5:7b-instruct-q4_k_m</code><br><img src="/postsImages/2026/ollama-opencode/10.png" alt="ollamaAndOpencode10"><br><img src="/postsImages/2026/ollama-opencode/11.png" alt="ollamaAndOpencode11"><br><img src="/postsImages/2026/ollama-opencode/12.png" alt="ollamaAndOpencode12"></p><p>入坑完成，准备烧钱。hhh~</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;AI时代来了？尝试下本地部署大模型进行代码编写。&lt;br&gt;&lt;img src=&quot;/postsImages/2026/ollama-opencode/1.jpg&quot; alt=&quot;ollamaAndOpencode1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="OpenCode" scheme="https://www.meng.me/tags/OpenCode/"/>
    
    <category term="Ollama" scheme="https://www.meng.me/tags/Ollama/"/>
    
  </entry>
  
  <entry>
    <title>重塑标识 · mGod</title>
    <link href="https://www.meng.me/posts/41187.html"/>
    <id>https://www.meng.me/posts/41187.html</id>
    <published>2025-09-28T04:00:00.000Z</published>
    <updated>2025-09-28T06:00:26.960Z</updated>
    
    <content type="html"><![CDATA[<p>名字更新为：mGod，更简洁。同时做了一些优化～<br><img src="/postsImages/2025/name_mGod/1.png" alt="ubuntuInstruction1"></p><span id="more"></span><h2 id="重塑标识"><a href="#重塑标识" class="headerlink" title="重塑标识"></a>重塑标识</h2><p>原来的名字是 <code>mengGod</code> 到处都被使用了，注册东西很不方便，其实一直以来都在尝试，例如 <code>mengDot</code>，突发灵感想到简称 <code>mGod</code> ，发现还不错，而且一些地方没有被占用，如果有被占用的或者有最低6位限制的，就定义为 <code>mGodEx</code> ，加了个 <code>Ex</code> 的尾缀。</p><blockquote><p>mGod &#x2F; mengGod &#x2F; mengDot 均为个人网名，个人理解为：萌神。激励目标定位成功～</p></blockquote><h2 id="评论系统搬家"><a href="#评论系统搬家" class="headerlink" title="评论系统搬家"></a>评论系统搬家</h2><p>在25年，评论系统瘫痪了几个月，因为waline数据源在LeanCloud，还需要搭建服务端，然后博客再去调用服务端。其实我觉得挺麻烦的，准备直接用github Discussions的，但是github在没有魔法的情况下大家也知道，迫不得已放弃了。<br>原来的waline服务端一直在自己服务器上，但是搬迁到了新购买的服务器后出现了故障，因为25年私事公事都挺多的，就一直没去处理，导致了长时间的瘫痪。现在丢三方平台了，速度我这里测试是正常的，如果最后不满意，还是会放弃waline，再选择其他评论系统。</p><h2 id="card卡片更新"><a href="#card卡片更新" class="headerlink" title="card卡片更新"></a>card卡片更新</h2><p>博客头部是有头像的，但是在card上又配置了头像，在文章页还好，在首页默认显示“关于我”的card，两个头像看得实在是不顺眼了，重新编排了一下card卡片，现在更加合理了。</p><h2 id="放弃域名邮箱"><a href="#放弃域名邮箱" class="headerlink" title="放弃域名邮箱"></a>放弃域名邮箱</h2><p><a href="mailto:&#x6d;&#x65;&#x40;&#x6d;&#x65;&#110;&#103;&#46;&#109;&#101;">&#x6d;&#x65;&#x40;&#x6d;&#x65;&#110;&#103;&#46;&#109;&#101;</a> 域名邮箱的托管让我疲惫不堪，虽然服务器都是按年购入的，但是无论是性能还是带宽问题导致自己经常更换服务器。<br>选择第三方的托管限制太多，也影响@记录的301，虽然最终通过自动递归展平去解决了这个问题，但是不稳定性和未知性还是让我决定放弃域名邮箱。</p><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>其实这一年做了很多事，也写了一个“需要成长“的App，写了很多公共服务，也有了自己的Bot，统一了邮箱，还需要整理归档，待后续文章再记录。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;名字更新为：mGod，更简洁。同时做了一些优化～&lt;br&gt;&lt;img src=&quot;/postsImages/2025/name_mGod/1.png&quot; alt=&quot;ubuntuInstruction1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="hexo" scheme="https://www.meng.me/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>ubuntu常用命令记录</title>
    <link href="https://www.meng.me/posts/40433.html"/>
    <id>https://www.meng.me/posts/40433.html</id>
    <published>2024-11-22T03:14:22.000Z</published>
    <updated>2025-09-28T03:12:29.400Z</updated>
    
    <content type="html"><![CDATA[<p>linux-ubuntu常用命令记录，需要在服务器上进行操作时偶尔会忘记一些命令，将一些常用命令记录存档～<br><img src="/postsImages/2024/linux_instruction/firstMap.jpg" alt="ubuntuInstruction1"></p><span id="more"></span><h2 id="创建系统服务"><a href="#创建系统服务" class="headerlink" title="创建系统服务"></a>创建系统服务</h2><p>1、在目录 <code>/etc/systemd/system</code> 下创建service文件，例如A服务： <code>sudo vim A.service</code><br>2、文件内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description=A Service</span><br><span class="line">Requires=A.service</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">Type=simple</span><br><span class="line">ExecStart=/usr/bin/java -jar /mnt/java/A/A-0.0.1-SNAPSHOT.jar</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure><p>3、保存后使用 <code>sudo systemctl daemon-reload</code> 更新配置。<br>4、设置开机自启： <code>sudo systemctl enable xxx.service</code><br>5、实时查看日志：<code>sudo journalctl -f -u A.service</code><br>6、删除服务：</p><ul><li>禁用开机自启：<code>sudo systemctl disable A.service</code></li><li>停止服务：<code>sudo systemctl stop A.service</code></li><li>删除服务文件：<code>sudo rm /etc/systemd/system/A.service</code></li><li>重载配置：<code>sudo systemctl daemon-reload</code></li></ul><h2 id="服务常用命令"><a href="#服务常用命令" class="headerlink" title="服务常用命令"></a>服务常用命令</h2><p>1、查看服务状态：<code>sudo systemctl status A.service</code></p><blockquote><p>常用可替换：<code>start</code>、<code>stop</code>、<code>restart</code><br>2、日志相关：</p></blockquote><ul><li>查看实时日志：<code>sudo journalctl -f -u A.service</code></li><li>根据时间段查看日志：<code>sudo journalctl -u nudtserver --since &quot;2024-11-20 00:00:00&quot; --until &quot;2024-11-20 12:00:00&quot;</code></li><li>根据关键词查看日志：<code>sudo journalctl -u nudtserver | grep &quot;我是关键词&quot;</code></li><li>根据关键词且匹配上下5行查看日志：<code>sudo journalctl -u nudtserver | grep -C 5 &quot;我是关键词&quot;</code></li><li>根据时间段及关键词查看日志：<code>sudo journalctl -u nudtserver --since &quot;2024-11-20 00: 00:00&quot; --until &quot;2024-11-20 12: 00:00&quot;  | grep &quot;我是关键词&quot;</code></li></ul><h2 id="待补充"><a href="#待补充" class="headerlink" title="待补充"></a>待补充</h2><p>…</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;linux-ubuntu常用命令记录，需要在服务器上进行操作时偶尔会忘记一些命令，将一些常用命令记录存档～&lt;br&gt;&lt;img src=&quot;/postsImages/2024/linux_instruction/firstMap.jpg&quot; alt=&quot;ubuntuInstruction1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="ubuntu" scheme="https://www.meng.me/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>hexo升级指南</title>
    <link href="https://www.meng.me/posts/60773.html"/>
    <id>https://www.meng.me/posts/60773.html</id>
    <published>2024-04-29T12:13:47.000Z</published>
    <updated>2024-11-22T03:15:06.660Z</updated>
    
    <content type="html"><![CDATA[<p>好久没写博客了，24年都呆在保密单位上班，现在暂时闲下来发现hexo版本都到7.x了，我的还停留在5.x，更新一波～<br><img src="/postsImages/2024/update_hexo/updateHexo1.jpg" alt="updateHexo1"></p><span id="more"></span><h2 id="查看hexo版本"><a href="#查看hexo版本" class="headerlink" title="查看hexo版本"></a>查看hexo版本</h2><p>使用命令：<code>hexo version</code><br><img src="/postsImages/2024/update_hexo/updateHexo2.jpg" alt="updateHexo2"></p><blockquote><p>可以看到，当前我的hexo版本还是5.4.2，因为经常使用nodeJs等，所以不对nodeJs更新进行记录了，推荐使用nvm，挺好用的～</p></blockquote><h2 id="更新hexo"><a href="#更新hexo" class="headerlink" title="更新hexo"></a>更新hexo</h2><p>1、全局升级hexo-cli：使用命令：<code>npm install -g hexo-cli</code><br>2、使用npm-check查看插件升级<br>提示：<code>zsh: command not found: npm-upgrade</code>说明没安装，安装命令：<code>npm install -g npm-check</code><br>安装了使用命令：<code>npm-check</code><br><img src="/postsImages/2024/update_hexo/updateHexo3.jpg" alt="updateHexo3"><br>最后它会提示：<code>Use npm-check -u for interactive update.</code>进行更新。<br>3、使用npm-upgrade升级相关插件<br>同样的，如果没安装就先安装，安装命令：<code>npm install -g npm-upgrade</code><br>安装了使用命令：<code>npm-upgrade</code><br><img src="/postsImages/2024/update_hexo/updateHexo4.jpg" alt="updateHexo4"><br>它会列出你需要更新的列表，从哪个版本更新到哪个版本，如果同意选择yes即可。<br>更新完了或者没有新版本会提示：<code>All dependencies are up-to-date!</code></p><h2 id="更新检查"><a href="#更新检查" class="headerlink" title="更新检查"></a>更新检查</h2><p>这个就简单了，直接运行看看页面、功能等是不是正常的就行了。<br>1、先清理下hexo数据：<code>hexo clean</code><br>2、重新生成下页面：<code>hexo g -s</code><br>3、如果没问题就可以推送了：<code>hexo d</code></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;好久没写博客了，24年都呆在保密单位上班，现在暂时闲下来发现hexo版本都到7.x了，我的还停留在5.x，更新一波～&lt;br&gt;&lt;img src=&quot;/postsImages/2024/update_hexo/updateHexo1.jpg&quot; alt=&quot;updateHexo1&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="hexo" scheme="https://www.meng.me/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>Thingsboard网关开发笔记</title>
    <link href="https://www.meng.me/posts/53523.html"/>
    <id>https://www.meng.me/posts/53523.html</id>
    <published>2024-01-17T04:00:00.000Z</published>
    <updated>2025-09-28T09:42:55.010Z</updated>
    
    <content type="html"><![CDATA[<p>主要内容为网关创建、网关绑定设备自动注入、网关绑定设备数据上报、网关绑定设备数据订阅，单个设备数据上报。关联点为mqtt上报订阅主题等。<br><img src="/postsImages/thingsboardBuild/buildSuccess.jpg" alt="image"></p><span id="more"></span><blockquote><p>在正常的步骤中，服务只需要连接网关即可完成数据上报、订阅的操作，而不是连接每一个设备去进行上报。</p></blockquote><h3 id="一、网关创建"><a href="#一、网关创建" class="headerlink" title="一、网关创建"></a>一、网关创建</h3><p>1、登陆thingsboard租户管理员。<br>2、点击菜单：“实体”-&gt; “设备”，创建新设备。<br>3、输入名称、勾选是否网关，进入下一步<br>4、勾选“添加凭据”，类型选择<code>MQTT Basic</code>。<br>5、输入ID、用户名、密码。</p><h3 id="二、绑定设备自动注入"><a href="#二、绑定设备自动注入" class="headerlink" title="二、绑定设备自动注入"></a>二、绑定设备自动注入</h3><p>本步骤称为初始化，建议做成方法，在每次启动程序都调用此方法。初始化也是自动注入\创建设备的过程，如果设备已存在，将只进行初始化步骤。<br>1、连接mqtt网关，id、用户名、密码为创建网关时自己填写的数据。<br>2、编写自己的业务代码，拿到所有需要管理的设备名。<br>3、初始化设备，订阅主题：<code>v1/gateway/connect</code><br>4、例如，你将带设备名的设备列表保存在deviceCredentials中，以下为举例：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (String name : deviceCredentials) &#123;  </span><br><span class="line">  <span class="type">JSONObject</span> <span class="variable">msg</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">JSONObject</span>();  </span><br><span class="line">  msg.put(<span class="string">&quot;device&quot;</span>,name);  </span><br><span class="line">  mqttClient.publish(<span class="string">&quot;v1/gateway/connect&quot;</span>, String.valueOf(msg).getBytes(), <span class="number">0</span>, <span class="literal">false</span>);();  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>msg对应json： <code>&#123;&quot;device&quot;:&quot;设备名xxx&quot;&#125;</code><br>5、publish之后，设备将完成初始化，未创建的设备将自动完成创建，并关联到你的网关，方便后续的数据上报和订阅。</p><h3 id="三、绑定设备数据上报"><a href="#三、绑定设备数据上报" class="headerlink" title="三、绑定设备数据上报"></a>三、绑定设备数据上报</h3><p>1、订阅主题为：<code>v1/gateway/telemetry</code><br>2、假如上报<code>key：online，value：1</code>，以下为举例：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (String name : deviceCredentials) &#123;  </span><br><span class="line">  <span class="type">JSONObject</span> <span class="variable">msg</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">JSONObject</span>();  </span><br><span class="line">  <span class="type">JSONArray</span> <span class="variable">nameArray</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">JSONArray</span>();  </span><br><span class="line">  <span class="type">JSONObject</span> <span class="variable">nameObject</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">JSONObject</span>();  </span><br><span class="line">  nameObject.put(<span class="string">&quot;online&quot;</span>, <span class="number">1</span>);  </span><br><span class="line">  nameArray.put(nameObject);  </span><br><span class="line">  msg.put(name, nameArray);  </span><br><span class="line">  mqttClient.publish(topic, String.valueOf(msg).getBytes(), <span class="number">0</span>, <span class="literal">false</span>);  </span><br><span class="line">&#125;  </span><br></pre></td></tr></table></figure><p>msg对应json：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;  </span><br><span class="line">  <span class="string">&quot;设备名xxx&quot;</span>: [&#123; <span class="string">&quot;online&quot;</span>: <span class="number">1</span>&#125;]  </span><br><span class="line">&#125;  </span><br></pre></td></tr></table></figure><p>3、你可以通过以上方式，批量上报设备遥测，只需要连接你的网关即可，不需要对每个设备进行连接。</p><h3 id="四、绑定设备数据订阅"><a href="#四、绑定设备数据订阅" class="headerlink" title="四、绑定设备数据订阅"></a>四、绑定设备数据订阅</h3><p>此方式就是双向rpc响应！</p><p>1、订阅主题为：<code>v1/gateway/rpc</code><br>2、假如你使用MqttClient与网关建立连接，你只需要订阅即可得到rpc数据回传。<br><code>mqttClient.subscribe(&quot;v1/gateway/rpc&quot;);</code></p><p>3、对此，我们创建一个回调类来得到回传的数据：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">MqttMessageHandler</span> <span class="keyword">implements</span> <span class="title class_">MqttCallback</span> &#123;  </span><br><span class="line">  </span><br><span class="line">    <span class="meta">@Override</span>  </span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">connectionLost</span><span class="params">(Throwable cause)</span> &#123;  </span><br><span class="line">        <span class="comment">// 处理连接丢失的情况  </span></span><br><span class="line">    &#125;  </span><br><span class="line">  </span><br><span class="line">    <span class="meta">@Override</span>  </span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">messageArrived</span><span class="params">(String topic, MqttMessage message)</span> &#123;  </span><br><span class="line">        <span class="comment">// 处理接收到的订阅消息  </span></span><br><span class="line">        System.out.println(<span class="string">&quot;收到订阅消息：&quot;</span> + <span class="keyword">new</span> <span class="title class_">String</span>(message.getPayload()));  </span><br><span class="line">        <span class="comment">// 在这里添加处理订阅消息的代码  </span></span><br><span class="line">    &#125;  </span><br><span class="line">  </span><br><span class="line">    <span class="meta">@Override</span>  </span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">deliveryComplete</span><span class="params">(IMqttDeliveryToken token)</span> &#123;  </span><br><span class="line">        <span class="comment">// 处理消息传递完成的情况  </span></span><br><span class="line">    &#125;  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="五、单个设备数据上报"><a href="#五、单个设备数据上报" class="headerlink" title="五、单个设备数据上报"></a>五、单个设备数据上报</h3><p>单个设备上报，没有任何关联性要求，不需要绑定你的网关。<br>1、创建mqtt连接，用户名为设备的访问令牌，你可以在thingsboard中选择设备-&gt; 复制访问令牌，密码为空。<br>2、订阅主题：<code>v1/devices/me/telemetry</code><br>3、内容：<code>&#123; &quot;online&quot;: 0 &#125;</code><br>到此就完成了单个设备的数据上报，同时，此种方式无法获得回传数据，建议在测试或临时需要时使用，正式的方式还是推荐通过网关进行设备控制。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;主要内容为网关创建、网关绑定设备自动注入、网关绑定设备数据上报、网关绑定设备数据订阅，单个设备数据上报。关联点为mqtt上报订阅主题等。&lt;br&gt;&lt;img src=&quot;/postsImages/thingsboardBuild/buildSuccess.jpg&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="thingsboard" scheme="https://www.meng.me/tags/thingsboard/"/>
    
  </entry>
  
  <entry>
    <title>Mac M1 build Thingsboard</title>
    <link href="https://www.meng.me/posts/31755.html"/>
    <id>https://www.meng.me/posts/31755.html</id>
    <published>2023-07-29T07:42:52.000Z</published>
    <updated>2023-07-29T08:17:16.160Z</updated>
    
    <content type="html"><![CDATA[<p>mac m1编译thingsboard过程记录，虽说是mac m1为示例机器，但是windows也是一样的道理，只是架构部分不同。<br>本机环境：JAVA：11、MAVEN3、NODE：18、YARN：1.22.19<br><img src="/postsImages/thingsboardBuild/buildSuccess.jpg" alt="image"></p><span id="more"></span><h2 id="拉取代码"><a href="#拉取代码" class="headerlink" title="拉取代码"></a>拉取代码</h2><p>github地址：<a href="https://github.com/thingsboard/thingsboard">https://github.com/thingsboard/thingsboard</a></p><h2 id="修改文件"><a href="#修改文件" class="headerlink" title="修改文件"></a>修改文件</h2><h3 id="根目录下pom-xml"><a href="#根目录下pom-xml" class="headerlink" title="根目录下pom.xml"></a>根目录下pom.xml</h3><p>1、 文件内搜索：<code>$&#123;os.detected.classifier&#125;</code>，出现三处位置，将其更改为：<code>osx-aarch_64</code>。<br>2、 文件内搜索：<code>com.mycila</code>，出现两处位置，将其完整注释，具体注释内容如下：</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">plugin</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>com.mycila<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>license-maven-plugin<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">version</span>&gt;</span>3.0<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">configuration</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;<span class="name">header</span>&gt;</span>$&#123;main.dir&#125;/license-header-template.txt<span class="tag">&lt;/<span class="name">header</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;<span class="name">properties</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">owner</span>&gt;</span>The Thingsboard Authors<span class="tag">&lt;/<span class="name">owner</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;/<span class="name">properties</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;<span class="name">excludes</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.env<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.env<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.eslintrc<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.babelrc<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.jshintrc<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.gradle/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/nightwatch<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/README<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/LICENSE<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/banner.txt<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>node_modules/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.properties<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/test/resources/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/vendor/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/font/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/sh/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>packaging/*/scripts/control/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>packaging/*/scripts/windows/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>packaging/*/scripts/init/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.log<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.current<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>.instance_id<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/main/scripts/control/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/main/scripts/windows/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>src/main/resources/public/static/rulenode/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.proto.js<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>docker/haproxy/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>docker/tb-node/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>ui/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.browserslistrc<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/yarn.lock<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.yarnrc<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/.angular/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.raw<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/*.patch<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/apache/cassandra/io/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>.run/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/NetworkReceive.java<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">exclude</span>&gt;</span>**/lwm2m-registry/**<span class="tag">&lt;/<span class="name">exclude</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;/<span class="name">excludes</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;<span class="name">mapping</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">proto</span>&gt;</span>JAVADOC_STYLE<span class="tag">&lt;/<span class="name">proto</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">cql</span>&gt;</span>DOUBLEDASHES_STYLE<span class="tag">&lt;/<span class="name">cql</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">scss</span>&gt;</span>JAVADOC_STYLE<span class="tag">&lt;/<span class="name">scss</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">jsx</span>&gt;</span>SLASHSTAR_STYLE<span class="tag">&lt;/<span class="name">jsx</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">tsx</span>&gt;</span>SLASHSTAR_STYLE<span class="tag">&lt;/<span class="name">tsx</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">conf</span>&gt;</span>SCRIPT_STYLE<span class="tag">&lt;/<span class="name">conf</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">gradle</span>&gt;</span>JAVADOC_STYLE<span class="tag">&lt;/<span class="name">gradle</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;/<span class="name">mapping</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;/<span class="name">configuration</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">executions</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;<span class="name">execution</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;<span class="name">goals</span>&gt;</span></span><br><span class="line">                                <span class="tag">&lt;<span class="name">goal</span>&gt;</span>check<span class="tag">&lt;/<span class="name">goal</span>&gt;</span></span><br><span class="line">                            <span class="tag">&lt;/<span class="name">goals</span>&gt;</span></span><br><span class="line">                        <span class="tag">&lt;/<span class="name">execution</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;/<span class="name">executions</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;/<span class="name">plugin</span>&gt;</span></span><br></pre></td></tr></table></figure><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">plugins</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">plugin</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>com.mycila<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>license-maven-plugin<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">plugin</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">plugins</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="node和yarn版本"><a href="#node和yarn版本" class="headerlink" title="node和yarn版本"></a>node和yarn版本</h3><p>全局搜索<code>nodeVersion</code>，将<code>nodeVersion</code>和<code>yarnVersion</code>更改为自己电脑的版本。<br><code>node -v</code>、<code>yarn -v</code></p><h2 id="设置node、yarn镜像源"><a href="#设置node、yarn镜像源" class="headerlink" title="设置node、yarn镜像源"></a>设置node、yarn镜像源</h2><p><code>npm config set registry registry.npm.taobao.org</code><br><code>yarn config set registry registry.npm.taobao.org</code></p><h2 id="install-ui-ngx"><a href="#install-ui-ngx" class="headerlink" title="install ui-ngx"></a>install ui-ngx</h2><p><code>cd ui-ngx</code><br><code>yarn install</code></p><h2 id="开始编译"><a href="#开始编译" class="headerlink" title="开始编译"></a>开始编译</h2><p><code>mvn install -Dmaven.test.skip=true</code></p><ul><li>ps：这是跳过测试的，所以截止这一步不需要搭建postgres、kafka等。</li></ul><h2 id="遇到的问题"><a href="#遇到的问题" class="headerlink" title="遇到的问题"></a>遇到的问题</h2><ul><li>直接上报错代码，更加直观。</li></ul><h3 id="错误一："><a href="#错误一：" class="headerlink" title="错误一："></a>错误一：</h3><p><code>The following artifacts could not be resolved: org.thingsboard:dao:jar:tests:3.5.1-SNAPSHOT (absent):</code></p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Reactor Summary for Thingsboard 3.5.1-SNAPSHOT:</span><br><span class="line">[INFO] </span><br><span class="line">[INFO] Thingsboard ........................................ SUCCESS [  0.113 s]</span><br><span class="line">[INFO] Netty MQTT Client .................................. SUCCESS [  0.450 s]</span><br><span class="line">[INFO] Thingsboard Server Commons ......................... SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Server Common Data ..................... SUCCESS [  0.489 s]</span><br><span class="line">[INFO] Thingsboard Server Common Utils .................... SUCCESS [  0.032 s]</span><br><span class="line">[INFO] Thingsboard Server Common Messages ................. SUCCESS [  2.516 s]</span><br><span class="line">[INFO] Thingsboard Actor system ........................... SUCCESS [  0.327 s]</span><br><span class="line">[INFO] Thingsboard Server Stats ........................... SUCCESS [  0.209 s]</span><br><span class="line">[INFO] Thingsboard Server Common Cluster API .............. SUCCESS [  6.500 s]</span><br><span class="line">[INFO] Thingsboard Server Queue components ................ SUCCESS [  1.521 s]</span><br><span class="line">[INFO] Thingsboard Server Common Cache .................... SUCCESS [  0.419 s]</span><br><span class="line">[INFO] Thingsboard Server Commons ......................... SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Server Common Transport components ..... SUCCESS [  2.013 s]</span><br><span class="line">[INFO] Thingsboard MQTT Transport Common .................. SUCCESS [  2.019 s]</span><br><span class="line">[INFO] Thingsboard HTTP Transport Common .................. SUCCESS [  0.313 s]</span><br><span class="line">[INFO] Thingsboard CoAP server ............................ SUCCESS [  0.384 s]</span><br><span class="line">[INFO] Thingsboard CoAP Transport Common .................. SUCCESS [  2.295 s]</span><br><span class="line">[INFO] Thingsboard LwM2M Transport Common ................. SUCCESS [  1.273 s]</span><br><span class="line">[INFO] Thingsboard SNMP Transport Common .................. SUCCESS [  0.383 s]</span><br><span class="line">[INFO] Thingsboard Server Common DAO API .................. SUCCESS [  0.573 s]</span><br><span class="line">[INFO] Thingsboard Server Remote Edge wrapper ............. SUCCESS [  2.972 s]</span><br><span class="line">[INFO] Thingsboard Server Version Control API ............. SUCCESS [  0.529 s]</span><br><span class="line">[INFO] Thingsboard Script Invoke Commons .................. SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Server Script invoke API ............... SUCCESS [  0.327 s]</span><br><span class="line">[INFO] Thingsboard Extensions ............................. SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Rule Engine API ........................ SUCCESS [  0.378 s]</span><br><span class="line">[INFO] Thingsboard Server JS Client for remote JS execution SUCCESS [  0.341 s]</span><br><span class="line">[INFO] Thingsboard Server DAO Layer ....................... SUCCESS [  3.426 s]</span><br><span class="line">[INFO] Thingsboard Rule Engine Components ................. SUCCESS [  1.949 s]</span><br><span class="line">[INFO] Thingsboard Server Transport Modules ............... SUCCESS [  0.002 s]</span><br><span class="line">[INFO] Thingsboard HTTP Transport Service ................. SUCCESS [ 44.298 s]</span><br><span class="line">[INFO] Thingsboard MQTT Transport Service ................. SUCCESS [ 16.300 s]</span><br><span class="line">[INFO] Thingsboard CoAP Transport Service ................. SUCCESS [ 15.375 s]</span><br><span class="line">[INFO] Thingsboard LwM2m Transport Service ................ SUCCESS [ 15.761 s]</span><br><span class="line">[INFO] Thingsboard SNMP Transport Service ................. SUCCESS [ 15.268 s]</span><br><span class="line">[INFO] ThingsBoard Server UI .............................. SUCCESS [02:02 min]</span><br><span class="line">[INFO] Thingsboard Server Tools ........................... SUCCESS [  0.451 s]</span><br><span class="line">[INFO] Thingsboard Rest Client ............................ SUCCESS [  0.579 s]</span><br><span class="line">[INFO] ThingsBoard Server Application ..................... FAILURE [  6.288 s]</span><br><span class="line">[INFO] ThingsBoard Microservices .......................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Docker Images .......................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Web UI Microservice .................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Version Control Executor ............... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Version Control Executor Microservice .. SKIPPED</span><br><span class="line">[INFO] ThingsBoard Node Microservice ...................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Transport Microservices ................ SKIPPED</span><br><span class="line">[INFO] ThingsBoard MQTT Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard HTTP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard COAP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard LWM2M Transport Microservice ........... SKIPPED</span><br><span class="line">[INFO] ThingsBoard SNMP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard JavaScript Executor Microservice ....... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Monitoring Service ..................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Monitoring Microservice ................ SKIPPED</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] BUILD FAILURE</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Total time:  04:28 min</span><br><span class="line">[INFO] Finished at: 2023-07-29T13:54:44+08:00</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[ERROR] Failed to execute goal on project application: Could not resolve dependencies for project org.thingsboard:application:jar:3.5.1-SNAPSHOT: The following artifacts could not be resolved: org.thingsboard:dao:jar:tests:3.5.1-SNAPSHOT (absent): Could not find artifact org.thingsboard:dao:jar:tests:3.5.1-SNAPSHOT in taobao (https://maven.aliyun.com/repository/public) -&gt; [Help 1]</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.</span><br><span class="line">[ERROR] Re-run Maven using the -X switch to enable full debug logging.</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] For more information about the errors and possible solutions, please read the following articles:</span><br><span class="line">[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] After correcting the problems, you can resume the build with the command</span><br><span class="line">[ERROR]   mvn &lt;args&gt; -rf :application</span><br><span class="line"></span><br><span class="line">Process finished with exit code 1</span><br></pre></td></tr></table></figure><p>解决方案：<br>前往<a href="https://repo.thingsboard.io/artifactory/libs-release-public/org/thingsboard/dao/3.5.1/">https://repo.thingsboard.io/artifactory/libs-release-public/org/thingsboard/dao/3.5.1/</a> 下载所需的包（注意版本），放到自己本地仓库下：<br><your maven repo>&#x2F;org&#x2F;thingsboard&#x2F;dao&#x2F;xxx&#x2F;</p><h3 id="错误二"><a href="#错误二" class="headerlink" title="错误二"></a>错误二</h3><p><code>Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn pkg) on project web-ui: Failed to run task: &#39;yarn run pkg&#39; failed. </code></p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br></pre></td><td class="code"><pre><span class="line">[INFO] &gt; Error! Not able to build for &#x27;linux&#x27; here, only for &#x27;macos&#x27;</span><br><span class="line">[INFO] error Command failed with exit code 2.</span><br><span class="line">[INFO] error Command failed with exit code 2.info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Reactor Summary for Thingsboard 3.5.1-SNAPSHOT:</span><br><span class="line">[INFO] </span><br><span class="line">[INFO] Thingsboard ........................................ SUCCESS [  0.156 s]</span><br><span class="line">[INFO] Netty MQTT Client .................................. SUCCESS [  0.682 s]</span><br><span class="line">[INFO] Thingsboard Server Commons ......................... SUCCESS [  0.005 s]</span><br><span class="line">[INFO] Thingsboard Server Common Data ..................... SUCCESS [  0.586 s]</span><br><span class="line">[INFO] Thingsboard Server Common Utils .................... SUCCESS [  0.034 s]</span><br><span class="line">[INFO] Thingsboard Server Common Messages ................. SUCCESS [  1.992 s]</span><br><span class="line">[INFO] Thingsboard Actor system ........................... SUCCESS [  0.035 s]</span><br><span class="line">[INFO] Thingsboard Server Stats ........................... SUCCESS [  0.045 s]</span><br><span class="line">[INFO] Thingsboard Server Common Cluster API .............. SUCCESS [  6.209 s]</span><br><span class="line">[INFO] Thingsboard Server Queue components ................ SUCCESS [  0.334 s]</span><br><span class="line">[INFO] Thingsboard Server Common Cache .................... SUCCESS [  0.038 s]</span><br><span class="line">[INFO] Thingsboard Server Commons ......................... SUCCESS [  0.002 s]</span><br><span class="line">[INFO] Thingsboard Server Common Transport components ..... SUCCESS [  1.797 s]</span><br><span class="line">[INFO] Thingsboard MQTT Transport Common .................. SUCCESS [  1.965 s]</span><br><span class="line">[INFO] Thingsboard HTTP Transport Common .................. SUCCESS [  0.071 s]</span><br><span class="line">[INFO] Thingsboard CoAP server ............................ SUCCESS [  0.050 s]</span><br><span class="line">[INFO] Thingsboard CoAP Transport Common .................. SUCCESS [  0.883 s]</span><br><span class="line">[INFO] Thingsboard LwM2M Transport Common ................. SUCCESS [  0.095 s]</span><br><span class="line">[INFO] Thingsboard SNMP Transport Common .................. SUCCESS [  0.053 s]</span><br><span class="line">[INFO] Thingsboard Server Common DAO API .................. SUCCESS [  0.069 s]</span><br><span class="line">[INFO] Thingsboard Server Remote Edge wrapper ............. SUCCESS [  2.583 s]</span><br><span class="line">[INFO] Thingsboard Server Version Control API ............. SUCCESS [  0.057 s]</span><br><span class="line">[INFO] Thingsboard Script Invoke Commons .................. SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Server Script invoke API ............... SUCCESS [  0.031 s]</span><br><span class="line">[INFO] Thingsboard Extensions ............................. SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard Rule Engine API ........................ SUCCESS [  0.047 s]</span><br><span class="line">[INFO] Thingsboard Server JS Client for remote JS execution SUCCESS [  0.057 s]</span><br><span class="line">[INFO] Thingsboard Server DAO Layer ....................... SUCCESS [  0.279 s]</span><br><span class="line">[INFO] Thingsboard Rule Engine Components ................. SUCCESS [  0.482 s]</span><br><span class="line">[INFO] Thingsboard Server Transport Modules ............... SUCCESS [  0.003 s]</span><br><span class="line">[INFO] Thingsboard HTTP Transport Service ................. SUCCESS [ 16.460 s]</span><br><span class="line">[INFO] Thingsboard MQTT Transport Service ................. SUCCESS [ 16.444 s]</span><br><span class="line">[INFO] Thingsboard CoAP Transport Service ................. SUCCESS [ 15.747 s]</span><br><span class="line">[INFO] Thingsboard LwM2m Transport Service ................ SUCCESS [ 15.983 s]</span><br><span class="line">[INFO] Thingsboard SNMP Transport Service ................. SUCCESS [ 15.843 s]</span><br><span class="line">[INFO] ThingsBoard Server UI .............................. SUCCESS [ 40.597 s]</span><br><span class="line">[INFO] Thingsboard Server Tools ........................... SUCCESS [  0.103 s]</span><br><span class="line">[INFO] Thingsboard Rest Client ............................ SUCCESS [  0.033 s]</span><br><span class="line">[INFO] ThingsBoard Server Application ..................... SUCCESS [ 36.036 s]</span><br><span class="line">[INFO] ThingsBoard Microservices .......................... SUCCESS [  0.078 s]</span><br><span class="line">[INFO] ThingsBoard Docker Images .......................... SUCCESS [  0.825 s]</span><br><span class="line">[INFO] ThingsBoard Web UI Microservice .................... FAILURE [02:23 min]</span><br><span class="line">[INFO] ThingsBoard Version Control Executor ............... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Version Control Executor Microservice .. SKIPPED</span><br><span class="line">[INFO] ThingsBoard Node Microservice ...................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Transport Microservices ................ SKIPPED</span><br><span class="line">[INFO] ThingsBoard MQTT Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard HTTP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard COAP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard LWM2M Transport Microservice ........... SKIPPED</span><br><span class="line">[INFO] ThingsBoard SNMP Transport Microservice ............ SKIPPED</span><br><span class="line">[INFO] ThingsBoard JavaScript Executor Microservice ....... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Monitoring Service ..................... SKIPPED</span><br><span class="line">[INFO] ThingsBoard Monitoring Microservice ................ SKIPPED</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] BUILD FAILURE</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Total time:  05:20 min</span><br><span class="line">[INFO] Finished at: 2023-07-29T14:16:19+08:00</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn pkg) on project web-ui: Failed to run task: &#x27;yarn run pkg&#x27; failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 2 (Exit value: 2) -&gt; [Help 1]</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.</span><br><span class="line">[ERROR] Re-run Maven using the -X switch to enable full debug logging.</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] For more information about the errors and possible solutions, please read the following articles:</span><br><span class="line">[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException</span><br><span class="line">[ERROR] </span><br><span class="line">[ERROR] After correcting the problems, you can resume the build with the command</span><br><span class="line">[ERROR]   mvn &lt;args&gt; -rf :web-ui</span><br><span class="line"></span><br><span class="line">Process finished with exit code 1</span><br></pre></td></tr></table></figure><p>解决方案：<br>前往：<a href="https://github.com/vercel/pkg-fetch/releases">https://github.com/vercel/pkg-fetch/releases</a> 下载所需要的文件，放置在用户文件夹下：<br><user>&#x2F;.pkg-cache&#x2F;vxx&#x2F;，例如mac的位置为：&#x2F;Users&#x2F;meng&#x2F;.pkg-cache&#x2F;v3.4</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;mac m1编译thingsboard过程记录，虽说是mac m1为示例机器，但是windows也是一样的道理，只是架构部分不同。&lt;br&gt;本机环境：JAVA：11、MAVEN3、NODE：18、YARN：1.22.19&lt;br&gt;&lt;img src=&quot;/postsImages/thingsboardBuild/buildSuccess.jpg&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="thingsboard" scheme="https://www.meng.me/tags/thingsboard/"/>
    
  </entry>
  
  <entry>
    <title>Thingsboard笔记</title>
    <link href="https://www.meng.me/posts/41934.html"/>
    <id>https://www.meng.me/posts/41934.html</id>
    <published>2023-07-05T01:58:38.000Z</published>
    <updated>2023-07-05T02:02:46.000Z</updated>
    
    <content type="html"><![CDATA[<p>每次在编译前习惯性的看看教程，好了解整套流程以及避免一些坑，如果你是mac m1芯片，按网上教程需要修改 <code>com.google.protobuf</code> 的 <code>classifier</code> 为 <code>osx-x86_64</code><br>因为在老版本中 <code>protobuf</code> 不支持m1，但是现在已经支持，指定为 <code>osx-aarch_64</code> ，相关话题：<a href="https://github.com/thingsboard/thingsboard/pull/7442">github</a><br><img src="/postsImages/thingsboardNotes/protobuf.png" alt="image"></p><span id="more"></span><blockquote><p>因为之前编译并没有对过程进行记录，所以本篇不包含编译笔记，后续有机会再记录编译过程形成笔记。</p></blockquote><h2 id="仪表盘部件"><a href="#仪表盘部件" class="headerlink" title="仪表盘部件"></a>仪表盘部件</h2><p>设备接入后，在控制设备之前，利用部件可以简单易懂的控制设备，同时也能了解到设备的连接状态。</p><h3 id="新建仪表盘库"><a href="#新建仪表盘库" class="headerlink" title="新建仪表盘库"></a>新建仪表盘库</h3><p>没啥好讲的，无脑操作，输入名字add就行了。<br><img src="/postsImages/thingsboardNotes/thingsboardDashboard.png" alt="image"></p><h3 id="添加部件"><a href="#添加部件" class="headerlink" title="添加部件"></a>添加部件</h3><p>这里以灯光举例，我添加一个Round switch用来控制灯光。在添加时，需要创建一个alias，同时指定你需要操作的设备。<br><img src="/postsImages/thingsboardNotes/thingsboardDashboardSwitch.png" alt="image"></p><h3 id="设置参数"><a href="#设置参数" class="headerlink" title="设置参数"></a>设置参数</h3><p>在高级-数值设定中绑定设备的操作value。示例：<code>getValue_xxx</code>、<code>setValue_xxx</code>，可以看出，一个是获取，一个是写入。然后add即可。<br><img src="/postsImages/thingsboardNotes/thingsboardDashboardSwitch-1.png" alt="image"></p><h3 id="控制测试"><a href="#控制测试" class="headerlink" title="控制测试"></a>控制测试</h3><p>在这里，你就可以控制开关了。<br><img src="/postsImages/thingsboardNotes/thingsboardDashboardSwitch-2.png" alt="image"><br>其他部件同理。</p><h2 id="规则链"><a href="#规则链" class="headerlink" title="规则链"></a>规则链</h2><blockquote><p>基本的操作就不写了，记录一些我实现的操作链</p></blockquote><h2 id="联动控制"><a href="#联动控制" class="headerlink" title="联动控制"></a>联动控制</h2><blockquote><p>非ThingsBoard PE版</p></blockquote><h3 id="需求示例"><a href="#需求示例" class="headerlink" title="需求示例"></a>需求示例</h3><ul><li>现有设备A、B、C（设备A为摄像头，设备B、C假设为灯光、空调）</li><li>当A设备识别到有人时，打开B、C设备的开关（模拟人员进入）</li><li>当A设备未识别到有人时，关闭B、C设备开关（模拟人员离开）</li><li>PS：此处只记录A、B联动。</li></ul><h3 id="流程图（比较乱）"><a href="#流程图（比较乱）" class="headerlink" title="流程图（比较乱）"></a>流程图（比较乱）</h3><p><img src="/postsImages/thingsboardNotes/thingsboardRuleChain.png" alt="image"></p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>1 摄像头识别有人，data在<code>input</code>节点入（这是子链，主链有分流），通过<code>script</code>筛选器节点分流；<br>2 分支1（人员进入）<br>2.1 通过<code>change originator</code>节点进行发起者转换，换成B设备<br><img src="/postsImages/thingsboardNotes/thingsboardRuleChain-1.png" alt="image"></p><blockquote><p>注意，大多数name pattern 可以使用${}，用来指定元数据中的key</p></blockquote><p>2.2 通过<code>originator telemetry</code>获取B设备当前遥测（状态）<br><img src="/postsImages/thingsboardNotes/thingsboardRuleChain-2.png" alt="image"></p><p>2.3 通过<code>script</code>筛选器判断是否需要开灯，相关数据由2.2提供，例如：已经开灯就不执行开灯操作。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">var newLMS = metadata.LMS0101001SWS001 == &quot;\&quot;1\&quot;&quot;;</span><br><span class="line">return !newLMS;</span><br></pre></td></tr></table></figure><p>2.4 编写开灯的<code>script</code>变换节点</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">var newMsg = &#123;&#125;;</span><br><span class="line">newMsg.method = &quot;setValue_LMS0101001SWS001&quot;;</span><br><span class="line">newMsg.params = true;</span><br><span class="line">return &#123;msg: newMsg, metadata: metadata, msgType: msgType&#125;;</span><br></pre></td></tr></table></figure><p>2.5 执行RPC动作节点，响应2.4的脚本<br>3 分支2（人员离开）<br>3.1 编写js脚本</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">return &#123;msg: &#123;&quot;timestamp&quot;: Date.now()&#125;, metadata: metadata, msgType: &quot;POST_ATTRIBUTES_REQUEST&quot;&#125;;</span><br></pre></td></tr></table></figure><p>3.2 通过<code>save attributes</code>节点保存为属性<br>3.3 通过<code>delay (deprecated)</code>节点延时60秒（60秒后关灯）<br>3.4 通过<code>originator attributes</code>节点获取3.2保存的属性并写入元数据<br><img src="/postsImages/thingsboardNotes/thingsboardRuleChain-3.png" alt="image"></p><p>3.5 通过<code>change originator</code>节点进行发起者转换，换成B设备<br>3.6 通过<code>script</code>筛选器判断时间差是否符合关灯要求（因为识别到有人会一直请求规则链，所以3.2的操作会让这个时间保存为最新时间）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">var newTimestamp = Date.now() - msg.timestamp;</span><br><span class="line">var minutes = newTimestamp / 1000 / 60; // 将差值转换为分钟</span><br><span class="line">return minutes &gt;1;</span><br></pre></td></tr></table></figure><p><img src="/postsImages/thingsboardNotes/thingsboardRuleChain-4.png" alt="image"></p><p>3.7 编写关灯的<code>script</code>变换节点</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">var newMsg = &#123;&#125;;</span><br><span class="line">newMsg.method = &quot;setValue_LMS0101001SWS001&quot;;</span><br><span class="line">newMsg.params = false;</span><br><span class="line">return &#123;msg: newMsg, metadata: metadata, msgType: msgType&#125;;</span><br></pre></td></tr></table></figure><p>3.8 执行RPC动作节点，响应3.7的脚本</p><p>至此，就是整个联动控制实现思路，如果你有更好的办法，欢迎评论指点。</p><blockquote><p>未完待续…</p></blockquote>]]></content>
    
    
    <summary type="html">&lt;p&gt;每次在编译前习惯性的看看教程，好了解整套流程以及避免一些坑，如果你是mac m1芯片，按网上教程需要修改 &lt;code&gt;com.google.protobuf&lt;/code&gt; 的 &lt;code&gt;classifier&lt;/code&gt; 为 &lt;code&gt;osx-x86_64&lt;/code&gt;&lt;br&gt;因为在老版本中 &lt;code&gt;protobuf&lt;/code&gt; 不支持m1，但是现在已经支持，指定为 &lt;code&gt;osx-aarch_64&lt;/code&gt; ，相关话题：&lt;a href=&quot;https://github.com/thingsboard/thingsboard/pull/7442&quot;&gt;github&lt;/a&gt;&lt;br&gt;&lt;img src=&quot;/postsImages/thingsboardNotes/protobuf.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="thingsboard" scheme="https://www.meng.me/tags/thingsboard/"/>
    
  </entry>
  
  <entry>
    <title>2022年终总结</title>
    <link href="https://www.meng.me/posts/30587.html"/>
    <id>https://www.meng.me/posts/30587.html</id>
    <published>2023-01-21T16:00:00.000Z</published>
    <updated>2023-07-05T01:44:44.000Z</updated>
    
    <content type="html"><![CDATA[<p>时间过得真快～<br><img src="/postsImages/2022/nianzhong/2022zongjie-9-12.png" alt="image"></p><span id="more"></span><h2 id="🦠新冠疫情"><a href="#🦠新冠疫情" class="headerlink" title="🦠新冠疫情"></a>🦠新冠疫情</h2><p>新冠疫情开始于2019年，在2022年12月5日宣布放开，通信行程卡于2022年12月13日0时正式下线。<br><img src="/postsImages/2022/nianzhong/2022zongjie-1.png" alt="image"><br>疫情初期的恐慌还历历在目，随着感染人数的暴增，口罩等防疫物品都被抢空，武汉封城，火神山医院拔地而起，从方案设计到建成交付仅用10天，被誉为中国速度。相关资料可参考：<a href="https://baike.baidu.com/item/%E6%AD%A6%E6%B1%89%E7%81%AB%E7%A5%9E%E5%B1%B1%E5%8C%BB%E9%99%A2/24302076?fr=aladdin">武汉火神山医院百度百科</a><br>国内疫情控制的很好，辉瑞疫苗也在开足马力生产并已经在英国、美国投入使用，到2022年年底，随着疫情放开，经过大规模的感染后，现在疫情就像消失了一般。</p><h2 id="💻数字生活"><a href="#💻数字生活" class="headerlink" title="💻数字生活"></a>💻数字生活</h2><p>2022拥有了自己的git库，文件管理系统，影视系统…</p><h3 id="Ctrl-C-V"><a href="#Ctrl-C-V" class="headerlink" title="Ctrl C&#x2F;V"></a>Ctrl C&#x2F;V</h3><p><img src="/postsImages/2022/nianzhong/2022zongjie-7.png" alt="image"><br>其实在github上的contributions基本上都是博客的一些变化，代码提交很杂，在本地服务器、gitee、gitlab都有提交，没有一个统一的统计，要是有一个统一的Contributions Calendar来记录就好了。</p><h3 id="物理服务器"><a href="#物理服务器" class="headerlink" title="物理服务器"></a>物理服务器</h3><p>2022添置了很多的设备，本身自己是程序员，也有着一个科技梦。随着手上的项目增多，本服务器成本也大大增加，所以购买了一个物理服务器，在局域网中使用，用于项目开发和测试，以及智能家居的总控。</p><h3 id="日用设备"><a href="#日用设备" class="headerlink" title="日用设备"></a>日用设备</h3><p>随着14的灵动岛出现，手上的iPhone12突然不香了，所以就换了iPhone14，同时购买了AirPods Pro、iPad Pro。MacBook Pro M1目前还是很强，效率完全不受影响。但是偶尔想玩游戏了mac并不能实现，所以自己组装了一台Windows电脑（玩游戏专用）。<br><img src="/postsImages/2022/nianzhong/2022zongjie-2.png" alt="image"></p><h3 id="nas"><a href="#nas" class="headerlink" title="nas"></a>nas</h3><p>想着很多东西要存，然后物理机器又跑了很多东西，所以购买了一个nas来存放一些私密性的东西和普通的研究。购买的是极空间的新Z4，发现限制是真的多，docker的使用也处处碰壁，现在已经有点吃灰了…<br>目前还使用了相册备份，docker跑了qbittorren、nas-tools、alist，目前用的多的还是alist吧，挺好的一个程序。nas-tools搭配qbittorren下载影片供媒体库使用，极空间自带内网穿透，这一点的体验还是相当不错的。<br>搭建了一个旁路网关，docker跑了Clash，全家wifi所有设备都可以走规则了，不用单独安装使用了。<br><img src="/postsImages/2022/nianzhong/2022zongjie-3.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-3-1.png" alt="image"></p><h3 id="car"><a href="#car" class="headerlink" title="car"></a>car</h3><p>买了一台车（2022.5.20），<del>其实我还是喜欢长安UNI系列</del><br><img src="/postsImages/2022/nianzhong/2022zongjie-4.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-5.png" alt="image"></p><h3 id="百万"><a href="#百万" class="headerlink" title="百万"></a>百万</h3><p><del>哈哈哈，傻狗</del><br><img src="/postsImages/2022/nianzhong/2022zongjie-6.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-6-1.png" alt="image"></p><h3 id="游戏"><a href="#游戏" class="headerlink" title="游戏"></a>游戏</h3><p>我玩的游戏：CF、PUBG、APEX、GTA系列、CSGO、永劫无间、我的世界、王者荣耀、魔兽、Cities: Skylines…<br>目前喜欢的：GTA5、CSGO、我的世界、魔兽、Cities: Skylines。<br>王者荣耀以前很喜欢，后来就没怎么玩了，22年和朋友玩了一个月上王者了，又退了…<br><img src="/postsImages/2022/nianzhong/2022zongjie-8.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-8-1.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-8-2.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-8-3.png" alt="image"></p><h2 id="💰公司"><a href="#💰公司" class="headerlink" title="💰公司"></a>💰公司</h2><p>在打工之余创办了一家公司，已投资10万元，业务以线上为主，业务准备做自媒体站和微信小程序，希望有所成绩吧！</p><h2 id="🪂玩玩玩"><a href="#🪂玩玩玩" class="headerlink" title="🪂玩玩玩"></a>🪂玩玩玩</h2><p><img src="/postsImages/2022/nianzhong/2022zongjie-9.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-1.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-2.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-3.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-4.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-5.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-6.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-7.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-8.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-9.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-10.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-11.png" alt="image"><br><img src="/postsImages/2022/nianzhong/2022zongjie-9-13.png" alt="image"></p><div id="player_2022-1"></div><script type="text/javascript" src="https://npm.elemecdn.com/dplayer/dist/DPlayer.min.js"></script><script type="text/javascript">var player = new DPlayer({    container: document.getElementById('player_2022-1'),    video: {        url: 'https://npm.elemecdn.com/mengblog@1.0.7/video/2022zongjie-video-1.mp4',        type: 'auto'      }});</script><h2 id="🧨新年快乐"><a href="#🧨新年快乐" class="headerlink" title="🧨新年快乐"></a>🧨新年快乐</h2><div id="player_2022-2"></div><script type="text/javascript">var player = new DPlayer({    container: document.getElementById('player_2022-2'),    video: {        url: 'https://npm.elemecdn.com/mengblog@1.0.7/video/2022zongjie-video-2.mp4',        type: 'auto'      }});</script><p>&nbsp;</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;时间过得真快～&lt;br&gt;&lt;img src=&quot;/postsImages/2022/nianzhong/2022zongjie-9-12.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="年终总结" scheme="https://www.meng.me/tags/%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
    
  </entry>
  
  <entry>
    <title>ubuntu挂载新硬盘（大于2T）</title>
    <link href="https://www.meng.me/posts/23180.html"/>
    <id>https://www.meng.me/posts/23180.html</id>
    <published>2022-12-21T04:26:04.000Z</published>
    <updated>2023-07-05T01:47:33.000Z</updated>
    
    <content type="html"><![CDATA[<p>家里又添新设备，新购了一台物理服务器，用来跑python、智能家居总控，同时也能当作NAS使用。<br>之前就装了一个固态，随着算法训练量增加，硬盘不够用了，买了张4T的机械当数据盘，挂载用起来。<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-1.png" alt="image-1666838650203"></p><span id="more"></span><h3 id="查看当前硬盘配置"><a href="#查看当前硬盘配置" class="headerlink" title="查看当前硬盘配置"></a>查看当前硬盘配置</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo fdisk -l</span><br></pre></td></tr></table></figure><p><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-1.png" alt="image-1666838650203"><br>这里可以看见一块3.64TiB的盘，下面335.35GiB的是已经在使用的。</p><h3 id="使用fdisk命令来创建新的分区"><a href="#使用fdisk命令来创建新的分区" class="headerlink" title="使用fdisk命令来创建新的分区"></a>使用fdisk命令来创建新的分区</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo fdisk /dev/sda //(名字别搞错了)</span><br></pre></td></tr></table></figure><p><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-2.png" alt="image-1666838790713"></p><p>1、输入 m 查看帮助<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-3.png" alt="image-1666838830230"></p><p>2、于我这里的硬盘大于 2TB，所以不能直接新建分区，需要先增加一个 GPT 标签。小于 2TB 的硬盘不需要这个操作。输入 g 增加<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-4.png" alt="image-1666838897291"></p><p>3、输入 F 可以看到没有分区的（注意大小写）<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-5.png" alt="image-1666838977405"></p><blockquote><p>这里可以看到我们之前那块4T的盘没有分区。</p></blockquote><p>4、输入 n 新建一个分区。这里开始和结束都使用默认的即可，这样整块硬盘都会被分进去，如果想自己定义大小，那么自己输入大小即可。<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-6.png" alt="image-1666839044685"></p><p>5、然后我们再次输入 F 确认下，这里就可以看到所有的盘都分区了。<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-7.png" alt="image-1666838939863"></p><p>6、输入 v 确认下，没有错误就 w 保存。<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-8.png" alt="image-1666839142265"></p><h3 id="格式化硬盘"><a href="#格式化硬盘" class="headerlink" title="格式化硬盘"></a>格式化硬盘</h3><p>到这里新增分区就结束了，这时我们需要格式化硬盘：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo mkfs.ext4 /dev/sda</span><br></pre></td></tr></table></figure><p><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-9.png" alt="image-1666839391340"><br>格式化需要一点点时间，输入 y 后等待done即可。</p><h3 id="挂载分区。"><a href="#挂载分区。" class="headerlink" title="挂载分区。"></a>挂载分区。</h3><ul><li>我是新建了一个data目录用来挂载分区：<code>sudo mkdir data</code></li><li>挂载到&#x2F;data上：<code>sudo mount /dev/sda /data</code></li><li>然后我们使用<code>df -h</code>查看下当前硬盘<br><img src="/postsImages/2022/ubuntuHardDrive/ubuntu-disk-10.png" alt="image-1666839664335"><br>可以看到，&#x2F;dev&#x2F;sda已经挂载到了&#x2F;data目录。截止目前，临时挂载已经完成了。</li></ul><h3 id="开机自动挂载"><a href="#开机自动挂载" class="headerlink" title="开机自动挂载"></a>开机自动挂载</h3><blockquote><p>如果你不进行这一步，重启后硬盘挂载会失效。</p></blockquote><ul><li>编辑<code>/etc/fstab</code>文件：<code>sudo vim /etc/fstab</code></li><li>增加：<code>/dev/sda /data ext4 defaults 0 0</code></li></ul><p>然后保存退出即可，至此，所有步骤完成。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;家里又添新设备，新购了一台物理服务器，用来跑python、智能家居总控，同时也能当作NAS使用。&lt;br&gt;之前就装了一个固态，随着算法训练量增加，硬盘不够用了，买了张4T的机械当数据盘，挂载用起来。&lt;br&gt;&lt;img src=&quot;/postsImages/2022/ubuntuHardDrive/ubuntu-disk-1.png&quot; alt=&quot;image-1666838650203&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="ubuntu" scheme="https://www.meng.me/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>Hexo部署至云服务器（Git配置）</title>
    <link href="https://www.meng.me/posts/7714.html"/>
    <id>https://www.meng.me/posts/7714.html</id>
    <published>2022-12-18T12:51:31.000Z</published>
    <updated>2026-04-13T03:54:17.160Z</updated>
    
    <content type="html"><![CDATA[<p>先给大家看个日志：<br><img src="/postsImages/2022/hexoToGit/hexo-git-1.jpg" alt="image"><br>一定要注意，安全无小事，密码切勿使用安全级别较低的密码。</p><span id="more"></span><p>因为我只是搭建git服务测试，所以使用的密码很简单，他就成功登录上来了。<br>随后，这个人又尝试了gitlab、emqx、mc等等常用用户名登录。<br><img src="/postsImages/2022/hexoToGit/hexo-git-2.jpg" alt="image"><br>我是用一台新服务器搭建测试，还好服务器没有什么资料等，而且此用户也是没有root权限的，之所以会发现这个问题还是因为腾讯云的预警。<br><img src="/postsImages/2022/hexoToGit/hexo-git-3.jpg" alt="image"><br>经过工单咨询和腾讯云工程师进一步确认得知：<br>1、确认服务器被入侵且存在异常脚本程序。<br>2、确认服务器内存在挖矿相关病毒程序。<br>3、确认服务器正在请求高危命令。<br>以上就不展开说了，所以各位密码一定要使用高强度密码，哪怕是自己忘记需要重置密码，其实这也是变相的定期修改密码。<br>好了，正文开始：</p><h2 id="本地准备"><a href="#本地准备" class="headerlink" title="本地准备"></a>本地准备</h2><p>相信大家都会把hexo部署至github，本文的思路是一样的，在云服务器建立git仓库用于存储public代码，然后通过nginx指定此目录来访问。</p><h3 id="生成ssh密钥"><a href="#生成ssh密钥" class="headerlink" title="生成ssh密钥"></a>生成ssh密钥</h3><p>请确认自己有没有生成ssh密钥，如果没有则执行一下命令：</p><blockquote><p>查看有没有 ~&#x2F;.ssh 这个文件夹，其中id_rsa.pub则为公钥。<br>windows用户在：<code>C:\Users\yourname\.ssh</code></p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name &quot;你的用户名&quot;</span><br><span class="line">git config --global user.email &quot;你的的邮箱&quot;</span><br><span class="line">ssh-keygen -t rsa -C &quot;你的的邮箱&quot;</span><br></pre></td></tr></table></figure><h2 id="服务器搭建"><a href="#服务器搭建" class="headerlink" title="服务器搭建"></a>服务器搭建</h2><h3 id="root账号操作部分"><a href="#root账号操作部分" class="headerlink" title="root账号操作部分"></a>root账号操作部分</h3><p>1、切换到root账号</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">su root</span><br></pre></td></tr></table></figure><p>如果你登录的就是root账号则无需切换。<br>2、 安装git<br>请先检查是否安装git，如果安装了就不用安装了。</p><blockquote><p>执行<code>git --version</code>，如果提醒git command not found就是没安装</p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install git</span><br></pre></td></tr></table></figure><p>3、 创建git账户并设置密码</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">adduser git</span><br><span class="line">passwd git</span><br></pre></td></tr></table></figure><blockquote><p>小白提醒：设置密码时，密码时不显示的，不是你键盘坏了。new password后他会提示你再次输入的，也是一样的。</p></blockquote><ol start="4"><li>赋予权限<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod 740 /etc/sudoers</span><br></pre></td></tr></table></figure>5、 编辑 &#x2F;etc&#x2F;sudoers 文件<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim /etc/sudoers</span><br></pre></td></tr></table></figure>在<code>root ALL=(ALL) ALL</code>下一行加入：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git     ALL=(ALL)     ALL</span><br></pre></td></tr></table></figure>6、 把权限改回来<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod 400 /etc/sudoers</span><br></pre></td></tr></table></figure></li></ol><h3 id="git账号操作部分"><a href="#git账号操作部分" class="headerlink" title="git账号操作部分"></a>git账号操作部分</h3><p>1、创建.ssh文件夹</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">su git</span><br><span class="line">cd ~</span><br><span class="line">mkdir .ssh</span><br><span class="line">cd .ssh</span><br></pre></td></tr></table></figure><p>2、创建git密钥</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen</span><br></pre></td></tr></table></figure><p>3、复制一份公钥</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp id_rsa.pub authorized_keys</span><br></pre></td></tr></table></figure><p>4、修改权限</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod 600 ~/.ssh/authorized_keys</span><br><span class="line">chmod 700 ~/.ssh</span><br></pre></td></tr></table></figure><p>5、上传本地公钥<br>把本文第一步生成的<code>id_rsa.pub</code>内容拷贝到服务器的<code>authorized_keys</code>文件末尾即可。<br>6、本地cmd测试<br>你在本地打开命令行工具输入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -v git@云服务器的公网IP</span><br></pre></td></tr></table></figure><p>免密登录即ok</p><h3 id="创建git仓库"><a href="#创建git仓库" class="headerlink" title="创建git仓库"></a>创建git仓库</h3><blockquote><p>注意：这里依然是git账号操作</p></blockquote><p>1、初始化git仓库<br>创建位置自己选择，我这演示创建在<code>/home/git</code>下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd ~</span><br><span class="line">git init --bare mengblog.git</span><br></pre></td></tr></table></figure><p>2、创建git钩子</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/mengblog.git/hooks/post-receive</span><br></pre></td></tr></table></figure><p>输入以下内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git --work-tree=/home/git/blog --git-dir=/home/git/mengblog.git checkout -f</span><br></pre></td></tr></table></figure><p>这里的目录自行选择，我这里是<code>/home/git/blog</code><br>3、设置文件可执行权限</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod +x ~/mengblog.git/hooks/post-receive</span><br></pre></td></tr></table></figure><h3 id="配置nginx"><a href="#配置nginx" class="headerlink" title="配置nginx"></a>配置nginx</h3><p>这一步只需要修改nginx配置中相应的server服务：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">root /home/git/blog;</span><br></pre></td></tr></table></figure><h2 id="博客配置"><a href="#博客配置" class="headerlink" title="博客配置"></a>博客配置</h2><p>其实这里就简单了，和github一样，把_config.yml文件中deploy&gt;repo地址改成：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git@云服务器公网IP:/home/git/mengblog.git</span><br></pre></td></tr></table></figure><p>然后<code>hexo d</code>就行了</p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><p>到这里你只需要去访问nginx相应server绑定的域名即可。<br>在上一步中，<code>hexo d</code>可能会出现被拒绝等问题，如果你按照文章一步一步走的，那可能是在账号使用那一块出现了问题。<br>注意你的<code>/home/git/blog</code>所有者是不是<code>git</code>，如果不是请修改成<code>git</code></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;先给大家看个日志：&lt;br&gt;&lt;img src=&quot;/postsImages/2022/hexoToGit/hexo-git-1.jpg&quot; alt=&quot;image&quot;&gt;&lt;br&gt;一定要注意，安全无小事，密码切勿使用安全级别较低的密码。&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="hexo" scheme="https://www.meng.me/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>NPM包发布、更新、撤销</title>
    <link href="https://www.meng.me/posts/23045.html"/>
    <id>https://www.meng.me/posts/23045.html</id>
    <published>2022-12-16T06:19:44.000Z</published>
    <updated>2023-07-05T01:50:45.000Z</updated>
    
    <content type="html"><![CDATA[<p>随着jsdelivr被墙，国外各个CDN链接访问速度又太慢，自组CDN仓库变得有一定的必要。<br>其实国内一些大厂有CDN仓库，但是收录的大部分都是主流的仓库，自己的一些静态静态还是需要一个高速的CDN仓库来托管。<br>购买云服务、cos等自建CDN库是一种办法，但是存在一定的费用，这篇文章记录利用NPM发布仓库并访问的方案。<br><img src="/postsImages/2022/npmInfo/NPMcdn-6.png" alt="image"></p><span id="more"></span><h1 id="发布"><a href="#发布" class="headerlink" title="发布"></a>发布</h1><h2 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h2><h3 id="新建本地仓库"><a href="#新建本地仓库" class="headerlink" title="新建本地仓库"></a>新建本地仓库</h3><p>在本地新建一个文件夹，用于存放仓库静态资源。</p><h3 id="初始化-1"><a href="#初始化-1" class="headerlink" title="初始化"></a>初始化</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd 你新建的仓库目录</span><br><span class="line">npm init</span><br></pre></td></tr></table></figure><p>按照提示进行对应键入即可</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;name&quot;: &quot;mengcdn&quot;,</span><br><span class="line">  &quot;version&quot;: &quot;1.0.0&quot;,</span><br><span class="line">  &quot;description&quot;: &quot;CDN warehouse used by meng.me&quot;,</span><br><span class="line">  &quot;main&quot;: &quot;index.js&quot;,</span><br><span class="line">  &quot;scripts&quot;: &#123;</span><br><span class="line">    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;</span><br><span class="line">  &#125;,</span><br><span class="line">  &quot;author&quot;: &quot;Meng.me&quot;,</span><br><span class="line">  &quot;license&quot;: &quot;ISC&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Is this OK? (yes)</span><br></pre></td></tr></table></figure><p>如下图，已经用红框标出键入部分：<br><img src="/postsImages/2022/npmInfo/NPMcdn-1.png" alt="image"></p><h2 id="发布-1"><a href="#发布-1" class="headerlink" title="发布"></a>发布</h2><h3 id="创建NPM账号"><a href="#创建NPM账号" class="headerlink" title="创建NPM账号"></a>创建NPM账号</h3><p>如果你没有NPM账号，你需要先注册一个</p><blockquote><p>注意：注册后验证会发送一个OTP code，一定要验证才能发布。</p></blockquote><p><img src="/postsImages/2022/npmInfo/NPMcdn-2.png" alt="image"></p><h3 id="登录NPM账号"><a href="#登录NPM账号" class="headerlink" title="登录NPM账号"></a>登录NPM账号</h3><p>先登录你的NPM账号</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm login</span><br></pre></td></tr></table></figure><p>现在请使用<code>npm login</code>，目前也可以使用<code>npm adduser</code>，注意：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm WARN adduser `adduser` will be split into `login` and `register` in a future version. `adduser` will become an alias of `register`. `login` (currently an alias) will become its own command.</span><br></pre></td></tr></table></figure><p>在此你可能遇到以下错误：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">npm ERR! code E403</span><br><span class="line">npm ERR! 403 403 Forbidden - PUT https://registry.npmmirror.com/-/user/org.couchdb.user:menggod - [FORBIDDEN] Public registration is not allowed</span><br><span class="line">npm ERR! 403 In most cases, you or one of your dependencies are requesting</span><br><span class="line">npm ERR! 403 a package version that is forbidden by your security policy, or</span><br><span class="line">npm ERR! 403 on a server you do not have access to.</span><br><span class="line"></span><br><span class="line">npm ERR! A complete log of this run can be found in:</span><br><span class="line">npm ERR!     /Users/meng/.npm/_logs/2022-12-16T06_52_01_553Z-debug-0.log</span><br></pre></td></tr></table></figure><p>此时你可能设置了其他镜像，将其切回即可正确完成登录操作：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config set registry https://registry.npmjs.org/</span><br></pre></td></tr></table></figure><p>此时再进行<code>npm login</code>操作，会再次验证OTP code，在邮件中查看键入即可。<br><img src="/postsImages/2022/npmInfo/NPMcdn-3.png" alt="image"></p><h3 id="提交"><a href="#提交" class="headerlink" title="提交"></a>提交</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm publish</span><br></pre></td></tr></table></figure><p><img src="/postsImages/2022/npmInfo/NPMcdn-4.png" alt="image"><br>至此发布已完成，可以登录NPM查看到了。</p><h2 id="访问"><a href="#访问" class="headerlink" title="访问"></a>访问</h2><p>通过jsdelivr访问：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://cdn.jsdelivr.net/npm/(your packagename)@(version)/(file)</span><br></pre></td></tr></table></figure><p>例如：<br><a href="https://cdn.jsdelivr.net/npm/mengblog@1.0.0/about.txt">https:&#x2F;&#x2F;cdn.jsdelivr.net&#x2F;npm&#x2F;mengblog@1.0.0/about.txt</a><br>访问速度慢可以尝试替代方案，可自行在百度寻找，例如：<br><a href="https://cdn.bilicdn.tk/npm/mengblog@1.0.0/about.txt">https:&#x2F;&#x2F;cdn.bilicdn.tk&#x2F;npm&#x2F;mengblog@1.0.0/about.txt</a><br>如果有需要你也可以使用我的仓库：<a href="https://cdn.jsdelivr.net/npm/mengblog/">mengblog</a><br>如果仓库没有你想要的内容，你也不想发布，我可以帮到你：<a href="https://www.meng.me/message/">请给我留言注明你需要的资源</a></p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><ol><li><p>no_perms Private mode enable, only admin can publish this module<br>这是因为镜像设置成淘宝镜像了，设置回来即可</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config set registry https://registry.npmjs.org/</span><br></pre></td></tr></table></figure></li><li><p>npm publish failed put 500 unexpected status code 401<br>一般是没有登录，重新登录一下 npm login 即可</p></li><li><p>npm ERR! you do not have permission to publish “your module name”. Are you logged in as the correct user?<br>包名被占用，改个包名即可。最好在官网查一下是否有包名被占用，之后再重命名</p></li><li><p>you must verify your email before publishing a new package<br>邮箱未验证，去官网验证一下邮箱</p></li></ol><h1 id="更新"><a href="#更新" class="headerlink" title="更新"></a>更新</h1><h2 id="修改版本号"><a href="#修改版本号" class="headerlink" title="修改版本号"></a>修改版本号</h2><p>方法一：在上节说到的初始化目录中找到<code>package.json</code>，修改<code>version</code>参数。<br>方法二：当然你也可以使用命令<code>npm version</code>自动更新版本号。<br><code>npm version [option]</code><br>option选项如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">major：主版本号（大版本）[2.0.0]</span><br><span class="line">minor：次版本号（小更新）[1.1.0]</span><br><span class="line">patch：补丁号（补丁）[1.0.1]</span><br><span class="line">premajor：预备主版本[2.0.0-0]</span><br><span class="line">preminor: 预备次版本[1.1.0-0]</span><br><span class="line">prepatch：预补丁版本[1.0.1-0]</span><br><span class="line">prerelease：预发布版本[1.0.1-0]</span><br></pre></td></tr></table></figure><p>执行对应 npm version [option] 命令后可以在 package.json 文件中看到对应版本。</p><h2 id="发布-2"><a href="#发布-2" class="headerlink" title="发布"></a>发布</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm publish</span><br></pre></td></tr></table></figure><blockquote><p>这个就不放图了，很简单就是更新下版本号然后发布就行了。</p></blockquote><p>至此更新已完成，可以登录NPM查看到了。</p><h1 id="撤销"><a href="#撤销" class="headerlink" title="撤销"></a>撤销</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm unpublish projectName --force</span><br></pre></td></tr></table></figure><p>撤销指定版本：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm unpublish projectName@version --force</span><br></pre></td></tr></table></figure><p>例如我需要撤销刚刚发布的1.0.3，如图：<br><img src="/postsImages/2022/npmInfo/NPMcdn-5.png" alt="image"></p><blockquote><p>npm 官方对撤销已发布的包说明:</p><ul><li>不允许撤销发布已经超过 24 小时的包，撤销发布 24 小时内的包需要加 –force 参数</li><li>撤销之前发布的包，再次发布的时候不能与之前被撤销的包的名称&#x2F;版本其中之一相同，因为这两者构成的唯一性已经被占用，官方并没有随着撤销而删除</li></ul></blockquote>]]></content>
    
    
    <summary type="html">&lt;p&gt;随着jsdelivr被墙，国外各个CDN链接访问速度又太慢，自组CDN仓库变得有一定的必要。&lt;br&gt;其实国内一些大厂有CDN仓库，但是收录的大部分都是主流的仓库，自己的一些静态静态还是需要一个高速的CDN仓库来托管。&lt;br&gt;购买云服务、cos等自建CDN库是一种办法，但是存在一定的费用，这篇文章记录利用NPM发布仓库并访问的方案。&lt;br&gt;&lt;img src=&quot;/postsImages/2022/npmInfo/NPMcdn-6.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="NPM" scheme="https://www.meng.me/tags/NPM/"/>
    
  </entry>
  
  <entry>
    <title>AList+Aria2+AriaNg私盘利器</title>
    <link href="https://www.meng.me/posts/56872.html"/>
    <id>https://www.meng.me/posts/56872.html</id>
    <published>2022-12-10T07:27:16.000Z</published>
    <updated>2023-07-05T01:51:59.000Z</updated>
    
    <content type="html"><![CDATA[<p>使用Docker容器技术运行AList+Aria2+AriaNg，实现网盘功能和强大的下载神器！</p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><blockquote><p>食用前请确保你已经安装了Docker，并掌握了docker的基础知识。<br><img src="/postsImages/2022/alistAra2Ng/alist-5.png" alt="image"></p></blockquote><span id="more"></span><h3 id="AList安装"><a href="#AList安装" class="headerlink" title="AList安装"></a>AList安装</h3><blockquote><p>官方文档地址：<a href="https://alist.nn.ci/zh/guide/install/docker.html">https://alist.nn.ci/zh/guide/install/docker.html</a></p></blockquote><p>docker run命令</p><figure class="highlight docker"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="keyword">run</span><span class="language-bash"> -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name=<span class="string">&quot;alist&quot;</span> xhofe/alist:latest</span></span><br></pre></td></tr></table></figure><p>在此，建议使用-v指令映射一个地址出来用于本地存储的配置地址<br><img src="/postsImages/2022/alistAra2Ng/alist-1.png" alt="image"><br>运行后，访问ip:端口即可访问。后台管理员账号密码查看：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker exec -it alist ./alist admin</span><br></pre></td></tr></table></figure><h4 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h4><p>1、failed get storage: can’t find storage with rawPath: &#x2F;<br>这是说明你还没配置存储，管理员登录后台配置存储后即可。</p><h3 id="Aria2安装"><a href="#Aria2安装" class="headerlink" title="Aria2安装"></a>Aria2安装</h3><p>拉取镜像：<code>docker pull p3terx/aria2-pro</code><br>启动容器：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">--name aria2 \</span><br><span class="line">--restart unless-stopped \</span><br><span class="line">--log-opt max-size=1m \</span><br><span class="line">-e PUID=$UID \</span><br><span class="line">-e PGID=$GID \</span><br><span class="line">-e UMASK_SET=022 \</span><br><span class="line">-e RPC_SECRET=你的rpc密匙 \</span><br><span class="line">-e RPC_PORT=6800 \</span><br><span class="line">-e LISTEN_PORT=6888 \</span><br><span class="line">-p 6800:6800 \</span><br><span class="line">-p 6888:6888 \</span><br><span class="line">-p 6888:6888/udp \</span><br><span class="line">-v /mnt/aria2/config:/config \</span><br><span class="line">-v /var/www/resource:/downloads \</span><br><span class="line">p3terx/aria2-pro</span><br></pre></td></tr></table></figure><blockquote><p><code>RPC_SECRET</code>设置你的rpc密码<br>这里我把&#x2F;downloads映射和AList一样的地址，下载后的文件就可以直接在AList中看见了。</p></blockquote><h3 id="AriaNg安装"><a href="#AriaNg安装" class="headerlink" title="AriaNg安装"></a>AriaNg安装</h3><p>拉取镜像：<code>docker pull p3terx/ariang</code><br>启动容器：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">--name ariang \</span><br><span class="line">--log-opt max-size=1m \</span><br><span class="line">--restart unless-stopped \</span><br><span class="line">-p 6880:6880 \</span><br><span class="line">p3terx/ariang</span><br></pre></td></tr></table></figure><p>运行后，访问ip:端口即可访问。</p><h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><blockquote><p>使用我也不知道写什么，自己去探索有趣的功能或许更有意义！这里写几点基本的配置或者错误吧。</p></blockquote><p>1、Aria2状态未连接<br><img src="/postsImages/2022/alistAra2Ng/alist-2.png" alt="image-1666170697262"><br>在AriaNg设置 &gt; RPC中填写你的Aria2 PRC地址，随后刷新页面，Aria2状态为已连接即可。</p><p>2、下载出现:<code>发生错误(16)-文件创建或删除已有文件失败.</code><br><img src="/postsImages/2022/alistAra2Ng/alist-3.png" alt="image-1666170994513"><br>你可以尝试下chmod 777 xxx提权，看是不是权限的文件。</p><blockquote><p>xxx为下载地址，这个地址是在docker run Aria2时映射的地址。例如我的就是<code>/var/www/resource</code><br>这里在百度找了一个mp4地址测试：<code>http://vjs.zencdn.net/v/oceans.mp4</code></p></blockquote><p>3、忘记了docker映射地址</p><blockquote><p>你也是个人才。。。刚部署就忘了</p></blockquote><p>执行命令：<code>docker inspect alist | grep Mounts -A 20</code></p><blockquote><p>alist为容器名，如果你不是这个名字你就换成自己的name</p></blockquote><p>4、Alist和Aria2联动<br>这个在安装一节中讲过了，作用就是Aria2下载后直接就到网盘目录了。<br>其实也很简单，就是Alist地址和Aria2下载地址配置成一样就行。<br>我这里在docker中映射到的都是：<code>/var/www/resource</code><br>在Alist中配置本机存储如下：<br><img src="/postsImages/2022/alistAra2Ng/alist-4.png" alt="image-1666171526901"></p><blockquote><p>注意，这里的跟文件夹路径是docker容器中的地址，否则会提示找不到。</p></blockquote><p>5、Alist配置Aria2<br>在设置 &gt; 其他 中配置Aria2，输入地址和密匙即可。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;使用Docker容器技术运行AList+Aria2+AriaNg，实现网盘功能和强大的下载神器！&lt;/p&gt;
&lt;h2 id=&quot;安装&quot;&gt;&lt;a href=&quot;#安装&quot; class=&quot;headerlink&quot; title=&quot;安装&quot;&gt;&lt;/a&gt;安装&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;食用前请确保你已经安装了Docker，并掌握了docker的基础知识。&lt;br&gt;&lt;img src=&quot;/postsImages/2022/alistAra2Ng/alist-5.png&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    <category term="笔记本" scheme="https://www.meng.me/categories/%E7%AC%94%E8%AE%B0%E6%9C%AC/"/>
    
    
    <category term="Alist" scheme="https://www.meng.me/tags/Alist/"/>
    
  </entry>
  
</feed>
