<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>mengdelu</title>
  
  <subtitle>一个简单的笔记仓库</subtitle>
  <link href="https://lumengde123.github.io/atom.xml" rel="self"/>
  
  <link href="https://lumengde123.github.io/"/>
  <updated>2024-06-17T09:38:05.621Z</updated>
  <id>https://lumengde123.github.io/</id>
  
  <author>
    <name>卢孟德</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>临时内容存放处</title>
    <link href="https://lumengde123.github.io/posts/d5ba.html"/>
    <id>https://lumengde123.github.io/posts/d5ba.html</id>
    <published>2024-06-17T09:36:02.000Z</published>
    <updated>2024-06-17T09:38:05.621Z</updated>
    
    <content type="html"><![CDATA[<h1 id="漫画-json文件"><a href="#漫画-json文件" class="headerlink" title="漫画.json文件"></a>漫画.json文件</h1><details>  <summary>点击展开，不一定是最新的</summary>  <div class="details-content">[<pre><code>&#123;    &quot;name&quot;: &quot;鬼刀&quot;,    &quot;link&quot;: &quot;https://manga.bilibili.com/detail/mc29481&quot;,    &quot;cover&quot;: &quot;https://www.bing.com/th?id=OIP.Dgah6k9oAwFM_-CpBrM2NgHaD-&amp;w=183&amp;h=185&amp;c=8&amp;rs=1&amp;qlt=90&amp;o=6&amp;dpr=1.3&amp;pid=3.1&amp;rm=2&quot;,    &quot;categories&quot;: [&quot;国漫&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;我独自升级&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/woduzishengji-duburedicestudio_gi486f&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/woduzishengji-duburedicestudio.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;,&quot;召唤&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;死灵法师:亡灵支配者&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/silingfashiwanglingzhipeizhe-kimkyoungyeoljjjkimdongjun_netlj6&quot;,    &quot;cover&quot;: &quot;https://pic.rmb.bdstatic.com/bjh/down/3db7a880ad5feb5e6ca979a667ec1bfe.jpeg&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;,&quot;召唤&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;全知读者视角&quot;,    &quot;link&quot;: &quot;https://www.comemh.com/kanmanhua/quanzhiduzheshijiao/&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/quanzhiduzheshijiao-sleepcsingsyong.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;,&quot;异世界&quot;,&quot;冒险&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;妹子与科学&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/meiziyukexue-zhazhushidede&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/meiziyukexue-zhazhushidede.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;异世界&quot;,&quot;冒险&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;虫穴-系列&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/chongxue-jinguisen&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/chongxue-jinguisen.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;医统-天下&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/yitongtianxia-duanyanmuou&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/yitongtianxia-duanyanmuou.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;医统-乱世&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/yitongluanshi-duanyanmuou2gefeiwu&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/yitongluanshi-muou.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;偷星九月天&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/touxingjiuyuetian-zhouhongbingongzuoshi&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/touxingjiuyuetian-zhouhongbingongzuoshi.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;与死亡同行：从鱼人地下城开始&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/yusiwangtongxingcongyurendixiachengkaishi-yinhechuangxiang&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/yusiwangtongxingcongyurendixiachengkaishi-yinhechuangxiang.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;末世英雄传说&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/moshiyingxiongchuanshuo-ddartquancanxukenaz&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/moshiyingxiongchuanshuo-ddartquancanxukenaz.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;末世人间道&quot;,    &quot;link&quot;: &quot;https://www.comemh.com/kanmanhua/15303/&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/moshirenjiandao-wumantiancaoruibo.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;末日危机&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/moriweiji-parkchanggeunparkchanggeun&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/moriweiji-parkchanggeunparkchanggeun.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;尸界&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/shijie-bianhuinorth0023&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/shijie-bianhuinorth0023.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;末世凡人&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/moshifanren-liangqigongchang&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/moshifanren-liangqigongchang.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;末日孢子&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/moribaozi-yanqimen&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/moribaozi-yanqimen.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;从末世崛起&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/1732.html/&quot;,    &quot;cover&quot;: &quot;https://image1.dingmanhua.com/mh/9763a0f9012e4702a4689b67b38fee18/cover.webp&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;银之守墓人&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/1265.html/&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/yinzhishoumuren-liangdianshifendongman.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;游戏&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;白垩纪&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/baieji-qiasitedongman&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/baieji-qiasitedongman.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;异世界&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;驭灵师&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/yulingshi-shidaimanwang2&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/yulingshi-shidaimanwang.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;玄幻&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;我只想安静的打游戏&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/700.html/&quot;,    &quot;cover&quot;: &quot;https://image1.dingmanhua.com/mh/bae59ba16c1c4c7fabc1a409803c06d6/cover.webp&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;武炼巅峰&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/wuliandianfeng-pikapi_lav8od&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/wuliandianfeng-pikapi.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;玄幻&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;死灵法师！我即是天灾-53&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/1082.html/&quot;,    &quot;cover&quot;: &quot;https://image1.dingmanhua.com/mh/5f38c01de1e64274a0c76a50865dded7/cover.webp&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;召唤&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;角色是水母的我依然超神&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/1460.html/&quot;,    &quot;cover&quot;: &quot;https://image1.dingmanhua.com/mh/2c82a48a04b346f0bb851c20d541c162/cover.webp&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;游戏&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;生存学概率&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/shengcunxuegailun-mrquokkaharustudiokhit&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/shengcunxuegailun-mrquokkaharustudiokhit.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;冒险&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;回头是岸&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/huitoushian-wumantiancaoruibo&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/huitoushian-wumantiancaoruibo.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;灭亡之后的世界&quot;,    &quot;link&quot;: &quot;https://www.dingmanhua.com/comic/521.html/&quot;,    &quot;cover&quot;: &quot;https://image1.dingmanhua.com/mh/a2d574c531e04be39b361279c1f6320b/cover.webp&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;],    &quot;status&quot;: &quot;连载&quot;&#125;,&#123;    &quot;name&quot;: &quot;骸骨王座&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/haiguwangzuo-cartoonlife_o4589z&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/haiguwangzuo-cartoonlife.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;韩漫&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;,&#123;    &quot;name&quot;: &quot;梦境毁灭Dreamcide&quot;,    &quot;link&quot;: &quot;https://cn.baozimh.com/comic/mengjinghuimiedreamcide-hkbooks&quot;,    &quot;cover&quot;: &quot;https://static-tw.baozimh.com/cover/mengjinghuimiedreamcide-hkbooks.jpg?w=285&amp;h=375&amp;q=100&quot;,    &quot;categories&quot;: [&quot;国漫&quot;,&quot;末世&quot;],    &quot;status&quot;: &quot;完结&quot;&#125;</code></pre><p>]<br>  </div></p></details>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;漫画-json文件&quot;&gt;&lt;a href=&quot;#漫画-json文件&quot; class=&quot;headerlink&quot; title=&quot;漫画.json文件&quot;&gt;&lt;/a&gt;漫画.json文件&lt;/h1&gt;&lt;details&gt;
  &lt;summary&gt;点击展开，不一定是最新的&lt;/summary&gt;
 </summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>VPS基本使用和性能测试</title>
    <link href="https://lumengde123.github.io/posts/5e93.html"/>
    <id>https://lumengde123.github.io/posts/5e93.html</id>
    <published>2024-06-17T09:26:17.000Z</published>
    <updated>2024-06-17T09:35:46.486Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>VPS选购</p><ul><li><p>国内可选阿里云、腾讯云、狗云等。</p></li><li><p>海外可选CloudCone、RackNerd、搬瓦工、Vultr等。</p></li><li><p>免费可选甲骨文、AWS等。</p></li></ul><p>备注：阿里云腾讯云有安全组来放行端口。cc没有，可以自己安装防火墙例如ufw。</p><h1 id="登录VPS实例"><a href="#登录VPS实例" class="headerlink" title="登录VPS实例"></a>登录VPS实例</h1><p>首先购买VPS并创建实例，然后在服务商网站上<code>VNC登录</code>实例，通过账号密码登录。账号默认root，密码在服务商网站控制台或邮件中给出。密码登录不太安全，下面介绍两种SSH连接方式。</p><p><strong>方法1：通过SSH远程连接</strong></p><p>先在云控制台中<strong>重置密码</strong>。</p><p>下载软件：<a href="http://www.hostbuf.com/t/988.html">FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31</a></p><p>（当然XFTP + XShell 也可以，但是这个更方便和直观）<br>【finalshell.png】</p><p>如图，新建<strong>SSH连接</strong>并输入主机信息，点击确定即可添加该VPS的连接。用户名默认root，主机IP和密码一般可在云服务商或邮箱内找到。</p><p><strong>方法2：通过SSH密钥对连接</strong></p><p><strong>以阿里云为例。</strong>打开阿里云控制台首页，网络与安全-&gt;密钥对-&gt;创建密钥对-&gt;绑定密钥对-&gt;选取你的服务器实例，只需填个名称就好例如：ali_public_key。</p><p>此时会自动下载一个文件，ali_public_key.pem，建议把它放在本地计算机的<code>C:/Users/XXXX/.ssh/</code>里，XXXX是你的电脑用户名。</p><p>回到阿里云控制台首页，实例与镜像-&gt;实例-&gt;在你的实例项点击远程连接。</p><p>然后这时候能看到你的 网络连接-公网IP，记住它。</p><p>在刚才的<code>.ssh/</code>文件夹的<code>config</code>文件(没有就新建)，添加以下内容</p><figure class="highlight nginx"><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="attribute">Host</span> <span class="number">8.138.119.94</span></span><br><span class="line"> HostName <span class="number">8.138.119.94</span>  <span class="comment"># 这里改成你自己云服务器的公网IP。</span></span><br><span class="line"> User root</span><br><span class="line"> Port <span class="number">22</span></span><br><span class="line"> ForwardAgent <span class="literal">yes</span></span><br><span class="line"> IdentityFile <span class="string">&quot;C:\Users\xxx你的计算机名\.ssh\ali_public_key.pem&quot;</span></span><br></pre></td></tr></table></figure><p>修改对应内容。</p><p>回到阿里云的远程连接页面，认证方式选择<code>SSH密钥认证</code>，私钥点击上传按钮，上传ali_public_key.pem文件，点击确定。</p><p>然后我们打开计算机的<code>cmd</code>，输入<code>ssh root@你的公网IP</code>，将SSH 客户端(本地主机)连接到远程主机，输入<code>yes</code>。</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">PS</span> C:\Users\Administrator&gt; ssh root@<span class="number">8.138.119.94</span></span><br><span class="line"><span class="attribute">The</span> authenticity of host &#x27;<span class="number">8.138.119.94</span> (<span class="number">8.138.119.94</span>)&#x27; can&#x27;t be established.</span><br><span class="line"><span class="attribute">ECDSA</span> key fingerprint is SHA256:UudrcTL/T3uRsiZ+<span class="number">3</span>cq5lFgyARTKE1fl2ZPl+<span class="number">8</span>+<span class="number">6</span>IAk.</span><br><span class="line"><span class="attribute">Are</span> you sure you want to continue connecting (yes/no/[fingerprint])? y</span><br><span class="line"><span class="attribute">Please</span> type &#x27;yes&#x27;, &#x27;no&#x27; or the fingerprint: yes</span><br><span class="line"><span class="attribute">Warning</span>: Permanently added &#x27;<span class="number">8.138.119.94</span>&#x27; (ECDSA) to the list of known hosts.</span><br><span class="line"><span class="attribute">Last</span> login: Sat Feb  <span class="number">3</span> <span class="number">12</span>:<span class="number">17</span>:<span class="number">40</span> <span class="number">2024</span> from <span class="number">47.96.60.211</span></span><br><span class="line"><span class="attribute">Welcome</span> to Alibaba Cloud Elastic Compute Service !</span><br></pre></td></tr></table></figure><p>这样就算连接成功了。</p><p>如果重装了VPS的系统，登录时用相同的密钥连接，在运行窗口再次SSH连接远程主机时，会报错：</p><figure class="highlight gauss"><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">C:\Users\Administrator&gt;ssh root<span class="comment">@8.138.119.94</span></span><br><span class="line"><span class="comment">@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span></span><br><span class="line"><span class="comment">@   WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!   @</span></span><br><span class="line"><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@@</span><span class="comment">@</span></span><br><span class="line"><span class="comment">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!</span></span><br><span class="line"><span class="comment">Someone could be eavesdropping on you right now (man-in-the-middle attack)!</span></span><br><span class="line"><span class="comment">It is also possible that a host key has just been changed.</span></span><br><span class="line"><span class="comment">The fingerprint for the ECDSA key sent by the remote host is</span></span><br><span class="line"><span class="comment">SHA256:i8q+LtcWX0OvkJMEwyCGVPeL6ar63YPlcHaZaUnAAqM.</span></span><br><span class="line"><span class="comment">Please contact your system administrator.</span></span><br><span class="line"><span class="comment">Add correct host key in C:\\Users\\Administrator/.ssh/known_hosts to get rid of this message.</span></span><br><span class="line"><span class="comment">Offending ECDSA key in C:\\Users\\Administrator/.ssh/known_hosts:4</span></span><br><span class="line"><span class="comment">ECDSA host key for 8.138.119.94 has changed and you have requested strict checking.</span></span><br><span class="line"><span class="comment">Host key verification failed.</span></span><br></pre></td></tr></table></figure><p>只要找到<code>C:\Users\计算机用户名\.ssh</code>删除<code>known_hosts</code>，再次ssh连接就好了。</p><h1 id="安装常用软件"><a href="#安装常用软件" class="headerlink" title="安装常用软件"></a><strong>安装常用软件</strong></h1><p>在 Linux 使用过程中，经常会用到一些软件包及其指令，所以这里先安装上，免得报错。</p><figure class="highlight powershell"><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">apt update <span class="literal">-y</span>  <span class="comment"># 更新系统软件包列表</span></span><br><span class="line"></span><br><span class="line">apt install <span class="built_in">wget</span> <span class="built_in">curl</span> sudo vim git lsof <span class="literal">-y</span>  <span class="comment"># Debian 新装的系统比较干净，安装一些常用的软件</span></span><br></pre></td></tr></table></figure><h1 id="VPS性能测试"><a href="#VPS性能测试" class="headerlink" title="VPS性能测试"></a><strong>VPS性能测试</strong></h1><p>这里提供本人CloudCone DC1 2h2g小鸡的测试过程和数据。</p><p>测试完性能可以重装系统，或者手动DD为纯净系统。</p><h2 id="查看IP是否可用-申请工单更换IP"><a href="#查看IP是否可用-申请工单更换IP" class="headerlink" title="查看IP是否可用&#x2F;申请工单更换IP"></a><strong>查看IP是否可用&#x2F;申请工单更换IP</strong></h2><p>首先先<code>ping</code>一下你的IP，如果超时，则IP被墙了，就摧毁实例，等几个小时别人买了这个台VPS你再买个新的再试试看其他IP是否可用。</p><p>或者直接花费$2换IP，点击cc官网顶部导航的<code>Support-&gt;Support Tickets-&gt;Create New Ticket</code>新建一个工单：</p><figure class="highlight markdown"><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">Subject：Change IP Request</span><br><span class="line"></span><br><span class="line">Ticket：Hello, my VPS cannot be accessed in China. I&#x27;m willing to use the $2 in my account to change to an IP address that can be used in China. Thank you!</span><br><span class="line"></span><br><span class="line">Related Instance:选择你的VPS</span><br></pre></td></tr></table></figure><p>点击你的头像-&gt;Billing-&gt;Add funs，可选择Paypal或Alipay预存2美刀。</p><p>我是3小时内回复已受理，3天内回复已完成更换IP并给出新IP(工作日更快)。</p><h2 id="站长工具-测试回国延时-全球-ping"><a href="#站长工具-测试回国延时-全球-ping" class="headerlink" title="站长工具 测试回国延时&#x2F;全球 ping"></a><a href="https://ping.chinaz.com/"><strong>站长工具</strong></a> <strong>测试回国延时&#x2F;全球 ping</strong></h2><p>测试网址：<a href="https://ping.chinaz.com/142.171.245.130">https://ping.chinaz.com/xxx.xxx.xxx.xxx</a> ，将末尾改成你的VPS的IP。</p><p>通过站长工具的<strong>ping检测</strong>，可以快速和直观地了解你的服务器在国内各省和主要外国的访问延迟(分别1~2个测试节点)。红的再测几次可能就不红了。<br>【chinaz.png】</p><h2 id="ping-pe测试全球延迟"><a href="#ping-pe测试全球延迟" class="headerlink" title="ping.pe测试全球延迟"></a><a href="http://ping.pe/"><strong>ping.pe</strong></a><strong>测试全球延迟</strong></h2><p>测试网址：<a href="https://ping.pe/142.171.245.130">https://ping.pe/xxx.xxx.xxx.xxx</a> ，将末尾改成你的VPS的IP。</p><p>可以测试VPS到国内外一些主要城市的延迟和丢包率，更好地了解自己服务器在全球范围内的访问体验。打开后让它测一会儿再看数据。</p><p>【图片ping-pe.png】</p><h2 id="融合怪测评脚本"><a href="#融合怪测评脚本" class="headerlink" title="融合怪测评脚本"></a><strong>融合怪测评脚本</strong></h2><p>机器性能利用融合怪脚本（缝合了常用测试脚本）进行一次完整的测试就够了。Github项目地址：<a href="https://github.com/spiritLHLS/ecs">VPS融合怪服务器测评脚本</a></p><p>该脚本能测试 VPS 的 CPU、磁盘IO、流媒体解锁、端口25(邮箱)、三网回程、回程路由等数据</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 为避免各种奇怪bug，最好以root用户在/root下执行脚本</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> /</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装脚本 &amp; 赋予执行权限 &amp; 启动</span></span><br><span class="line"></span><br><span class="line">curl -L https://github.com/spiritLHLS/ecs/raw/main/ecs.sh -o ecs.sh &amp;&amp; <span class="built_in">chmod</span> +x ecs.sh &amp;&amp; bash ecs.sh</span><br></pre></td></tr></table></figure><p>脚本启动后，选择<code>1</code>，进行一次完整测试。</p><p>第一次测试结果：<a href="https://paste.spiritlhl.net/u/m9cZml.txt">https://paste.spiritlhl.net/u/m9cZml.txt</a></p><p>第二次测试结果：<a href="https://paste.spiritlhl.net/u/nfHN05.txt">https://paste.spiritlhl.net/u/nfHN05.txt</a></p><h2 id="流媒体检测"><a href="#流媒体检测" class="headerlink" title="流媒体检测"></a><strong>流媒体检测</strong></h2><p>一键检测以下流媒体：Netflix、YouTube、BiliBili、TikTok、iQIYI、ChatGPT</p><p>我的结果是Netflex仅自制，B站No，其他Yes)</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- https:<span class="regexp">//gi</span>thub.com<span class="regexp">/yeahwu/</span>check<span class="regexp">/raw/m</span>ain/check.sh | bash</span><br></pre></td></tr></table></figure><h2 id="硬件简单查看指令"><a href="#硬件简单查看指令" class="headerlink" title="硬件简单查看指令"></a><strong>硬件简单查看指令</strong></h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 系统内核 5.10.0-8-amd64</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 系统版本 Debian GNU/Linux 11 (bullseye)</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># CPU信息</span></span><br><span class="line">lscpu</span><br><span class="line"><span class="comment"># Model name: Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz</span></span><br><span class="line"><span class="comment"># CPU MHz: 2699.998</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 本机IP</span></span><br><span class="line">curl ip.sb</span><br></pre></td></tr></table></figure><p><strong>性能测试完后，删除测试脚本：</strong></p><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># 列出文件清单</span><br><span class="line"></span><br><span class="line"><span class="keyword">ls</span> -<span class="keyword">la</span></span><br><span class="line"></span><br><span class="line"># 找到.<span class="keyword">sh</span>文件并删除</span><br><span class="line"></span><br><span class="line"><span class="keyword">rm</span> xxx.<span class="keyword">sh</span></span><br></pre></td></tr></table></figure><h1 id="安装Web服务器"><a href="#安装Web服务器" class="headerlink" title="安装Web服务器"></a>安装Web服务器</h1><p>服务器本身不提供web服务，需要安装web服务器软件。</p><p>可以选择安装 <strong>Nginx</strong> 或 <strong>Nginx Proxy Manager</strong>。前者适合科班人员学习，后者适合非IT人士使用。</p><p>安装NPM可以查看文章：<a href="https://lumengde.com/archives/vps-project-npm">【VPS实用项目】Nginx 管理器 | Nginx Proxy Manager | 反向代理神器</a></p><p><strong>安装Nginx(可选)：</strong></p><ul><li>官方安装教程：<a href="https://nginx.org/en/linux_packages.html#Debian">nginx: Linux packages</a></li><li>同上，中文翻译版：<a href="https://www.linuxmi.com/debian-11-nginx.html">如何在 Debian 11 上安装和配置 Nginx - Linux迷 (linuxmi.com)</a></li></ul><p><strong>注意：装了Nginx Proxy Manager后，可以不装Nginx，否则80和443端口会冲突！当然也可以谷歌看看怎么解决。</strong></p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新系统的软件包列表</span></span><br><span class="line">sudo apt update</span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载应用程序时安装 gnupg2 以获得安全的通信通道。</span></span><br><span class="line">sudo apt install curl gnupg2 ca-certificates lsb-release debian-keyring</span><br><span class="line"></span><br><span class="line"><span class="comment"># 从 Nginx 获取官方签名密钥以验证软件包的真实性。</span></span><br><span class="line">curl https:<span class="string">//nginx.org/keys/nginx_signing.key</span> | gpg <span class="params">--dearmor</span> \</span><br><span class="line">    | sudo tee <span class="string">/usr/share/keyrings/nginx-archive-keyring.gpg</span> &gt;<span class="string">/dev/null</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证下载的文件是否包含正确的密钥；</span></span><br><span class="line">gpg <span class="params">--dry-run</span> <span class="params">--quiet</span> <span class="params">--import</span> <span class="params">--import-options</span> import-show <span class="string">/usr/share/keyrings/nginx-archive-keyring.gpg</span></span><br><span class="line"><span class="comment"># 输出应包含指纹：573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62,如果指纹不对，请删除该文件</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 在您的系统上注册并设置 Nginx 存储库以获得稳定的软件包，这对于生产和安全环境非常重要</span></span><br><span class="line"><span class="keyword">echo</span> <span class="string">&quot;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \</span></span><br><span class="line"><span class="string">http://nginx.org/packages/debian lsb_release -cs nginx&quot;</span> \</span><br><span class="line">    | sudo tee <span class="string">/etc/apt/sources.list.d/nginx.list</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置存储库固定以优先选择官方的包而不是发行版提供的包</span></span><br><span class="line"><span class="keyword">echo</span> -e <span class="string">&quot;Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n&quot;</span> \</span><br><span class="line">    | sudo tee <span class="string">/etc/apt/preferences.d/99nginx</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装Nginx服务器</span></span><br><span class="line">sudo apt update</span><br><span class="line">sudo apt install nginx</span><br></pre></td></tr></table></figure><p>基本指令</p><figure class="highlight nsis"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启动</span></span><br><span class="line">sudo <span class="params">system</span>ctl start nginx</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看</span></span><br><span class="line">sudo <span class="params">system</span>ctl status nginx</span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启</span></span><br><span class="line">sudo <span class="params">system</span>ctl restart nginx</span><br><span class="line"></span><br><span class="line"><span class="comment"># 开机自启动</span></span><br><span class="line">sudo <span class="params">system</span>ctl enable nginx</span><br></pre></td></tr></table></figure><p>可在浏览器输入<code>VPS-IP:80</code>查看Nginx的index页面</p><p><strong>补充：</strong></p><p>新版Nginx没有sites-available 和 sites-enabled目录，直接以在 conf.d 里配置default.conf 就好了 </p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">cd</span> /etc/nginx/<span class="keyword">conf</span>.d</span><br><span class="line"><span class="keyword">cp</span> default.<span class="keyword">conf</span> default.<span class="keyword">conf</span>.bak</span><br><span class="line"><span class="keyword">vim</span> default.<span class="keyword">conf</span>      </span><br></pre></td></tr></table></figure><h1 id="DD纯净系统-可选"><a href="#DD纯净系统-可选" class="headerlink" title="DD纯净系统(可选)"></a><strong>DD纯净系统(可选)</strong></h1><p>咕咕鸽的DD脚本我用不来，网上又找了个。</p><p><a href="https://www.idcoffer.com/archives/4870">腾讯云一键dd脚本、Linux NetBoot一键脚本，支持Ubuntu、Debian和CentOS系统</a></p><h1 id="添加-SWAP-虚拟内存-可选"><a href="#添加-SWAP-虚拟内存-可选" class="headerlink" title="添加 SWAP 虚拟内存(可选)"></a><strong>添加 SWAP 虚拟内存(可选)</strong></h1><p>注意：VPS 的内存如果过小，建议设置一下 SWAP，一般设为内存的 1-1.5 倍即可，可以让系统运行更流畅！</p><p>CloudCone默认设置了1G的SWAP</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">root</span>@lumengde:/# free -h</span><br><span class="line">               <span class="attribute">total</span>        used        free      shared  buff/cache   available</span><br><span class="line"><span class="attribute">Mem</span>:           <span class="number">1</span>.<span class="number">9</span>Gi        <span class="number">51</span>Mi       <span class="number">1</span>.<span class="number">8</span>Gi       <span class="number">1</span>.<span class="number">0</span>Mi        <span class="number">93</span>Mi       <span class="number">1</span>.<span class="number">8</span>Gi</span><br><span class="line"><span class="attribute">Swap</span>:          <span class="number">1</span>.<span class="number">0</span>Gi          <span class="number">0</span>B       <span class="number">1</span>.<span class="number">0</span>Gi</span><br></pre></td></tr></table></figure><p>设置 SWAP 可以用脚本:</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O <span class="type">box</span>.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-<span class="type">BOX</span>/main/<span class="type">box</span>.sh &amp;&amp; chmod +x <span class="type">box</span>.sh &amp;&amp; clear &amp;&amp; ./<span class="type">box</span>.sh</span><br></pre></td></tr></table></figure><p>选择 <code>18</code>，然后输入你想要扩容的数值即可。</p><h1 id="添加新用户-赋予sudo权限-禁止root登录-可选"><a href="#添加新用户-赋予sudo权限-禁止root登录-可选" class="headerlink" title="添加新用户+赋予sudo权限+禁止root登录(可选)"></a><strong>添加新用户+赋予sudo权限+禁止root登录(可选)</strong></h1><p><strong>提示：这是补充知识，学习一下即可。若是生产环境，最好禁一下root保证安全。</strong></p><blockquote><p>原因：VPS 默认用户名为root，默认端口22，公网IP已知，所以一旦密码被黑客破解，就能在你的服务器中肆意破坏。</p><p>目的：禁止root登录可以降低系统被黑客攻击的风险，增强服务器的安全性和稳定性。</p><p>好处：通过普通用户管理服务器，需要时通过sudo指令来提权，好处是限制了对系统的操作权限，减少了系统被破坏的风险。此外，一个用户对应一个业务，能降低业务之间的相互影响和干扰，便于管理。</p><p>例如：部署站点的管理员为www，Git仓库管理员为git</p></blockquote><p><strong>参考文章：</strong></p><ul><li><a href="https://blog.51cto.com/yangxingzhen/5980421">CentOS 7.4禁止root用户登录并添加sudo权限管理_51CTO博客_centos创建用户并添加sudo权限</a></li><li><a href="https://blog.csdn.net/qq_34627459/article/details/71601005">centos添加普通用户禁止root登录并添加sudo权限_centos禁止普通用户通过sudo修改某个文件-CSDN博客</a></li></ul><p><strong>创建一个普通用户</strong></p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">adduser username</span></span><br></pre></td></tr></table></figure><p>username 可自定义。然后输入对应的密码(不可见)，基本信息直接回车就行。</p><p><strong>授予普通用户sudo权限</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 获取修改权限</span></span><br><span class="line"><span class="built_in">chmod</span> 740 /etc/sudoers</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑文件</span></span><br><span class="line">vim /etc/sudoers</span><br></pre></td></tr></table></figure><blockquote><p><strong>vim</strong>使用方法。vim指令打开文件后：</p><p>按<code>i</code>进入编辑模式，此时文件可修改</p><p>修改完成按<strong>ESC</strong>退出编辑模式</p><p>按住 <strong>shift + :</strong> 出现冒号，输入**wq!**即可强制保存文件并退出。</p><p> <code>w</code>为保存，<code>q</code>为退出，<code>!</code>为强制</p><p>按住<code>shift + insert</code>为粘贴（笔记本的insert在小键盘的0那里）</p></blockquote><p>找到以下内容：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">## User privilege specification</span></span><br><span class="line"><span class="attribute">root</span>    <span class="literal">ALL</span>=(<span class="literal">ALL</span>:<span class="literal">ALL</span>) <span class="literal">ALL</span></span><br></pre></td></tr></table></figure><p>在下方添加一行内容：<code>username ALL=(ALL:ALL) ALL</code>，然后 <strong>wq</strong> 保存退出。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 还原修改权限</span></span><br><span class="line"><span class="built_in">chmod</span> 440 /etc/sudoers</span><br></pre></td></tr></table></figure><p>刷新权限：</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">systemctl restart sshd</span></span><br></pre></td></tr></table></figure><p>此时，普通用户使用 <em>sudo</em> 可以暂时获得root用户的权限，但只限于本条指令，以执行特定命令或访问特定文件。</p><p><strong>禁止root登录</strong></p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim <span class="regexp">/etc/</span>ssh/sshd_config</span><br></pre></td></tr></table></figure><p>在最后找到 PermitRootLogin yes，把 yes 改为 no，然后 wq! 保存退出。</p><p>刷新权限：</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">systemctl restart sshd</span></span><br></pre></td></tr></table></figure><blockquote><p>补充知识</p><p>可以<strong>chmod 740 &#x2F;etc&#x2F;sudoers</strong>获取修改权限，然后修改文件，再 <strong>chmod 440 &#x2F;etc&#x2F;sudoers</strong> 修改为只读权限。<strong>sshd_config</strong> 同理。这种做法安全性高且操作可控。而 <strong>wq!</strong> 更快捷但是不安全，无法清晰地追踪修改历史。</p><p> <code>whereis sudoers</code>指令可以列出 <strong>sudoers</strong> 关键词在哪些路径里出现过</p></blockquote><p><strong>验证root登录</strong></p><p>此时终端先断开当前连接，然后重新连接。会发现无法连接，即使你输入正确的密码，也无法连接。</p><p>在FinalShell中新建会话，以<strong>SSH远程连接</strong>方式登录，用户名和密码填刚才新加的，发现连接成功。</p><p>如果是<strong>SSH密钥对连接</strong>，可以用这个指令登录：<code>ssh your_username@your_server_ip</code></p><p><strong>验证sudo提权</strong></p><figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">romender<span class="variable">@iZ7xvcu671mq0lrlzj6sbqZ</span><span class="symbol">:~</span><span class="variable">$ </span>ls -l /root</span><br><span class="line"><span class="symbol">ls:</span> cannot open directory <span class="string">&#x27;/root&#x27;</span>: <span class="title class_">Permission</span> denied</span><br><span class="line">romender<span class="variable">@iZ7xvcu671mq0lrlzj6sbqZ</span><span class="symbol">:~</span><span class="variable">$ </span>sudo ls -l /root</span><br><span class="line"><span class="title class_">We</span> trust you have received the usual lecture from the local <span class="title class_">System</span></span><br><span class="line"><span class="title class_">Administrator</span>. <span class="title class_">It</span> usually boils down to these three <span class="symbol">things:</span></span><br><span class="line">    <span class="comment">#1) Respect the privacy of others.</span></span><br><span class="line">    <span class="comment">#2) Think before you type.</span></span><br><span class="line">    <span class="comment">#3) With great power comes great responsibility.</span></span><br><span class="line">[sudo] password <span class="keyword">for</span> <span class="symbol">romender:</span></span><br><span class="line">total <span class="number">0</span></span><br><span class="line">romender<span class="variable">@iZ7xvcu671mq0lrlzj6sbqZ</span><span class="symbol">:~</span>$</span><br></pre></td></tr></table></figure><p>普通用户查看root目录：<strong>ls -l &#x2F;root</strong>，权限不够被拒绝。使用sudo提权：<strong>sudo ls -l &#x2F;root</strong>，输入密码后可以查看，sudo授权成功。</p>]]></content>
    
    
    <summary type="html">新买的VPS，利用站长工具、ping.pe和融合怪测评脚本进行测试，以及介绍了一些VPS的基本使用</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="VPS项目搭建" scheme="https://lumengde123.github.io/tags/VPS%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA/"/>
    
  </entry>
  
  <entry>
    <title>使用Django快速搭建web网站 | 实现简单注册登录功能</title>
    <link href="https://lumengde123.github.io/posts/1ea.html"/>
    <id>https://lumengde123.github.io/posts/1ea.html</id>
    <published>2024-06-17T09:09:39.000Z</published>
    <updated>2024-06-17T09:19:04.412Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>最近抄了个html+css+js实现的影视页面，想用后端实现动态加载内容，但是学习时间不够。之前毕设用到了Django，所以打算重新捡起之前的知识，用Django作为影视网站的后端（还自带后台管理系统），顺便做好笔记防止再次遗忘。</p><p>本篇参考教程：<a href="https://www.bilibili.com/video/BV1wT4y1j71A/"><strong>20分钟快速用django+mysql+pycharm搭建一个自己的web网站</strong></a></p><h1 id="环境准备"><a href="#环境准备" class="headerlink" title="环境准备"></a><strong>环境准备</strong></h1><p>Django的使用需要用到Python、Pycharm、MySQL、Navicat(可选)等。</p><p><strong>Python 3.12.2</strong></p><p>官网地址：<a href="https://www.python.org/">https://www.python.org/</a></p><p>下载：打开官网-&gt;点击downloads -&gt; all releases -&gt; 选择版本，点击download（旧版本3.10不支持下载了，目前最新为3.12.2版本）-&gt;在下方的Flies里选择<strong>Windows installer (64-bit)</strong> <a href="https://www.python.org/ftp/python/3.12.2/python-3.12.2-amd64.exe">【点此下载】</a></p><p>安装：打开安装包 -&gt; 勾选下面两个配置，选择Customize installation-&gt;点击Next，自定义安装位置，点击Disable Path Length Limit。</p><p>注意：自定义路径记得多加上一层文件夹，安装完别移动，否则自动添加的环境变量可能失效，安装程序也无法卸载移动后的程序。</p><p>在cmd中，输入 <code>python</code> 和<code>pip -V</code>，如果能看到版本信息则配置成功。</p><figure class="highlight apache"><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="attribute">C</span>:\Users\Administrator&gt;pip -V</span><br><span class="line"><span class="attribute">pip</span> <span class="number">24</span>.<span class="number">0</span> from D:\Program Files\Python\Python312\Lib\site-packages\pip (python <span class="number">3</span>.<span class="number">12</span>)</span><br><span class="line"><span class="attribute">C</span>:\Users\Administrator&gt;python</span><br><span class="line"><span class="attribute">Python</span> <span class="number">3</span>.<span class="number">12</span>.<span class="number">2</span> (tags/v3.<span class="number">12</span>.<span class="number">2</span>:<span class="number">6</span>abddd9, Feb  <span class="number">6</span> <span class="number">2024</span>, <span class="number">21</span>:<span class="number">26</span>:<span class="number">36</span>)<span class="meta"> [MSC v.1937 64 bit (AMD64)] on win32</span></span><br><span class="line"><span class="meta">Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt;</span></span><br></pre></td></tr></table></figure><p><strong>PyCharm Community Edition</strong></p><p>官网地址：<a href="https://www.jetbrains.com/pycharm/">https://www.jetbrains.com/pycharm/</a></p><p>下载：打开官网，点击Download，滑动到下方，下载PyCharm Community Edition(社区版免费使用)，<a href="https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC"><strong>点此下载</strong></a></p><p>安装：打开安装包-&gt;自定义安装路径，全勾选，安装即可</p><p><strong>MySQL 8.3.0</strong></p><p>官网地址：<a href="https://www.mysql.com/">https://www.mysql.com/</a></p><p>下载：<a href="https://dev.mysql.com/downloads/file/?id=526084">点击此链接</a> 下载最新版msi文件</p><p>安装：请阅读 <a href="https://blog.csdn.net/qq_53153755/article/details/136964335"><strong>全网最简单的Mysql 8.3 安装及环境配置教程</strong></a></p><ul><li>安装：双击，Typical，…选择安装路径…密码建议root，Sample Databases可选勾选创建，点击Copy Log to Clipboard，Finish。</li><li>配置：按win键打开MySQL并登录。win+R 打开services.msc，找到并双击MySQL83，复制到bin路径。按win搜<code>编辑系统环境变量</code>，修改环境变量，在系统变量-path中添加刚才复制的bin路径，三次确定完成配置。按win搜cmd，管理员身份打开，输入<code>mysql -V</code>显示版本则安装成功。</li></ul><p><strong>Navacat 16</strong></p><p>Navicat用来可视化操作数据库数据。</p><p>脚本之家破解版安装教程：<a href="https://www.jb51.net/database/710931.html">https://www.jb51.net/database/710931.html</a></p><h1 id="创建Django项目"><a href="#创建Django项目" class="headerlink" title="创建Django项目"></a><strong>创建Django项目</strong></h1><p>打开终端，cd进入自定义的Django文件夹</p><figure class="highlight mathematica"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">mkdir</span> <span class="built_in">D</span><span class="operator">:</span>\<span class="variable">Coding</span>\<span class="variable">djangoProject</span></span><br><span class="line"><span class="built_in">D</span><span class="operator">:</span></span><br><span class="line"><span class="variable">cd</span> <span class="built_in">D</span><span class="operator">:</span>\<span class="variable">Coding</span>\<span class="variable">djangoProject</span></span><br></pre></td></tr></table></figure><p>安装虚拟环境工具：</p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip <span class="keyword">install</span> virtualenv</span><br></pre></td></tr></table></figure><p>创建虚拟环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">virtualenv <span class="built_in">env</span></span><br></pre></td></tr></table></figure><p>激活虚拟环境（虚拟环境env会自带python和pip）：</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">env\scripts\<span class="built_in">activate</span></span><br></pre></td></tr></table></figure><blockquote><p>不创建虚拟环境则 pip install 默认会安装到 G:\python-3.10.3\Scripts</p><p>使用虚拟环境的好处是每个项目有各自相互隔离的独自的依赖库，不会相互影响，并且能将项目与其环境隔离开来方便管理。</p><p>创建的env自带python和pip工具</p></blockquote><p>在env中安装Django：</p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip <span class="keyword">install</span> django</span><br></pre></td></tr></table></figure><p>创建Django项目：</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">django-admin startproject mysite</span></span><br></pre></td></tr></table></figure><p>停用虚拟环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">env</span>\scripts\deactivate</span><br></pre></td></tr></table></figure><p>将<code>env</code>文件移动到<code>D:\Coding\djangoProject\mysite</code>里，用Pycharm打开<code>mysite</code>文件夹。</p><p>在左下角打开Terminal（注意左侧是否有env启动标志），输入命令启动项目：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">python</span> manage.<span class="keyword">py</span> runserver</span><br></pre></td></tr></table></figure><p>在浏览器打开<code>http://127.0.0.1:8000/</code>，能看到小火箭则项目成功启动。在下方可以查看文档和官方入门教程。</p><p>在Terminal中按<code>ctrl + c</code>可关闭项目。</p><p>【小火箭的图】</p><h1 id="创建自己的网站应用"><a href="#创建自己的网站应用" class="headerlink" title="创建自己的网站应用"></a>创建自己的网站应用</h1><p>打开<code>settings.py</code>，在最下方设置语言和时区</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">LANGUAGE_CODE</span> = <span class="string">&#x27;zh-hans&#x27;</span> </span><br><span class="line"></span><br><span class="line"><span class="attr">TIME_ZONE</span> = <span class="string">&#x27;Asia/Shanghai&#x27;</span></span><br></pre></td></tr></table></figure><blockquote><p>Django项目由多个应用组成，每个应用负责一个业务。这里创建movies应用，负责影视网站的业务。</p></blockquote><p>创建APP：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">python</span> manage.<span class="keyword">py</span> startapp movies</span><br></pre></td></tr></table></figure><p>在settings.py中注册APP：</p><figure class="highlight sml"><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="type">INSTALLED_APPS</span> = [      # 都是<span class="type">Django</span>内置的一些功能，依赖于<span class="type">Django</span>的表</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.admin&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.auth&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.contenttypes&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.sessions&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.messages&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;django</span>.contrib.staticfiles&#x27;,</span><br><span class="line">    <span class="symbol">&#x27;movies</span>.apps.<span class="type">MoviesConfig&#x27;</span>,     # 注册movies应用，逗号别漏了</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>修改mysite的urls.py文件内容如下：</p><figure class="highlight pgsql"><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"># mysite/urls.py</span><br><span class="line"><span class="keyword">from</span> django.contrib <span class="keyword">import</span> <span class="keyword">admin</span></span><br><span class="line"><span class="keyword">from</span> django.urls <span class="keyword">import</span> <span class="type">path</span>, <span class="keyword">include</span></span><br><span class="line"></span><br><span class="line">urlpatterns = [</span><br><span class="line">    path(<span class="string">&#x27;admin/&#x27;</span>, <span class="keyword">admin</span>.site.urls),</span><br><span class="line">    path(<span class="string">&#x27;movies/&#x27;</span>, <span class="keyword">include</span>(<span class="string">&#x27;movies.urls&#x27;</span>)),</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>新建movies的urls.py内容如下：</p><figure class="highlight clean"><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"># movies/urls.py</span><br><span class="line"><span class="keyword">from</span> django.urls <span class="keyword">import</span> path</span><br><span class="line"><span class="keyword">from</span> . <span class="keyword">import</span> views</span><br><span class="line"></span><br><span class="line">urlpatterns = [</span><br><span class="line">    path(<span class="string">&#x27;&#x27;</span>, views.toLogin_view ),  # 默认进入toLogin_view视图</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>修改movies的views.py内容如下：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> django.shortcuts <span class="keyword">import</span> render</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">toLogin_view</span>(<span class="params">request</span>):</span><br><span class="line">    <span class="keyword">return</span> render(request, <span class="string">&#x27;login.html&#x27;</span>)</span><br></pre></td></tr></table></figure><p>创建模板：在movies文件夹下创建templates文件夹用来存放模板</p><p>编写模板：在templates模板下创建login.html并编写登录界面</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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">&quot;UTF-8&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">title</span>&gt;</span>登录<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">form</span>&gt;</span> </span><br><span class="line">    <span class="tag">&lt;<span class="name">p</span>&gt;</span>这是一个登录网站<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>配置模板路径：<a href="http://在settings.py/">在settings.py</a>的TEMPLATES的DIR一行改为：</p><figure class="highlight lua"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&#x27;DIRS&#x27;</span>: [<span class="built_in">os</span>.<span class="built_in">path</span>.join(BASE_DIR, <span class="string">&#x27;templates&#x27;</span>)],</span><br></pre></td></tr></table></figure><p>并在顶部添上<code>import os</code>防止报错</p><p>此时启动项目，打开<a href="http://127.0.0.1:8000/movies/">http://127.0.0.1:8000/movies/</a> 能看到login.html页面</p><h1 id="MTV概念"><a href="#MTV概念" class="headerlink" title="MTV概念"></a><strong>MTV概念</strong></h1><p>MTV 是 Django 框架中的一个核心概念，它是一种基于模型（Model）、模板（Template）、视图（View）的设计模式，用于构建 Web 应用程序，与MVC模式相近。</p><p>简单来讲：</p><ul><li><strong>模型（Model）</strong>：定义数据结构和行为，通常由 Python 类表示，与数据库中的表相对应。</li><li><strong>视图（View）</strong>：处理用户请求的逻辑，接收 HTTP 请求并返回 HTTP 响应，负责将模型和模板之间的交互结合起来。</li><li><strong>模板（Template）</strong>：表示用户界面的呈现，包含 HTML 结构和 Django 模板语言，用于动态地将数据呈现给用户。</li></ul><p>【MTV的图】</p><p>在上面的例子中，浏览器访问网站时，通过mysite的urls匹配到’&#x2F;movies’，转到movies的urls中，匹配到’’，通过movies的views中的toLogin_view视图来处理请求逻辑，即渲染login.html并返回给浏览器，由于还没用到数据库，所以没有涉及Model。</p><h1 id="ORM概念"><a href="#ORM概念" class="headerlink" title="ORM概念"></a><strong>ORM概念</strong></h1><p>Django引入了ORM的概念（全称Object Relational Mapping，即对象关系映射），对于与数据库的交互，我们无需再去编写原生sql，取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等，ORM会将Model里的Python代码转换&#x2F;映射成为 SQL 语句，SQL 语句通过 pymysql 传送到数据库服务端，在数据库中执行 SQL 语句并将结果返回。</p><blockquote><p>了解相关知识请阅读：<a href="https://blog.csdn.net/weixin_47035302/article/details/131423759">Django之ORM</a></p></blockquote><p>【ORM的图】</p><p>通过编写Model的代码，ORM框架自动将代码转换为对应的sql语句。开发人员无需考虑SQL的优化和数据库迁移问题，ORM都帮我们做好了优化且支持多种数据库，大大的提升了开发效率。</p><h1 id="连接到MySQL数据库"><a href="#连接到MySQL数据库" class="headerlink" title="连接到MySQL数据库"></a>连接到MySQL数据库</h1><p><strong>通过pymysql模块连接</strong></p><p><strong>1.安装pymysql模块</strong></p><p>在<code>左上角Main Menu-&gt;File-&gt;Settings-&gt; Project: mysite -&gt; Python Interpreter</code>，这里可以看到当前项目的env里已安装的依赖</p><p>点<code>+号 -&gt; 输入pymysql -&gt; 点击下方install package</code></p><p>（以上两步也可以在Terminal里输入 pip install pymysql实现）</p><p><strong>2.生成数据库</strong></p><p>打开Navicat-&gt;连接-&gt;MySQL，连接名自定义，密码为root，确定。双击连接名激活后Navicat成功连接MySQL</p><p>右击连接名，新建数据库，库名 mysite，字符集 utf8mb3，排序规则utf8_general_ci（库内不区分大小写）</p><p>（以上两步也可以打开MySQL Command Line Clint通过<code>create database mydb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;</code>指令创建数据库）</p><p><strong>3.Django连接MySQL数据库</strong></p><p>修改项目文件mysite&#x2F;settings.py中DATABASES的内容，设置连接MySQL数据库（Django默认使用的是sqllite数据库）</p><figure class="highlight 1c"><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">DATABASES = &#123;</span><br><span class="line">    &#x27;default&#x27;: &#123;</span><br><span class="line">        &#x27;ENGINE&#x27;: &#x27;django.db.backends.mysql&#x27;,</span><br><span class="line">        &#x27;NAME&#x27;: &#x27;test&#x27;,</span><br><span class="line">        &#x27;USER&#x27;: &#x27;root&#x27;,</span><br><span class="line">        &#x27;PASSWORD&#x27;: &#x27;root&#x27;,</span><br><span class="line">        &#x27;HOST&#x27;: &#x27;127.0.0.1&#x27;,</span><br><span class="line">        &#x27;PORT&#x27;: &#x27;<span class="number">3306</span>&#x27;,</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>修改 mysite&#x2F;init.py 文件，告诉Django使用 pymysql 模块连接MySQL数据库</p><figure class="highlight elm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> pymysql</span><br><span class="line"><span class="title">pymysql</span>.install_as_MySQLdb()</span><br></pre></td></tr></table></figure><p>这样mysite项目就连接上了MySQL中的 mysite 数据库。在Terminal中按<code>ctrl+c</code>先关闭正在运行的项目</p><p>（以上还可以用mysqlclient模块连接，似乎效果更好）</p><p><strong>4.数据迁移，创建管理员账号并进入后台</strong></p><p>然后执行迁移，将项目中原有的应用的模型同步迁移到数据库</p><p>输入 <code>py manage.py migrate </code>，此时就把项目中自带的应用的模型映射到了数据库中</p><p>输入 <code>py manage.py createsuperuser</code> 创建项目的管理员账号(默认账户名为administrator)</p><p>重新启动项目，输入网址：<a href="http://127.0.0.1:8000/admin">http://127.0.0.1:8000/admin</a> 就进入了Django自带的后台登录界面</p><h1 id="设计模型、模板和视图"><a href="#设计模型、模板和视图" class="headerlink" title="设计模型、模板和视图"></a>设计模型、模板和视图</h1><p>前面创建项目并连接上数据库，可以成功进入登录界面</p><p>接下来就是设计登录注册界面及其业务逻辑</p><p>直接贴代码：</p><p><strong>login.html</strong></p><figure class="highlight django"><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"><span class="language-xml"><span class="meta">&lt;!DOCTYPE <span class="keyword">html</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">html</span> <span class="attr">lang</span>=<span class="string">&quot;en&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">&quot;UTF-8&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">title</span>&gt;</span>登录<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">form</span> <span class="attr">action</span>=<span class="string">&quot;/movies/index/&quot;</span> <span class="attr">method</span>=<span class="string">&quot;post&quot;</span>&gt;</span> </span></span><br><span class="line"><span class="language-xml">    </span><span class="template-tag">&#123;% <span class="name"><span class="name">csrf_token</span></span> %&#125;</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">label</span>&gt;</span>用户名： <span class="tag">&lt;/<span class="name">label</span>&gt;</span><span class="tag">&lt;<span class="name">input</span> <span class="attr">name</span>=<span class="string">&quot;user&quot;</span>/&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">label</span>&gt;</span>密码： <span class="tag">&lt;/<span class="name">label</span>&gt;</span><span class="tag">&lt;<span class="name">input</span> <span class="attr">name</span>=<span class="string">&quot;pwd&quot;</span>/&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;submit&quot;</span> <span class="attr">value</span>=<span class="string">&quot;登录&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;/movies/to_register/&quot;</span>&gt;</span>注册<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span></span><br></pre></td></tr></table></figure><p><strong>register.html</strong></p><figure class="highlight django"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="meta">&lt;!DOCTYPE <span class="keyword">html</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">html</span> <span class="attr">lang</span>=<span class="string">&quot;en&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">&quot;UTF-8&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">title</span>&gt;</span>注册<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">form</span> <span class="attr">action</span>=<span class="string">&quot;/movies/register/&quot;</span> <span class="attr">method</span>=<span class="string">&quot;post&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    </span><span class="template-tag">&#123;% <span class="name"><span class="name">csrf_token</span></span> %&#125;</span><span class="language-xml"></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">label</span>&gt;</span>用户名： <span class="tag">&lt;/<span class="name">label</span>&gt;</span><span class="tag">&lt;<span class="name">input</span> <span class="attr">name</span>=<span class="string">&quot;user&quot;</span>/&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">label</span>&gt;</span>密码： <span class="tag">&lt;/<span class="name">label</span>&gt;</span><span class="tag">&lt;<span class="name">input</span> <span class="attr">name</span>=<span class="string">&quot;pwd&quot;</span>/&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">    <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;submit&quot;</span> <span class="attr">value</span>=<span class="string">&quot;注册&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span></span><br></pre></td></tr></table></figure><p>csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。需要在form表单里加上。</p><p><strong>movies&#x2F;urls.py</strong></p><figure class="highlight pgsql"><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">from</span> django.urls <span class="keyword">import</span> <span class="type">path</span></span><br><span class="line"><span class="keyword">from</span> . <span class="keyword">import</span> views</span><br><span class="line"></span><br><span class="line">urlpatterns = [</span><br><span class="line">    path(<span class="string">&#x27;&#x27;</span>, views.toLogin_view ),</span><br><span class="line">    path(<span class="string">&#x27;index/&#x27;</span>, views.Login_view ),</span><br><span class="line">    path(<span class="string">&#x27;to_register/&#x27;</span>, views.toRegister_view ),</span><br><span class="line">    path(<span class="string">&#x27;register/&#x27;</span>, views.Register_view ),</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p><strong>movies&#x2F;models.py</strong></p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> django.db import models</span><br><span class="line"></span><br><span class="line">class UserInfo(models.Model):   # Django的Model在MySQL数据库中其实就是一张数据表</span><br><span class="line">    user_id = models.CharField(<span class="attribute">primary_key</span>=<span class="literal">True</span>, <span class="attribute">max_length</span>=20,)</span><br><span class="line">    user_name = models.CharField(<span class="attribute">max_length</span>=20)</span><br><span class="line">    user_pwd = models.CharField(<span class="attribute">max_length</span>=20)</span><br></pre></td></tr></table></figure><p>执行指令，将数据模型迁移到数据库：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">py</span> manage.<span class="keyword">py</span> makemigrations polls</span><br><span class="line"></span><br><span class="line"><span class="keyword">py</span> manage.<span class="keyword">py</span> migrate</span><br></pre></td></tr></table></figure><p>此时，用Navicat查看，mysite数据库中会多出一张movies_userinfo表</p><p>往里面输入数据，登录时会将账号密码与表内数据进行配对，不正确则无法登录</p><p>注册时，正确输入账号密码后，会在表内增加一条数据。</p><p><strong>movies&#x2F;views.py</strong></p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> django.http <span class="keyword">import</span> HttpResponse</span><br><span class="line"><span class="keyword">from</span> django.shortcuts <span class="keyword">import</span> render</span><br><span class="line"><span class="keyword">from</span> .models <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line"><span class="comment"># 渲染登录界面</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">toLogin_view</span>(<span class="params">request</span>):</span><br><span class="line">    <span class="keyword">return</span> render(request, <span class="string">&#x27;login.html&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 点击登录后做的逻辑判断</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">Login_view</span>(<span class="params">request</span>):</span><br><span class="line">    u = request.POST.get(<span class="string">&quot;user&quot;</span>,<span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    p = request.POST.get(<span class="string">&quot;pwd&quot;</span>,<span class="string">&#x27;&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> u <span class="keyword">and</span> p:</span><br><span class="line">        c = UserInfo.objects.<span class="built_in">filter</span>(user_name = u, user_pwd = p).count()   <span class="comment"># 能获取的数据的条数</span></span><br><span class="line">        <span class="keyword">if</span> c &gt;= <span class="number">1</span>:</span><br><span class="line">            <span class="keyword">return</span> HttpResponse(<span class="string">&quot;登录成功！&quot;</span>)</span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">return</span> HttpResponse(<span class="string">&quot;账号密码错误！&quot;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> HttpResponse(<span class="string">&quot;用户名或密码不能为空！&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 渲染注册界面</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">toRegister_view</span>(<span class="params">request</span>):</span><br><span class="line">    <span class="keyword">return</span> render(request, <span class="string">&#x27;register.html&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 点击注册后做的逻辑判断</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">Register_view</span>(<span class="params">request</span>):</span><br><span class="line">    u = request.POST.get(<span class="string">&quot;user&quot;</span>, <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    p = request.POST.get(<span class="string">&quot;pwd&quot;</span>, <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    <span class="keyword">if</span> u <span class="keyword">and</span> p:</span><br><span class="line">        user = UserInfo(user_name = u, user_pwd = p)</span><br><span class="line">        user.save()</span><br><span class="line">        <span class="keyword">return</span> HttpResponse(<span class="string">&quot;注册成功！&quot;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> HttpResponse(<span class="string">&quot;请输入完整的账号和密码！&quot;</span>)</span><br></pre></td></tr></table></figure><p>视图显示和请求处理都分成两个函数处理。</p><p>最后，启动项目，进入 <a href="http://127.0.0.1:8000/polls/">http://127.0.0.1:8000/movies/</a> 查看效果</p><p>以上是所有内容：</p><ol><li>创建Django项目</li><li>连接mysql 并创建数据库</li><li>设计登录注册界面并且能和数据库交互进行判断</li></ol><blockquote><p>Django的模型可以映射到数据库中。反过来，数据库也可以反映射到model.py中输入指令：<code>py manage.py inspectdb &gt; movies/models.py</code></p><p>然后打开model.py可以看到，数据库中的数据表输出为Model</p></blockquote>]]></content>
    
    
    <summary type="html">Django初体验，成功构建一个及其简单的网站，并通过html和简单的视图view实现登录注册功能。</summary>
    
    
    
    <category term="暂未归类" scheme="https://lumengde123.github.io/categories/%E6%9A%82%E6%9C%AA%E5%BD%92%E7%B1%BB/"/>
    
    
    <category term="Django" scheme="https://lumengde123.github.io/tags/Django/"/>
    
  </entry>
  
  <entry>
    <title>免费获取CloudFlare的科学上网节点</title>
    <link href="https://lumengde123.github.io/posts/fa4.html"/>
    <id>https://lumengde123.github.io/posts/fa4.html</id>
    <published>2024-06-17T09:02:35.000Z</published>
    <updated>2024-06-17T09:19:35.761Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>CloudFlare是一个提供一系列云计算服务，包括 DNS（域名系统）服务和 CDN（内容分发网络）服务的公司。</p><p>DNS服务帮助将域名解析为对应的 IP 地址，而CDN服务则通过在全球分布的服务器上缓存内容，提供更快的网站加载速度和更可靠的内容交付。</p><p>我们可以给自己服务器的IP套个CF防止IP被强，或者被强了通过CF可以穿强。浏览器先访问CF的国内服务器，它再找到我们的海外服务器，以此来隐藏自己服务器的IP，最终只会封到域名。在这过程中，CF承担<strong>正向代理</strong>的角色。</p><p>此外，我们还可以通过CF的worker来批量获取免费节点。以下教程将介绍如何获取。</p><blockquote><p><strong>该方法要求先要自己有有可用的代理。可以先去买个临时的。</strong></p></blockquote><p>本文参考教程：<a href="https://www.youtube.com/watch?v=wLW3Hx4JCew&ab_channel=Allen%E7%9A%84%E5%88%86%E4%BA%AB"><strong>授人以渔-cloudflare批量免费拉取机场vpn的节点，workers高速机场节点抓取，优选IP解锁ChatGPT，Netflix流媒体，YouTube 4K8K - YouTube</strong></a></p><h1 id="CF-worker设置"><a href="#CF-worker设置" class="headerlink" title="CF worker设置"></a>CF worker设置</h1><p>首先打开 <a href="https://dash.cloudflare.com/login">CloudFlare </a>网站，并注册账号。</p><p>然后点击【左侧】 <code>Workers和Pages</code>-&gt;Overview-&gt;【右侧】Ceate Worker-&gt;自定义项目名字-&gt;Deploy</p><p>记住Preview your Worker下方的地址：<code>https://项目名.你的cf昵称.workers.dev/</code></p><p>然后点击<strong>Edit Code</strong>，删除worker.js里面的代码</p><p>打开网站，复制 <a href="https://raw.githubusercontent.com/allenchengji/workers/main/index.js">这里的 </a>所有代码，回到cloudflare，粘贴到worker.js中，然后点击<strong>Save and deploy</strong></p><p>【cf的图，保存至无用&#x2F;临时】</p><h1 id="安装v2rayN"><a href="#安装v2rayN" class="headerlink" title="安装v2rayN"></a>安装v2rayN</h1><p>打开v2rayN下载地址：<a href="https://github.com/2dust/v2rayN/releases">https://github.com/2dust/v2rayN/releases</a> ，选择下载<code>v2rayN-With-Core.zip</code></p><p>解压，双击v2rayN.exe文件，自动跳转浏览器下载<code>.NET 6.0 Desktop Runtime (v6.0.26) - Windows x64 Installer</code>，然后安装下就可以了。</p><p>.NET网站备份：<a href="https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-6.0.26-windows-x64-installer?cid=getdotnetcore">https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-6.0.26-windows-x64-installer?cid=getdotnetcore</a></p><h1 id="可循环步骤"><a href="#可循环步骤" class="headerlink" title="可循环步骤"></a><strong>可循环步骤</strong></h1><p>我们会先获取和筛选本机IP可连接到CF的哪些IP，然后再通过这些IP来订阅服务获取节点。以下步骤可多次循环，以找到最好用的节点。</p><h2 id="CF-优选IP"><a href="#CF-优选IP" class="headerlink" title="CF 优选IP"></a><strong>CF 优选IP</strong></h2><p>打开CF优选IP工具 <a href="https://vfarid.github.io/cf-ip-scanner/?max=30">cf-ip-scanner</a> ，右侧选择CN换成中文版，<strong>先关闭所有代理</strong>，然后点击开始(绿色按钮)</p><p>【网站页面的图】</p><p>他会测试你本机IP到CF CDN各个服务器的IP的速度和ping值。然后我们在列出的IP中选择一个延迟最低的IP。</p><p>如果点击开始后就显示一个Done&#x2F;已完成。可以先打开代理刷新网站，再关闭代理刷，然后点击开始。</p><h2 id="订阅服务并筛选可用节点"><a href="#订阅服务并筛选可用节点" class="headerlink" title="订阅服务并筛选可用节点"></a><strong>订阅服务并筛选可用节点</strong></h2><p>打开v2rayN，新增订阅分组，可以命名为<code>cf_该IP</code>，地址拼接修改后为：<code>https://项目名.你的cf昵称.workers.dev/sub/替换为刚才获取的低延迟IP</code></p><p>然后打开已有的可用代理，更新<code>cf_该IP</code>订阅(通过代理)，会获得一批节点，但是并不是都能用的，需要进行筛选。</p><p>然后清除代理，在<code>cf_该IP</code>分组按<code>ctrl+e</code>，一键测试这些节点的延迟和速度(流量党检测的速度不准确，需要一个一个检测)</p><p>也可以选中部分节点，<code>ctrl+P</code>测延迟，<code>ctrl+T</code>测速度</p><p>然后点击延迟列进行排序，把延迟高的全删了(延迟-1表示无法连接)，留下低延迟可用节点。技巧：可以通过<code>shift+点击</code>快捷键来快速选中多个节点。</p><p>将某个低延时速度快的节点设为活动服务器，开启代理。</p><h1 id="可用网站-流媒体-检测"><a href="#可用网站-流媒体-检测" class="headerlink" title="可用网站&#x2F;流媒体 检测"></a><strong>可用网站&#x2F;流媒体 检测</strong></h1><p><a href="http://ip111.cn/"><strong>这个网站可以查询本机IP和代理IP</strong></a></p><p>可以测试自己想用的网站是否可访问&#x2F;解锁 流媒体和国内部分网站</p><p>网上都是在VPS的Linux系统下通过脚本实现，这里我用笨方法</p><p>在桌面新建文本文件，重命名为<code>test.bat</code>，右键-&gt;编辑 粘贴以下代码(ChatGPT写的)并保存：</p><figure class="highlight dos"><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="built_in">echo</span> off</span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">rem 设置要打开的网站列表</span></span><br><span class="line"><span class="built_in">set</span> &quot;websites=www.netflix.com www.youtube.com www.hulu.com www.disneyplus.com www.iqiyi.com www.bilibili.com v.qq.com youku.com www.douyin.com www.csdn.<span class="built_in">net</span> chat.openai.com&quot;</span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">rem 循环打开每个网站</span></span><br><span class="line"><span class="keyword">for</span> <span class="variable">%%i</span> <span class="keyword">in</span> (<span class="variable">%websites%</span>) <span class="keyword">do</span> (</span><br><span class="line">    <span class="built_in">start</span> &quot;&quot; &quot;http://<span class="variable">%%i</span>&quot;</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p>可以自定义需要检测的网站。双击该bat文件就会自动通过默认浏览器打开这些网站，然后看看哪些网站打不开&#x2F;未解锁。</p><p>像Github之类的国外网站基本国外节点都能访问，只需看看流媒体以及想访问的国内网站解锁情况。</p><p>切换其他节点进行测试时，只需把鼠标放在标签栏上，快捷键<code>Ctrl + Shift + R</code>即可重新打开&#x2F;刷新所有标签页。</p><p>重复以上步骤，保存一些低延迟网速快的节点并备注即可。</p>]]></content>
    
    
    <summary type="html">通过cf-ip-scanner在线工具获取并测试你本机IP到CF-CDN各个服务器的IP的速度和ping值，挑选最优质的IP再到v2rayN里筛选可靠的节点，挑选出来的节点都可以免费使用</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="科学上网" scheme="https://lumengde123.github.io/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
  </entry>
  
  <entry>
    <title>通过GitHook部署Hexo博客到VPS上</title>
    <link href="https://lumengde123.github.io/posts/c74a.html"/>
    <id>https://lumengde123.github.io/posts/c74a.html</id>
    <published>2024-06-14T13:05:33.000Z</published>
    <updated>2024-06-14T13:27:04.647Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>参考链接：</p><ul><li><p><a href="https://nightfury.top:2023/2023/08/14/Hexo%E9%83%A8%E7%BD%B2%E5%88%B0VPS/">Hexo部署到VPS - Configuration | NightFury’s Blog &#x3D; NightFury &#x3D; 行动胜于空想</a></p></li><li><p><a href="https://blog.zhheo.com/p/12a4e7e6.html">Hexo博客部署到VPS | 张洪Heo</a></p></li><li><p><a href="https://blog.peiyingchi.com/2017/03/20/deploy-hexo-blog-to-VPS/">Deploy Hexo Blog to VPS |部署Hexo博客到VPS | Yingchi’s blog (peiyingchi.com)</a>——这篇通过rsync部署</p></li></ul><p>前置条件：已经在本地搭建好了Hexo博客，本地搭建博客也可以在本站找到对应教程。</p><p>网上有两种自动部署方案：rsync和git hook，本文用最常用的git hook。</p><p>吐槽：Hexo只是个静态博客，一点点页面只占几十M内存…也没必要用Docker，不方便本地修改内容再同步</p><h1 id="git用户设置"><a href="#git用户设置" class="headerlink" title="git用户设置"></a>git用户设置</h1><ul><li><strong>创建git用户</strong></li></ul><p>安装git和用得到的软件</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt update -y &amp;&amp; apt install sudo vim git</span><br></pre></td></tr></table></figure><p>创建git用户，根据提示输入密码(不显示)</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adduser git</span><br></pre></td></tr></table></figure><ul><li><strong>赋予git用户sudo权限</strong></li></ul><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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">获取sudoers文件读写执行权限</span></span><br><span class="line">chmod 740 /etc/sudoers</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">修改sudoers文件</span></span><br><span class="line">vim /etc/sudoers</span><br></pre></td></tr></table></figure><p>找到<code>root ALL=(ALL:ALL) ALL</code>这一行并在下方新加一行：</p><figure class="highlight shell"><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) ALL</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">改回sudoers文件权限为仅读写</span></span><br><span class="line">chmod 400 /etc/sudoers</span><br></pre></td></tr></table></figure><ul><li><strong>配置git用户的ssh</strong></li></ul><p>先在<strong>电脑本地</strong>生成ssh密钥（如果已经有了就不用再生成），打开cmd输入：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;</span><br></pre></td></tr></table></figure><p>然后在你的<code>C盘/用户/用户名/.ssh/</code>里会有私钥<code>id_rsa</code>和公钥<code>id_rsa.pub</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></pre></td><td class="code"><pre><span class="line">cd /home/git</span><br><span class="line">mkdir .ssh</span><br><span class="line">cd .ssh</span><br><span class="line">vim authorized_keys</span><br></pre></td></tr></table></figure><p>把复制的公钥粘贴进去并保存。</p><p>现在就配置好了ssh，我们可以在<code>cmd</code>中通过<code>ssh git@VPS的IP</code>连接到VPS的git用户，进行各种操作。</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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">限制仅允许所有者读写、执行文件。防止未经授权的用户访问和修改关键的 SSH 文件，从而提高系统的安全性</span></span><br><span class="line">chmod 600 ~/.ssh/authorized_keys</span><br><span class="line">chmod 700 ~/.ssh</span><br></pre></td></tr></table></figure><p>目的：因为SSH密钥匹配免密登录，所以后面<code>hexo d</code>能直接通过ssh连接推送到VPS的仓库，而不用输入密码。</p><ul><li><strong>关闭git用户shell权限</strong></li></ul><p>git用户不需要太大权限，只需要能操作git仓库即可。</p><p>因此可以关闭 git 用户的 shell 权限：</p><figure class="highlight shell"><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">vim /etc/passwd</span><br></pre></td></tr></table></figure><p>将最后一行的 <code>git:x:1000:1000:,,,:/home/git:/bin/bash</code> </p><p>修改为 <code>git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell</code>。</p><p>这样，我们可以正常通过 ssh 登录 git，但无法使用 shell，因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。</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></pre></td><td class="code"><pre><span class="line">C:\Users\Administrator&gt;ssh git@142.171.245.130</span><br><span class="line">Linux lumengde.com 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64</span><br><span class="line"></span><br><span class="line">The programs included with the Debian GNU/Linux system are free software;</span><br><span class="line">the exact distribution terms for each program are described in the</span><br><span class="line">individual files in /usr/share/doc/*/copyright.</span><br><span class="line"></span><br><span class="line">Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent</span><br><span class="line">permitted by applicable law.</span><br><span class="line">fatal: Interactive git shell is not enabled.</span><br><span class="line">hint: ~/git-shell-commands should exist and have read and execute access.</span><br><span class="line">Connection to 142.171.245.130 closed.</span><br></pre></td></tr></table></figure><p>如果报错：</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></pre></td><td class="code"><pre><span class="line">@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</span><br><span class="line">@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @</span><br><span class="line">@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</span><br></pre></td></tr></table></figure><p>那就把本地电脑的<code>C盘/用户/用户名/.ssh/known.hosts</code>文件删除，再次连接应该就行了。</p><h1 id="创建博客网站目录"><a href="#创建博客网站目录" class="headerlink" title="创建博客网站目录"></a>创建博客网站目录</h1><figure class="highlight shell"><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">mkdir -p /var/www/blog </span><br></pre></td></tr></table></figure><h1 id="初始化blog-git博客仓库"><a href="#初始化blog-git博客仓库" class="headerlink" title="初始化blog.git博客仓库"></a>初始化blog.git博客仓库</h1><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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">进入git用户目录</span></span><br><span class="line">cd /</span><br><span class="line">cd /home/git</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建Hexo博客的仓库，比如blog.git</span></span><br><span class="line">mkdir blog.git</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用--bare参数初始化为裸仓库，这样创建的仓库不包含工作区</span></span><br><span class="line">cd blog.git</span><br><span class="line">git init --bare</span><br></pre></td></tr></table></figure><h1 id="确保目录的用户权限组为git"><a href="#确保目录的用户权限组为git" class="headerlink" title="确保目录的用户权限组为git"></a>确保目录的用户权限组为git</h1><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></pre></td><td class="code"><pre><span class="line">root@lumengde:/# ls -l /var/www/blog</span><br><span class="line">total 4</span><br><span class="line">drwxr-xr-x 2 root root 4096 Feb 21 05:25 blog</span><br><span class="line">root@lumengde:/# ls -l /home/git/blog.git</span><br><span class="line">total 4</span><br><span class="line">drwxr-xr-x 7 root root 4096 Feb 21 05:20 blog.git</span><br><span class="line">root@lumengde:/# ls -l /home/git/.ssh</span><br><span class="line">total 4</span><br><span class="line">-rw-r--r-- 1 root root 576 Feb 21 05:17 authorized_keys</span><br></pre></td></tr></table></figure><p>一般来讲执行这三个指令，返回的是<code>root root</code>，所以需要修改权限来变成<code>git git</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></pre></td><td class="code"><pre><span class="line">sudo chown git:git -R /var/www/blog</span><br><span class="line">sudo chown git:git -R /home/git/blog.git</span><br><span class="line">sudo chown git:git -R /home/git/.ssh</span><br></pre></td></tr></table></figure><p>执行完再<code>ls -l xxx</code>检查一下。</p><h1 id="配置git-hooks脚本"><a href="#配置git-hooks脚本" class="headerlink" title="配置git hooks脚本"></a>配置git hooks脚本</h1><img src="https://www.xuarh.com/2020/06/16/Hexo/Hexo%E5%8D%9A%E5%AE%A2%E9%83%A8%E7%BD%B2%E5%88%B0VPS/principle.png" style="zoom:50%;" /><p>通过编写 Git Hooks 脚本，本地上传博客后，能自动把仓库里的文件拉取到网站目录中。</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></pre></td><td class="code"><pre><span class="line">cd /</span><br><span class="line">cd /home/git/blog.git/hooks</span><br><span class="line">vim post-receive</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">以下为填入的内容</span></span><br><span class="line">GIT_REPO=/home/git/blog.git   #仓库路径</span><br><span class="line">TMP_GIT_CLONE=/tmp/blog          #临时目录</span><br><span class="line">PUBLIC_WWW=/var/www/blog      #网站路径</span><br><span class="line">rm -rf $&#123;TMP_GIT_CLONE&#125;</span><br><span class="line">git clone $GIT_REPO $TMP_GIT_CLONE</span><br><span class="line">rm -rf $&#123;PUBLIC_WWW&#125;/*</span><br><span class="line">cp -rf $&#123;TMP_GIT_CLONE&#125;/* $&#123;PUBLIC_WWW&#125;</span><br></pre></td></tr></table></figure><p>当<code>hexo d</code>部署到VPS的blog.git仓库上时，Git Hooks 脚本自动执行流程：</p><ul><li>删除临时目录<code>/tmp/blog</code>里的所有内容</li><li>将<code>/blog.git</code>仓库内的文件拷贝到临时目录<code>/tmp/blog</code>里</li><li>删除网站目录<code>/www/blog</code>内所有内容</li><li>将目录<code>/tmp/blog</code>里的内容拷贝到网站目录<code>/www/blog</code>内</li></ul><p>赋予post-receive文件可执行权限</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod +x post-receive</span><br></pre></td></tr></table></figure><h1 id="Nginx配置反向代理"><a href="#Nginx配置反向代理" class="headerlink" title="Nginx配置反向代理"></a>Nginx配置反向代理</h1><p><code>Nginx Proxy Manager</code>好用是好用，但是我们最好还是了解下Nginx怎么用，配置怎么写，以后图方便了再用NPM。</p><h2 id="安装Nginx"><a href="#安装Nginx" class="headerlink" title="安装Nginx"></a>安装Nginx</h2><p>官方链接，跟着做就行：<a href="https://nginx.org/en/linux_packages.html#Debian"><strong>【nginx: Linux packages】</strong></a></p><p>【注意】中间安装Stable还是Mainline版本，选前者 <strong>Stable</strong>。</p><p><code>nginx -v</code>能够看到Nginx版本号说明安装成功。</p><h2 id="配置Nginx"><a href="#配置Nginx" class="headerlink" title="配置Nginx"></a>配置Nginx</h2><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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">新版nginx文件结构和以前版本不一样，所以这一步跟往年教程不一样：</span></span><br><span class="line">cd /etc/nginx/conf.d</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">第一次用的时候备份一下默认的配置文件</span></span><br><span class="line">cp default.conf default.conf.bak</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如果部署多个网站，server块都添加到这个default.conf里就行</span></span><br><span class="line">vim default.conf</span><br></pre></td></tr></table></figure><p>粘贴以下配置信息，<strong>server_name</strong>更改为你的域名：</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></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen 80 default;      #默认监听80端口，所有.conf文件只能有一个server设置了default【切记！！】</span><br><span class="line">    root /var/www/blog;     #网站根目录</span><br><span class="line">    server_name blog.lumengde.com;  #网址，可以加上www.xxx，英文逗号+空格来隔开</span><br><span class="line">    access_log  /var/log/nginx/blog_access.log;</span><br><span class="line">    error_log   /var/log/nginx/blog_error.log;</span><br><span class="line">    error_page 404 =  /404.html;</span><br><span class="line"></span><br><span class="line">    location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ &#123;</span><br><span class="line">        root /var/www/blog;</span><br><span class="line">        access_log   off;</span><br><span class="line">        expires      1d;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location ~* ^.+\.(css|js|txt|xml|swf|wav)$ &#123;</span><br><span class="line">        root /var/www/blog;</span><br><span class="line">        access_log   off;</span><br><span class="line">        expires      10m;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location / &#123;</span><br><span class="line">        root /var/www/blog;</span><br><span class="line">        if (-f $request_filename) &#123;</span><br><span class="line">        rewrite ^/(.*)$  /$1 break;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /nginx_status &#123;</span><br><span class="line">        stub_status on;</span><br><span class="line">        access_log off;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>注意如果多于一个server，后续<code>listen 80</code>无需<code>default</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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">启动Nginx</span></span><br><span class="line">systemctl start nginx</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">设置开机自启动</span></span><br><span class="line">systemctl enable nginx</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看运行状态</span></span><br><span class="line">systemctl status nginx</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">备用指令：</span></span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash"><span class="comment"># 查看修改后的.conf配置语法是否正确</span></span></span><br><span class="line">nginx -t</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash"><span class="comment"># 重启Nginx以更新配置</span></span></span><br><span class="line">systemctl restart nginx</span><br></pre></td></tr></table></figure><p>如果启动Nginx报错（很有用）：</p><p><a href="https://blog.csdn.net/li1325169021/article/details/118462921">Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code-CSDN博客</a></p><p>补充知识</p><figure class="highlight autohotkey"><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></pre></td><td class="code"><pre><span class="line">旧版的Nginx配置文件为`/etc/nginx/sites-available`里的`default`；现在安装的新版配置文件为`/etc/nginx/conf.d`里的`default.conf`。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">一般在第一次使用时，先备份一下默认配置文件`cp default.conf default.conf.bak`，`.bak`后缀表示这是一个备份文件。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">在 Nginx 中，一个 `server` 块通常用于定义一个虚拟主机（Virtual Host），可以是一个网站。但是，`server` 块不仅仅可以用于定义网站，还可以用于其他的配置，例如反向代理、负载均衡等、HTTPS 服务等。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">当 Nginx 启动时，它会加载所有配置文件，并将它们合并成一个整体的配置。所以我们可以把所有`server`块都写在`default.conf`里，或者使用多个不同的`xxx.conf`文件，编写各自的`server`块，一个文件叠加多个`server`块不用逗号隔开。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">在Nginx的所有`.conf`配置中，只能有一个`server`块设为`default`，否则会报错。当客户端发送一个请求时，通常会包含一个主机头（Host Header）。这个主机头指定了客户端要请求的具体主机名（域名）。Nginx 根据请求的主机头来匹配相应的 `server` 块来处理请求。如果请求中的主机头与配置文件中的任何一个 `server` 块的 `server_name` 指令不匹配，Nginx 将会选择默认`server`块来处理这个请求。这样可以确保即使请求中没有明确指定主机头，Nginx 也能够正确地处理请求。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">如果不使用 `default` 参数，Nginx 将按照配置文件中 `server` 块的顺序逐个匹配请求的主机头，而不会将任何一个 `server` 块标记为默认服务器块。这种情况下，必须确保每个请求都能匹配到相应的 `server` 块，否则请求会被发送到第一个 `server` 块中配置的网站。如果该网站有配置错误或无法处理该请求，可能会返回 <span class="number">404</span> 错误页面或其他错误信息给客户端。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">举个例子：如果其他域名例如`test.lumengde.com`解析到我的VPS IP上，但是我的Nginx没有对应的server(server_name匹配不到)，则跳转到default server即我的博客上，网址不变。如果没设置默认server，则跳转第一个`server`块处理，即跳转到我的博客网站。</span><br></pre></td></tr></table></figure><h1 id="配置Hexo，同步到服务器"><a href="#配置Hexo，同步到服务器" class="headerlink" title="配置Hexo，同步到服务器"></a>配置Hexo，同步到服务器</h1><p>打开Hexo的配置文件<code>_config.yml</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></pre></td><td class="code"><pre><span class="line">url: 你的博客域名</span><br><span class="line"></span><br><span class="line">deploy:</span><br><span class="line">  - type: git</span><br><span class="line">    repo: git@github.com:lumengde123/lumengde123.github.io.git</span><br><span class="line">    branch: main</span><br><span class="line">  - type: git</span><br><span class="line">    repo: git@你的VPS的IP:/home/git/blog.git</span><br><span class="line">    branch: master</span><br></pre></td></tr></table></figure><p>原先使用Github Page需要用到<code>CNAME</code>，但是这里Nginx的<code>server_name</code>指定了域名对应的网站文件目录，所以非必须。</p><p>然后<code>Hexo三连</code>，博客的<code>/public</code>文件夹会同步到<strong>github的xxx.github.io仓库main分支</strong>和<strong>VPS的blog.git仓库的master分支</strong>里。</p><h1 id="域名解析"><a href="#域名解析" class="headerlink" title="域名解析"></a>域名解析</h1><p>我是海外VPS，博客没备案且有违规文章，怕IP被封，所以套了cloudflare。以下是解析记录以供参考。</p><table><thead><tr><th>Type</th><th>Name</th><th>Content</th><th>Proxy status</th><th>TTL</th><th>Actions</th></tr></thead><tbody><tr><td>A</td><td>blog</td><td>142.171.245.130</td><td>Proxied</td><td>Auto</td><td>Edit</td></tr><tr><td>A</td><td>lumengde.com</td><td>142.171.245.130</td><td>Proxied</td><td>Auto</td><td>Edit</td></tr></tbody></table><p>如果你也用了CloudFlare，需要把SSL&#x2F;TLS改成<code>Flexible(灵活模式)</code>，不然可能会报错误代码521，因为我们还没申请SSL证书，无法使用HTTPS，Nginx也没监听443端口。</p><p>此时，打开你的博客网站域名，就能访问博客主页。但是只能通过HTTP协议，即<a href="http://xxxx.com/">http://xxxx.com</a> 来访问，我们Nginx配置监听的也是HTTP对应的80端口。后面还需要配置在SSL&#x2F;TLS证书才能用<code>https</code>。</p><p><strong>报错解决:</strong></p><p><strong>如果无法正常访问</strong>，可以打开<a href="https://tool.dnspod.cn/">DNSPod 域名检测工具 网站健康免费诊断 - WHOIS查询_网络拨测_故障排查_证书_备案 - 腾讯云 DNSPod</a>输入你的域名检查哪里有问题。</p><p>如果是国内云服务器，记得在安全组中打开80 443端口。并且国内服务器给域名备案才能访问。</p><p>成功访问后可以测测网站访问速度：<a href="https://aicesu.io/http">网站测速-免费域名检测-网站测速-ping检测-域名污染-域名被墙-dns查询-IPv6网站测试-路由跟踪查询-劫持检测-SSL检测-TCP检测-UDP检测 (aicesu.io)</a> </p><h1 id="申请SSL证书"><a href="#申请SSL证书" class="headerlink" title="申请SSL证书"></a>申请SSL证书</h1><blockquote><p>用Certbot给在Cloudflare上的domain申请Let’s Encrypt的泛域名证书</p></blockquote><p><strong>Certbot</strong>是一个ACME客户端，也是ACME客户端的参考实现，使用Python编写。Certbot默认使用<code>Let&#39;s Encrypt</code>作为<strong>证书颁发机构</strong>。选择Let’s Encrypt是因为<strong>它颁发的 SSL&#x2F;TLS 证书是免费</strong>的。</p><p>泛域名证书，简单来说，申请了<code>*.lumengde.com</code>，则该域名的所有子域名都包含在内都可以使用该SSL&#x2F;TLS证书，不用一个域名一个域名地申请，又乱又麻烦。</p><p>参考教程：<a href="https://www.nginx-cn.net/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/">更新：为 NGINX 配置免费的 Let’s Encrypt SSL&#x2F;TLS 证书 (nginx-cn.net)</a></p><p>下载Let’s Encrypt客户端：</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></pre></td><td class="code"><pre><span class="line">apt-get update</span><br><span class="line">sudo apt-get install certbot</span><br><span class="line">apt-get install python3-certbot-nginx</span><br></pre></td></tr></table></figure><p>利用<code>certbot</code> 自动完成 NGINX 的 SSL&#x2F;TLS 配置：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo certbot --nginx -d example.com -d *.example.com</span><br></pre></td></tr></table></figure><p>使用 NGINX 插件生成证书，<code>certbot</code>会在 NGINX 配置中查找并修改包含 <a href="https://nginx.org/en/docs/http/ngx_http_core_module.html#server_name">server_name</a> 指令（含有您为其请求证书的域名）的 <a href="https://nginx.org/en/docs/http/ngx_http_core_module.html#server">server</a> 块。输入自己的邮箱即可。</p><p>证书生成后，NGINX 重新加载新设置。<code>certbot</code> 生成一条消息：<code>Congratulations!xxxxx</code>，显示证书成功生成，并指示证书在服务器上的位置。</p><p>如果用了cloudflare，这里会报错，直接看下一小节</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></pre></td><td class="code"><pre><span class="line">Performing the following challenges:</span><br><span class="line">Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. You may need to use an authenticator plugin that can do challenges over DNS.</span><br><span class="line">Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. You may need to use an authenticator plugin that can do challenges over DNS.</span><br></pre></td></tr></table></figure><p>解决办法：看下一小节。</p><p>此时我们再打开<code>default.conf</code>文件，能看到它自动为我们的<code>server</code>块添加了监听443端口和一些ssl配置。</p><p>重启Nginx更新一下配置即可</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo systemctl reload nginx</span><br></pre></td></tr></table></figure><p>然后输入<code>https://xxx.com</code>就能正常打开了（没开魔法访问可能需要等一会DNS缓存）</p><ul><li><strong>自动更新Let’s Encrypt证书</strong></li></ul><p>我们申请的Let’s Encrypt证书只有90天有效期，到期需要手动更新，比较麻烦。这里我们添加一个cron任务来实现自动更新证书。</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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">打开crontab文件</span></span><br><span class="line">crontab -e</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在文件中添加以下内容：</span></span><br><span class="line">0 12 * * * /usr/bin/certbot renew --quiet</span><br></pre></td></tr></table></figure><p>保存并关闭文件。所有已安装的证书将自动更新和重新加载。</p><p>该命令每天中午12点检查服务器上的证书是否会在未来 30 天内到期，如果是，则更新证书。<code>--quiet</code> 指令告知 <code>certbot</code> 不要生成输出。</p><h1 id="Cloudflare申请Let’s-Encrypt证书"><a href="#Cloudflare申请Let’s-Encrypt证书" class="headerlink" title="Cloudflare申请Let’s Encrypt证书"></a>Cloudflare申请Let’s Encrypt证书</h1><p>参考教程：<a href="https://blog.ausmis.com/use-certbot-create-lets-encrypt-wildcard-certificate-for-cloudflare-parked-domain_2021_07_07/comment-page-1/">用Certbot给在Cloudflare上的domain申请Let’s Encrypt的泛域名证书 - 微言解语 (ausmis.com)</a></p><ul><li>获取Cloudflare API Tokens</li></ul><p>打开Cloudflare，点击<strong>人像-&gt;My Profile-&gt;API Tokens-&gt;Create Token-&gt;选择Edit zone DNS-&gt;</strong></p><p>Zone Resources可以Special zone选你的域名，仅该域名能使用该API Token（更安全），每次有新域名都申请各自的API Token；或者改为All zones，所有域名都可用（更方便）</p><p>最后点<code>Continue to summary</code>就好了。申请完Token之后要保存下来，<code>仅显示一次</code>且后面要用到，同时Cloudflare也提供一个验证的脚本，在shell上执行一下看看该token能否正常工作。</p><ul><li>配置cloudflare.ini</li></ul><p>接下来开始准备cloudflare.ini文件，这个文件会被Certbot用于直接做DNS Challenge，所以非常重要，没有这个文件就无法生成泛域名证书了。</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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建目录</span></span><br><span class="line">mkdir -p ~/.secret/certbot</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编辑ini文件</span></span><br><span class="line">vim ~/.secret/certbot/cloudflare.ini</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Cloudflare API token used by Certbot</span></span><br><span class="line">dns_cloudflare_api_token = 这里填入刚才获取的 API Token</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">设置文件正确权限</span></span><br><span class="line">chmod 600 ~/.secret/certbot/cloudflare.ini</span><br></pre></td></tr></table></figure><p>安装Certbot的Cloudflare API的插件。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update &amp;&amp; apt install python3-certbot-dns-cloudflare</span><br></pre></td></tr></table></figure><ul><li>生成泛域名证书</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">certbot --dns-cloudflare -d lumengde.com -d *.lumengde.com -i nginx</span><br></pre></td></tr></table></figure><p>提示：<code>Which server blocks would you like to modify?</code>，选择所有跟<code>*.lumengde.com</code>有关的server的序号，英文逗号隔开。直接回车则为全选。</p><p>脚本运行中要问你要Cloudflare的配置文件，输入下面字符串：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/.secret/certbot/cloudflare.ini</span><br></pre></td></tr></table></figure><p>然后它就会自动修改Nginx里的配置，网站开放443端口，可以使用https访问了。此时cf里把SSL&#x2F;TLS改成Full或者Full(Strict)都行了。</p><p>再回到上一小节默认创建一个自动跟新证书的cron任务即可。</p><blockquote><p>注意：生成的这一段话只需要在主域名的server块有就行，能作用到整个配置文件的所有server块中。</p></blockquote><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></pre></td><td class="code"><pre><span class="line">ssl_certificate /etc/letsencrypt/live/lumengde.com/fullchain.pem; # managed by Certbot</span><br><span class="line">ssl_certificate_key /etc/letsencrypt/live/lumengde.com/privkey.pem; # managed by Certbot</span><br><span class="line">include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot</span><br><span class="line">ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot</span><br></pre></td></tr></table></figure><p>扩展阅读（看不懂）：<a href="https://juejin.cn/post/7069995574266691614">[记录]使用Certbot与Cloudflare插件申请通配符证书 - 掘金 (juejin.cn)</a></p>]]></content>
    
    
    <summary type="html">在VPS上创建git仓库并配置Nginx，把本地仓库推送到VPS对应仓库，由Git Hook将远程仓库内容拉取到网站目录实现更新。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="VPS项目搭建" scheme="https://lumengde123.github.io/tags/VPS%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA/"/>
    
    <category term="Hexo" scheme="https://lumengde123.github.io/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>随笔-拥有一台云服务器能做什么</title>
    <link href="https://lumengde123.github.io/posts/e800.html"/>
    <id>https://lumengde123.github.io/posts/e800.html</id>
    <published>2024-06-14T12:57:29.000Z</published>
    <updated>2024-06-14T13:03:11.422Z</updated>
    
    <content type="html"><![CDATA[<h1 id="云服务器能做什么"><a href="#云服务器能做什么" class="headerlink" title="云服务器能做什么"></a>云服务器能做什么</h1><ul><li>学习Linux</li><li><a href="https://sspai.com/post/78424#!">除了博客，当你有一台云服务器时还可以自部署哪些免费、开源的项目？</a></li><li><a href="https://wp.gxnas.com/category/wangzhan">GXNAS博客 - 分类：网站</a></li><li>个人博客 Typecho&#x2F;WordPress&#x2F;Vue Press                                          宝塔面板可以，Docker还不会</li><li>漫画&#x2F;影视Emby&#x2F;听歌MV&#x2F;工具&#x2F;新闻资讯热榜网站、</li><li>网址导航站 Webstack&#x2F;</li><li>搭梯子&#x2F;github开源项目：openVpn&#x2F;vmess + tls + ws + cdn</li><li>私有云网盘 <ul><li>cloudreve上传下载速度最快，支持离线下载和挂载其他网络存储</li><li>ownCloud：分享时可设置可编辑和游客上传</li><li>Alist</li><li>nextCloud：分享时可设置可编辑和游客上传，UI漂亮插件丰富，但是不好装，太大了性能差，卡占宽带占内存。高配可用，低配勿用</li><li>filerun：收费了，文件在线浏览和缩略图预览功能最好。支持断点续传，支持分享游客上传文件夹。</li><li>seafile：同步功能最好，但是上传的文件不能直接读取</li><li>可道云<br>  【补充】个人cloudreve不错的，公司nas和seafile不错</li></ul></li><li>Aria2 图形化面板：ArizNg + OLAINDEX + 离线下载转存Onedrive                    ✓想办法装在Docker里</li><li>笔记系统&#x2F;wiki&#x2F;Outline</li><li>爬虫+数据整理+可视化、其他小工具–代理IP来爬，防止被封&#x2F;爬知乎的回答</li><li>密码管理系统                                                                  bitwarden成功，vaultwarden失败</li><li>api制作</li><li>个人书库</li><li>Wallabag 离线保存网页</li><li>网店&#x2F;在线支付平台、私人购物网站、线上小店</li><li>在线编辑器，需要用时再启动</li><li>Draw.io是开源的在线流程图绘制工具，支持docker部署，支持在服务器和本地搭建。       ✓</li><li>图库、site静态资源。相册，可以使用对象存储</li><li>Matomo 查看访客数据,性能检测netdata</li><li>jupyter notebook                                                              Docker一键部署Jupyterhub，走捷径了</li><li>跑脚本&#x2F;贴吧签到Tieba-Cloud-Sign、</li><li>学习Linux和docker</li><li>训练各种AI模型，部署ChatGPT-Next-Web</li><li>搭建游戏服务器</li><li>在线聊天室 Jabber、</li><li>内网穿透（干啥用的？）</li><li>挂机、广告回本</li></ul><h1 id="云服务提供商"><a href="#云服务提供商" class="headerlink" title="云服务提供商"></a>云服务提供商</h1><p>国内</p><ul><li>腾讯云</li><li>阿里云<br>-华云</li></ul><p>海外</p><ul><li>CLOUDCONE(简称：CC)</li><li>RackNerd（简称RN）</li><li>BandwagonHOST（简称：搬瓦工）</li><li>Vultr</li><li>DMIT</li><li>狗云</li><li>AWS 亚马逊</li><li>Azure 微软</li></ul><p>云服务推荐榜单<br><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/%E9%9A%8F%E7%AC%94-%E6%8B%A5%E6%9C%89%E4%B8%80%E5%8F%B0%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%83%BD%E5%81%9A%E4%BB%80%E4%B9%88--01.png"></p><hr><p>注意：先通过CF隐藏VPS的真实IP地址<br>补充：</p><ul><li>了解一下树莓派</li><li>买完服务器测试一下流媒体</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;云服务器能做什么&quot;&gt;&lt;a href=&quot;#云服务器能做什么&quot; class=&quot;headerlink&quot; title=&quot;云服务器能做什么&quot;&gt;&lt;/a&gt;云服务器能做什么&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;学习Linux&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sspai.</summary>
      
    
    
    
    <category term="随笔杂记" scheme="https://lumengde123.github.io/categories/%E9%9A%8F%E7%AC%94%E6%9D%82%E8%AE%B0/"/>
    
    
  </entry>
  
  <entry>
    <title>随笔-英语博主合集</title>
    <link href="https://lumengde123.github.io/posts/3bd1.html"/>
    <id>https://lumengde123.github.io/posts/3bd1.html</id>
    <published>2024-06-14T12:57:05.000Z</published>
    <updated>2024-06-14T12:58:31.902Z</updated>
    
    <content type="html"><![CDATA[<h1 id="在看"><a href="#在看" class="headerlink" title="在看"></a>在看</h1><blockquote><p><a href="https://space.bilibili.com/637802152?spm_id_from=333.999.0.0">在语境中学单词</a>：英语短文，适合练习口语</p></blockquote><blockquote><p><a href="https://space.bilibili.com/420212805/video">英语老师夏至</a>：英语生活中各种物品的词汇大普及</p></blockquote><h1 id="英语播客系列"><a href="#英语播客系列" class="headerlink" title="英语播客系列"></a>英语播客系列</h1><blockquote><p><a href="https://space.bilibili.com/516902904">汤圆学英语</a>：大量英语博客系列合集</p></blockquote><blockquote><p><a href="https://space.bilibili.com/3537109151386355?spm_id_from=333.999.0.0">英语播客党</a>：大量英语博客系列合集</p></blockquote><blockquote><p><a href="https://space.bilibili.com/3493115985922905?spm_id_from=333.999.0.0">艾登英语</a>：英语播客系列Listening time</p></blockquote><h1 id="短视频系列"><a href="#短视频系列" class="headerlink" title="短视频系列"></a>短视频系列</h1><blockquote><p><a href="https://space.bilibili.com/2135839710/?spm_id_from=333.999.0.0">跟着Giovana地道学英语</a>：以短视频情景的方式介绍一些日常生活用语的使用</p></blockquote><blockquote><p><a href="https://space.bilibili.com/1228917302?spm_id_from=333.999.0.0">英语薯条</a>：各类英语短视频+中文字幕</p></blockquote><blockquote><p><a href="https://space.bilibili.com/663513943?spm_id_from=333.999.0.0">青松学英语</a>：短视频+无字幕、英文字幕、中英字幕三轮</p></blockquote><blockquote><p><a href="https://space.bilibili.com/489001736/video">英语杂谈</a>：【情景英语】Ariannita la Gringa</p></blockquote><h1 id="磨耳朵系列"><a href="#磨耳朵系列" class="headerlink" title="磨耳朵系列"></a>磨耳朵系列</h1><blockquote><p><a href="https://space.bilibili.com/1047187697?spm_id_from=333.999.0.0">口语学习站</a>：英语机翻视频</p></blockquote><blockquote><p><a href="https://space.bilibili.com/2131274141?spm_id_from=333.999.0.0">英语理想国</a>：英文童话故事合集</p></blockquote><blockquote><p><a href="https://space.bilibili.com/669251982?spm_id_from=333.999.0.0">英语攻略</a>：英语常用句子无脑循环几小时</p></blockquote><h1 id="默认收集"><a href="#默认收集" class="headerlink" title="默认收集"></a>默认收集</h1><blockquote><p><a href="https://space.bilibili.com/3493297272130118?spm_id_from=333.999.0.0">Bob-the-Canadian</a>：汉化搬运</p></blockquote><blockquote><p><a href="https://space.bilibili.com/483162496?spm_id_from=333.999.0.0">英语兔</a>：英语发音技巧</p></blockquote><blockquote><p><a href="https://space.bilibili.com/454755309?spm_id_from=333.999.0.0">YouTube口语精选</a>：都是很长的视频</p></blockquote><blockquote><p><a href="https://space.bilibili.com/1121309703?spm_id_from=333.999.0.0">YouTube精选万国语</a>：都是很长的英语系列视频</p></blockquote><blockquote><p><a href="https://space.bilibili.com/433406580?spm_id_from=333.999.0.0">YouTube英语学习</a>：分享听力&#x2F;口语&#x2F;语法&#x2F;词汇&#x2F;阅读&#x2F;公开课</p></blockquote><blockquote><p><a href="https://space.bilibili.com/483301783/video">林小鹿英语精读</a>：外刊精读</p></blockquote><blockquote><p><a href="https://space.bilibili.com/1907818363/video">原味英语听力</a>：BBC英语新闻切片学习</p></blockquote><h1 id="Book"><a href="#Book" class="headerlink" title="Book"></a>Book</h1><ul><li>《Practice Makes Perfect: English Conversation》</li><li>《Speank English Around the Town》</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;在看&quot;&gt;&lt;a href=&quot;#在看&quot; class=&quot;headerlink&quot; title=&quot;在看&quot;&gt;&lt;/a&gt;在看&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://space.bilibili.com/637802152?spm_id_from</summary>
      
    
    
    
    <category term="随笔杂记" scheme="https://lumengde123.github.io/categories/%E9%9A%8F%E7%AC%94%E6%9D%82%E8%AE%B0/"/>
    
    
  </entry>
  
  <entry>
    <title>搭建Hexo-Webstack个人导航并部署到Github和VPS</title>
    <link href="https://lumengde123.github.io/posts/87e0.html"/>
    <id>https://lumengde123.github.io/posts/87e0.html</id>
    <published>2024-06-14T12:20:27.000Z</published>
    <updated>2024-07-05T04:28:05.459Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p><a href="https://github.com/WebStackPage/WebStackPage.github.io">WebStackPage</a>网址导航有多种搭建方式，例如WordPress、Hugo等。本文用Hexo来搭建。</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/hexo-webstack-VPS--01.png"></p><p>项目链接：<a href="https://github.com/HCLonely/hexo-theme-webstack?tab=readme-ov-file">hexo-theme-webstack | 一个基于webstack的hexo主题 (github.com)</a></p><ul><li><p>好处：静态网站不用数据库，占用内存低，好配置。</p></li><li><p>缺点：没有后台管理系统，纯靠编写配置文件不方便，而且只能本地推送更新站点。</p></li></ul><p>本文流程：先在本地搭建，接着美化，部署到Github。附加：配置VPS环境，部署到VPS上。</p><p>本地搭建参考教程：<a href="https://cloud.tencent.com/developer/article/2307097">优雅的使用Webstack打造个人网址导航-腾讯云开发者社区-腾讯云 (tencent.com)</a></p><h1 id="搭建本地环境"><a href="#搭建本地环境" class="headerlink" title="搭建本地环境"></a>搭建本地环境</h1><p>如果之前已经搭建过Hexo博客，本地已经安装好了环境，本小节可跳过。</p><blockquote><p>安装Git</p></blockquote><p>Git 简单来说就是能让你提交本地代码到远程仓库，还能追踪历史提交记录。</p><p>打开<a href="https://git-scm.com/download/win">Git - Downloading Package (git-scm.com)</a>，选择<a href="https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/Git-2.43.0-64-bit.exe"><strong>64-bit Git for Windows Setup</strong></a>。</p><p>基本无脑下一步就行。在<code>Choosing the default editor used by Git</code>这一步选择<code>Use Visual Studio Code as Git&#39;s default editor</code>。</p><p>安装完可以在<code>cmd</code>中输入<code>git --version</code>指令检查是否安装成功</p><blockquote><p>配置 Git 全局用户信息</p></blockquote><p>当你提交代码时，Git会使用这个用户名作为代码提交的作者名称。这个邮箱地址将用于关联你的提交记录。</p><figure class="highlight shell"><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">git config --global user.name &quot;你的GitHub用户名&quot;</span><br><span class="line">git config --global user.email &quot;你的GitHub注册邮箱&quot;</span><br></pre></td></tr></table></figure><blockquote><p>安装Node.js</p></blockquote><p>Node.js 是 Hexo 的运行环境，安装 Node.js 后可以在你的计算机上运行 Hexo。</p><p>打开<a href="https://nodejs.org/en">Node.js (nodejs.org)</a>，下载左边那个LTS版本。</p><p>一样无脑安装。在<code>cmd</code>中输入检查是否安装成功，返回版本信息。</p><figure class="highlight shell"><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">node -v</span><br><span class="line">npm -v</span><br></pre></td></tr></table></figure><blockquote><p>安装Hexo</p></blockquote><p>Hexo 是一个静态网站生成器，当你用 Markdown 编写完博客内容后，可以将<code>.md</code>文件生成静态网页。</p><p>将npm镜像源改为淘宝，减少访问外网的网速影响（有魔法可跳过）</p><figure class="highlight shell"><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 &quot;https://registry.npm.taobao.org&quot;  </span><br></pre></td></tr></table></figure><p>安装hexo命令行工具（-g 表示全局安装，意味着安装的包将在系统的整个环境中都可用，可以在<code>cmd</code>中直接调用相关的命令。）</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-cli -g</span><br></pre></td></tr></table></figure><h1 id="搭建WebStack本地站点"><a href="#搭建WebStack本地站点" class="headerlink" title="搭建WebStack本地站点"></a>搭建WebStack本地站点</h1><blockquote><p>初始化Hexo仓库</p></blockquote><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></pre></td><td class="code"><pre><span class="line">cd D:</span><br><span class="line">mkdir mySite</span><br><span class="line">cd mySite</span><br><span class="line">hexo init blog</span><br></pre></td></tr></table></figure><p>这里在<code>D:/mySite/blog</code>初始化了一个Hexo仓库，路径可自定义。</p><p>安装项目所需依赖：npm 会读取项目中的 package.json 文件，并安装该项目所依赖的所有包。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p>此时就搭建好了一个本地Hexo博客网站。</p><p>启动网站</p><figure class="highlight shell"><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">hexo g</span><br><span class="line">hexo s</span><br></pre></td></tr></table></figure><p>在浏览器打开 <a href="http://localhost:4000/%EF%BC%8C%E5%8D%B3%E5%8F%AF%E7%9C%8B%E5%88%B0Hexo%E7%BD%91%E7%AB%99%E9%A6%96%E9%A1%B5%EF%BC%8C%E9%BB%98%E8%AE%A4%E4%B8%BB%E9%A2%98%E3%80%82">http://localhost:4000/，即可看到Hexo网站首页，默认主题。</a></p><blockquote><p>安装WebStack主题</p></blockquote><p>在<code>cmd</code>中按<code>ctrl+c</code>先关闭本地服务器，输入命令安装WebStack主题：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-theme-webstack -S</span><br></pre></td></tr></table></figure><p>打开根目录的配置文件<code>_config.yml</code>，将<code>theme:</code>参数由默认主题<code>landscape</code>改为<code>webstack</code>。</p><p>将根目录下主题配置文件<code>_config.landscape.yml</code>改名为<code>_config.webstack.yml</code>。</p><p> 将路径<code>D:/mySite/blog/node_modules/hexo-theme-webstack</code>里的<code>_config.example.yml</code>中的内容复制到根目录下的<code>_config.webstack.yml</code>。</p><p>再次运行并打开<a href="http://localhost:4000/">http://localhost:4000/</a> 可以看到导航站了。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo g &amp;&amp; hexo s</span><br></pre></td></tr></table></figure><h1 id="修改导航站内容"><a href="#修改导航站内容" class="headerlink" title="修改导航站内容"></a>修改导航站内容</h1><p>打开根目录的配置文件<code>_config.yml</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></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Site</span></span><br><span class="line">title: 晚风导航</span><br><span class="line">subtitle: &#x27;常用网站收集&#x27;</span><br><span class="line">description: &#x27;&#x27;</span><br><span class="line">keywords:</span><br><span class="line">author: 晚风</span><br><span class="line">language: zh-CN</span><br><span class="line">timezone: &#x27;Asia/Shanghai&#x27;</span><br></pre></td></tr></table></figure><p>打开根目录的主题配置文件<code>_config.webstack.yml</code>，根据参数修改内容，保存文件后重启Hexo服务，即可看到更改。</p><p>具体可参考：<a href="https://cloud.tencent.com/developer/article/2307097">优雅的使用Webstack打造个人网址导航-腾讯云开发者社区-腾讯云 (tencent.com)</a></p><h2 id="图标"><a href="#图标" class="headerlink" title="图标"></a>图标</h2><p>获取别人网站图标的方法：</p><ol><li>百度&#x2F;谷歌搜索这个网站，在结果页直接右击图标另存为本地。</li><li>按F12，ctrl+F输入favicon一般能有图标链接，拼接到域名后面，例如：<code>https://blog.lumengde.com/img/favicon.png</code>。</li><li><code>http://www.google.com/s2/favicons?domain=</code> ，等号后面拼接指定网站的域名，可搜出图标，右键-&gt;另存图像到本地。</li></ol><p>图标本地存放路径为：<code>D:\Coding\webstack\node_modules\hexo-theme-webstack\source\images\logos</code></p><p>可以将图标粘贴进<code>logos</code>文件夹，在主题配置文件中引用。也可以直接引用图标网址（但可能链接失效）。</p><h2 id="侧边栏菜单-对应导航链接"><a href="#侧边栏菜单-对应导航链接" class="headerlink" title="侧边栏菜单 &amp; 对应导航链接"></a>侧边栏菜单 &amp; 对应导航链接</h2><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></pre></td><td class="code"><pre><span class="line">menu:</span><br><span class="line">  - name: 热门工具</span><br><span class="line">    icon: far fa-star</span><br><span class="line">    config: hotTools</span><br><span class="line">  - name: 工具 可展开</span><br><span class="line">    icon: fas fa-tools</span><br><span class="line">    submenu:</span><br><span class="line">      - name: 开发工具</span><br><span class="line">        icon: fas fa-tools</span><br><span class="line">        config: devTools</span><br><span class="line">      - name: 我的博客</span><br><span class="line">        icon: fas fa-blog</span><br><span class="line">        config: myBlog</span><br><span class="line">        </span><br><span class="line">hotTools:</span><br><span class="line">  - name: ChatGPT</span><br><span class="line">    url: https://chat.openai.com/</span><br><span class="line">    img: /images/logos/chatgpt.png</span><br><span class="line">    description: OpenAI的智能对话AI</span><br><span class="line">.......</span><br></pre></td></tr></table></figure><p>分组里的网站有以下两种添加方式：</p><ul><li>在主题的_config.yml里添加<code>hotTools</code>配置代码</li><li>在站点根目录&#x2F;source&#x2F;_data&#x2F;(没有自行创建)内新建hotTools.yml文件<br>将主题配置文件<code>hotTools: -xxx xxx...</code>删除，并将<code>hotTools:</code>后面的内容搬到<code>hotTools.yml</code>内即可</li></ul><h2 id="自定义代码"><a href="#自定义代码" class="headerlink" title="自定义代码"></a>自定义代码</h2><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></pre></td><td class="code"><pre><span class="line">custom:</span><br><span class="line">  head: |- # 以下内容插入到&lt;head&gt;&lt;/head&gt;标签内，可设置多行，注意每行开头至少四个空格</span><br><span class="line">    &lt;link rel=&quot;stylesheet&quot; href=&quot;/css/myself.css&quot;&gt;</span><br><span class="line">    &lt;!-- 直接添加html内容即可 --&gt;</span><br><span class="line">    &lt;!-- 可设置多行 --&gt;</span><br><span class="line">  body: |- # 以下内容插入到&lt;/body&gt;标签之前，可设置多行，注意每行开头至少四个空格</span><br><span class="line">    &lt;!-- 直接添加html内容即可 --&gt;</span><br><span class="line">    &lt;!-- 可设置多行 --&gt;</span><br></pre></td></tr></table></figure><p>对应的，需要在<code>D:\Coding\webstack\node_modules\hexo-theme-webstack\source\css</code>里创建<code>myself.css</code>文件。</p><h2 id="子页面"><a href="#子页面" class="headerlink" title="子页面"></a>子页面</h2><p>导航站可以创建多个子页面，默认使用主页面配置，如果自己有不一样的部分则优先采用自己的配置。</p><p>首先创建子页面：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new page bilibili</span><br></pre></td></tr></table></figure><p>在页面的Front-matter即<code>---</code>之间编写该页面的配置。</p><ul><li>title值随意，date不管它</li><li>需要手动加入<code>type: &#39;child&#39;</code>这个配置项</li><li>其余部分就跟编写<code>_config.webstack.yml</code>一样，如果要修改配置就写出来，没写的就与主页面一致。</li></ul><figure class="highlight yml"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">B站up主推荐</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2024-02-23 22:58:30</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">&#x27;child&#x27;</span></span><br><span class="line"><span class="attr">search:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">常用工具</span></span><br><span class="line">    <span class="attr">icon:</span> <span class="string">far</span> <span class="string">fa-star</span></span><br><span class="line">    <span class="attr">config:</span> <span class="string">hotTools</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">其他工具</span></span><br><span class="line">    <span class="attr">icon:</span> <span class="string">fas</span> <span class="string">fa-tools</span></span><br><span class="line">    <span class="attr">submenu:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">开发工具</span></span><br><span class="line">        <span class="attr">icon:</span> <span class="string">fas</span> <span class="string">fa-tools</span></span><br><span class="line">        <span class="attr">config:</span> <span class="string">devTools</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">我的博客</span></span><br><span class="line">        <span class="attr">icon:</span> <span class="string">fas</span> <span class="string">fa-blog</span></span><br><span class="line">        <span class="attr">config:</span> <span class="string">myBlog</span></span><br><span class="line"><span class="attr">hotTools:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Github</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://github.com/</span></span><br><span class="line">    <span class="attr">img:</span> <span class="string">/images/logos/github.png</span></span><br><span class="line">    <span class="attr">description:</span> <span class="string">面向开源及私有软件项目的托管平台。</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Github</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://github.com/</span></span><br><span class="line">    <span class="attr">img:</span> <span class="string">/images/logos/github.png</span></span><br><span class="line">    <span class="attr">description:</span> <span class="string">面向开源及私有软件项目的托管平台。</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Github</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://github.com/</span></span><br><span class="line">    <span class="attr">img:</span> <span class="string">/images/logos/github.png</span></span><br><span class="line">    <span class="attr">description:</span> <span class="string">面向开源及私有软件项目的托管平台。</span></span><br><span class="line"><span class="attr">myBlog:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">HCLonely</span> <span class="string">Blog</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://blog.hclonely.com/</span></span><br><span class="line">    <span class="attr">img:</span> <span class="string">/images/logos/myblog.png</span></span><br><span class="line">    <span class="attr">description:</span> <span class="string">一个懒人的博客。</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>然后<code>hexo g &amp;&amp; hexo s</code>，访问网址为：<a href="http://localhost:4000/bilibili/">http://localhost:4000/bilibili/</a> 。可以在主页面设置个menu链接到该子页面。</p><h1 id="美化魔改网站"><a href="#美化魔改网站" class="headerlink" title="美化魔改网站"></a>美化魔改网站</h1><p>对网站默认样式不满意，可以自定义代码并引用。这里提供简单的一些样式修改，写在<code>myself.css</code>里。</p><blockquote><p>修改字体</p></blockquote><figure class="highlight css"><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="comment">/* 修改全站字体大小 */</span></span><br><span class="line"><span class="selector-tag">body</span> &#123;</span><br><span class="line">    <span class="attribute">font-size</span>: <span class="number">13px</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 标签符号右边的菜单名字，用的是h4，这里修改h4字体大小 */</span></span><br><span class="line"><span class="selector-tag">h4</span>, <span class="selector-class">.h4</span> &#123;</span><br><span class="line">    <span class="attribute">font-size</span>: <span class="number">16px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>修改侧边栏</p></blockquote><figure class="highlight css"><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 整个侧边栏设置 */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">background</span>: <span class="number">#2c2e2f</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/* 侧边栏内部的 菜单整体box边距设置 */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> <span class="selector-class">.main-menu</span> &#123;</span><br><span class="line">    <span class="attribute">padding-left</span>: <span class="number">30px</span>;</span><br><span class="line">    <span class="attribute">padding-right</span>: <span class="number">30px</span>;</span><br><span class="line">    <span class="attribute">margin-top</span>: <span class="number">10px</span>;</span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">20px</span>;</span><br><span class="line">    <span class="attribute">list-style</span>: none;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/* 侧边栏内部的 每个菜单box设置 */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> <span class="selector-class">.main-menu</span> <span class="selector-tag">a</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#979898</span>;                 <span class="comment">/* icon+字 未选择时的默认颜色 */</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">12px</span> <span class="number">8px</span>;</span><br><span class="line">    <span class="attribute">border-bottom</span>: <span class="number">1px</span> solid <span class="number">#313437</span>;<span class="comment">/* 每个菜单标题下面小横线 */</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 鼠标移入菜单的效果 */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> <span class="selector-class">.main-menu</span> <span class="selector-tag">a</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: aquamarine;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">/* 鼠标点击菜单后保持的效果 */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> <span class="selector-class">.main-menu</span> <span class="selector-tag">li</span><span class="selector-class">.active</span>&gt;<span class="selector-tag">a</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: aquamarine;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 导航目录二级菜单 - 调整至居中，不使用icon */</span></span><br><span class="line"><span class="selector-class">.sidebar-menu</span> <span class="selector-class">.main-menu</span> <span class="selector-tag">ul</span> <span class="selector-tag">li</span> <span class="selector-tag">a</span> &#123;</span><br><span class="line">    <span class="comment">/* padding-left: 15px; */</span></span><br><span class="line">    <span class="comment">/* padding: 2px 15px; */</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>修改导航内容</p></blockquote><figure class="highlight css"><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="comment">/* 导航内容box设置 */</span></span><br><span class="line"><span class="selector-class">.page-container</span> <span class="selector-class">.main-content</span> &#123;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/* 每个导航盒子 修改背景或边距 */</span></span><br><span class="line"><span class="selector-class">.xe-widget</span><span class="selector-class">.xe-conversations</span> &#123;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>修改搜索框</p></blockquote><p>不会…待更新</p><p><strong>更多内容，可按F12寻找对应代码并修改调整。</strong></p><h1 id="部署到Github上"><a href="#部署到Github上" class="headerlink" title="部署到Github上"></a>部署到Github上</h1><p>如果你希望网站可以被别人访问，甚至用自己的域名，可以参考：<a href="https://blog.lumengde.com/posts/4cbb.html#%E6%9C%AC%E5%9C%B0%E5%8D%9A%E5%AE%A2%E9%83%A8%E7%BD%B2%E5%88%B0Github%E4%B8%8A">本地博客部署到Github上</a></p><p>如果Github Page已经放了博客了，那就只能新建个普通仓库，然后修改<code>_config.yml</code>参数。</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">git@github.com:你的github帐号名/仓库名.git</span></span><br><span class="line">  <span class="attr">branch:</span> <span class="string">main</span></span><br></pre></td></tr></table></figure><p>执行<code>hexo clean &amp;&amp; hexo g &amp;&amp; hexo s</code>备份到Github仓库里。</p><p>然后把项目托管在Vercel里，解析用Vercel的IP，也可实现建站。（但是Vercel域名被墙了，得用魔法访问或者再套个cloudflare穿过长城网络）</p><p>也可以部署在自己的云服务器上，往下看。</p><h1 id="配置VPS环境"><a href="#配置VPS环境" class="headerlink" title="配置VPS环境"></a>配置VPS环境</h1><p>跟部署Hexo博客一样，通过Git Hooks和Nginx部署网站。</p><p>参考：<a href="https://blog.zhheo.com/p/12a4e7e6.html">Hexo博客部署到VPS | 张洪Heo (zhheo.com)</a></p><p>只需要把<code>blog</code>相关的都改成<code>webstack</code>就好了。【注意：非常多的blog，仔细改，漏改一个都可能报错】</p><p>最后的配置文件<code>_config.yml</code>应该为</p><figure class="highlight yml"><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="attr">url:</span> <span class="string">你的导航站域名</span></span><br><span class="line"></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">    <span class="attr">repo:</span> <span class="string">git@github.com:你的github账户名/自定义仓库名.git</span></span><br><span class="line">    <span class="attr">branch:</span> <span class="string">main</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">    <span class="attr">repo:</span> <span class="string">git@你的VPS的IP:/home/git/webstack.git</span></span><br><span class="line">    <span class="attr">branch:</span> <span class="string">master</span></span><br></pre></td></tr></table></figure><p>域名解析新添：<code>A，webstack，你的VPS IP</code>。</p><p>最后<code>Hexo三连</code>，打开你的域名即可看到导航网站。</p><p>如果报错：<strong>ERROR Deployer not found: git</strong>，只需要安装<code>hexo-deployer-git</code>插件然后再<code>hexo d</code>一下即可。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure><blockquote><p>补充：也可以把网站部署到 <code>vercel</code> 上，类型选择other而不是hexo。然后新添域名，新添域名解析记录即可。</p></blockquote>]]></content>
    
    
    <summary type="html">通过Hexo的WebStack主题搭建静态导航站，添加自己的导航网址并美化网站，然后部署到Github仓库或VPS上。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="VPS项目搭建" scheme="https://lumengde123.github.io/tags/VPS%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA/"/>
    
    <category term="Hexo" scheme="https://lumengde123.github.io/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>Hexo图片管理 | 图床使用教程</title>
    <link href="https://lumengde123.github.io/posts/d95.html"/>
    <id>https://lumengde123.github.io/posts/d95.html</id>
    <published>2024-06-14T10:40:47.000Z</published>
    <updated>2024-06-14T13:13:37.460Z</updated>
    
    <content type="html"><![CDATA[<h1 id="图片引用"><a href="#图片引用" class="headerlink" title="图片引用"></a>图片引用</h1><p>可以使用Github仓库存放图片，通过PicGo图床工具快捷上传到Github和获取图片在Github的链接。</p><p>这里抛弃<strong>本地引用</strong>，因为有的主题插件可能有冲突，导致引用图片失败。</p><p>在博客本地存放图片并引用，缺点：</p><ul><li>可能出现图片引用错误。</li><li>博客文章一多，图片也多占用空间太大，重新生成和部署的时候耗时太久。</li><li>Github仓库有容量限制，博客仓库同时存放图片不利于后期使用。</li></ul><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;img src=<span class="string">&quot;https://www.xuarh.com/2020/06/16/Hexo/Hexo%E5%8D%9A%E5%AE%A2%E9%83%A8%E7%BD%B2%E5%88%B0VPS/principle.png&quot;</span> style=<span class="string">&quot;zoom:50%;&quot;</span> /&gt;</span><br></pre></td></tr></table></figure><h1 id="图片压缩"><a href="#图片压缩" class="headerlink" title="图片压缩"></a>图片压缩</h1><p>图片太大会影响网站加载速度，文章太长图片也多，会消耗读者大量流量。<br>所以需要对图片进行压缩处理。压缩完再存入，然后文章再引用链接。</p><ul><li><a href="https://docsmall.com/image-compress">docsmall - 在线图片压缩</a>：压缩程度分为5档</li><li><a href="https://tinify.cn/">TinyPNG - 智能压缩</a>：一般压缩60%~70%的大小</li></ul><h1 id="Github-Picgo-jsDelivr-CDN"><a href="#Github-Picgo-jsDelivr-CDN" class="headerlink" title="Github + Picgo + jsDelivr CDN"></a>Github + Picgo + jsDelivr CDN</h1><p>设置了图床，就不用在博客项目仓库里存图片，而是存在其他仓库，节省博客仓库空间。也不用处理图片，挣扎图片路径的错误，十分方便！</p><p>当博客文章变多时，占用的空间非常大，生成速度也慢。所以我们可以新建个仓库专门用来存图片，以此减少博客占用空间。<br>可以使用图片压缩网站对图片先进行压缩再存入，以减少浏览文章的流量消耗。</p><p>概念补充：</p><ul><li>GitHub 上，每个文件都有一个对应的 raw 链接，通过它就可以访问文件的原始内容。</li><li>PicGo,一个用于快速上传图片并获取图片 URL 链接的工具。</li><li>jsDelivr 是一个免费、开源的加速CDN公共服务，可加速访问托管的项目目录或图片资源。<br>当然也可以通过jsDelivr来加速访问github中某个仓库中的某张图片。</li></ul><p>执行流程：</p><ul><li>使用 PicGo 选择要上传的图片，并配置好上传目标，这里是 GitHub。</li><li>PicGo 将图片上传到你指定的 GitHub 仓库，并通过 GitHub API 完成上传过程。</li><li>上传成功后，PicGo 会返回一个链接，该链接是指向上传后的图片在 GitHub 仓库中的 raw 链接。</li><li>通过jsDelivr CDN加速图片访问的使用非常简单，直接修改链接就可以：<br><code>https://cdn.jsdelivr.net/gh/用户名称/仓库名称@版本号或分支/[目录/]图片名</code>。</li></ul><p>参考教程：</p><ul><li><a href="https://zhuanlan.zhihu.com/p/489236769">使用Github+picGo搭建图床，保姆级教程来了</a></li><li><a href="https://lanlan2017.github.io/blog/b19c6a80/">PicGo GitHub图床</a></li></ul><p><strong>使用教程</strong></p><p><strong>1.Github新建仓库</strong><br>在Github头像左侧，点击<code>+</code>-&gt;<code>New Repository</code>，可为仓库取名：<code>cdn_img</code>，权限为<code>Public</code>，可勾选<code>add a README file</code>。</p><p><strong>2.生成token</strong><br>点击<code>Github头像-&gt;Settings-&gt;Developer Settings-&gt;Personal access tokens-&gt;Tokens(classic)-&gt;Generate new access Token(classic)</code>，别选(Beta)，后面会报错的。</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/hexo-photos-manage--01.png"></p><p>Note: for saving cdn_img（写啥都行）；Select scopes：把repo全勾上。<br>点击<code>Generate token</code>，注意这里的token只会出现一次，最好复制后在微信发给自己并右键-&gt;收藏。</p><blockquote><p>3.下载PicGo并配置<br>在<a href="https://github.com/Molunerfinn/PicGo/releases">【Github-PicGo-releases】</a>里下载<code>PicGo-Setup-版本.exe</code>.<br>这里我们下载<a href="https://github.com/Molunerfinn/PicGo/releases/tag/v2.3.1">【2.3.1长期稳定版本】</a>,点此直接下载：<a href="https://github.com/Molunerfinn/PicGo/releases/download/v2.3.1/PicGo-Setup-2.3.1.exe">PicGo-v2.3.1</a></p></blockquote><p>【来自知乎-程序猿手记】如果安装成功，PicGo不能正常使用，则可以右键exe文件-&gt;属性-&gt;勾选兼容模式和管理员权限。(有的电脑会出现这个问题)</p><p>打开软件，<code>图床设置-&gt;Github</code>，填写配置信息，点击确定并<code>设为默认图床</code>。</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/hexo-photos-manage--02.png"></p><p>仓库名：github用户名&#x2F;cdn_img<br>分支名：main；或者自己在Github新建个分支，我这里新建了blog_hexo分支<br>Token：刚才获取的Token<br>存储路径：不设置图片就默认存于该分支的根目录，也可以设个路径（自动生成文件夹）存放图片<br>自定义域名：</p><ul><li>默认github的raw链接是：<code>https://raw.githubusercontent.com/用户名/仓库名@分支名</code> （比较慢）</li><li>通过jsDelivr CDN加速：<code>https://cdn.jsdelivr.net/gh/用户名/仓库名@分支名</code> （偶尔失效，可先换回raw的链接）</li></ul><p>打开<code>PicGo设置</code>，<strong>开启</strong><code>上传前重命名</code>,<code>时间戳重命名</code>,<code>开启上传提示</code>。</p><p>此时我们上传图片，可以获得图片的链接地址，在浏览器中打开可以看见图片就行了。</p><blockquote><p>4.安装picgo-plugin-github-plus插件</p></blockquote><p>PicGo使用时，只能上传，删除图片时Github仓库无法同步删除，所以要在<code>PicGo-&gt;插件设置</code>安装这个插件。</p><p>然后在<code>图床设置-&gt;githubPlus</code>里填配置信息，跟刚才的一样就行，然后确定，<code>设为默认图床</code>。</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/hexo-photos-manage--03.png"></p><p>测试：现在可以上传图片，在Github仓库中查看，然后在PicGo中删除，刷新Github页面查看图片是否也自动删除。</p><p>以后文章要插入图片，先放到图片压缩网站里压缩一下大小，然后上传到PicGo，PicGo会自动返回链接到剪贴板，只需要在相应编辑器里粘贴即可。 </p><p>建议只从PicGo操作Github里的图片。</p>]]></content>
    
    
    <summary type="html">本文会介绍Hexo静态博客如何管理和引用图片，会介绍图床是什么以及如何使用。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Hexo" scheme="https://lumengde123.github.io/tags/Hexo/"/>
    
    <category term="博客相关" scheme="https://lumengde123.github.io/tags/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
    <category term="图床" scheme="https://lumengde123.github.io/tags/%E5%9B%BE%E5%BA%8A/"/>
    
  </entry>
  
  <entry>
    <title>Docker Compose 安装及常用命令整理</title>
    <link href="https://lumengde123.github.io/posts/6173.html"/>
    <id>https://lumengde123.github.io/posts/6173.html</id>
    <published>2024-06-14T08:28:25.000Z</published>
    <updated>2024-06-14T12:14:55.444Z</updated>
    
    <content type="html"><![CDATA[<h1 id="简单介绍"><a href="#简单介绍" class="headerlink" title="简单介绍"></a>简单介绍</h1><p>Docker可以容器化部署一些应用，将单个应用程序及其依赖项封装成容器，环境互相隔离互不影响，也方便对其进行升级和数据迁移。在VPS搭建应用中是一个很常见的技术。</p><p>Docker Compose是用于定义和运行多容器Docker 应用程序的工具，可以通过配置docker-compose.yml文件一次性运行多个不同镜像的容器。</p><h1 id="相关链接"><a href="#相关链接" class="headerlink" title="相关链接"></a>相关链接</h1><p>参考教程：</p><p>官方文档 <a href="https://docs.docker.com/engine/install/debian/">Install Docker Engine on Debian | Docker Docs</a></p><p>扩展阅读：</p><p>Docker在线入门教程<a href="https://vuepress.mirror.docker-practice.com/">《Docker 从入门到实践》</a></p><p><a href="https://blog.csdn.net/BThinker/article/details/123355362">Docker 日常命令大全(完整详细版)_docker命令-CSDN博客</a></p><p><a href="https://blog.csdn.net/m0_51913750/article/details/131743170">docker-compose 常用命令（附 docker-compose 的安装教程）</a></p><h1 id="Docker-安装流程"><a href="#Docker-安装流程" class="headerlink" title="Docker 安装流程"></a>Docker 安装流程</h1><h2 id="基本准备"><a href="#基本准备" class="headerlink" title="基本准备"></a>基本准备</h2><blockquote><p>安装&#x2F;更新必备的软件</p></blockquote><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt update <span class="literal">-y</span> &amp;&amp; apt install <span class="literal">-y</span> <span class="built_in">wget</span> vim <span class="built_in">curl</span> lsof sudo</span><br></pre></td></tr></table></figure><blockquote><p>环境要求&amp;环境查看</p></blockquote><p>我这里用的是Debian11，也可以用其他系统，具体要求可以查看官方文档。</p><figure class="highlight plaintext"><figcaption><span>version of one of these Debian versions：</span></figcaption><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><br><span class="line">Debian Bookworm 12 (stable)</span><br><span class="line"></span><br><span class="line">Debian Bullseye 11 (oldstable)</span><br><span class="line"></span><br><span class="line">Docker Engine for Debian is compatible with x86_64 (or amd64), armhf, arm64, and ppc64le (ppc64el) architectures.</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 系统内核 5.10.0-27-amd64</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line">​</span><br><span class="line"><span class="comment"># 系统版本 Debian GNU/Linux 11 (bullseye)</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br></pre></td></tr></table></figure><h2 id="开始安装"><a href="#开始安装" class="headerlink" title="开始安装"></a>开始安装</h2><p>百度搜Docker，点击<code>Docs</code>，点击<a href="https://docs.docker.com/get-docker/">Get Docker</a>进入帮助文档，左侧导航栏选择<code>Docker Engine-&gt;Install-&gt;</code><a href="https://docs.docker.com/engine/install/debian/">Debian</a></p><p>由于Linux发行版的Docker的apt库可能比较旧，这里我们通过阅读官方文档按步骤来安装Docker最新版本。</p><blockquote><p>1.卸载旧版本</p></blockquote><p><strong>如果是第一次安装Docker，这一步可跳过。</strong></p><p>1.1.卸载非官方和冲突软件包</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> pkg <span class="keyword">in</span> docker.io docker-doc docker-compose podman-docker containerd runc; <span class="keyword">do</span> sudo apt-get remove <span class="variable">$pkg</span>; <span class="keyword">done</span></span><br></pre></td></tr></table></figure><p>1.2.卸载依赖(Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras</span><br></pre></td></tr></table></figure><p>1.3.删除文件资源(Delete all images, containers, and volumes which aren’t automatically removed)</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"><span class="comment"># /var/lib/docker 是Docker的默认工作路径</span></span><br><span class="line"><span class="built_in">rm</span> -rf /var/lib/docker</span><br><span class="line"><span class="built_in">rm</span> -rf /var/lib/containerd</span><br></pre></td></tr></table></figure><blockquote><p>2.下载 Install using the apt repository</p></blockquote><p>2.1 Set up Docker’s repository.apt</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><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"><span class="comment"># Add Docker&#x27;s official GPG key:</span></span><br><span class="line">sudo apt-get update</span><br><span class="line">sudo apt-get install ca-certificates curl</span><br><span class="line">sudo install -m 0755 -d /etc/apt/keyrings</span><br><span class="line">sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc</span><br><span class="line">sudo <span class="built_in">chmod</span> a+r /etc/apt/keyrings/docker.asc</span><br><span class="line"></span><br><span class="line"><span class="comment"># Add the repository to Apt sources:</span></span><br><span class="line"><span class="built_in">echo</span> \</span><br><span class="line"> <span class="string">&quot;deb [arch=<span class="subst">$(dpkg --print-architecture)</span> signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \</span></span><br><span class="line"><span class="string"> <span class="subst">$(. /etc/os-release &amp;&amp; echo <span class="string">&quot;<span class="variable">$VERSION_CODENAME</span>&quot;</span>)</span> stable&quot;</span> | \</span><br><span class="line"> sudo <span class="built_in">tee</span> /etc/apt/sources.list.d/docker.list &gt; /dev/null</span><br><span class="line"></span><br><span class="line">apt-get update</span><br></pre></td></tr></table></figure><p>2.2 Install the Docker packages</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</span><br></pre></td></tr></table></figure><p>补充：docker-compose V1版本已停止更新。现在的Docker安装命令自带上了docker-compose-plugin插件，可以不用再单独安装。但是指令和单独装的docker-compose不同，现在 <code>docker compose</code> 中间没有 <code>-</code></p><p>2.3 Verify that the installation is successful by running the image:hello-world</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启动Docker</span></span><br><span class="line">sudo systemctl start docker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看Docker版本</span></span><br><span class="line">docker version</span><br><span class="line"></span><br><span class="line"><span class="comment"># 运行`hello-world`镜像</span></span><br><span class="line">sudo docker run hello-world</span><br></pre></td></tr></table></figure><blockquote><p>3.Upgrade Docker Engine</p></blockquote><p>需要时再说，看官方文档。</p><h1 id="Docker-相关知识"><a href="#Docker-相关知识" class="headerlink" title="Docker 相关知识"></a>Docker 相关知识</h1><p>运行<code>hello-world</code>镜像可以看到以下信息：</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/docker-compose-install--01.png"></p><p>这段信息表示无法从本地找到hello-world:latest镜像，所以从Docker Hub中拉取了最新的hello-world镜像，并输出了一些相关信息。</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/docker-compose-install--02.png"></p><p>Docker执行的流程是：</p><ul><li><p>Docker 客户端联系了 Docker 守护进程。</p></li><li><p>Docker 守护进程从 Docker Hub 拉取了 hello-world 镜像（amd64）。</p></li><li><p>Docker 守护进程从该镜像创建了一个新的容器，该容器运行了生成当前输出的可执行文件。</p></li><li><p>Docker 守护进程将该输出流传送到 Docker 客户端，然后由客户端发送到您的终端。</p></li></ul><p>查看一下镜像</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">root@iZ7xvcu671mq0lrlzj6sbqZ:~<span class="comment"># docker images</span></span><br><span class="line">REPOSITORY  TAG   IMAGE ID   CREATED   SIZE</span><br><span class="line">hello-world  latest  d2c94e258dcb  9 months ago  13.3kB</span><br></pre></td></tr></table></figure><p>run的运行流程：</p><p><img src="https://cdn.jsdelivr.net/gh/lumengde123/cdn_img@blog_hexo/maupassant/docker-compose-install--03.png"></p><p><strong>docker0：</strong></p><p><code>docker0</code> 是 Docker 默认的桥接网络接口。当你安装 Docker 并启动容器时，Docker 会创建一个名为 <code>docker0</code> 的 Linux bridge，所有的 Docker 容器都会连接到这个 bridge 上。</p><p>如果你想要查看 <code>docker0</code> 的配置和状态，可以使用以下命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 docker0 接口的配置</span></span><br><span class="line">ip addr show docker0</span><br></pre></td></tr></table></figure><p>通过该指令可以得到Docker内部默认网关：172.17.0.1，这在配置NPM反代的时候会用到。如果是反代与NPM同一台VPS的Docker，则IP可填172.17.0.1或VPS的IP。</p><h1 id="Docker-常用命令"><a href="#Docker-常用命令" class="headerlink" title="Docker 常用命令"></a>Docker 常用命令</h1><p>参考：<a href="https://blog.csdn.net/BThinker/article/details/123355362">Docker 日常命令大全(完整详细版)_docker命令-CSDN博客</a></p><p>查看Docker状态：<code>sudo systemctl status docker</code></p><p>启动Docker：<code>sudo systemctl start docker</code></p><p>开启开机自动启动：<code>sudo systemctl enable docker</code></p><p>关闭开机自动启动：<code>sudo systemctl disable docker</code></p><p>查看docker占用内存情况：<code>docker stats</code></p><p>列出当前docker：<code>docker ps -l</code></p><p><code>docker image prune</code>：prune 命令用来删除不再使用的 docker 镜像(一般用来删旧镜像)。删除所有未被 tag 标记和未被容器使用的镜像</p><h1 id="Docker-Compose-常用命令"><a href="#Docker-Compose-常用命令" class="headerlink" title="Docker Compose 常用命令"></a>Docker Compose 常用命令</h1><p>参考：<a href="https://blog.csdn.net/m0_51913750/article/details/131743170">docker-compose 常用命令（附 docker-compose 的安装教程）</a></p><p>建议：专门给 Docker 的数据、配置文件新建一个文件夹。在这里面通过 docker-compose.yml 配置文件来安装或修改docker。</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">sudo -i</span><br><span class="line"><span class="built_in">mkdir</span> -p /root/data/docker_data/</span><br><span class="line"><span class="built_in">cd</span> /root/data/docker_data/</span><br></pre></td></tr></table></figure><p>要使用docker compose，需要先进入包含docker-compose.yml文件的根目录，<strong>只对该文件内的docker-compose.yml进行操作。</strong></p><p><code>docker compose up -d</code> ：根据 docker-compose.yml 配置文件创建并运行多个容器协同工作，-d 为在后台运行容器</p><p><code>docker compose ps</code> ：显示与当前 docker-compose.yml 文件相关联的容器的信息，-a 为显示包括已停止的容器</p><p><code>docker compose stop</code> ：停止正在运行的容器</p><p><code>docker compose start</code> ：启动容器</p><p><code>docker compose restart</code> ：重启容器</p><p><code>docker compose exec [docker_name] [command]</code> ：用于与在运行中的某个容器进行交互，在其内部执行命令</p><p><code>docker compose pull</code> ：拉取服务依赖的镜像。一般用于更新Docker</p><p><code>docker compose down</code> ：停止并移除由 docker-compose.yml 创建的容器、网络和卷。一般用于卸载Docker</p><p>更新Docker（通常情况）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /root/data/docker_data/xxxx</span><br><span class="line"></span><br><span class="line">docker compose down </span><br><span class="line"></span><br><span class="line"><span class="built_in">cp</span> -r /root/data/docker_data/xxxx /root/data/docker_data/xxxx.archive  <span class="comment"># 备份</span></span><br><span class="line"></span><br><span class="line">docker compose pull</span><br><span class="line"></span><br><span class="line">docker compose up -d</span><br><span class="line"></span><br><span class="line">docker image prune  <span class="comment"># 删除不再使用的旧镜像</span></span><br></pre></td></tr></table></figure><p>卸载Docker（通常情况）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /root/data/docker_data/xxxx</span><br><span class="line"></span><br><span class="line">docker compose down</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> ..</span><br><span class="line"></span><br><span class="line"><span class="built_in">rm</span> -rf /root/data/docker_data/xxxx  <span class="comment"># 完全删除应用的数据</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">Docker Compose是用于定义和运行多容器Docker应用程序的工具，可以通过配置docker-compose.yml文件一次性运行多个不同镜像的容器。本文会介绍如何安装和使用Docker Compose。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="VPS项目搭建" scheme="https://lumengde123.github.io/tags/VPS%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA/"/>
    
  </entry>
  
  <entry>
    <title>VPS项目搭建-集合(待修改)</title>
    <link href="https://lumengde123.github.io/posts/9437.html"/>
    <id>https://lumengde123.github.io/posts/9437.html</id>
    <published>2024-06-14T08:05:38.000Z</published>
    <updated>2024-06-17T09:34:21.598Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>这篇文章我会分享一些在VPS上搭建过的项目，都是一些比较有意思且实用的应用。</p><p>基本都通过 <code>Docker Compose</code> 来<strong>部署</strong>，并通过反代神器 <code>Nginx Proxy Manager</code> 来<strong>配置反向代理</strong>。</p><p>好处是不需要专业相关知识，跟着教程步骤即可搭建使用。</p><p>注意：每次新建Docker容器后，记得开放对应的端口，设置好反向代理和添加域名解析。</p><h1 id="Docker部署项目"><a href="#Docker部署项目" class="headerlink" title="Docker部署项目"></a>Docker部署项目</h1><h2 id="简单图床-EasyImage"><a href="#简单图床-EasyImage" class="headerlink" title="简单图床 EasyImage"></a>简单图床 EasyImage</h2><p>内存占用：40M起步</p><p>安装教程：</p><p>视频<a href="https://www.bilibili.com/video/BV1vv4y1P7fd/?spm_id_from=333.337.search-card.all.click&vd_source=147cc6eb39eb565f36bd69ce0b3069bd">【好玩儿的Docker项目】10分钟搭建一个简单图床——Easyimage哔哩哔哩bilibili</a></p><p>博客<a href="https://iwanlab.com/docker-compose-install-easyimage/">【好玩儿的Docker项目】10分钟搭建一个简单图床——Easyimage | 爱玩实验室 (iwanlab.com)</a></p><p>扩展插件：<a href="https://icret.github.io/EasyImages2.0/#/./Edge%E6%8F%92%E4%BB%B6">Edge插件 (icret.github.io)</a></p><p>官方文档：<a href="https://icret.github.io/EasyImages2.0/#/./%E4%B8%89%E6%96%B9%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97">三方安装指南 (icret.github.io)</a></p><p>简易流程：</p><blockquote><p>创建安装目录</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p /root/data/docker_data/easyimage</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> /root/data/docker_data/easyimage</span><br><span class="line"></span><br><span class="line">vim docker-compose.yml</span><br></pre></td></tr></table></figure><blockquote><p>配置docker-compose.yml</p></blockquote><p>version: ‘3.3’<br>services:<br>  easyimage:<br>    image: ddsderek&#x2F;easyimage:latest<br>    container_name: easyimage<br>    ports:<br>      - ‘8180:80’<br>    environment:<br>      - TZ&#x3D;Asia&#x2F;Shanghai<br>      - PUID&#x3D;1000<br>      - PGID&#x3D;1000<br>    volumes:<br>      - ‘&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;easyimage&#x2F;config:&#x2F;app&#x2F;web&#x2F;config’<br>      - ‘&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;easyimage&#x2F;i:&#x2F;app&#x2F;web&#x2F;i’<br>    restart: unless-stopped</p><p>查看端口占用，若被占用则换一个：</p><p>lsof -i:8180</p><p>启动docker compose服务</p><p>docker compose up -d</p><p>先别打开图床。</p><p>NPM配置反代。切记Details不要勾选Block Common Exploits。</p><p>在cf做好域名解析。</p><p>修改config.php</p><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;easyimage&#x2F;config&#x2F;config.php<br>​<br>#把domain和imgurl分别改成自己的域名</p><p>访问图床：IP:8180并安装。在设置中修改站点和图片URL。</p><p>动态网站 WordPress</p><p>内存占用：380M起步 无上限</p><p>安装教程：</p><p>视频【好玩儿的Docker项目】10分钟搭建美国白宫也用的博客框架——Wordpress！不过没Halo香！哔哩哔哩bilibili</p><p>博客【好玩儿的Docker项目】10分钟搭建美国白宫也用的博客框架——Wordpress-我不是咕咕鸽 (laoda.de)</p><p>扩展阅读：Docker版本安装WordPress常见问题梳理（附JustNews主题专属美化） | 爱玩实验室 (iwanlab.com)</p><p>推荐安装：插件——WP Markdown、SSL不安全内容修复器。主题——Kratos、argon</p><p>简易流程：</p><p>安装WP</p><p>mkdir -p &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress<br>​<br>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress<br>​<br>vim docker-compose.yml</p><p>配置docker-compose.yml，参考官方文档：wordpress - Official Image | Docker Hub</p><p>version: ‘3.1’<br>​<br>services:<br>​<br>  wordpress:<br>    image: wordpress:latest<br>    restart: always<br>    ports:<br>      - 8200:80<br>    environment:<br>      WORDPRESS_DB_HOST: db<br>      WORDPRESS_DB_USER: wordpress<br>      WORDPRESS_DB_PASSWORD: wordpress<br>      WORDPRESS_DB_NAME: wordpress<br>    volumes:<br>      - &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress&#x2F;data:&#x2F;var&#x2F;www&#x2F;html<br>​<br>  db:<br>    image: mysql:5.7<br>    restart: always<br>    environment:<br>      MYSQL_DATABASE: wordpress<br>      MYSQL_USER: wordpress<br>      MYSQL_PASSWORD: wordpress<br>      MYSQL_RANDOM_ROOT_PASSWORD: ‘1’<br>    volumes:<br>      - &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress&#x2F;db:&#x2F;var&#x2F;lib&#x2F;mysql<br>​<br>#volumes:</p><h1 id="wordpress"><a href="#wordpress" class="headerlink" title="wordpress:"></a>wordpress:</h1><h1 id="db"><a href="#db" class="headerlink" title="db:"></a>db:</h1><p>wordpress和mysql的environment的值要一一对应。</p><p>(如果VPS的内存不大于1G，建议设置1G的SWAP。mysql占用内存比较大。)</p><p>查看端口占用，若被占用则换一个：</p><p>lsof -i:8200</p><p>启动docker compose服务</p><p>docker compose up -d</p><p>配置Nginx Proxy Manager反代</p><p>打开网站：<a href="http://vps-ip:8200/">http://VPS-IP:8200</a></p><p>查看Docker容器内部ID：ip addr show docker0，一般都是172.17.0.1</p><p>Add Proxy Host：</p><p>Details:</p><p>Scheme：http</p><p>Forward Hostname &#x2F; IP：172.17.0.1，或者你的VPS-IP</p><p>Forward Port：8200，或者你自定义的端口注意需要与docker-compose里的一致</p><p>勾选Block Common Exploits和Websockets Support</p><p>SSL:</p><p>选择你申请的通配符SSL或者为该域名单独申请一个</p><p>全勾选</p><p>Cloudflare添加解析记录。</p><p>然后进入WP在设置-&gt;常规里把两个URL改成你的域名即可。</p><p>上传主题并安装</p><p>先打开某主题的Github地址，例如Argon主题：solstice23&#x2F;argon-theme: 📖 Argon - 一个轻盈、简洁的 WordPress 主题 (github.com)并下载.zip文件，在WP主题中点击上传主题，选择压缩包并安装。</p><p>正常来讲会出错，下面来解决。</p><ol><li>上传的文件尺寸超过php.ini中定义的upload_max_filesize值</li></ol><p>默认php设置的上传文件大小为2M，我们需要调整一下。</p><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress<br>vim uploads.ini</p><p>在uploads.ini末尾加入以下内容</p><p>file_uploads &#x3D; On<br>upload_max_filesize &#x3D; 256M    #可以自己设置大小<br>post_max_size &#x3D; 256M  #可以自己设置大小</p><p>在docker-compose.yml里WP配置的volumes添加一行内容</p><ul><li>&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress&#x2F;uploads.ini:&#x2F;usr&#x2F;local&#x2F;etc&#x2F;php&#x2F;conf.d&#x2F;uploads.ini</li></ul><p>暂停并重启容器</p><p>docker-compose down<br>docker-compose up -d </p><p>查看修改结果</p><p>docker ps<br>docker exec 你的wp容器id php -i | grep upload</p><ol start="2"><li>上传主题，出现“您点击的链接已过期”</li></ol><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;wordpress&#x2F;data<br>vim .htaccess</p><p>文本末尾空一行，添加以下内容</p><p>php_value max_execution_time 300<br>php_value upload_max_filesize 256M<br>php_value post_max_size 256M<br>php_value memory_limit 128M<br>php_value max_input_vars 5000</p><p>然后再上传主题并安装，启用主题即可。</p><p>配置redis(可选)</p><p>教程里有。</p><p>动态网站 Typecho</p><p>简单说明：比WordPress轻量</p><p>参考教程：</p><p>视频【好玩儿的Docker项目】10分钟搭建一个Typecho博客｜太破口！念念不忘，必有回响！哔哩哔哩bilibili</p><p>还未尝试。</p><p>动态网站 Halo</p><p>内存占用：820M起步，因为Halo本身Java就大，还用的MYSQL8.0</p><p>参考教程：</p><p>官方文档 Halo 文档</p><p>博客 【好玩儿的Docker项目】好用又强大的开源建站工具——Halo 2.0</p><p>扩展阅读：</p><p>Halo社区：<a href="https://bbs.halo.run/">https://bbs.halo.run/</a></p><p>官网地址：<a href="https://halo.run/">https://halo.run/</a></p><p>应用市场：<a href="https://www.halo.run/store/apps">https://www.halo.run/store/apps</a></p><p>简易流程：</p><p>创建文件夹</p><p>mkdir &#x2F;data&#x2F;docker_data&#x2F;halo<br>cd &#x2F;data&#x2F;docker_data&#x2F;halo<br>vim docker-compose.yml</p><p>配置docker-compose.yml</p><p>version: “3”<br>​<br>services:<br>  halo:<br>    image: halohub&#x2F;halo:2.13<br>    container_name: halo<br>    restart: on-failure:3<br>    depends_on:<br>      halodb:<br>        condition: service_healthy<br>    networks:<br>      halo_network:<br>    volumes:<br>      - .&#x2F;halo2:&#x2F;root&#x2F;.halo2<br>    ports:<br>      - “8090:8090”<br>    healthcheck:<br>      test: [“CMD”, “curl”, “-f”, “<a href="http://localhost:8090/actuator/health/readiness%22]">http://localhost:8090/actuator/health/readiness&quot;]</a><br>      interval: 30s<br>      timeout: 5s<br>      retries: 5<br>      start_period: 30s<br>    command:<br>      - –spring.r2dbc.url&#x3D;r2dbc:pool:mysql:&#x2F;&#x2F;halodb:3306&#x2F;halo<br>      - –spring.r2dbc.username&#x3D;root<br>      # MySQL 的密码，请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。<br>      - –spring.r2dbc.password&#x3D;o#DwN&amp;JSa56<br>      - –spring.sql.init.platform&#x3D;mysql<br>      # 外部访问地址，请根据实际需要修改<br>      - –halo.external-url&#x3D;<a href="http://localhost:8090/">http://localhost:8090/</a><br>​<br>  halodb:<br>    image: mysql:8.1.0<br>    container_name: halodb<br>    restart: on-failure:3<br>    networks:<br>      halo_network:<br>    command:<br>      - –default-authentication-plugin&#x3D;caching_sha2_password<br>      - –character-set-server&#x3D;utf8mb4<br>      - –collation-server&#x3D;utf8mb4_general_ci<br>      - –explicit_defaults_for_timestamp&#x3D;true<br>    volumes:<br>      - .&#x2F;mysql:&#x2F;var&#x2F;lib&#x2F;mysql<br>      - .&#x2F;mysqlBackup:&#x2F;data&#x2F;mysqlBackup<br>    ports:<br>      - “3306”<br>    healthcheck:<br>      test: [“CMD”, “mysqladmin”, “ping”, “-h”, “127.0.0.1”, “–silent”]<br>      interval: 3s<br>      retries: 5<br>      start_period: 30s<br>    environment:<br>      # 请修改此密码，并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值<br>      - MYSQL_ROOT_PASSWORD&#x3D;o#DwN&amp;JSa56<br>      - MYSQL_DATABASE&#x3D;halo<br>​<br>networks:<br>  halo_network:</p><p>–halo.external-url改为自己实际要用的域名；–spring.r2dbc.password和MYSQL_ROOT_PASSWORD的值要一致，自行修改；halodb的ports为3306而不是3306:3306，避免把端口暴露在公网，它会随机找一个主机空闲端口进行映射。</p><p>确认端口未被占用</p><p>lsof -i:8090</p><p>启动Docker Compose服务</p><p>docker compose up -d</p><p>NPM反代配置</p><p>先NPM配置再进行Halo安装程序。</p><p>域名与–halo.external-url一致，xxx和<a href="http://www.xxx,http,172.17.0.1,8090,全勾选.force/">www.xxx，http，172.17.0.1，8090，全勾选。Force</a> SSL</p><p>初始化Halo</p><p>打开your-VPS-IP:8090，输入对应信息进行初始化。</p><p>安装主题</p><p>Joe 3.0慕名而来。参考官方文档：<a href="https://docs.halo.run/user-guide/themes">https://docs.halo.run/user-guide/themes</a></p><p>可以选择远程下载，在主题中点击下载，输入域名即可跳转。</p><p>基本配置</p><p>需要先在设置-&gt;通知设置，设置好邮箱服务器后才能接受邮件验证码。然后去用户页验证邮箱。</p><p>主题色可改为蓝色：#2a64f6</p><p>其他内容自行折腾。</p><p>补充</p><p>更新操作</p><h1 id="修改-docker-compose-yaml-中配置的image版本"><a href="#修改-docker-compose-yaml-中配置的image版本" class="headerlink" title="修改 docker-compose.yaml 中配置的image版本"></a>修改 docker-compose.yaml 中配置的image版本</h1><p>services:<br>  halo:<br>    image: halohub&#x2F;halo:2.13<br>    container_name: halo<br>​</p><h1 id="重启docker-compose"><a href="#重启docker-compose" class="headerlink" title="重启docker compose"></a>重启docker compose</h1><p>docker-compose up -d</p><p>卸载操作</p><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;halo<br>​<br>docker-compose down<br>​<br>cd ..<br>​<br>rm -rf &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;halo  # 完全删除映射到本地的数据</p><p>网站监控 Uptime Kuma</p><p>内存占用：150M</p><p>参考教程：</p><p>视频【好玩的Docker项目】搭建一个专属自己的网站监控——Uptime Kuma哔哩哔哩bilibili</p><p>博客【好玩的Docker项目】搭建一个专属自己的网站监控——Uptime Kuma | 爱玩实验室 (iwanlab.com)</p><p>简易流程：</p><p>创建项目文件夹</p><p>mkdir -p &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;uptimekuma<br>​<br>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;uptimekuma<br>​<br>vim docker-compose.yml</p><p>配置docker-compose.yml</p><p>version: ‘3.3’<br>​<br>services:<br>  uptime-kuma:<br>    image: louislam&#x2F;uptime-kuma<br>    container_name: uptime-kuma<br>    volumes:<br>      - .&#x2F;uptime-kuma:&#x2F;app&#x2F;data<br>    ports:<br>      - 3001:3001</p><p>确认端口未被占用</p><p>lsof -i:3001</p><p>启动Docker Compose服务</p><p>docker compose up -d</p><p>打开站点：VPS-IP:3301</p><p>自行添加监控项和状态页。</p><p>NPM反代：http，172.17.0.1,3001勾选后两个。SSL勾选第一个。</p><p>Cloudflare添加解析记录。</p><p>回到Uptime Kuma，配置状态页。然后入口页面设为状态页，修改站点主URL为反代地址。</p><p>网站统计 Umami</p><p>参考教程：</p><p>视频【好玩的Docker项目】你的网站究竟有多少流量？搭建一个小而美的网站流量统计工具——Umami哔哩哔哩bilibili</p><p>博客【好玩的Docker项目】搭建一个小而美的网站流量监控——Umami | 爱玩实验室 (iwanlab.com)</p><p>简易流程：</p><p>创建项目文件夹</p><p>mkdir -p &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;umami<br>​<br>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;umami<br>​<br>vim docker-compose.yml</p><p>配置docker-compose.yml文件：</p><p>version: ‘3’<br>​<br>services:<br> umami:<br>  image: ghcr.io&#x2F;umami-software&#x2F;umami:postgresql-latest<br>  ports:<br>    - “3000:3000”<br>  environment:<br>   DATABASE_URL: postgresql:&#x2F;&#x2F;umami:umami@db:5432&#x2F;umami<br>   DATABASE_TYPE: postgresql<br>   HASH_SALT: replace-me-with-a-random-string<br>  depends_on:<br>    - db<br>  restart: always</p><p> db:<br>  image: postgres:12-alpine<br>  environment:<br>   POSTGRES_DB: umami<br>   POSTGRES_USER: umami<br>   POSTGRES_PASSWORD: umami<br>  volumes:<br>    - .&#x2F;sql&#x2F;schema.postgresql.sql:&#x2F;docker-entrypoint-initdb.d&#x2F;schema.postgresql.sql:ro<br>    - .&#x2F;umami-db-data:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data<br>  restart: always</p><p>检查一下端口是否被占用</p><p>lsof -i:3000</p><p>启动Docker Compose服务</p><p>docker compose up -d</p><p>访问 IP:3000 进入Umami后台。</p><p>默认账号密码是：Username: admin，Password: umami</p><p>添加网站，获得跟踪代码，在自己的网站中引入该js代码。</p><p>启用共享链接，别人可通过此链接查看网站访客统计数据。</p><p>网盘挂载 Alist</p><p>内存占用：40M</p><p>简单介绍：</p><p>支持挂载的网盘存储：本地、阿里云、百度云、谷歌云、OneDrive、蓝奏云、天翼云、迅雷云等等。</p><p>支持在线查看文件类型：文本、音频、视频、图片。</p><p>注意：Alist挂载非OneDrive和谷歌网盘，流量大了可能会封号。类似项目ZFile可以规避这个问题。</p><p>【好玩儿的Docker项目】ZFile ——又一款强大好用的在线文件目录的程序！ | 爱玩实验室 (iwanlab.com)</p><p>参考教程：</p><p>视频【好玩的Docker项目】目前最好用的网盘直链程序——AList，支持市面上几乎所有网盘！可以代替Olaindex！哔哩哔哩bilibili</p><p>博客【好玩的Docker项目】目前最好用的网盘直链程序——AList，支持市面上几乎所有网盘！可以代替Olaindex！ | 爱玩实验室 (iwanlab.com)</p><p>官方文档：Home | AList文档 (nn.ci)</p><p>简易流程：</p><p>创建项目文件夹</p><p>mkdir -p &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;alist<br>​<br>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;alist<br>​<br>vim docker-compose.yml</p><p>配置docker-compose.yml文件：</p><p>version: ‘3.3’<br>services:<br>    alist:<br>        restart: always<br>        volumes:<br>            - ‘&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;alist:&#x2F;opt&#x2F;alist&#x2F;data’    # 冒号左边的地址可以自己修改<br>        ports:<br>            - ‘5244:5244’      # 冒号左边的端口可以自己修改<br>        container_name: alist<br>        image: ‘xhofe&#x2F;alist:latest’</p><p>检查一下端口是否被占用</p><p>lsof -i:5244</p><p>启动docker-compose服务</p><p>docker compose up -d</p><p>查看Alist初始密码</p><p>docker logs alist</p><h1 id="或者"><a href="#或者" class="headerlink" title="或者"></a>或者</h1><p>docker exec -it alist .&#x2F;alist -password<br>​</p><h1 id="如果后续忘记密码，可以随机生成或指定"><a href="#如果后续忘记密码，可以随机生成或指定" class="headerlink" title="如果后续忘记密码，可以随机生成或指定"></a>如果后续忘记密码，可以随机生成或指定</h1><p>docker exec -it alist .&#x2F;alist admin random<br>docker exec -it alist .&#x2F;alist admin set xxxxxxx</p><p>找到Successfully created the admin user and the initial password is: xxxxxx，这里账号是admin，密码是xxxxx。</p><p>访问 IP:5244 进入Alist后台并登录。会报错，点击最下方的管理即可。</p><p>配置反向代理</p><p>正常配置就行了。做好域名解析。</p><p>添加存储</p><p>存储添加方式参考：通用项 | AList文档 (nn.ci)</p><p>挂载路径指的是在Alist主页列表路径，根文件夹路径指的是对应的网盘里的文件夹路径。如果是OneDrive，可以填&#x2F;OneDrive和&#x2F;Alist挂载(需要创建对应文件夹)。</p><p>本地存储：</p><p>先在&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;alist&#x2F;下创建local文件夹。</p><p>在管理面板-&gt;设置-&gt;存储，驱动：本机存储，挂载路径：&#x2F;local，根文件夹路径：&#x2F;opt&#x2F;alist&#x2F;data&#x2F;local。这样VPS的&#x2F;root&#x2F;data&#x2F;docker_data&#x2F;alist&#x2F;local将会成为本地云盘的文件夹，也不用搭建什么NextCloud了。</p><p>此时打开Alist主页，能看到挂载的local文件夹。</p><p>阿里云、OneDrive：看文档，一遍过，无坑。</p><p>蓝奏云：如果访问失败，复制蓝奏云的个人中心-&gt;个性域名到Alist设置里的分享链接，刷新下缓存即可(注意有的文件被删了但是目录还在，也可能是这个原因，需要自己去蓝奏云下载下看看还在不)</p><p>迅雷、天翼云：手机号验证码登录的话，需要手动设置个密码用于绑定挂载。</p><p>百度云：本身限制太多，不好用。</p><p>给文件夹加密码</p><p>先在用户-&gt;游客把停用取消勾选 。</p><p>在元信息添加路径(需要该文件夹存在)，填写密码和其他信息。</p><p>换个浏览器或设备或匿名模式打开Alist主页，打开该文件夹就需要密码正确才能进入。</p><p>可以根据个人需要设置用户权限和文件夹元信息。</p><p>Docker可视化 Portainer</p><p>参考教程：</p><p>视频 【Docker系列】超级好用的Docker可视化工具——Portainer哔哩哔哩bilibili</p><p>VPS太小，还没装</p><p>其他项目</p><p>静态导航 Hexo-WebStack</p><p>参考教程：</p><p>优雅的使用Webstack打造个人网址导航-腾讯云开发者社区-腾讯云 (tencent.com)</p><p>通过Nginx Proxy Manager代理静态网站（例如Hexo） – 卢孟德的学习小站 (lumengde.com)</p><p>更新Docker</p><p>以下是通常情况下的更新指令</p><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;xxxx<br>​<br>docker-compose pull<br>​<br>docker compose up -d    # 请不要使用 docker-compose stop 来停止容器，因为这么做需要额外的时间等待容器停止；docker compose up -d 直接升级容器时会自动停止并立刻重建新的容器，完全没有必要浪费那些时间。<br>​<br>docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像</p><p>卸载Docker</p><p>cd &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;xxxx<br>​<br>docker-compose down<br>​<br>cd ..<br>​<br>rm -rf &#x2F;root&#x2F;data&#x2F;docker_data&#x2F;xxxx  # 完全删除</p>]]></content>
    
    
    <summary type="html">利用Docker和Nginx Proxy Manager部署一些有意思的项目，大部分收集自咕咕鸽-blog.laoda.de</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>零成本搭建Hexo博客网站</title>
    <link href="https://lumengde123.github.io/posts/ec17.html"/>
    <id>https://lumengde123.github.io/posts/ec17.html</id>
    <published>2024-06-14T07:51:42.000Z</published>
    <updated>2024-06-14T13:31:19.377Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a><strong>前言</strong></h1><p>官方文档：<a href="https://hexo.io/zh-cn/docs/"><strong>Hexo</strong></a></p><p>参考教程：</p><ul><li><a href="https://zhuanlan.zhihu.com/p/412899180"><strong>静态网站搭建笔记 GitHub Page+Hexo - 知乎 (zhihu.com)</strong></a></li><li><a href="https://blog.csdn.net/wushibo123/article/details/124619123"><strong>【2023最新版】Hexo+github搭建个人博客并绑定个人域名_hexo部署github绑定自定义域名-CSDN博客</strong></a></li></ul><h1 id="本地博客搭建"><a href="#本地博客搭建" class="headerlink" title="本地博客搭建"></a><strong>本地博客搭建</strong></h1><p><em>流程概括：安装Git、安装Node.js、安装Hexo并部署本地仓库。</em></p><blockquote><p>安装Git工具</p></blockquote><p><em>Git 可以将本地代码推送到远程仓库，可以在开发中管理和追踪代码版本，方便团队协作和代码的备份。</em></p><p>打开 <a href="https://git-scm.com/download/win"><strong>Git - Downloading Package (git-scm.com)</strong></a>，选择 <a href="https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/Git-2.43.0-64-bit.exe"><strong>64-bit Git for Windows Setup</strong></a>下载安装包。</p><p>安装时无脑下一步就行。在 <strong>Choosing the default editor used by Git</strong> 这一步选择 <strong>Use Visual Studio Code as Git’s default editor</strong>。</p><p>安装完可以在<strong>cmd</strong>中输入<strong>git –version</strong>指令检查是否安装成功。</p><blockquote><p>安装Node.js</p></blockquote><p><em>Node.js 是 Hexo 的运行环境，安装 Node.js 后可以在你的计算机上运行 Hexo。</em></p><p>打开 <a href="https://nodejs.org/en"><strong>Node.js (nodejs.org)</strong></a>，下载左边的LTS版本。无脑安装即可。</p><p>在<strong>cmd</strong>中输入以下指令检查是否安装成功，返回版本信息。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">node -v</span><br><span class="line">npm -v</span><br></pre></td></tr></table></figure><blockquote><p>安装Hexo并部署本地仓库</p></blockquote><p><em>Hexo 是一个静态网站生成器，在使用 Markdown 编写博客内容后，可以用指令生成对应的静态网页。</em></p><p>配置 npm（Node 包管理器）的镜像源为淘宝 NPM 镜像以提升国内下载速度，有魔法可忽略。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> registry <span class="string">&quot;https://registry.npm.taobao.org&quot;</span>  </span><br></pre></td></tr></table></figure><p>安装hexo命令行工具（-g 表示全局安装，整个计算机都可用，可以在cmd中直接调用相关命令。）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-cli -g</span><br></pre></td></tr></table></figure><p>进入自定义文件路径，初始化hexo。两种写法<strong>二选一</strong>即可。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo init blog &amp;&amp; <span class="built_in">cd</span> blog</span><br><span class="line"><span class="built_in">mkdir</span> blog &amp;&amp; <span class="built_in">cd</span> blog &amp;&amp; hexo init</span><br></pre></td></tr></table></figure><p>安装项目所需的依赖 &gt; npm 会读取项目中的 package.json 文件，并安装该项目所依赖的所有包。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p>配置 Git 全局用户信息 &gt; 当提交代码时，Git会以此用户为代码提交的作者名称，此邮箱用于关联提交记录。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name <span class="string">&quot;GitHub用户名&quot;</span></span><br><span class="line">git config --global user.email <span class="string">&quot;GitHub注册邮箱&quot;</span></span><br></pre></td></tr></table></figure><p>这样就创建好了一个本地的博客，用的是Hexo的默认主题，后面再来安装好看的主题。</p><p>执行以下指令就可以在本地看见自己的博客了</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo g    // 生成静态页面</span><br><span class="line">hexo s    // 启动本地服务器 http://localhost:4000/，点击链接可查看博客，ctrl+c关闭服务器</span><br></pre></td></tr></table></figure><h1 id="本地博客部署到Github"><a href="#本地博客部署到Github" class="headerlink" title="本地博客部署到Github"></a><strong>本地博客部署到Github</strong></h1><blockquote><p>创建Github Pages远程仓库</p></blockquote><p>注册 <a href="https://github.com/"><strong>Github</strong></a> 账号并登录，进入个人Github主页。</p><p>点击上方右侧**+**号-&gt;New Repository，新建一个仓库名和自己 Github 账号 ID 相同的仓库并创建。</p><p>例：若Github账号为<strong>lumegnde123</strong>，则新建仓库名为<strong>lumengde123.github.io</strong>。</p><blockquote><p>生成SSH密钥</p></blockquote><p><em>使用 SSH 协议与 GitHub 进行通信，更加安全地来验证你的身份，还免输入密码。</em></p><p>在<strong>cmd</strong>中输入以下指令，多个回车直到出现代码表情。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -C <span class="string">&quot;你的GitHub注册邮箱&quot;</span></span><br></pre></td></tr></table></figure><p>该指令用 RSA 加密算法生成了SSH密钥，并将你的 GitHub 注册邮箱作为注释添加到生成的密钥中。</p><p>打开<strong>C:\Users\Administrator.ssh</strong>，系统在这里生成了一对 SSH 密钥：本机私人密钥 <strong>id_rsa</strong> 和公共密钥 <strong>id_rsa.pub</strong>。</p><p><em>公钥 可添加到 GitHub 或其他 Git 托管服务账户上，以便能使用 SSH 协议与服务器进行安全的通信和操作。</em></p><p><em>私钥 则留存在自己的计算机上，用于与公钥配对进行身份验证。</em></p><p>打开公钥 id_rsa.pub ，复制里面所有内容。</p><p>在Github中，点击头像-&gt;Settings-&gt;SSH and GPG keys-&gt;New SSH key，title随意填，下面粘贴ssh公钥并保存。</p><p>此时就配置好了本地计算机和Github的SSH连接。</p><p><em>当后面使用 hexo d 部署博客时，将会用SSH 协议与 GitHub 进行通信，GitHub 将会根据你计算机提交的私钥与你账户中存储的公钥进行匹配。只有在密钥匹配成功的情况下，才能够顺利地进行诸如推送代码、拉取仓库等 Git 操作。</em></p><p>检验本地 SSH 配置是否正确及能够成功连接到 GitHub 的 Git 服务器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -T -v git@github.com</span><br></pre></td></tr></table></figure><p>如果报错…没事，这是网络问题，下面的步骤会解决。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh: connect to host github.com port 22: Connection timed out</span><br></pre></td></tr></table></figure><blockquote><p>博客部署到Github上</p></blockquote><p>打开博客根目录的_config.yml文件，分别修改url和deploy的内容</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">url: https://你的github账号.github.io</span><br><span class="line">.......</span><br><span class="line">deploy:</span><br><span class="line">  <span class="built_in">type</span>: git</span><br><span class="line">  repo: git@github.com:你的github帐号名/你的github帐号名.github.io.git</span><br><span class="line">  branch: main</span><br></pre></td></tr></table></figure><p>branch默认是master改为main，现在github新建的仓库默认分支都是main了。修改后Hexo推送时会将生成的网站静态文件推送到Github仓库的main主分支。</p><p>安装 <strong>hexo-deploy-git</strong> 插件，就可以使用Hexo的推送命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure><p>执行hexo三连指令来推送博客静态文件</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">hexo clean//清空上次推送时生成的文件，每次推送前删一下。</span><br><span class="line">hexo g// 生成静态页面（hexo generate）</span><br><span class="line">hexo d// 部署到Github（hexo deploy）</span><br></pre></td></tr></table></figure><p>当执行hexo deploy时，Hexo 会将<code>/public</code>目录中的文件推送至配置文件<code>_config.yml</code>中指定的远端仓库和分支中，并且<strong>完全覆盖</strong>该分支下的已有内容。</p><p>第一次hexo d会问个问题，必须填yes，然后按回车等一会。</p><p>当出现<code>INFO Deploy done: git</code>提示时，代表推送成功。</p><p>这样本地Hexo博客就同步到Github上了。可以在浏览器搜索 <code>你的github昵称.github.io</code> 来访问你的博客网站。（国内访问Github比较慢，要多等它加载一会）</p><p>如果在hexo d之后等了很久不成功，报错 <strong>Error: Spawn failed</strong>，请往下看。</p><blockquote><p>推送时报错问题及解决方法</p></blockquote><p>报错代码为：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><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">ssh: connect to host github.com port 22: Connection timed out</span><br><span class="line">fatal: Could not <span class="built_in">read</span> from remote repository.</span><br><span class="line"></span><br><span class="line">Please make sure you have the correct access rights</span><br><span class="line">and the repository exists.</span><br><span class="line">FATAL Something<span class="string">&#x27;s wrong.Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html</span></span><br><span class="line"><span class="string">Error: Spawn failed</span></span><br><span class="line"><span class="string">    at ChildProcess.&lt;anonymous&gt;(D:\Coding\blog lnode_modules\hexo-deployer-git\node_modules\hexo-util\liblspawn.js:51:</span></span><br><span class="line"><span class="string">    at ChildProcess.emit (node : events:514:28)</span></span><br><span class="line"><span class="string">    at cp.emit (D:\Coding\blog \node_modules\cross-spawn\liblenoent.js: 34:29)at ChildProcess._handle.onexit (node:internal/child_process:294:12)</span></span><br></pre></td></tr></table></figure><p>如果推送时一直卡着，然后报这个错，原因是连接不到Github，连接超时。</p><p>解决方法：</p><p>参考链接 &gt; <a href="https://blog.csdn.net/the__future/article/details/130038818"><strong>关于本地git通过ssh链接github时 time out问题的解决方法</strong></a></p><p>打开生成ras密钥的文件路径即<code>C:\Users\Administrator\.ssh</code>文件夹，在这里新建<code>config</code>文件。</p><p>打开<code>config</code>，填入以下内容：</p><figure class="highlight crmsh"><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">Host github.com </span><br><span class="line">HostName ssh.github.com <span class="keyword">User</span> <span class="title">git</span> </span><br><span class="line">Port <span class="number">443</span> PreferredAuthentications publickey </span><br><span class="line">IdentityFile C:/Users/Administrator/.ssh/id_rsa <span class="comment"># 对应好你的路径</span></span><br></pre></td></tr></table></figure><p>这样配置的目的是当我们访问<code>github.com</code>的时候，能自动转换成<code>ssh.github.com</code>，后者才是我们要启动的。</p><p>然后再来测试一下：</p><figure class="highlight vbnet"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">D:</span>\Coding\blog&gt;ssh -T git@github.com </span><br><span class="line">Hi lumengde123! You<span class="comment">&#x27;ve successfully authenticated, but GitHub does not provide shell access.</span></span><br></pre></td></tr></table></figure><p>出现这个提示说明消息响应正常：成功通过SSH进行了身份验证，但GitHub不提供直接的shell访问。</p><p>此时再执行<code>Hexo三连</code>，就可以顺利推送了。</p><p>备用方法：修改hosts通过http来push。参考 <a href="https://blog.csdn.net/weixin_43160744/article/details/119054656"><strong>GitHub push失败-Failed to connect to github.com port 443: Timed out</strong></a></p><h1 id="使用自己的域名"><a href="#使用自己的域名" class="headerlink" title="使用自己的域名"></a><strong>使用自己的域名</strong></h1><p><code>xxx.github.io</code><em>这个域名不太好看。所以我们可以将其绑定到我们自己买的域名上。</em></p><p>想要输入自己的域名自动跳转到博客首页，可以先去阿里云购买域名，实名认证，然后将该域名和博客项目进行绑定。</p><ul><li>百度打开阿里云首页，搜索框搜索域名注册，购买自己喜欢的域名，然后实名认证</li><li>回到阿里云首页，打开头像左侧的控制台页面，在搜索框搜索域名，进入域名控制台</li><li>在域名列表-&gt;解析 里面可以为域名添加解析记录</li></ul><p>以下内容参考自 <a href="https://cometeme.github.io/web/2018/08/%E4%B8%BAGitHubPages%E7%BB%91%E5%AE%9A%E5%9F%9F%E5%90%8D.html"><strong>为 Github Pages 绑定域名 - cometeme的个人博客</strong></a>。</p><blockquote><p>修改 DNS 解析的数据</p></blockquote><p>打开cmd，输入指令查看自己的博客网址对应的DNS的IPV4地址</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nslookup -query=A xxxxxx.github.io</span><br></pre></td></tr></table></figure><p>添加域名解析记录</p><table><thead><tr><th align="left"><strong>CNAME</strong></th><th align="left"><strong>www</strong></th><th align="left"><strong>默认</strong></th><th align="left"><strong>xxx.github.io</strong></th></tr></thead><tbody><tr><td align="left">A</td><td align="left">@</td><td align="left">默认</td><td align="left">IPV4地址</td></tr></tbody></table><p>这里可以把四个IPV4地址都添加进去，即四个A记录。</p><blockquote><p>为 Github Page 设置 CNAME</p></blockquote><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">打开Github进入该项目的仓库，点击 Settings-&gt;Pages -&gt;Custom domain，输入域名并保存。注意要带上www前缀。</span><br><span class="line">此时Github会自动为该项目创建CNAME文件。然后刷新该网页，勾选上Enforce HTTPS。</span><br><span class="line">等待约10分钟DNS的缓存刷新后，输入xxx.github.io就会跳转到你的域名，并且是https协议。</span><br></pre></td></tr></table></figure><p>这个方案有问题，由于本地的博客没有CNAME，如果本地博客hexo d推送后，会覆盖项目仓库，即会删除CNAME。</p><p>所以还需要同时在本地的 <code>/source</code> 文件夹里也创建个CNAME并填入www前缀域名。</p><h1 id="Hexo基本操作"><a href="#Hexo基本操作" class="headerlink" title="Hexo基本操作"></a><strong>Hexo基本操作</strong></h1><p>本地编写博客文章，查看文件结构需要下载<code>文本编辑器进行</code>辅助，例如：VSCode、Sublime Text 3、Typora</p><p><strong>以下内容参考自：</strong><a href="https://hexo.io/zh-cn/docs/writing"><strong>写作 | Hexo 官方文档</strong></a></p><blockquote><p>创建新文章&#x2F;页面&#x2F;草稿</p></blockquote><p>Hexo 有三种默认布局：<code>post</code>、<code>page</code> 和 <code>draft</code>；分别为文章、页面、草稿；分别保存在<code>source/_posts</code>、<code>source</code>、<code>source/_drafts</code>文件夹中。</p><p>文章的布局（layout），默认为 <code>post</code>，可以通过修改 <code>_config.yml</code> 中的 <code>default_layout</code> 参数来指定默认布局。</p><p>如果你不希望一篇文章（post&#x2F;page）使用主题处理，请在它的 front-matter 中设置 <code>layout: false</code></p><p>基本语句结构</p><figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">new</span> [layout] &lt;<span class="built_in">title</span>&gt;</span><br></pre></td></tr></table></figure><p>创建新文章</p><figure class="highlight haxe"><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">hexo <span class="keyword">new</span> <span class="type"></span>笔记<span class="number">01</span></span><br><span class="line">hexo <span class="keyword">new</span> <span class="type">post</span> 笔记<span class="number">01</span></span><br></pre></td></tr></table></figure><p>创建新页面</p><figure class="highlight haxe"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">new</span> <span class="type">page</span> 页面<span class="number">01</span></span><br></pre></td></tr></table></figure><p>创建新草稿</p><figure class="highlight haxe"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">new</span> <span class="type">draft</span> 草稿<span class="number">01</span><span class="comment">// 会将草稿保存在`source/_drafts`</span></span><br></pre></td></tr></table></figure><p>草稿默认不会显示在页面中，您可在执行时加上 <code>--draft</code> 参数，或是在 <code>_config.yml</code> 中把 <code>render_drafts</code> 参数设为 <code>true</code> 来预览草稿。</p><p>发布草稿 &gt; publish的前提是该草稿存在，发布成为post</p><figure class="highlight gauss"><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">hexo publish 草稿<span class="number">01</span></span><br><span class="line">hexo publish post 草稿<span class="number">01</span>  <span class="comment">// 会将草稿存入`source/_posts`,变成正式的文章</span></span><br><span class="line"></span><br><span class="line">hexo publish &lt;layout&gt; &lt;<span class="built_in">title</span>&gt; <span class="comment">// 可以发布为指定布局的文章</span></span><br></pre></td></tr></table></figure><p>文章降为草稿</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">published:</span> <span class="literal">false</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><blockquote><p>Front-matter 文章&#x2F;页面 配置</p></blockquote><p>详细内容：<a href="https://hexo.io/zh-cn/docs/front-matter"><strong>Front-matter | Hexo</strong></a></p><p>Front-matter 是md文件最上方以 <code>---</code> 分隔的区域，使用变量来修改文章或页面配置，例如：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">Butterfly美化(基础篇)</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2024-01-06 10:29:28</span></span><br><span class="line"><span class="attr">swiper_index:</span> <span class="number">2</span> <span class="comment">#置顶轮播图顺序，非负整数，数字越大越靠前</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">对butterfly进行基础的美化，提升使用体验</span>   <span class="comment"># 该文章在轮播图中的文章描述</span></span><br><span class="line"><span class="attr">tags:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">Hexo</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">butterfly</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p><strong>Page Front-matter</strong></p><p>作用于页面的 <code>Front-matter</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span></span><br><span class="line"><span class="attr">date:</span></span><br><span class="line"><span class="attr">updated:</span></span><br><span class="line"><span class="attr">type:</span></span><br><span class="line"><span class="attr">comments:</span></span><br><span class="line"><span class="attr">description:</span></span><br><span class="line"><span class="attr">keywords:</span></span><br><span class="line"><span class="attr">top_img:</span></span><br><span class="line"><span class="attr">mathjax:</span></span><br><span class="line"><span class="attr">katex:</span></span><br><span class="line"><span class="attr">aside:</span></span><br><span class="line"><span class="attr">aplayer:</span></span><br><span class="line"><span class="attr">highlight_shrink:</span></span><br><span class="line"><span class="attr">random:</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>参数详解</p><table><thead><tr><th align="left"><strong>写法</strong></th><th align="left"><strong>解释</strong></th></tr></thead><tbody><tr><td align="left">title</td><td align="left">【必需】页面标题</td></tr><tr><td align="left">date</td><td align="left">【必需】页面创建日期</td></tr><tr><td align="left">type</td><td align="left">【必需】标签、分类和友情链接三个页面需要配置</td></tr><tr><td align="left">updated</td><td align="left">【可选】页面更新日期</td></tr><tr><td align="left">description</td><td align="left">【可选】页面描述</td></tr><tr><td align="left">keywords</td><td align="left">【可选】页面关键字</td></tr><tr><td align="left">comments</td><td align="left">【可选】显示页面评论模块 (默认 true)</td></tr><tr><td align="left">top_img</td><td align="left">【可选】页面顶部图片</td></tr><tr><td align="left">mathjax</td><td align="left">【可选】显示mathjax (当设置mathjax的per_page: false时，才需要配置，默认 false)</td></tr><tr><td align="left">katex</td><td align="left">【可选】显示katex (当设置katex的per_page: false时，才需要配置，默认 false)</td></tr><tr><td align="left">aside</td><td align="left">【可选】显示侧边栏 (默认 true)</td></tr><tr><td align="left">aplayer</td><td align="left">【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置</td></tr><tr><td align="left">highlight_shrink</td><td align="left">【可选】配置代码框是否展开 (true&#x2F;false) (默认为设置中highlight_shrink的配置)</td></tr><tr><td align="left">random</td><td align="left">【可选】配置友情链接是否随机排序（默认为 false)</td></tr></tbody></table><p><strong>Post Front-matter</strong></p><p>作用于文章的 <code>Front-matter</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span></span><br><span class="line"><span class="attr">date:</span></span><br><span class="line"><span class="attr">updated:</span></span><br><span class="line"><span class="attr">tags:</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line"><span class="attr">keywords:</span></span><br><span class="line"><span class="attr">description:</span></span><br><span class="line"><span class="attr">top_img:</span></span><br><span class="line"><span class="attr">comments:</span></span><br><span class="line"><span class="attr">cover:</span></span><br><span class="line"><span class="attr">toc:</span></span><br><span class="line"><span class="attr">toc_number:</span></span><br><span class="line"><span class="attr">toc_style_simple:</span></span><br><span class="line"><span class="attr">copyright:</span></span><br><span class="line"><span class="attr">copyright_author:</span></span><br><span class="line"><span class="attr">copyright_author_href:</span></span><br><span class="line"><span class="attr">copyright_url:</span></span><br><span class="line"><span class="attr">copyright_info:</span></span><br><span class="line"><span class="attr">mathjax:</span></span><br><span class="line"><span class="attr">katex:</span></span><br><span class="line"><span class="attr">aplayer:</span></span><br><span class="line"><span class="attr">highlight_shrink:</span></span><br><span class="line"><span class="attr">aside:</span></span><br><span class="line"><span class="attr">abcjs:</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>参数详解</p><table><thead><tr><th align="left"><strong>写法</strong></th><th align="left"><strong>解释</strong></th></tr></thead><tbody><tr><td align="left">title</td><td align="left">【必需】文章标题</td></tr><tr><td align="left">date</td><td align="left">【必需】文章创建日期</td></tr><tr><td align="left">updated</td><td align="left">【可选】文章更新日期</td></tr><tr><td align="left">tags</td><td align="left">【可选】文章标签</td></tr><tr><td align="left">categories</td><td align="left">【可选】文章分类</td></tr><tr><td align="left">keywords</td><td align="left">【可选】文章关键字</td></tr><tr><td align="left">description</td><td align="left">【可选】文章描述</td></tr><tr><td align="left">top_img</td><td align="left">【可选】文章顶部图片</td></tr><tr><td align="left">cover</td><td align="left">【可选】文章缩略图 (如果没有设置top_img,文章页顶部将显示缩略图，可设为false&#x2F;图片地址&#x2F;留空)</td></tr><tr><td align="left">comments</td><td align="left">【可选】显示文章评论模块 (默认 true)</td></tr><tr><td align="left">toc</td><td align="left">【可选】显示文章TOC (默认为设置中toc的enable配置)</td></tr><tr><td align="left">toc_number</td><td align="left">【可选】显示toc_number (默认为设置中toc的number配置)</td></tr><tr><td align="left">toc_style_simple</td><td align="left">【可选】显示 toc 简洁模式</td></tr><tr><td align="left">copyright</td><td align="left">【可选】显示文章版权模块 (默认为设置中post_copyright的enable配置)</td></tr><tr><td align="left">copyright_author</td><td align="left">【可选】文章版权模块的文章作者</td></tr><tr><td align="left">copyright_author_href</td><td align="left">【可选】文章版权模块的文章作者链接</td></tr><tr><td align="left">copyright_url</td><td align="left">【可选】文章版权模块的文章连结链接</td></tr><tr><td align="left">copyright_info</td><td align="left">【可选】文章版权模块的版权声明文字</td></tr><tr><td align="left">mathjax</td><td align="left">【可选】显示mathjax (当设置mathjax的per_page: false时，才需要配置，默认 false)</td></tr><tr><td align="left">katex</td><td align="left">【可选】显示katex (当设置katex的per_page: false时，才需要配置，默认 false)</td></tr><tr><td align="left">aplayer</td><td align="left">【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置</td></tr><tr><td align="left">highlight_shrink</td><td align="left">【可选】配置代码框是否展开 (true&#x2F;false) (默认为设置中highlight_shrink的配置)</td></tr><tr><td align="left">aside</td><td align="left">【可选】显示侧边栏 (默认 true)</td></tr><tr><td align="left">abcjs</td><td align="left">【可选】加载 abcjs (当设置 abcjs 的 per_page: false 时，才需要配置，默认 false)</td></tr></tbody></table><p><strong>Hexo Markdown 语法：</strong><a href="https://hyxxsfwy.github.io/2016/01/15/Hexo-Markdown-%E7%AE%80%E6%98%8E%E8%AF%AD%E6%B3%95%E6%89%8B%E5%86%8C/"><strong>Hexo Markdown 简明语法手册</strong></a></p><blockquote><p>创建标签页和分类页</p></blockquote><p>只有<code>文章</code>支持<strong>分类</strong>和<strong>标签</strong>，可以在 <code>Front-matter</code> 中设置。</p><figure class="highlight subunit"><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">categories:</span><br><span class="line">- Diary</span><br><span class="line"><span class="keyword">tags:</span></span><br><span class="line">- PS3</span><br><span class="line">- Games</span><br></pre></td></tr></table></figure><p><strong>标签页</strong></p><p><code>cmd</code>进入你的 Hexo 博客的根目录，输入以下指令为标签创建页面</p><figure class="highlight haxe"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">new</span> <span class="type">page</span> tags</span><br></pre></td></tr></table></figure><p>然后找到 <code>source/tags/index.md</code> 这个文件,为其添加参数<code>type</code>、<code>orderby</code>、<code>order</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">标签</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2024-01-06 19:29:51</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">&quot;tags&quot;</span></span><br><span class="line"><span class="attr">orderby:</span> <span class="string">random</span></span><br><span class="line"><span class="attr">order:</span> <span class="number">1</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><table><thead><tr><th align="left"><strong>参数</strong></th><th align="left"><strong>解释</strong></th></tr></thead><tbody><tr><td align="left">type</td><td align="left">【必须】页面类型，必须为 tags</td></tr><tr><td align="left">orderby</td><td align="left">【可选】排序方式：random&#x2F;name&#x2F;length</td></tr><tr><td align="left">order</td><td align="left">【可选】排序次序：1, asc升序；-1, desc降序</td></tr></tbody></table><p><strong>分类页</strong></p><p><code>cmd</code>进入你的 Hexo 博客的根目录，输入以下指令为标签创建页面</p><figure class="highlight haxe"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo <span class="keyword">new</span> <span class="type">page</span> categories</span><br></pre></td></tr></table></figure><p>然后找到 <code>source/categories/index.md</code> 这个文件,为其添加参数<code>type: &quot;categories&quot;</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">分类</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2024-01-08 21:20:45</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">&quot;categories&quot;</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><h1 id="Hexo插件大全"><a href="#Hexo插件大全" class="headerlink" title="Hexo插件大全"></a><strong>Hexo插件大全</strong></h1><p><a href="https://hexo.io/plugins/"><strong>Hexo-Plugins</strong></a></p><h1 id="anzhiyu-主题安装"><a href="#anzhiyu-主题安装" class="headerlink" title="anzhiyu 主题安装"></a><strong>anzhiyu 主题安装</strong></h1><p>butterfly主题需要自己魔改美化，太费时间了，更适合自定义魔改玩家。</p><p>anzhiyu主题是基于butterfly进行美化魔改的，一切都配置好了，更推荐。</p><p>并且，<strong>anzhiyu主题的官方文档写的非常详细</strong>，可以根据需要自定义博客网站内容。</p><p>主题效果：<a href="https://blog.anheyu.com/"><strong>安知鱼 - 生活明朗 万物可爱 (anheyu.com)</strong></a></p><p>安装教程：<a href="https://docs.anheyu.com/intro.html"><strong>安知鱼主题 | 官方文档</strong></a></p><p>缺点：文件多，加载比较慢，要10秒左右。</p><h1 id="butterfly-主题安装"><a href="#butterfly-主题安装" class="headerlink" title="butterfly 主题安装"></a><strong>butterfly 主题安装</strong></h1><p>butterfly界面比较原始，但是可以根据个人爱好自定义魔改。</p><p><code>cmd</code>进入博客项目根目录，下载主题。</p><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="keyword">clone</span> <span class="title">-b</span> <span class="keyword">master</span> <span class="title">https</span>://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly</span><br></pre></td></tr></table></figure><p>安装pug 和 stylus 渲染器。 Pug（以前的Jade）用于简化HTML模板的编写，而Stylus则用于更简洁、更灵活地书写CSS样式。</p><figure class="highlight mel"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-<span class="keyword">renderer</span>-pug hexo-<span class="keyword">renderer</span>-stylus --save</span><br></pre></td></tr></table></figure><p>修改项目根目录下的_config.yml文件（称为站点配置文件），开启主题。</p><figure class="highlight clean"><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"># Extensions</span><br><span class="line">## Plugins: https:<span class="comment">//hexo.io/plugins/</span></span><br><span class="line">## Themes: https:<span class="comment">//hexo.io/themes/</span></span><br><span class="line">theme: butterfly</span><br></pre></td></tr></table></figure><p>为了减少升级主题带来的不便，可以复制一份<code>themes/butterfly/</code>中 <code>config.yml</code>的内容到根目录的<code>_config.landscape.yml</code>里，并重命名为 <code>_config.butterfly.yml</code>。</p><p>Hexo会自动合并主题中的<code>config.yml</code>和 <code>_config.butterfly.yml</code> ，如果存在同名配置，会优先使用<code>config.butterfly.yml</code>的配置。</p><p>所以像和博客网址相关联的固定资料可以设置在_config.yml中，比如博客的标题、作者信息和邮箱等等资料;而和主题样式相关的配置放在 <code>_config.butterfly.yml</code>中，方便以后更换主题。</p><p>美化教程系列：<a href="https://butterfly.js.org/posts/dc584b87/"><strong>Butterfly 安装文档(二) 主题页面</strong></a></p><h1 id="nexT-主题安装"><a href="#nexT-主题安装" class="headerlink" title="nexT 主题安装"></a><strong>nexT 主题安装</strong></h1><p>nexT是Hexo中Star最多的主题，整体风格比较简洁，没有那么多花里胡哨的插件和功能。</p><p><code>cd</code>进入你的博客根目录，执行以下指令安装next主题：</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git clone https:<span class="regexp">//gi</span>thub.com<span class="regexp">/theme-next/</span>hexo-theme-<span class="keyword">next</span> themes/<span class="keyword">next</span></span><br></pre></td></tr></table></figure><p>打开<code>_congif.yml</code>，将<code>theme</code>改为<code>next</code>，同样把next主题配置文件提出来。 然后Hexo三连可以看到博客主题更换为了next，但是需要稍微美化一下。自行百度。</p><p>注意：buttefly的标签外挂和部分插件无法在nexT使用，并且<code>hexo g</code>编译无法通过，还需要改原文，所以我放弃了该主题。</p><h1 id="maupassant主题安装"><a href="#maupassant主题安装" class="headerlink" title="maupassant主题安装"></a>maupassant主题安装</h1><p><a href="https://www.haomwei.com/technology/maupassant-hexo.html">https://www.haomwei.com/technology/maupassant-hexo.html</a></p>]]></content>
    
    
    <summary type="html">本文会分享如何在本地搭建Hexo博客，然后把它部署到Github上，这样输入github page对应的域名即可访问到自己的静态网站，而不需要购买服务器。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Hexo" scheme="https://lumengde123.github.io/tags/Hexo/"/>
    
    <category term="博客相关" scheme="https://lumengde123.github.io/tags/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
  </entry>
  
  <entry>
    <title>Nginx 管理器 | Nginx Proxy Manager | 反向代理神器</title>
    <link href="https://lumengde123.github.io/posts/7798.html"/>
    <id>https://lumengde123.github.io/posts/7798.html</id>
    <published>2024-06-14T07:06:04.000Z</published>
    <updated>2024-06-14T08:01:39.012Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>Nginx 是运行在 Linux上 的 web 服务器软件，通过监听 VPS 的80、443端口来处理 web 相关请求。还可以将搭建的项目请求路径由<code>IP:端口号</code>改为自己的域名，但是需要自己编写反向代理配置。</p><p>Nginx Proxy Manager 是一个 Nginx 的代理管理器。即使没有 Nginx 基础，也能轻松地用它来完成反向代理的操作，而且因为自带面板，操作极其简单，一键即可申请 Let’s Encrypt 的 SSL 证书，每三个月自动续期，非常适合配合 docker 搭建的应用使用。</p><p>项目展示 [无图]</p><p>内存占用：115M，缓慢增长</p><h1 id="开始安装"><a href="#开始安装" class="headerlink" title="开始安装"></a>开始安装</h1><p><strong>参考教程：</strong></p><ul><li><p>官方文档：<a href="https://nginxproxymanager.com/guide/#quick-setup">Nginx Proxy Manager | quick-setup</a></p></li><li><p>视频<a href="https://www.bilibili.com/video/BV1Gg411w7kQ">【Docker系列】一个反向代理神器——Nginx Proxy Manager哔哩哔哩bilibili</a></p></li><li><p>博客<a href="https://iwanlab.com/nginx-proxy-manager/">【Docker系列】一个反向代理神器——Nginx Proxy Manager | 爱玩实验室 (iwanlab.com)</a></p></li></ul><p><strong>扩展阅读：</strong></p><ul><li><p><a href="https://iwanlab.com/host-static-sites-on-npm/">如何在Nginx Proxy Manager（NPM）上部署静态网站 | 爱玩实验室 (iwanlab.com)</a></p></li><li><p><a href="https://www.bilibili.com/video/BV18Z4y1S7hr/?vd_source=147cc6eb39eb565f36bd69ce0b3069bd">让网站更安全！开启NginxProxyManager网站访问登陆限制功能哔哩哔哩bilibili</a></p></li><li><p><a href="https://iwanlab.com/nginx-proxy-manager-issues/">Nginx Proxy Manager忘记登陆账号&#x2F;密码了怎么办？</a></p></li><li><p><a href="https://iwanlab.com/npm-xui/">【Docker魔法系列】NPM与XUI共存！Nginx Proxy Manager搭配X-UI实现Vless+WS+TLS 教程！</a></p></li></ul><p><strong>简易流程：</strong></p><h2 id="安装-Docker"><a href="#安装-Docker" class="headerlink" title="安装 Docker"></a>安装 Docker</h2><p>我们通过Docker来部署NPM，所以需要先安装Docker Compose。</p><p>参考：<a href="https://lumengde.com/archives/vps-project-docker-compose">【VPS实用项目搭建】Docker Compose 安装及常用命令整理</a></p><h2 id="安装-NPM"><a href="#安装-NPM" class="headerlink" title="安装 NPM"></a>安装 NPM</h2><p>创建安装目录</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">sudo -i</span><br><span class="line"></span><br><span class="line"><span class="built_in">mkdir</span> -p /root/data/docker_data/npm</span><br><span class="line"></span><br><span class="line"><span class="built_in">cd</span> /root/data/docker_data/npm</span><br></pre></td></tr></table></figure><p>编辑 docker-compose.yml 配置文件</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">vim</span> docker-compose.yml</span><br></pre></td></tr></table></figure><p>填入以下内容</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.8&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">app:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">&#x27;jc21/nginx-proxy-manager:latest&#x27;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;80:80&#x27;</span>  <span class="comment"># 保持默认即可，不建议修改左侧的80</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;81:81&#x27;</span>  <span class="comment"># 冒号左边可以改成自己服务器未被占用的端口</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;443:443&#x27;</span> <span class="comment"># 保持默认即可，不建议修改左侧的443</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./data:/data</span> <span class="comment"># 冒号左边可以改路径，现在是表示把数据存放在在当前文件夹下的 data 文件夹中</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./letsencrypt:/etc/letsencrypt</span>  <span class="comment"># 冒号左边可以改路径，现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中</span></span><br></pre></td></tr></table></figure><blockquote><p>vim编辑器使用方法：<br>在文件内按 <code>i</code> 开启编辑模式，按 <code>ESC</code> 退出编辑模式<br>按 <code>ctrl+:</code> 输入指令，<code>wq</code> 指令为保存并退出</p></blockquote><p>检查一下端口占用</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">lsof</span> -i:<span class="number">81</span></span><br></pre></td></tr></table></figure><p>如果啥也没出现则表示端口未被占用，否则要在 docker-compose.yml 修改 <code>:81</code> 左侧为其他未被占用端口。</p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 如果报错</span></span><br><span class="line">-bash: lsof: <span class="keyword">command</span> <span class="keyword">not</span> found</span><br><span class="line"></span><br><span class="line"><span class="comment"># 那就安装一下再检查</span></span><br><span class="line">apt <span class="keyword">install</span> lsof</span><br></pre></td></tr></table></figure><p>此外要在安全组&#x2F;防火墙中开放81端口</p><p>根据配置文件创建并在后台运行容器</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker compose up -d</span><br><span class="line"></span><br><span class="line">docker compose logs -f <span class="comment"># 查看日志(可选)</span></span><br></pre></td></tr></table></figure><p>这样就安装好了 Nginx Proxy Manager。此时输入 <code>IP:81</code> 即可打开NPM管理面板。</p><p>默认登录账号密码为</p><figure class="highlight avrasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">Email:</span>admin@example.com</span><br><span class="line"><span class="symbol">Password:</span>changeme</span><br></pre></td></tr></table></figure><p>进入面板后可以先改一下账号信息。</p><h1 id="申请泛域名SSL证书"><a href="#申请泛域名SSL证书" class="headerlink" title="申请泛域名SSL证书"></a>申请泛域名SSL证书</h1><p>对Docker进行反代，如果域名需要使用https协议，则需要SSL证书。NPM可以为我们一键申请由Let’s Encript 颁发的SSL证书。通过申请泛域名证书，则可以一次性为某个域名及其子域名申请一张证书，不用每个项目都申请一次证书，方便。</p><p>参考教程：<a href="https://iwanlab.com/nginxproxymanager-ssl-wildcardcerts-for-your-entire-domain/">【Docker系列】反向代理神器NginxProxyManager——通配符SSL证书申请 | 爱玩实验室 (iwanlab.com)</a></p><p>打开NPM-&gt;SSL Certificates-&gt;Add SSL Certificate，填入域名：xxx.com和*.xxx.com，填入邮箱，勾选I agree xxx。</p><p>保存后即可使用该证书。</p><h1 id="配置反向代理"><a href="#配置反向代理" class="headerlink" title="配置反向代理"></a>配置反向代理</h1><p>后续用Docker搭建的应用都可以用NPM来配置反向代理。也可以为自身配置反代。</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看本机Docker内部默认网关</span></span><br><span class="line">ip <span class="keyword">addr </span><span class="keyword">show </span>docker0</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看本机VPS的IP</span></span><br><span class="line">curl ip.<span class="keyword">sb</span></span><br></pre></td></tr></table></figure><p>打开NPM，Add Proxy Host，</p><p>在Details中：域名例如npm.lumengde.com，Scheme为http，IP为本机IP或docker内部默认网关172.17.0.1，勾选后两项。</p><p>在SSL中：选中对上一步申请的SSL证书即可，勾选Force SSL。</p><p>此外，<strong>在DNS服务商处添加该子域名解析。</strong></p><p>然后等一会，访问对应的域名即可成功访问网站。</p><h1 id="更新-卸载"><a href="#更新-卸载" class="headerlink" title="更新&amp;卸载"></a>更新&amp;卸载</h1><p>更新NPM</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /root/data/docker_data/npm</span><br><span class="line"></span><br><span class="line">docker compose down </span><br><span class="line"></span><br><span class="line"><span class="built_in">cp</span> -r /root/data/docker_data/npm /root/data/docker_data/npm.archive  <span class="comment"># 备份</span></span><br><span class="line"></span><br><span class="line">docker compose pull</span><br><span class="line"></span><br><span class="line">docker compose up -d    </span><br><span class="line"></span><br><span class="line">docker image prune</span><br></pre></td></tr></table></figure><p>卸载NPM</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><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="built_in">cd</span> /root/data/docker_data/npm</span><br><span class="line"></span><br><span class="line">docker compose down </span><br><span class="line"></span><br><span class="line"><span class="built_in">rm</span> -rf /root/data/docker_data/npm</span><br></pre></td></tr></table></figure><h1 id="通过CF-DNS获取SSL证书"><a href="#通过CF-DNS获取SSL证书" class="headerlink" title="通过CF DNS获取SSL证书"></a>通过CF DNS获取SSL证书</h1><p>如果域名改用CloudFlare的DNS，则NPM申请SSL证书需要通过CD的API Token。</p><p>打开CloudFlare-&gt;头像-&gt;My Profile-&gt;API Tokens-&gt;Create Token-&gt;Edit zone DNS-&gt;Zone Resources选All zones-&gt;Continue to summary-&gt;Create Token</p><p>然后会得到类似这样的令牌和测试可用性代码。</p><p>令牌：<code>fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN</code></p><p>测试可用性代码：</p><figure class="highlight livescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -X GET <span class="string">&quot;https://api.cloudflare.com/client/v4/user/tokens/verify&quot;</span> <span class="string">\</span>     -H <span class="string">&quot;Authorization: Bearer fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN&quot;</span> <span class="string">\</span>     -H <span class="string">&quot;Content-Type:application/json&quot;</span></span><br></pre></td></tr></table></figure><p>可以先执行代码看下令牌可用性。</p><p>打开NPM-&gt;SSL Certificates-&gt;Add SSL Certificate，输入泛域名，勾选Use a DNS challenge，选择Cloudflare。在<code>dns_cloudflare_api_token =</code>后替换自己的令牌，勾选I agree xxx…，点击保存即可。</p><p>后续域名在CF添加解析记录即可。</p>]]></content>
    
    
    <summary type="html">Nginx Proxy Manager 反向代理神器，它是 Nginx 的代理管理器之一。即使没有 Nginx 基础，也能轻松地用它来完成反向代理的操作，而且因为自带面板，操作极其简单，一键即可申请 Let&#39;s Encrypt 的 SSL 证书，每三个月自动续期，非常适合配合 docker 搭建的应用使用。</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="VPS项目搭建" scheme="https://lumengde123.github.io/tags/VPS%E9%A1%B9%E7%9B%AE%E6%90%AD%E5%BB%BA/"/>
    
  </entry>
  
  <entry>
    <title>v2rayN | 科学上网工具</title>
    <link href="https://lumengde123.github.io/posts/e449.html"/>
    <id>https://lumengde123.github.io/posts/e449.html</id>
    <published>2024-06-14T02:41:01.000Z</published>
    <updated>2024-06-14T08:01:30.145Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>提示：本教程只限于科研、娱乐等正规用途，若有人用该方法发表违法言论可能会被请去喝茶，带来的后果自负！请大家自觉遵守法律，合理上网！</p></blockquote><p>首先可以浏览<a href="https://v2rayn.org/">v2rayN官方文档</a> 和 <a href="https://v2rayng.org/">v2rayNG官方文档</a> 全面地了解一下该软件。<br>软件支持VMess、VLESS、Trojan、Socks、Shadowsocks等代理协议。</p><p>本文提供Windows和安卓的科学上网方法。<br>IOS科学上网教程自己摸索：<a href="https://itlanyan.com/get-proxy-clients/">https://itlanyan.com/get-proxy-clients/</a></p><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>本文流程概述：首先下载好软件，然后去某些特殊网站订阅服务获取节点，导入节点启动V2rayN、V2rayNG就可以用了。</p><p>Github项目地址：<br>Windows——v2rayN：<a href="https://github.com/2dust/v2rayN/releases">https://github.com/2dust/v2rayN/releases</a></p><p>安卓——v2rayNG：<a href="https://github.com/2dust/v2rayNG/releases">https://github.com/2dust/v2rayNG/releases</a></p><p>在GitHub发布页往下滚动，可以看到各版本的下载地址。</p><p>【补充】 通过订阅地址更新订阅好处是每次更新可以看到还剩多少流量以及套餐过期时间。<br>【补充】 如果只是导入几个节点，则无法更新订阅，也无法看到这些数据。</p><h1 id="购买节点"><a href="#购买节点" class="headerlink" title="购买节点"></a>购买节点</h1><p>软件需要购买节点并导入订阅地址才能使用，购买订阅服务可以看：<a href="https://lumengde.com/">机场节点订阅（已写，待更新网址）</a>这篇文章。</p><h1 id="Windows版教程"><a href="#Windows版教程" class="headerlink" title="Windows版教程"></a>Windows版教程</h1><h2 id="下载安装"><a href="#下载安装" class="headerlink" title="下载安装"></a>下载安装</h2><p>打开网站：<a href="https://github.com/2dust/v2rayN/releases">https://github.com/2dust/v2rayN/releases</a></p><p>在右侧搜索框输入<code>5.39</code>，点击下载Assets中的<a href="https://github.com/2dust/v2rayN/releases/download/5.39/v2rayN-Core.zip">v2rayN-Core.zip</a></p><p>5.39版本是5.x最后一版，也可以自己下载6.xx版本，功能更丰富，简单看看就会用,本文基于5版本。</p><p>解压.zip文件，打开文件目录。</p><p>单击鼠标右键以管理员身份运行<code>v2rayN.exe</code>即可开始使用（蓝V小图标那个），程序启动或关闭后会最小化到屏幕右下角的托盘，鼠标双击蓝色的 V 字小图标，即可打开软件的主界面。</p><h2 id="添加订阅"><a href="#添加订阅" class="headerlink" title="添加订阅"></a>添加订阅</h2><p>可以通过<a href="https://blog.lumengde.com/posts/ee37.html">机场节点订阅</a>购买订阅地址，等拥有了订阅地址，再进行以下步骤。</p><p>打开软件，<code>订阅-&gt;订阅设置</code>，可以在这里添加<code>订阅地址，备注，是否启用</code>。<br>点击<code>分享</code>按钮时出现二维码，手机的v2rayNG扫描时可自动添加该地址。浏览器扫描可获得订阅地址。</p><p><img src="https://lsky.lumengde.com/i/2024/03/04/65e567c970227.png"></p><p>添加完订阅地址后，<code>订阅-&gt;更新订阅（通过代理）</code>。出现以下提示表示更新成功！<br>此时服务器列表会出现一堆节点。</p><p><img src="https://lsky.lumengde.com/i/2024/03/04/65e567d5ae58a.png" alt="更新订阅"></p><h2 id="使用教程"><a href="#使用教程" class="headerlink" title="使用教程"></a>使用教程</h2><p>第一步：右击某个节点，选择<code>设为活动服务器</code>，这样将会通过该节点访问网络</p><p>第二步：右击电脑右下角v2rayN的<code>蓝V图标-&gt;系统代理-&gt;自动配置系统代理</code>，此时会变成红色的V，代表开启魔法了。</p><p>然后就可以科学上网了，可以访问百度或者谷歌测试一下，只要能成功出现页面，代表节点可用。</p><p>不想用魔法上网时记得右击<code>红V图标-&gt;系统代理-&gt;清除系统代理</code>，因为魔法访问国内某些网站会比较慢，而且国内有的网站不允许外国IP访问。如果直接退出软件，依然是在使用代理，得点清除系统代理再关闭。</p><h2 id="其他功能"><a href="#其他功能" class="headerlink" title="其他功能"></a>其他功能</h2><h3 id="分享节点"><a href="#分享节点" class="headerlink" title="分享节点"></a>分享节点</h3><p>提示：在机场购买的订阅服务不同套餐有在线设备限制。</p><p>适用于 使用别人分享的节点&#x2F;网上获取的免费节点。</p><p><strong>分享单个节点</strong></p><p>如果你想分享单个节点，点击菜单栏分享按钮，再点击某个节点，会出现二维码和对应的节点地址。</p><p><strong>分享多个节点</strong></p><p>配合按住<code>shift</code>键或<code>ctrl</code>键多选节点，然后<code>ctrl + C</code>批量复制URL地址。<br>同样批量复制URL地址后，在软件中按<code>ctrl + V</code>可以批量导入节点。</p><h3 id="开机自启动"><a href="#开机自启动" class="headerlink" title="开机自启动"></a>开机自启动</h3><p><code>设置-&gt;v2rayN设置-&gt;[勾选]开机自动启动</code></p><p>查看官方文档可以了解更多功能使用方法。</p><h1 id="安卓版教程"><a href="#安卓版教程" class="headerlink" title="安卓版教程"></a>安卓版教程</h1><h2 id="下载安装-1"><a href="#下载安装-1" class="headerlink" title="下载安装"></a>下载安装</h2><p>打开网站：<a href="https://github.com/2dust/v2rayNG/releases">https://github.com/2dust/v2rayNG/releases</a></p><p>点开Assets，下载第一个apk文件并安装。例：目前最新的是<a href="https://github.com/2dust/v2rayNG/releases/download/1.8.13/v2rayNG_1.8.13.apk">v2rayNG_1.8.13.apk</a></p><h2 id="添加订阅-1"><a href="#添加订阅-1" class="headerlink" title="添加订阅"></a>添加订阅</h2><p>第一步：简单，打开app，点击<code>左上角三条杠-&gt;订阅分组设置-&gt;点加号-&gt;输入订阅地址-&gt;确定</code>，然后可以看到有了一个订阅分组。</p><p>第二步：返回主界面，点击<code>右上角三个点-&gt;选择更新订阅</code>，等几秒然后会更新出一对节点。</p><p><strong>其他订阅方法</strong></p><p>1.【麻烦】在windows版上挑几个好用的节点(代码很长，选太多手机复制不了)，右键批量导出URL地址到剪贴板，或者复制网络上找到的免费节点；然后发QQ，手机复制一下，打开手机版软件点’+’，点从剪贴板导入。（一般用于没有自己的订阅地址，蹭别人几个节点用用。）</p><p>2.如果Windows已经弄好v2rayN了，那么通过分享按钮出现二维码，v2rayNG扫描二维码就好了。</p><h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><p>点击某个节点，左侧会显示绿色条代表选中该节点。然后点亮右下角的<code>V图标</code>。</p><p>最下方会显示：<code>已连接，点击测试连接</code>。如果确定该节点可用，后面步骤可省略：点一下字，会显示<code>连接成功：延时xxx毫秒</code>，这代表可用了。</p><p>如果显示<code>失败：io：read/write on closed pipe</code>，可能是服务正在启动，过几秒再点一下试试。如果还是不行，表示该节点不可用，需要换一个节点或者暂停所有下载项目再点击测试试一下。</p><p>最后，不用的时候再点一下V，暗掉就行。或者直接从后台划掉。</p><h1 id="v2rayN-详细介绍"><a href="#v2rayN-详细介绍" class="headerlink" title="v2rayN 详细介绍"></a>v2rayN 详细介绍</h1><p>无聊了再写（留坑）</p><hr><blockquote><p>以上就是全部内容</p></blockquote><p>更多机场网址和使用教程可以上微信搜关键词：v2rayN、科学上网</p><p>v2rayN下载备用网站：<a href="https://itlanyan.com/v2ray-clients-download/">https://itlanyan.com/v2ray-clients-download/</a></p><p>另一个软件：Shadowrocket（小火箭）：<a href="https://www.shadowrocket.vip/%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B">https://www.shadowrocket.vip/%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B</a></p>]]></content>
    
    
    <summary type="html">v2rayN 是广泛使用的科学上网工具之一。本文分享如何使用v2rayN订阅服务和一些其他功能使用技巧。</summary>
    
    
    
    <category term="软件使用教程" scheme="https://lumengde123.github.io/categories/%E8%BD%AF%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="科学上网" scheme="https://lumengde123.github.io/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
  </entry>
  
  <entry>
    <title>机场节点订阅</title>
    <link href="https://lumengde123.github.io/posts/ee37.html"/>
    <id>https://lumengde123.github.io/posts/ee37.html</id>
    <published>2024-06-14T02:24:02.000Z</published>
    <updated>2024-06-14T08:01:16.252Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>购买完订阅地址后，可以学习如何使用：v2rayN-科学上网工具</p></blockquote><h1 id="机场订阅"><a href="#机场订阅" class="headerlink" title="机场订阅"></a>机场订阅</h1><h2 id="两元店"><a href="#两元店" class="headerlink" title="两元店"></a>两元店</h2><p>优点：极其便宜，邀请新用户有少量佣金<br>缺点：部分节点无法使用，偶尔一段时间全不能用。<br>付款：微信、支付宝</p><table><thead><tr><th></th><th>基础套餐</th><th>中级套餐</th><th>高级套餐</th></tr></thead><tbody><tr><td>月流量</td><td>1024G</td><td>3072G</td><td>10240G</td></tr><tr><td>月付</td><td>推荐该套餐</td><td>7</td><td>12</td></tr><tr><td>季付</td><td>8</td><td>17</td><td>32</td></tr><tr><td>半年付</td><td>12</td><td>32</td><td>62</td></tr><tr><td>年付</td><td>22</td><td>62</td><td>102</td></tr></tbody></table><p>打开网址进入注册页面：<a href="https://两元店.com/#/register?code=yIJCeud7">https://xn--5hqx9equq.com/#/register?code=yIJCeud7</a><br>备用网址：<a href="https://两元店.com/#/register?code=2lAsHfj1">https://xn--5hqx9equq.com/#/register?code=2lAsHfj1</a></p><p>在主页页面填自己的邮箱，套餐快到期会发邮件提醒你，密码建议不要和邮箱密码一样。</p><p>注册完毕，返回登录，进入网站。</p><p>点击左侧目录的<code>购买订阅</code>，选择套餐，点击下单，扫码付款。</p><p>购买成功后点击左侧目录的<code>仪表盘</code>查看购买结果。</p><p>获得订阅地址：<code>仪表盘-&gt;一键订阅-&gt;复制订阅地址</code></p><h2 id="mmyun"><a href="#mmyun" class="headerlink" title="mmyun"></a>mmyun</h2><p>优点：可以买月套餐，比较稳定，网速很快。<br>缺点：部分节点无法使用，注册必须有别人的邀请码<br>付款：支付宝、QQ</p><p>打开网址进入注册页面（邀请码失效）：<a href="https://w3.taytay2023.buzz//#/auth/register?code=pZWg">https://w3.taytay2023.buzz//#/auth/register?code=pZWg</a></p><p>注册成功自动跳转网站主页面。</p><p>点击左侧目录下方<code>充值</code>，然后支付宝付款就行。</p><p>(不放心的话可以先充1元，买个<strong>vip2 3天5G单端口套餐</strong>体验一下。)</p><p>然后点击左侧目录下方<code>套餐购买</code>，选择你要购买的套餐。</p><p>【提示】越高级vip套餐可用端口越多，可用节点也越多（因为也可以用低级vip节点）。<br>【注意】余额够的话会出现<code>订单确认</code>弹窗，点击确认就买了，退不了的，请务必确定你选的是这个套餐。<br>【特别注意】确保余额足够，套餐到期会自动续费。重复购买套餐会被覆盖！如果还未用完的高级套餐被新的低级套餐覆盖就血亏！</p><p>然后左侧点击<code>用户中心</code>，可以看到套餐基本信息。</p><p>点击右侧<code>订阅中心-&gt;通用订阅-&gt;V2RayN-&gt;(蓝色飞机)拷贝订阅链接</code>。<br>可以选择拷贝订阅链接，设置订阅地址然后更新订阅；也可以拷贝全部节点URL，然后从剪贴板导入批量URL。</p><h1 id="免费节点分享"><a href="#免费节点分享" class="headerlink" title="免费节点分享"></a>免费节点分享</h1><ul><li><p>这里在线分享很多免费的，v2rayNG扫一扫即可：<a href="https://www.youtube.com/watch?v=uSkT4MwpCYA&ab_channel=%E4%B8%8D%E8%89%AF%E6%9E%97">7X24小时在线直播分享免费节点 - YouTube</a></p></li><li><p>从github获取常更新节点池：<br><a href="https://github.com/search?q=%E8%8A%82%E7%82%B9&type=repositories&s=updated&o=desc">https://github.com/search?q=%E8%8A%82%E7%82%B9&amp;type=repositories&amp;s=updated&amp;o=desc</a></p></li><li><p>可以在Youtube关注<code>资源分享君</code>，每日更新一堆免费的节点，但是只有短期能用。</p></li><li><p>白嫖cloudflare免费节点（过程略繁琐）：<a href="https://blog.lumengde.com/posts/dfa2.html">https://blog.lumengde.com/posts/dfa2.html</a></p></li></ul>]]></content>
    
    
    <summary type="html">本文会分享一些自己收集的机场以及获取免费节点的方法</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="科学上网" scheme="https://lumengde123.github.io/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
  </entry>
  
  <entry>
    <title>本站搭建和其他Hexo主题分享</title>
    <link href="https://lumengde123.github.io/posts/3eeb.html"/>
    <id>https://lumengde123.github.io/posts/3eeb.html</id>
    <published>2024-06-14T01:12:14.170Z</published>
    <updated>2024-07-03T02:26:00.417Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://hexo.io/">Hexo-官网</a><br><a href="https://hexo.io/docs/">Hexo-文档</a><br>问题解答：<a href="https://hexo.io/docs/troubleshooting.html">Hexo-troubleshooting</a> 和 <a href="https://github.com/hexojs/hexo/issues">GitHub-issues</a>.</p><p>Hexo插件大全：<a href="https://hexo.io/plugins/">Hexo-Plugins</a></p><p>本站搭建参考：<a href="https://blog.sunyifeng.icu/2021/04/30/%E8%B6%85%E8%AF%A6%E7%BB%86%E6%90%AD%E5%BB%BAHexo%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E8%AE%B0%E5%BD%95/">超详细搭建Hexo个人博客记录 - Layke</a></p><h1 id="主题1：butterfly"><a href="#主题1：butterfly" class="headerlink" title="主题1：butterfly"></a>主题1：butterfly</h1><h1 id="主题2：anzhiyu"><a href="#主题2：anzhiyu" class="headerlink" title="主题2：anzhiyu"></a>主题2：anzhiyu</h1><p>算是Hexo框架里最好看功能最丰富的主题了。缺点是加载要好几秒，不懂怎么优化，弃坑了。</p><p>Demo：<a href="https://blog.anheyu.com/">https://blog.anheyu.com/</a><br>Github：<a href="https://github.com/anzhiyu-c/hexo-theme-anzhiyu?tab=readme-ov-file">https://github.com/anzhiyu-c/hexo-theme-anzhiyu?tab=readme-ov-file</a></p><h1 id="主题3：next"><a href="#主题3：next" class="headerlink" title="主题3：next"></a>主题3：next</h1><h1 id="主题4：webstack"><a href="#主题4：webstack" class="headerlink" title="主题4：webstack"></a>主题4：webstack</h1><p>这是导航站主题，可以定制自己的网址导航</p><h1 id="主题5：maupassant-本站使用"><a href="#主题5：maupassant-本站使用" class="headerlink" title="主题5：maupassant(本站使用)"></a>主题5：maupassant(本站使用)</h1><p>这个主题比较简洁。支持Typecho、Hugo、Hexo</p><p>缺点：目录内嵌于正文，需要手动优化。</p><p>Demo：<a href="https://blog.sunyifeng.icu/">https://blog.sunyifeng.icu/</a></p><p>Github：<a href="https://github.com/pagecho/maupassant">https://github.com/pagecho/maupassant</a></p><p>主题配置文档：<a href="https://www.haomwei.com/technology/maupassant-hexo.html">https://www.haomwei.com/technology/maupassant-hexo.html</a></p><h2 id="安装的插件"><a href="#安装的插件" class="headerlink" title="安装的插件"></a>安装的插件</h2><p>Hexo插件大全：<a href="https://hexo.io/plugins/">Hexo-Plugins</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 初始化hexo并安装渲染器</span></span><br><span class="line">$ hexo init</span><br><span class="line">$ npm install hexo-renderer-pug --save  </span><br><span class="line">$ npm install hexo-renderer-sass --save  </span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装插件：本地文章搜索、字数统计、自动生成短链，需要在hexo配置/主题配置文件中开启对应配置</span></span><br><span class="line">$ npm install hexo-generator-search --save</span><br><span class="line">$ npm install hexo-wordcount --save</span><br><span class="line">$ npm install hexo-abbrlink --save</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装插件实现本地博客部署到远程仓库</span></span><br><span class="line">npm install hexo-deployer-git --save</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装插件实现博客RSS订阅</span></span><br><span class="line">$ npm install hexo-generator-feed</span><br></pre></td></tr></table></figure><p><a href="https://www.jianshu.com/p/7e433e801ef4">为 Hexo 搭建的博客添加 RSS 输出功能</a><br>Github:<a href="https://github.com/hexojs/hexo-generator-feed">https://github.com/hexojs/hexo-generator-feed</a></p><h1 id="博客框架对比"><a href="#博客框架对比" class="headerlink" title="博客框架对比"></a>博客框架对比</h1><p>静态博客：</p><ul><li>Hexo<ul><li>优点：自定义自由度高、教程很多主题很多、占用内存极低</li><li>缺点：需要用MarkDown语法、评论区要自己装、每次更新内容都要hexo三连</li><li>主题：butterfly、anzhiyu、nexT、maupassant</li></ul></li><li>Hugo<ul><li>优点：编译速度最快</li><li>缺点：<br>动态博客：</li></ul></li><li>Wordpress<ul><li>优点：安装容易</li><li>缺点：太重了、好看的主题不好找</li><li>主题：Argon、Document</li></ul></li><li>Halo<ul><li>优点：主题好看、后台超好用特别是编辑器、功能也比较丰富</li><li>缺点：自定义比较难、用MySQL8.0的话速度快但是占用内存800M-1G，小鸡顶不住</li><li>主题：Joe3.0</li></ul></li></ul>]]></content>
    
    
    <summary type="html">本文会分享一些Hexo好用的主题，分享主题安装教程，会对比几个博客框架的优缺点</summary>
    
    
    
    <category term="互联网技术" scheme="https://lumengde123.github.io/categories/%E4%BA%92%E8%81%94%E7%BD%91%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Hexo" scheme="https://lumengde123.github.io/tags/Hexo/"/>
    
    <category term="博客相关" scheme="https://lumengde123.github.io/tags/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
  </entry>
  
</feed>
