<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>即使再小的帆也能远航</title>
  
  
  <link href="https://zhou2095.top/atom.xml" rel="self"/>
  
  <link href="https://zhou2095.top/"/>
  <updated>2026-08-09T06:52:04.228Z</updated>
  <id>https://zhou2095.top/</id>
  
  <author>
    <name>loyce</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>你好,欢迎来到我的博客</title>
    <link href="https://zhou2095.top/posts/hello-world/"/>
    <id>https://zhou2095.top/posts/hello-world/</id>
    <published>2026-08-09T06:52:04.000Z</published>
    <updated>2026-08-09T06:52:04.228Z</updated>
    
    <content type="html"><![CDATA[<p>你好,欢迎来到我的博客 </p><p>很高兴你来到这里。这是我的个人小天地,用来记录所思所学、所行所见。</p><span id="more"></span><h2 id="关于这个博客"><a href="#关于这个博客" class="headerlink" title="关于这个博客"></a>关于这个博客</h2><p>这个博客是我用 <strong>Hexo + Butterfly</strong> 从零搭建起来的——从买服务器、配域名,到主题美化、评论系统,全程自己动手,踩了不少坑,也学到不少东西。</p><blockquote><p>想知道它是怎么搭的吗?我整理了一份完整教程 👉 <a href="/posts/build-hexo-blog/">用 Hexo + Butterfly 搭建个人博客</a></p></blockquote><p>在这里,我会慢慢分享这几类内容:</p><ul><li><strong>技术笔记</strong> —— 编程、搭建、踩坑记录,把解决问题的过程写下来,既给自己备忘,也分享给你。</li><li><strong>生活随笔</strong> —— 日常的所见所感,一些值得记住的瞬间。</li><li><strong>读书思考</strong> —— 读过的好书,以及那些让我停下来想一想的观点。</li></ul><h2 id="为什么写博客"><a href="#为什么写博客" class="headerlink" title="为什么写博客"></a>为什么写博客</h2><p>我一直相信一句话:<strong>输出,是最好的输入</strong>。</p><p>很多东西只是「看过」,过几天就忘了;但如果能用自己的话把它写出来,它才真正变成自己的。这个博客,就是我逼自己去理解和沉淀的地方。</p><p>它同时也是一个公开的笔记本——如果某篇文章恰好帮到了路过的你,那就再好不过了。</p><h2 id="关于「即使再小的帆也能远航」"><a href="#关于「即使再小的帆也能远航」" class="headerlink" title="关于「即使再小的帆也能远航」"></a>关于「即使再小的帆也能远航」</h2><p>博客的名字叫「<strong>即使再小的帆也能远航</strong>」,是我给自己的期许。</p><p>哪怕每天只是记下一点点东西,日积月累,也能汇成一片属于自己的风景。不和别人比快慢,只和昨天的自己比。</p><h2 id="几个小提示"><a href="#几个小提示" class="headerlink" title="几个小提示"></a>几个小提示</h2><ul><li>想找特定内容?<strong>右上角</strong>有搜索框。</li><li>想随便逛逛?<strong>右侧栏</strong>有分类、标签和归档。</li><li>看完有想法?每篇文章底部都可以<strong>留言</strong>。</li></ul><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>既然来了,就随便翻翻吧。</p><p>愿我们都能在记录中,慢慢成长 </p><p>—— loyce</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;你好,欢迎来到我的博客 &lt;/p&gt;
&lt;p&gt;很高兴你来到这里。这是我的个人小天地,用来记录所思所学、所行所见。&lt;/p&gt;</summary>
    
    
    
    <category term="随笔" scheme="https://zhou2095.top/categories/%E9%9A%8F%E7%AC%94/"/>
    
    
    <category term="公告" scheme="https://zhou2095.top/tags/%E5%85%AC%E5%91%8A/"/>
    
    <category term="随笔" scheme="https://zhou2095.top/tags/%E9%9A%8F%E7%AC%94/"/>
    
  </entry>
  
  <entry>
    <title>用 Hexo + Butterfly 搭建个人博客(完整教程)</title>
    <link href="https://zhou2095.top/posts/build-hexo-blog/"/>
    <id>https://zhou2095.top/posts/build-hexo-blog/</id>
    <published>2026-08-09T06:39:00.000Z</published>
    <updated>2026-08-09T06:50:44.071Z</updated>
    
    <content type="html"><![CDATA[<p>这篇文章记录我从零开始,在阿里云轻量服务器上用 <strong>Hexo + Butterfly 主题</strong>搭建个人博客的完整过程,包括踩过的几个大坑。如果你也想搭一个同款博客,照着做就行。</p><h2 id="为什么选-Hexo-Butterfly"><a href="#为什么选-Hexo-Butterfly" class="headerlink" title="为什么选 Hexo + Butterfly"></a>为什么选 Hexo + Butterfly</h2><ul><li><strong>Hexo</strong>:基于 Node.js 的静态博客生成器,生成纯静态页面,<strong>速度快、安全(无数据库)、可托管在任何静态服务器</strong>。</li><li><strong>Butterfly</strong>:Hexo 最流行的中文博客主题之一,外观现代、功能齐全(分类、标签、搜索、侧边栏、评论、暗黑模式等)。</li></ul><p>我参照的博客 <code>linzyblog.netlify.app</code> 就是 Hexo + Butterfly,效果很专业,所以决定照着搭一个。</p><h2 id="一、准备-服务器和环境"><a href="#一、准备-服务器和环境" class="headerlink" title="一、准备:服务器和环境"></a>一、准备:服务器和环境</h2><ul><li>一台云服务器(我用阿里云轻量应用服务器,系统 Alibaba Cloud Linux 3)</li><li>一个域名(已解析到服务器 IP)</li><li>服务器上装有 nginx(我用宝塔面板管理)</li></ul><h2 id="二、安装-Node-js"><a href="#二、安装-Node-js" class="headerlink" title="二、安装 Node.js"></a>二、安装 Node.js</h2><p>Hexo 需要 Node.js。国内服务器直接从官方源下载很慢,用 <strong>npmmirror 国内镜像</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><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /usr/local</span><br><span class="line">curl -fSL -o /tmp/node.tar.gz https://cdn.npmmirror.com/binaries/node/v18.20.4/node-v18.20.4-linux-x64.tar.gz</span><br><span class="line">tar xzf /tmp/node.tar.gz -C /usr/local</span><br><span class="line"><span class="built_in">ln</span> -sfn /usr/local/node-v18.20.4-linux-x64 /usr/local/node</span><br><span class="line"><span class="built_in">ln</span> -sf /usr/local/node/bin/node /usr/local/bin/node</span><br><span class="line"><span class="built_in">ln</span> -sf /usr/local/node/bin/npm /usr/local/bin/npm</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></pre></td><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> registry https://registry.npmmirror.com</span><br></pre></td></tr></table></figure><h2 id="三、安装-Hexo-和-Butterfly"><a href="#三、安装-Hexo-和-Butterfly" class="headerlink" title="三、安装 Hexo 和 Butterfly"></a>三、安装 Hexo 和 Butterfly</h2><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="built_in">mkdir</span> -p /www/wwwroot/hexo-blog/source/_posts</span><br><span class="line"><span class="built_in">cd</span> /www/wwwroot/hexo-blog</span><br></pre></td></tr></table></figure><p>写一个 <code>package.json</code>,把 Hexo、Butterfly 主题和必要的渲染器都列上:</p><figure class="highlight json"><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="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hexo-blog&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;private&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;dependencies&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;hexo&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^6.3.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-theme-butterfly&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^5.5.4&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-renderer-pug&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^2.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-renderer-stylus&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^3.0.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-renderer-marked&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^6.3.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-generator-feed&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^3.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;hexo-generator-searchdb&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^1.4.0&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>然后 <code>npm install</code>。注意 <strong>GitHub 在国内访问不通</strong>,所以主题和插件都走 npm 镜像,而不是 <code>git clone</code>。</p><h2 id="四、配置"><a href="#四、配置" class="headerlink" title="四、配置"></a>四、配置</h2><p><strong><code>_config.yml</code></strong>(Hexo 主配置)关键项:</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></pre></td><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">我的博客</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">Asia/Shanghai</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://你的域名</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">posts/:title/</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">butterfly</span></span><br></pre></td></tr></table></figure><p><strong><code>_config.butterfly.yml</code></strong>(主题配置)覆盖导航、配色、侧边栏:</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></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="string">首页:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">fas</span> <span class="string">fa-home</span></span><br><span class="line">  <span class="string">归档:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">fas</span> <span class="string">fa-archive</span></span><br><span class="line">  <span class="string">标签:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">fas</span> <span class="string">fa-tags</span></span><br><span class="line">  <span class="string">分类:</span> <span class="string">/categories/</span> <span class="string">||</span> <span class="string">fas</span> <span class="string">fa-folder</span></span><br><span class="line">  <span class="string">关于:</span> <span class="string">/about/</span> <span class="string">||</span> <span class="string">fas</span> <span class="string">fa-heart</span></span><br><span class="line"></span><br><span class="line"><span class="attr">aside:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">position:</span> <span class="string">right</span></span><br><span class="line">  <span class="attr">card_author:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">card_categories:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">card_tags:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">search:</span></span><br><span class="line">  <span class="attr">use:</span> <span class="string">local_search</span></span><br></pre></td></tr></table></figure><p>别忘了创建标签页和分类页(否则点进去 403):</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 new page tags     <span class="comment"># 在 source/tags/index.md 加 type: tags</span></span><br><span class="line">hexo new page categories</span><br></pre></td></tr></table></figure><h2 id="五、一个大坑-hexo-generate-不工作"><a href="#五、一个大坑-hexo-generate-不工作" class="headerlink" title="五、一个大坑:hexo generate 不工作"></a>五、一个大坑:<code>hexo generate</code> 不工作</h2><p>装完直接 <code>hexo generate</code>,结果只打印了一段帮助信息,<strong>一个文件都没生成</strong>。</p><p>排查发现:Hexo 加载配置的源码里有一行</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (!ctx.<span class="property">env</span>.<span class="property">init</span>) <span class="keyword">return</span>;  <span class="comment">// env.init 不为 true 就跳过加载配置</span></span><br></pre></td></tr></table></figure><p>这个 <code>env.init</code> 标志正常由 <code>hexo-cli</code> 设置,但全局装的 hexo-cli 没设它,导致 Hexo 根本没读 <code>_config.yml</code>(主题还停留在默认的 landscape,文章识别为 0 篇)。</p><p><strong>解决办法</strong>:写一个生成脚本 <code>build.sh</code>,用 Node 直接调 Hexo API 并手动设 <code>env.init</code>:</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="string">&quot;/usr/local/node/bin:/usr/local/bin:<span class="variable">$PATH</span>&quot;</span></span><br><span class="line"><span class="built_in">cd</span> /www/wwwroot/hexo-blog</span><br><span class="line">node -e <span class="string">&quot;</span></span><br><span class="line"><span class="string">const Hexo = require(&#x27;hexo&#x27;);</span></span><br><span class="line"><span class="string">const h = new Hexo(process.cwd(), &#123;&#125;);</span></span><br><span class="line"><span class="string">h.env.init = true;</span></span><br><span class="line"><span class="string">h.init().then(() =&gt; h.call(&#x27;clean&#x27;)).then(() =&gt; h.call(&#x27;generate&#x27;)).then(() =&gt; &#123;</span></span><br><span class="line"><span class="string">  console.log(&#x27;build ok&#x27;);</span></span><br><span class="line"><span class="string">  return h.exit();</span></span><br><span class="line"><span class="string">&#125;).catch(e =&gt; &#123; console.error(e.message); process.exit(1); &#125;);</span></span><br><span class="line"><span class="string">&quot;</span></span><br></pre></td></tr></table></figure><p>之后再执行 <code>./build.sh</code>,就能正常生成 30 多个静态文件了。</p><h2 id="六、部署-nginx-托管静态文件"><a href="#六、部署-nginx-托管静态文件" class="headerlink" title="六、部署:nginx 托管静态文件"></a>六、部署:nginx 托管静态文件</h2><p>Hexo 生成的静态文件在 <code>public/</code> 目录,让 nginx 直接托管:</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><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="section">server</span> &#123;</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">443</span> ssl;</span><br><span class="line">    <span class="attribute">http2</span> <span class="literal">on</span>;</span><br><span class="line">    <span class="attribute">server_name</span> 你的域名;</span><br><span class="line">    <span class="attribute">root</span> /www/wwwroot/hexo-blog/public;</span><br><span class="line">    <span class="attribute">index</span> index.html;</span><br><span class="line"></span><br><span class="line">    <span class="attribute">ssl_certificate</span>     /path/to/fullchain.pem;</span><br><span class="line">    <span class="attribute">ssl_certificate_key</span> /path/to/privkey.pem;</span><br><span class="line"></span><br><span class="line">    <span class="section">location</span> / &#123;</span><br><span class="line">        <span class="attribute">try_files</span> <span class="variable">$uri</span> <span class="variable">$uri</span>/ /index.html;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><code>nginx -s reload</code> 后,域名访问就是博客了。HTTPS 直接复用之前申请的证书。</p><h2 id="七、又一个坑-首页白屏-FontAwesome"><a href="#七、又一个坑-首页白屏-FontAwesome" class="headerlink" title="七、又一个坑:首页白屏(FontAwesome)"></a>七、又一个坑:首页白屏(FontAwesome)</h2><p>上线后发现首页偶尔<strong>一片空白</strong>。排查发现:Butterfly 默认从 <code>cdn.jsdelivr.net</code> 加载 FontAwesome 图标的 CSS,而 <strong>jsdelivr 在国内访问不稳定</strong>,这个 CSS 又是渲染阻塞的——加载超时,浏览器就一直白屏。</p><p><strong>解决办法</strong>:把 FontAwesome 本地化。下载到 <code>source/lib/font-awesome/</code>,然后改主题模板 <code>head.pug</code>:</p><figure class="highlight diff"><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="deletion">- link(rel=&#x27;stylesheet&#x27;, href=url_for(theme.asset.fontawesome))</span></span><br><span class="line"><span class="addition">+ link(rel=&#x27;stylesheet&#x27;, href=url_for(&#x27;/lib/font-awesome/css/all.min.css&#x27;))</span></span><br></pre></td></tr></table></figure><p>从此不再依赖外部 CDN,白屏问题消失。</p><h2 id="八、写文章"><a href="#八、写文章" class="headerlink" title="八、写文章"></a>八、写文章</h2><p>文章是 <code>source/_posts/</code> 下的 Markdown 文件,带 frontmatter:</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><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><br><span class="line">title: 文章标题</span><br><span class="line">date: 2026-08-09 10:00:00</span><br><span class="line">tags:</span><br><span class="line">  - 标签</span><br><span class="line">categories:</span><br><span class="line">  - 分类</span><br><span class="line"><span class="section">cover: https://图片地址</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line">正文内容……</span><br></pre></td></tr></table></figure><p>写完执行 <code>./build.sh</code> 重新生成,刷新博客就能看到新文章。</p><blockquote><p>后台可以接一个 <strong>Markdown 编辑器</strong>(带实时预览和工具栏):标题&#x2F;标签&#x2F;分类用表单填,正文直接写 Markdown 即可。注意别用纯富文本编辑器——它会存成 HTML、破坏 Markdown 格式。</p></blockquote><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>最终效果:一个外观专业、加载飞快、全站 HTTPS 的个人博客。整个过程踩了两个大坑(hexo 的 <code>env.init</code>、jsdelivr 白屏),但都解决了。</p><p>如果你也准备搭,记住两点:</p><ol><li><strong>国内服务器</strong>:Node&#x2F;Hexo&#x2F;主题用 npmmirror 镜像,别依赖 GitHub。</li><li><strong>静态博客的 CDN</strong>:图标&#x2F;字体尽量本地化,别用 jsdelivr 这种国内不稳的 CDN。</li></ol><p>祝你也能拥有自己的博客</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;这篇文章记录我从零开始,在阿里云轻量服务器上用 &lt;strong&gt;Hexo + Butterfly 主题&lt;/strong&gt;搭建个人博客的完整过程,包括踩过的几个大坑。如果你也想搭一个同款博客,照着做就行。&lt;/p&gt;
&lt;h2 id=&quot;为什么选-Hexo-Butterfly&quot;&gt;&lt;a</summary>
      
    
    
    
    <category term="技术" scheme="https://zhou2095.top/categories/%E6%8A%80%E6%9C%AF/"/>
    
    
    <category term="Hexo" scheme="https://zhou2095.top/tags/Hexo/"/>
    
    <category term="Butterfly" scheme="https://zhou2095.top/tags/Butterfly/"/>
    
    <category term="博客" scheme="https://zhou2095.top/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="教程" scheme="https://zhou2095.top/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
</feed>
