<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>秋风飘起黄叶落のblog</title>
    <link>https://ox0pine.github.io/</link>
    <description>每个人都值得被记录</description>
    <language>zh-CN</language>
    <copyright>All rights reserved 2026, ox0pine</copyright>
    <lastBuildDate>Fri, 30 Oct 2026 08:02:47 GMT</lastBuildDate>
    <generator>Hexo</generator>
    <image>
      <url>https://ox0pine.github.io/images/favicon-32x32.png</url>
      <title>秋风飘起黄叶落のblog</title>
      <link>https://ox0pine.github.io/</link>
    </image>
    <atom:link href="https://ox0pine.github.io/rss2.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>我是怎么把 GitHub Actions 用成个人主页内容编辑器的</title>
      <link>https://ox0pine.github.io/2026/04/13/github-actions-content-editor/</link>
      <description>
        <![CDATA[<blockquote>
<p>这次重新搭建个人主页，我原本只是想换一个更顺手的前端方案，最后却意外把 GitHub Actions 用成了网站背后的“内容编辑器”。</p>
</blockquote>
<h2 id="重新搭建主页时，我在想什么"><a href="#重新搭建主]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/tech/">tech</category>
      <category domain="https://ox0pine.github.io/tags/GitHub-Actions/">GitHub Actions</category>
      <category domain="https://ox0pine.github.io/tags/GitHub/">GitHub</category>
      <category domain="https://ox0pine.github.io/tags/%E8%87%AA%E5%8A%A8%E5%8C%96/">自动化</category>
      <category domain="https://ox0pine.github.io/tags/Base-UI/">Base UI</category>
      <category domain="https://ox0pine.github.io/tags/%E4%B8%AA%E4%BA%BA%E4%B8%BB%E9%A1%B5/">个人主页</category>
      <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<blockquote><p>这次重新搭建个人主页，我原本只是想换一个更顺手的前端方案，最后却意外把 GitHub Actions 用成了网站背后的“内容编辑器”。</p></blockquote><h2 id="重新搭建主页时，我在想什么"><a href="#重新搭建主页时，我在想什么" class="headerlink" title="重新搭建主页时，我在想什么"></a>重新搭建主页时，我在想什么</h2><p>前段时间，我把自己的个人主页重新搭了一遍。</p><p>一开始的目标其实很简单：页面干净一点，结构清楚一点，部署轻一点。于是我用 React、Vite 和 Base UI 重新把整个站点梳理了一遍，再挂到 Vercel 上，让它保持一个静态站点该有的轻盈。</p><p>但真正开始做之后，我很快发现，主页最难的地方从来不是“搭出来”，而是“养起来”。</p><p>页面本身可以很快上线，可一旦内容要靠手动维护，它就很容易停在某个时刻不再生长。写了新文章，要手动补最近文章；开了新仓库，要手动补项目展示。时间一长，主页就会变成一个样子还在、气息却慢慢淡下去的页面。</p><p>所以这次重搭主页时，我想解决的其实不是样式，而是更新方式：<strong>能不能让它看起来是静态的，但内容是缓慢流动的。</strong></p><h2 id="Base-UI-给我的一个小启发"><a href="#Base-UI-给我的一个小启发" class="headerlink" title="Base UI 给我的一个小启发"></a>Base UI 给我的一个小启发</h2><p>这次重搭还有一个让我印象很深的地方，是 Base UI 对 LLM 的友好度。</p><p>它除了常规文档之外，还专门提供了 <a href="https://base-ui.com/llms.txt"><code>llms.txt</code></a>，官方也明确提到，可以把文档的 Markdown 版本或者 <code>llms.txt</code> 直接提供给 AI 助手，帮助模型更准确地理解组件和 API。</p><p><img src="/2026/04/13/github-actions-content-editor/base-ui-llms.png" alt="Base UI 文档中的 Working with LLMs"></p><p>这个细节让我很有感触。因为它其实在做一件很现代的事：不是只考虑“人怎么读文档”，而是连“模型怎么理解文档”也一起考虑进去了。</p><p>某种程度上，我后来给主页做的内容链路，思路也是一样的：先把信息整理成稳定、结构化、容易消费的形式，再交给后面的系统去展示。</p><h2 id="后来我把主页拆成了两部分"><a href="#后来我把主页拆成了两部分" class="headerlink" title="后来我把主页拆成了两部分"></a>后来我把主页拆成了两部分</h2><p>做到后面，我慢慢把整个主页理解成了两层：</p><ol><li><strong>前台页面</strong>：负责展示</li><li><strong>后台内容流</strong>：负责更新</li></ol><p>前台页面就是 React + Vite + Base UI。</p><p>后台内容流则是我后来补上的自动化链路：</p><ul><li>从博客里抓最近文章</li><li>从 GitHub 抓最近公开仓库</li><li>生成本地的 <code>data/content.ts</code></li><li>提交回仓库</li><li>让 Vercel 自动重新部署</li></ul><p>这样一来，前端运行时不需要再去现场请求博客或者 GitHub API，而是直接读取已经生成好的本地数据。</p><p>我很喜欢这种方式。因为它保留了静态站点的简单，又让内容更新这件事变得不那么依赖人的勤快。</p><h2 id="GitHub-Actions-在这里，像一个安静的内容编辑器"><a href="#GitHub-Actions-在这里，像一个安静的内容编辑器" class="headerlink" title="GitHub Actions 在这里，像一个安静的内容编辑器"></a>GitHub Actions 在这里，像一个安静的内容编辑器</h2><p>这个项目里，我最喜欢的部分其实是 <code>.github/workflows/refresh-content.yml</code>。</p><p>它做的事情并不复杂：</p><ol><li>检出仓库</li><li>安装 Node.js 22</li><li>执行 <code>npm ci</code></li><li>运行 <code>npm run generate:content</code></li><li>只暂存 <code>data/content.ts</code></li><li>如果有变化，就自动提交并推送</li></ol><p>它支持手动触发，也支持定时触发：</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">on:</span></span><br><span class="line">  <span class="attr">workflow_dispatch:</span></span><br><span class="line">  <span class="attr">schedule:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">cron:</span> <span class="string">&#x27;0 0 * * *&#x27;</span></span><br></pre></td></tr></table></figure><p>对我来说，这个工作流最妙的地方在于，它并不像传统 CI 那样强调“测试通过、构建完成、发布成功”，而更像一个很安静的编辑器，在背后定时帮我整理内容。</p><p>而 Vercel 又刚好接上了这一步：仓库一旦有新的提交，站点就自动重新部署。</p><p>于是整条链路就很顺了：</p><ul><li>GitHub Actions 负责更新内容</li><li>GitHub 仓库负责保存结果</li><li>Vercel 负责把最新页面上线</li></ul><p>页面表面上很安静，但背后一直有一条自动化的水流在走。</p><h2 id="这次重搭主页，反而让我重新认识了-GitHub-Actions"><a href="#这次重搭主页，反而让我重新认识了-GitHub-Actions" class="headerlink" title="这次重搭主页，反而让我重新认识了 GitHub Actions"></a>这次重搭主页，反而让我重新认识了 GitHub Actions</h2><p>以前我对 GitHub Actions 的理解比较朴素：跑测试、做构建、自动部署。</p><p>当然这些都没错，但这次做完之后，我更强烈地感觉到，GitHub Actions 真正有趣的地方，不只是它能替你“发布代码”，而是它能替你“处理那些重复、稳定、适合被机器接手的事情”。</p><p>把它放到个人项目里，这种感受会更明显。</p><p>因为个人项目最容易卡住的地方，往往不是技术难度，而是维护意志。很多事情不是不会做，而是懒得重复做。GitHub Actions 恰好就适合接这种活。</p><h2 id="除了刷新主页内容，GitHub-Actions-其实还能做很多事"><a href="#除了刷新主页内容，GitHub-Actions-其实还能做很多事" class="headerlink" title="除了刷新主页内容，GitHub Actions 其实还能做很多事"></a>除了刷新主页内容，GitHub Actions 其实还能做很多事</h2><p>这次做完主页之后，我反而开始觉得，GitHub Actions 在个人项目里的用法其实可以比 CI&#x2F;CD 更宽一些。</p><h3 id="1-定时同步内容"><a href="#1-定时同步内容" class="headerlink" title="1. 定时同步内容"></a>1. 定时同步内容</h3><p>这是我这次实际用到的一类。</p><p>只要某些数据来源是公开且稳定的，Actions 就很适合定时去抓取、清洗、生成本地数据，再交给静态站点渲染。</p><p>比如：</p><ul><li>个人主页同步最近文章</li><li>作品集同步最近项目</li><li>导航页同步书签、工具或订阅内容</li><li>静态页面定时生成榜单、清单、摘要</li></ul><p>这种用法的好处是，页面本身还是静态的，但内容不会完全停住。</p><h3 id="2-自动生成仓库里的展示内容"><a href="#2-自动生成仓库里的展示内容" class="headerlink" title="2. 自动生成仓库里的展示内容"></a>2. 自动生成仓库里的展示内容</h3><p>很多仓库里的 README、项目首页、徽章信息，其实都可以自动维护。</p><p>例如：</p><ul><li>自动刷新 README 中的项目状态</li><li>自动生成最近更新记录</li><li>自动汇总 issue &#x2F; release 信息</li><li>自动整理博客、视频、文章索引</li></ul><p>这类事情人工也能做，但很容易拖。交给 Actions 之后，仓库会更像一个持续生长的对象，而不是写完就不再更新的代码堆。</p><h3 id="3-做一些轻量的数据备份和归档"><a href="#3-做一些轻量的数据备份和归档" class="headerlink" title="3. 做一些轻量的数据备份和归档"></a>3. 做一些轻量的数据备份和归档</h3><p>个人项目里还有一类事情特别适合 Actions：周期性备份。</p><p>比如：</p><ul><li>定时导出某些公开数据</li><li>定时备份配置文件或生成产物</li><li>定时把分散的信息汇总成一个仓库内可追踪的快照</li></ul><p>它不一定要很重，也不一定非得是企业级备份系统。有时候只是把零散的数据定期沉淀下来，就已经很有价值了。</p><h3 id="4-让静态网站拥有一点“动态感”"><a href="#4-让静态网站拥有一点“动态感”" class="headerlink" title="4. 让静态网站拥有一点“动态感”"></a>4. 让静态网站拥有一点“动态感”</h3><p>我现在越来越喜欢的一种思路是：</p><p><strong>不要急着把网站做成一个实时请求一堆接口的动态系统，而是先看看能不能用 Actions 把动态信息提前烘焙成静态内容。</strong></p><p>这样做通常更简单，也更稳。</p><p>对个人网站尤其如此：</p><ul><li>页面访问更快</li><li>外部依赖更少</li><li>部署更直接</li><li>出问题时更容易定位</li></ul><p>很多看上去需要“动态”的需求，最后其实只要“每天更新一次”就够了。</p><h2 id="写到这里，我反而觉得这像是一种网站观"><a href="#写到这里，我反而觉得这像是一种网站观" class="headerlink" title="写到这里，我反而觉得这像是一种网站观"></a>写到这里，我反而觉得这像是一种网站观</h2><p>这次重新搭主页，最后带给我的并不只是一个新的页面，而是一种更舒服的工作方式。</p><p>前端负责把页面铺开，GitHub Actions 负责把内容整理好，Vercel 负责把结果送到线上。每一层都不重，但组合起来之后，网站就有了持续更新的能力。</p><p>我越来越喜欢这种感觉：</p><ul><li>页面是静的</li><li>内容是流动的</li><li>人只负责决定方向</li><li>机器负责处理重复劳动</li></ul><p>如果以后我再用一句话概括这次重搭主页的收获，大概会是：</p><blockquote><p>GitHub Actions 最有意思的地方，不只是帮我部署网站，而是帮我照看网站背后那条持续流动的内容线。</p></blockquote><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://github.com/ox0pine/ox0pine.top">ox0pine&#x2F;ox0pine.top</a></li><li><a href="https://base-ui.com/llms.txt">Base UI llms.txt</a></li><li><a href="https://docs.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions">GitHub Actions 工作流语法文档</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>如何使用Cloudflare Tunnel</title>
      <link>https://ox0pine.github.io/2026/01/24/cloudflare-tunnel-guide/</link>
      <description>
        <![CDATA[<blockquote>
<p>最低成本上线在线服务，避免购买公网IP服务器。</p>
</blockquote>
<h2 id="什么是-Cloudflare-Tunnel"><a href="#什么是-Cloudflare-Tunnel" class="headerlink"]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/tech/">tech</category>
      <category domain="https://ox0pine.github.io/tags/%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7/">网络工具</category>
      <category domain="https://ox0pine.github.io/tags/Cloudflare/">Cloudflare</category>
      <pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<blockquote><p>最低成本上线在线服务，避免购买公网IP服务器。</p></blockquote><h2 id="什么是-Cloudflare-Tunnel"><a href="#什么是-Cloudflare-Tunnel" class="headerlink" title="什么是 Cloudflare Tunnel"></a>什么是 Cloudflare Tunnel</h2><p>Cloudflare Tunnel（原名 Argo Tunnel）是 Cloudflare 提供的一项免费服务，可以让你在不需要公网 IP 的情况下，将本地服务安全地暴露到互联网上。它通过在你的服务器和 Cloudflare 网络之间建立加密隧道来工作。</p><h3 id="主要优势"><a href="#主要优势" class="headerlink" title="主要优势"></a>主要优势</h3><ul><li><strong>无需公网 IP</strong>：不需要购买昂贵的公网 IP 或 VPS</li><li><strong>免费使用</strong>：Cloudflare 免费计划即可使用</li><li><strong>自动 HTTPS</strong>：自动配置 SSL 证书</li><li><strong>DDoS 防护</strong>：享受 Cloudflare 的安全防护</li><li><strong>隐藏源站</strong>：真实服务器 IP 不会暴露</li></ul><h2 id="前置准备"><a href="#前置准备" class="headerlink" title="前置准备"></a>前置准备</h2><ol><li>一个 Cloudflare 账号（<a href="https://dash.cloudflare.com/sign-up">注册地址</a>）</li><li>一个已添加到 Cloudflare 的域名</li><li>一台可以运行服务的机器（本地电脑、内网服务器等）</li></ol><h2 id="安装-cloudflared"><a href="#安装-cloudflared" class="headerlink" title="安装 cloudflared"></a>安装 cloudflared</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><p>下载并安装 cloudflared：</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="comment"># 访问 https://github.com/cloudflare/cloudflared/releases</span></span><br><span class="line"><span class="comment"># 下载 cloudflared-windows-amd64.exe</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重命名为 cloudflared.exe 并添加到系统 PATH</span></span><br></pre></td></tr></table></figure><h3 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h3><p>使用 Homebrew 安装：</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">brew install cloudflare/cloudflare/cloudflared</span><br></pre></td></tr></table></figure><h3 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h3><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"># Debian/Ubuntu</span></span><br><span class="line">wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb</span><br><span class="line"><span class="built_in">sudo</span> dpkg -i cloudflared-linux-amd64.deb</span><br><span class="line"></span><br><span class="line"><span class="comment"># CentOS/RHEL</span></span><br><span class="line">wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm</span><br><span class="line"><span class="built_in">sudo</span> rpm -i cloudflared-linux-x86_64.rpm</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">cloudflared --version</span><br></pre></td></tr></table></figure><h2 id="快速开始：临时隧道"><a href="#快速开始：临时隧道" class="headerlink" title="快速开始：临时隧道"></a>快速开始：临时隧道</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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 将本地 8080 端口暴露到公网</span></span><br><span class="line">cloudflared tunnel --url http://localhost:8080</span><br></pre></td></tr></table></figure><p>运行后会生成一个临时的 <code>*.trycloudflare.com</code> 域名，可以直接访问。</p><h2 id="创建永久隧道"><a href="#创建永久隧道" class="headerlink" title="创建永久隧道"></a>创建永久隧道</h2><p>Cloudflare Tunnel 提供两种创建方式：<strong>命令行方式（CLI）</strong> 和 <strong>Dashboard 方式（Web 界面）</strong>。你可以根据自己的喜好选择。</p><h3 id="方式一：命令行创建（推荐）"><a href="#方式一：命令行创建（推荐）" class="headerlink" title="方式一：命令行创建（推荐）"></a>方式一：命令行创建（推荐）</h3><p>适合喜欢命令行操作的开发者，配置更灵活。</p><h4 id="1-登录-Cloudflare"><a href="#1-登录-Cloudflare" class="headerlink" title="1. 登录 Cloudflare"></a>1. 登录 Cloudflare</h4><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">cloudflared tunnel login</span><br></pre></td></tr></table></figure><p>这会打开浏览器，选择你要使用的域名并授权。授权成功后会在本地生成证书文件。</p><h4 id="2-创建隧道"><a href="#2-创建隧道" class="headerlink" title="2. 创建隧道"></a>2. 创建隧道</h4><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">cloudflared tunnel create my-tunnel</span><br></pre></td></tr></table></figure><p>这会创建一个名为 <code>my-tunnel</code> 的隧道，并生成一个 UUID 和凭证文件。记下这个 UUID，后面会用到。</p><h4 id="3-配置隧道"><a href="#3-配置隧道" class="headerlink" title="3. 配置隧道"></a>3. 配置隧道</h4><p>创建配置文件 <code>~/.cloudflared/config.yml</code>（Windows 在 <code>%USERPROFILE%\.cloudflared\config.yml</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></pre></td><td class="code"><pre><span class="line"><span class="attr">tunnel:</span> <span class="string">&lt;你的隧道UUID&gt;</span></span><br><span class="line"><span class="attr">credentials-file:</span> <span class="string">/path/to/.cloudflared/&lt;UUID&gt;.json</span></span><br><span class="line"></span><br><span class="line"><span class="attr">ingress:</span></span><br><span class="line">  <span class="comment"># 将 blog.example.com 路由到本地 4000 端口（Hexo 默认端口）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">blog.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:4000</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 将 api.example.com 路由到本地 3000 端口</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">api.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:3000</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 捕获所有其他请求（必需）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">service:</span> <span class="string">http_status:404</span></span><br></pre></td></tr></table></figure><h4 id="4-配置-DNS"><a href="#4-配置-DNS" class="headerlink" title="4. 配置 DNS"></a>4. 配置 DNS</h4><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">cloudflared tunnel route dns my-tunnel blog.example.com</span><br><span class="line">cloudflared tunnel route dns my-tunnel api.example.com</span><br></pre></td></tr></table></figure><p>这会自动在 Cloudflare DNS 中创建 CNAME 记录。</p><h4 id="5-运行隧道"><a href="#5-运行隧道" class="headerlink" title="5. 运行隧道"></a>5. 运行隧道</h4><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">cloudflared tunnel run my-tunnel</span><br></pre></td></tr></table></figure><p>现在访问 <code>https://blog.example.com</code> 就能访问到你的本地服务了！</p><h3 id="方式二：Dashboard-创建（图形界面）"><a href="#方式二：Dashboard-创建（图形界面）" class="headerlink" title="方式二：Dashboard 创建（图形界面）"></a>方式二：Dashboard 创建（图形界面）</h3><p>适合不熟悉命令行的用户，操作更直观。</p><h4 id="1-进入-Cloudflare-Zero-Trust"><a href="#1-进入-Cloudflare-Zero-Trust" class="headerlink" title="1. 进入 Cloudflare Zero Trust"></a>1. 进入 Cloudflare Zero Trust</h4><ol><li>登录 <a href="https://dash.cloudflare.com/">Cloudflare Dashboard</a></li><li>选择你的账号</li><li>进入 <strong>Zero Trust</strong> → <strong>Networks</strong> → <strong>Tunnels</strong></li><li>点击 <strong>Create a tunnel</strong></li></ol><h4 id="2-选择连接器类型"><a href="#2-选择连接器类型" class="headerlink" title="2. 选择连接器类型"></a>2. 选择连接器类型</h4><p>选择 <strong>Cloudflared</strong> 作为连接器类型，点击 <strong>Next</strong>。</p><h4 id="3-命名并安装"><a href="#3-命名并安装" class="headerlink" title="3. 命名并安装"></a>3. 命名并安装</h4><ol><li>为隧道命名（如 <code>my-blog-tunnel</code>）</li><li>点击 <strong>Save tunnel</strong></li><li>根据你的操作系统选择对应的安装命令</li><li>在服务器上运行显示的命令（包含 token）</li></ol><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"><span class="comment"># Linux/macOS</span></span><br><span class="line"><span class="built_in">sudo</span> cloudflared service install &lt;your-token&gt;</span><br><span class="line"></span><br><span class="line"><span class="comment"># Windows（以管理员身份运行）</span></span><br><span class="line">cloudflared.exe service install &lt;your-token&gt;</span><br></pre></td></tr></table></figure><ol start="5"><li>安装完成后，连接器会显示为 <strong>Connected</strong></li><li>点击 <strong>Next</strong></li></ol><h4 id="4-配置路由"><a href="#4-配置路由" class="headerlink" title="4. 配置路由"></a>4. 配置路由</h4><p>有两种配置方式：</p><p><strong>A. 发布公开应用（Public Hostname）</strong></p><ol><li>在 <strong>Public Hostname</strong> 标签下</li><li>填写配置：<ul><li><strong>Subdomain</strong>: 输入子域名（如 <code>blog</code>）</li><li><strong>Domain</strong>: 选择你的域名（如 <code>example.com</code>）</li><li><strong>Type</strong>: 选择 <code>HTTP</code></li><li><strong>URL</strong>: 输入本地服务地址（如 <code>localhost:4000</code>）</li></ul></li><li>点击 <strong>Save tunnel</strong></li></ol><p><strong>B. 连接私有网络（Private Network）</strong></p><ol><li>切换到 <strong>Private Network</strong> 标签</li><li>输入私有 IP 或 CIDR 范围（如 <code>192.168.1.0/24</code>）</li><li>点击 <strong>Save tunnel</strong></li></ol><h4 id="5-验证状态"><a href="#5-验证状态" class="headerlink" title="5. 验证状态"></a>5. 验证状态</h4><p>配置完成后，返回 <strong>Tunnels</strong> 页面，你的隧道应该显示为 <strong>Healthy</strong> 状态。现在就可以通过配置的域名访问你的服务了！</p><h3 id="两种方式对比"><a href="#两种方式对比" class="headerlink" title="两种方式对比"></a>两种方式对比</h3><table><thead><tr><th>特性</th><th>命令行方式</th><th>Dashboard 方式</th></tr></thead><tbody><tr><td>适用人群</td><td>开发者、运维人员</td><td>所有用户</td></tr><tr><td>配置灵活性</td><td>高（可精细配置）</td><td>中（图形界面限制）</td></tr><tr><td>批量操作</td><td>容易</td><td>较难</td></tr><tr><td>学习曲线</td><td>需要熟悉命令行</td><td>简单直观</td></tr><tr><td>配置文件</td><td>本地 YAML 文件</td><td>云端存储</td></tr><tr><td>适合场景</td><td>自动化部署、多隧道管理</td><td>快速上手、单个隧道</td></tr></tbody></table><p><strong>建议</strong>：</p><ul><li>如果你是开发者或需要管理多个隧道，推荐使用命令行方式</li><li>如果你只需要快速部署一个服务，Dashboard 方式更简单</li></ul><p>现在访问 <code>https://blog.example.com</code> 就能访问到你的本地服务了！</p><h2 id="配置为系统服务"><a href="#配置为系统服务" class="headerlink" title="配置为系统服务"></a>配置为系统服务</h2><h3 id="Linux-systemd"><a href="#Linux-systemd" class="headerlink" title="Linux (systemd)"></a>Linux (systemd)</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装服务</span></span><br><span class="line"><span class="built_in">sudo</span> cloudflared service install</span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动服务</span></span><br><span class="line"><span class="built_in">sudo</span> systemctl start cloudflared</span><br><span class="line"><span class="built_in">sudo</span> systemctl <span class="built_in">enable</span> cloudflared</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line"><span class="built_in">sudo</span> systemctl status cloudflared</span><br></pre></td></tr></table></figure><h3 id="Windows-1"><a href="#Windows-1" class="headerlink" title="Windows"></a>Windows</h3><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">cloudflared service install</span><br></pre></td></tr></table></figure><h3 id="macOS-1"><a href="#macOS-1" class="headerlink" title="macOS"></a>macOS</h3><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">sudo</span> cloudflared service install</span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动服务</span></span><br><span class="line"><span class="built_in">sudo</span> launchctl start com.cloudflare.cloudflared</span><br></pre></td></tr></table></figure><h2 id="高级配置"><a href="#高级配置" class="headerlink" title="高级配置"></a>高级配置</h2><h3 id="多个服务配置"><a href="#多个服务配置" class="headerlink" title="多个服务配置"></a>多个服务配置</h3><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></pre></td><td class="code"><pre><span class="line"><span class="attr">tunnel:</span> <span class="string">&lt;UUID&gt;</span></span><br><span class="line"><span class="attr">credentials-file:</span> <span class="string">/path/to/credentials.json</span></span><br><span class="line"></span><br><span class="line"><span class="attr">ingress:</span></span><br><span class="line">  <span class="comment"># Web 服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">www.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:80</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># SSH 服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">ssh.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">ssh://localhost:22</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># WebSocket 服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">ws.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:8080</span></span><br><span class="line">    <span class="attr">originRequest:</span></span><br><span class="line">      <span class="attr">noTLSVerify:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 默认规则</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">service:</span> <span class="string">http_status:404</span></span><br></pre></td></tr></table></figure><h3 id="访问控制"><a href="#访问控制" class="headerlink" title="访问控制"></a>访问控制</h3><p>在 Cloudflare Dashboard 中可以配置 Access 策略，限制谁可以访问你的服务：</p><ol><li>进入 Cloudflare Dashboard</li><li>选择你的域名</li><li>进入 <strong>Access</strong> → <strong>Applications</strong></li><li>创建新的应用程序并配置访问规则</li></ol><h3 id="日志配置"><a href="#日志配置" class="headerlink" title="日志配置"></a>日志配置</h3><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></pre></td><td class="code"><pre><span class="line"><span class="attr">tunnel:</span> <span class="string">&lt;UUID&gt;</span></span><br><span class="line"><span class="attr">credentials-file:</span> <span class="string">/path/to/credentials.json</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 日志级别：debug, info, warn, error</span></span><br><span class="line"><span class="attr">loglevel:</span> <span class="string">info</span></span><br><span class="line"></span><br><span class="line"><span class="attr">ingress:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:8080</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">service:</span> <span class="string">http_status:404</span></span><br></pre></td></tr></table></figure><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</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><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 列出所有隧道</span></span><br><span class="line">cloudflared tunnel list</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看隧道信息</span></span><br><span class="line">cloudflared tunnel info my-tunnel</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除隧道</span></span><br><span class="line">cloudflared tunnel delete my-tunnel</span><br><span class="line"></span><br><span class="line"><span class="comment"># 清理未使用的连接</span></span><br><span class="line">cloudflared tunnel cleanup my-tunnel</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试配置文件</span></span><br><span class="line">cloudflared tunnel ingress validate</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试特定 URL 的路由</span></span><br><span class="line">cloudflared tunnel ingress rule https://blog.example.com</span><br></pre></td></tr></table></figure><h2 id="故障排查"><a href="#故障排查" class="headerlink" title="故障排查"></a>故障排查</h2><h3 id="1-隧道无法连接"><a href="#1-隧道无法连接" class="headerlink" title="1. 隧道无法连接"></a>1. 隧道无法连接</h3><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"><span class="comment"># Linux</span></span><br><span class="line"><span class="built_in">sudo</span> systemctl status cloudflared</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看日志</span></span><br><span class="line"><span class="built_in">sudo</span> journalctl -u cloudflared -f</span><br></pre></td></tr></table></figure><h3 id="2-502-Bad-Gateway"><a href="#2-502-Bad-Gateway" class="headerlink" title="2. 502 Bad Gateway"></a>2. 502 Bad Gateway</h3><ul><li>确认本地服务正在运行</li><li>检查配置文件中的端口是否正确</li><li>确认防火墙没有阻止本地连接</li></ul><h3 id="3-DNS-解析问题"><a href="#3-DNS-解析问题" class="headerlink" title="3. DNS 解析问题"></a>3. DNS 解析问题</h3><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"># 检查 DNS 记录</span></span><br><span class="line">nslookup blog.example.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 重新配置 DNS</span></span><br><span class="line">cloudflared tunnel route dns my-tunnel blog.example.com</span><br></pre></td></tr></table></figure><h3 id="4-证书问题"><a href="#4-证书问题" class="headerlink" title="4. 证书问题"></a>4. 证书问题</h3><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">cloudflared tunnel login</span><br><span class="line"></span><br><span class="line"><span class="comment"># 检查证书文件是否存在</span></span><br><span class="line"><span class="built_in">ls</span> ~/.cloudflared/</span><br></pre></td></tr></table></figure><h2 id="实际应用场景"><a href="#实际应用场景" class="headerlink" title="实际应用场景"></a>实际应用场景</h2><h3 id="1-个人博客部署"><a href="#1-个人博客部署" class="headerlink" title="1. 个人博客部署"></a>1. 个人博客部署</h3><p>将本地运行的 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></pre></td><td class="code"><pre><span class="line"><span class="attr">ingress:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">blog.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://localhost:4000</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">service:</span> <span class="string">http_status:404</span></span><br></pre></td></tr></table></figure><h3 id="2-开发环境分享"><a href="#2-开发环境分享" class="headerlink" title="2. 开发环境分享"></a>2. 开发环境分享</h3><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">cloudflared tunnel --url http://localhost:3000</span><br></pre></td></tr></table></figure><h3 id="3-家庭服务器"><a href="#3-家庭服务器" class="headerlink" title="3. 家庭服务器"></a>3. 家庭服务器</h3><p>将家里的 NAS、媒体服务器等暴露到公网：</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">ingress:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">nas.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://192.168.1.100:5000</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">hostname:</span> <span class="string">media.example.com</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">http://192.168.1.101:8096</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">service:</span> <span class="string">http_status:404</span></span><br></pre></td></tr></table></figure><h3 id="4-IoT-设备管理"><a href="#4-IoT-设备管理" class="headerlink" title="4. IoT 设备管理"></a>4. IoT 设备管理</h3><p>安全地访问内网的 IoT 设备管理界面。</p><h2 id="安全建议"><a href="#安全建议" class="headerlink" title="安全建议"></a>安全建议</h2><ol><li><strong>启用 Cloudflare Access</strong>：为敏感服务添加身份验证</li><li><strong>使用强密码</strong>：为本地服务设置强密码</li><li><strong>定期更新</strong>：保持 cloudflared 版本最新</li><li><strong>最小权限原则</strong>：只暴露必要的服务</li><li><strong>监控日志</strong>：定期检查访问日志</li></ol><h2 id="性能优化"><a href="#性能优化" class="headerlink" title="性能优化"></a>性能优化</h2><ol><li><strong>选择合适的数据中心</strong>：cloudflared 会自动选择最近的 Cloudflare 数据中心</li><li><strong>启用压缩</strong>：Cloudflare 会自动压缩内容</li><li><strong>使用缓存</strong>：配置适当的缓存规则</li><li><strong>HTTP&#x2F;2 支持</strong>：Cloudflare Tunnel 原生支持 HTTP&#x2F;2</li></ol><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Cloudflare Tunnel 是一个强大且免费的工具，特别适合：</p><ul><li>个人开发者快速部署项目</li><li>没有公网 IP 的家庭服务器</li><li>需要临时分享本地服务</li><li>需要安全访问内网资源</li></ul><p>通过本教程，你应该已经掌握了 Cloudflare Tunnel 的基本使用方法。现在就可以开始使用它来部署你的服务了！</p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul><li><a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/">Cloudflare Tunnel 官方文档</a></li><li><a href="https://github.com/cloudflare/cloudflared">cloudflared GitHub 仓库</a></li><li><a href="https://dash.cloudflare.com/">Cloudflare Dashboard</a></li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>2025年「且行且歌」</title>
      <link>https://ox0pine.github.io/2025/12/31/2025-year-in-review/</link>
      <description>
        <![CDATA[<p>2025 年，被我分成了两半。一半归于过去，一半赠予未来。<br>​ 上半年的关键词是“释放”。告别了长达 16 年的应试教育，我度过了最开心的一段日子。终于不用再做名为“学生”的做题机器，而是做回了名为“自己”的鲜活人类。那些曾被试卷掩盖的主体性，在没有考试的日子里重新发]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/life/">life</category>
      <category domain="https://ox0pine.github.io/tags/%E7%94%9F%E6%B4%BB/">生活</category>
      <category domain="https://ox0pine.github.io/tags/%E5%B9%B4%E5%BA%A6%E8%AE%B0%E5%BD%95/">年度记录</category>
      <pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>2025 年，被我分成了两半。一半归于过去，一半赠予未来。<br>​ 上半年的关键词是“释放”。告别了长达 16 年的应试教育，我度过了最开心的一段日子。终于不用再做名为“学生”的做题机器，而是做回了名为“自己”的鲜活人类。那些曾被试卷掩盖的主体性，在没有考试的日子里重新发芽。<br>​ 下半年的关键词是“野蛮生长”。研一的开始，意味着更广阔的旷野，也伴随着更凛冽的风。在更高的平台上，我享受着钻研热爱的自由，也对抗着同龄人带来的焦虑。但我学会了与焦虑共处，用日复一日的探索和实践，去置换内心的慌张，为未来铺垫坚实的底气。<br>如果说 2025 是分水岭，将我从既定的轨道推向旷野，那么接下来，我需要在旷野中建立自己的坐标系。野蛮生长之后，更需要理性的修剪与扎根。我深知，科研与成长皆非一日之功，那些看似枯燥的文献阅读、代码调试，正是通向真理的必经之路。<br>在新的一年里，我不求时刻处于高光之下，但求每一个脚印都清晰可见。我希望能将上半年的“快乐”与下半年的“拼搏”融合，不再将生活割裂为“忍受”与“享受”，而是在追寻热爱的过程中，真正实现内心的自洽。<br>流水不争先，争的是滔滔不绝。未来还长，我且行且歌。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>周记第三篇：考试？不要复习了哇</title>
      <link>https://ox0pine.github.io/2025/12/14/weekly-03-exams/</link>
      <description>
        <![CDATA[<p>临近期末，这周有两门考试，其中一门是考了八次还没有过的六级考试（复习不用做历年题这一块），另一门是我的一门期末课程考试。以前在六级考试之前还会复习上一两周，这次在研究生阶段的第一次参加六级考试只复习了半天，背了背作文模版，等到上考场的时候还没有用上（其实是没背下来，幽默.j]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/life/">life</category>
      <category domain="https://ox0pine.github.io/tags/%E7%94%9F%E6%B4%BB/">生活</category>
      <category domain="https://ox0pine.github.io/tags/%E5%91%A8%E8%AE%B0/">周记</category>
      <pubDate>Sun, 14 Dec 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>临近期末，这周有两门考试，其中一门是考了八次还没有过的六级考试（复习不用做历年题这一块），另一门是我的一门期末课程考试。以前在六级考试之前还会复习上一两周，这次在研究生阶段的第一次参加六级考试只复习了半天，背了背作文模版，等到上考场的时候还没有用上（其实是没背下来，幽默.jpg）。其他的部分和以前复习的情况下没什么两样，可能是这次的阅读比较简单，做选择的时候比以往更有自信。</p><p>这周一周二又去北京出差了两天，然而到测试场地我并没有起到什么实质性的作用，且因为周六日有考试而避免了周四到周日去葫芦岛出差，而且9月份的报销还没下来，已经三个月了。等月底差不多报销和入学奖学金全部到账以后，钱包里差不多有5w的存款，离给自己硕士期间定的毕业存10w的目标已经完成了一半。</p><p>这周把数字图像处理复习了一些，下周四考试之前应该还得做几套历年题目。而且不能把全部时间投入到复习当中，还应该一边做科研、一边学习Java项目，这里做一下「自我革命」，自我检讨一下。</p><p>其实，在这里写周记应该也不会有人看，只是记录一下自己，也许在几年后的某天，当我自己回顾这些文字的时候，应该还有有一些感慨在的。前段时间，购入了一个域名，用来当自己的主页， ox0pine.top，然后偶尔翻到自己在大一的时候在阿里云写的自己第一次使用服务器的记录。时间总是无情，但我的文字总会将我的思绪拉回到某个瞬间。在现在这个充满AI的数字世界，也许自己文笔不是很好，但用来记录现在却最真实。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>周记第二篇：再见了横向，我要学习！</title>
      <link>https://ox0pine.github.io/2025/11/26/weekly-02-goodbye-project/</link>
      <description>
        <![CDATA[<h1 id="项目更新"><a href="#项目更新" class="headerlink" title="项目更新"></a>项目更新</h1><h2 id="WebMonitor"><a href="#WebMonitor" class="headerlink" titl]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/life/">life</category>
      <category domain="https://ox0pine.github.io/tags/%E7%94%9F%E6%B4%BB/">生活</category>
      <category domain="https://ox0pine.github.io/tags/%E5%91%A8%E8%AE%B0/">周记</category>
      <pubDate>Wed, 26 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="项目更新"><a href="#项目更新" class="headerlink" title="项目更新"></a>项目更新</h1><h2 id="WebMonitor"><a href="#WebMonitor" class="headerlink" title="WebMonitor"></a><a href="https://github.com/ox0pine/WebMonitor">WebMonitor</a></h2><p>自从上周完成了一个初版以后，这周使用 AI 又继续更新，添加了一些小功能。</p><h3 id="一些-feature："><a href="#一些-feature：" class="headerlink" title="一些 feature："></a>一些 feature：</h3><ul><li>添加黑名单域名，处于黑名单内的域名不能被普通用户添加为监控任务。</li><li>用户在创建任务时可以将任务进行公开，公开以后别的用户可以订阅，为后续添加添加付费功能做预备。</li></ul><h3 id="TODO"><a href="#TODO" class="headerlink" title="TODO"></a>TODO</h3><ul><li>加入对 Python 脚本的支持，当脚本打印的内容变动时，也进行通知。</li></ul><h2 id="v2ray-安装脚本"><a href="#v2ray-安装脚本" class="headerlink" title="v2ray 安装脚本"></a><a href="https://github.com/ox0pine/server-scripts">v2ray 安装脚本</a></h2><h3 id="一些-fix"><a href="#一些-fix" class="headerlink" title="一些 fix"></a>一些 fix</h3><ul><li>添加自定义端口设置，避免一台服务器有多个用户使用发生端口冲突的问题。</li><li>更友好地的<code>proxy_on</code>和<code>proxy_off</code>，可以直接把代理配置从<code>～/.bashrc</code>中添加或删除。</li></ul><h1 id="又写了什么脚本"><a href="#又写了什么脚本" class="headerlink" title="又写了什么脚本"></a>又写了什么脚本</h1><p>大模型的训练数据总是停留在某年某月某日的，有时候我们需要使用的某些库已经更新了，使用方法和函数的接口已经发生了很大的变化，这时候要想让 AI 写出比较正确的代码，成为了一个比较棘手的问题。</p><p>我想出的解决方法是让 AI 把这个项目或者库的文档爬取出来整理成 md 格式供我们使用的 AI 后续查阅，能很好的降低幻觉，或者说是避免数据的过时性。比如下面这个截图是我用脚本整理出来的 gymnasium 的使用文档。</p><p><img src="/2025/11/26/weekly-02-goodbye-project/gymnasium.png" alt="gymnasium 文档"></p><h1 id="怎么安排学习"><a href="#怎么安排学习" class="headerlink" title="怎么安排学习"></a>怎么安排学习</h1><p>由于上周末刚去了北京出差（虽然什么事情也没做成，客观原因），也意味着横向可以暂时告一段落了，这周慢慢把主线拉回到科研、技术提升上面来。这周找导师讨论了下面要做的方向，给定了一个比较难的方向，不知道能不能做出来，但是还是先试试再说吧。</p><ul><li>论文阅读、实验持续进行</li><li>Java 项目学习推进</li></ul><hr><blockquote><p>萧瑟秋风今又是，换了人间。</p></blockquote><p><img src="/2025/11/26/weekly-02-goodbye-project/xidian-campus.jpg" alt="拍摄于西安电子科技大学 — 2024年11月"></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>周记第一篇：重新出发</title>
      <link>https://ox0pine.github.io/2025/11/17/weekly-01-restart/</link>
      <description>
        <![CDATA[<h1 id="建站之路：绕了一圈回到原点"><a href="#建站之路：绕了一圈回到原点" class="headerlink" title="建站之路：绕了一圈回到原点"></a>建站之路：绕了一圈回到原点</h1><p>这几年折腾过不少建站工具。大一刚开始用的是 Hexo]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/life/">life</category>
      <category domain="https://ox0pine.github.io/tags/%E7%94%9F%E6%B4%BB/">生活</category>
      <category domain="https://ox0pine.github.io/tags/%E5%91%A8%E8%AE%B0/">周记</category>
      <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="建站之路：绕了一圈回到原点"><a href="#建站之路：绕了一圈回到原点" class="headerlink" title="建站之路：绕了一圈回到原点"></a>建站之路：绕了一圈回到原点</h1><p>这几年折腾过不少建站工具。大一刚开始用的是 Hexo，但总感觉美观度不够、主题选择有限、自定义能力也受限。后来尝试过 Hugo、WordPress 等工具，可 Hugo 还需要配置服务器，WordPress 又老是提示插件不安全。</p><p>最后还是回到了 Hexo。至少可以直接部署到 GitHub Pages，不用担心安全问题，再大的流量和攻击都不怕宕机，也不用长时间购买国外 VPS（国内的 VPS 绑定域名还得备案）。重新用 HexO 搭建网站，有种熟悉的感觉。</p><hr><h1 id="本周动态"><a href="#本周动态" class="headerlink" title="本周动态"></a>本周动态</h1><h2 id="学习充电"><a href="#学习充电" class="headerlink" title="学习充电"></a>学习充电</h2><p>最近准备开始 Java 项目开发，把 Java 基础知识重新巩固了一遍。跟着 <a href="https://www.codefather.cn/course/1803988290715377665">yupi 的教程</a> 学习，教程内容很扎实，配合 Dia 浏览器的侧边栏 AI 助手，遇到不懂的地方随时提问，学习效率提升了不少。</p><h2 id="生活点滴"><a href="#生活点滴" class="headerlink" title="生活点滴"></a>生活点滴</h2><p>研究生数学建模比赛出成绩了，拿到了三等奖。说实话，比赛刚开始几天就后悔参加了，但学校规定只有成功参赛才能报销报名费，为了报名费也只能硬着头皮把代码写完，论文部分就交给队友负责了。正如陈粒歌里唱的「无所求便满载而归」，虽然三等奖不算理想的成绩，但考虑到自己投入的时间和精力有限，结果还算满意。</p><h1 id="创意清单"><a href="#创意清单" class="headerlink" title="创意清单"></a>创意清单</h1><ul><li>学习 Go 语言开发终端工具，比如一个增强版的 SSH 工具，具体功能还在构思中</li><li>重构网页变化监控项目，改为前后端分离架构，放在简历上展示<a href="https://github.com/ox0pine/WebMonitor">「已完成，项目链接」</a></li></ul><hr><h1 id="工具分享"><a href="#工具分享" class="headerlink" title="工具分享"></a>工具分享</h1><p>这周试了一下 Google 新发布的 IDE，但使用时总是出现 Error，目前还不够成熟。个人觉得这种 IDE 形式的 AI 工具有待改进，期待 Gemini CLI 能尽快用上 3 Pro 模型。</p><hr><blockquote><p>自古逢秋悲寂寥，我言秋日胜春朝。此图片拍摄于 2024 年 11 月初北京东城区地坛公园，秋意初显，天高气爽。</p></blockquote><p><img src="/2025/11/17/weekly-01-restart/ditan-park.jpg" alt="东城地坛公园 — 2024年11月"></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>读研后悔吗？</title>
      <link>https://ox0pine.github.io/2025/11/16/graduate-school-regret/</link>
      <description>
        <![CDATA[<p>作为一名典型的小镇做题家，可能也说不上小镇，应该还比这低一级，应该叫做农村做题家。</p>
<p>从小在农村长大，父母都是地地道道的农民，他们对于教育的理解很简单：读书能改变命运。这句话在我成长的二十多年里，像一道无形的光，指引着我一路向前。</p>
<p>从小学到高中，我]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/life/">life</category>
      <category domain="https://ox0pine.github.io/tags/%E7%94%9F%E6%B4%BB/">生活</category>
      <category domain="https://ox0pine.github.io/tags/%E7%A0%94%E7%A9%B6%E7%94%9F/">研究生</category>
      <pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p>作为一名典型的小镇做题家，可能也说不上小镇，应该还比这低一级，应该叫做农村做题家。</p><p>从小在农村长大，父母都是地地道道的农民，他们对于教育的理解很简单：读书能改变命运。这句话在我成长的二十多年里，像一道无形的光，指引着我一路向前。</p><p>从小学到高中，我一直是老师眼中的好学生，父母口中的骄傲。在那个教育资源相对匮乏的环境里，我只能通过一次次的考试来证明自己。高考那年，我成了村里第一个考上重点大学的本科生。还记得当时父亲激动得几天没睡好觉，逢人就说自己儿子有出息了。</p><p>大学四年，我继续延续着高中时期的学习模式。专业课成绩名列前茅，各种奖学金拿到手软，看似一路风光。但内心深处，我始终有一种不安全感——害怕落后，害怕辜负家人的期望，害怕在这个陌生的城市里没有立足之地。</p><p>大三那年，面临读研还是就业的抉择，我几乎没有犹豫就选择了考研。因为在我的认知里，更高的学历意味着更好的工作，更高的收入，更光明的前途。这或许是所有”做题家”共同的思维定式：继续做题，直到再也无题可做。</p><p>然而，真正进入研究生阶段后，我发现这个世界和我想象中的完全不一样。</p><p>研究生不再是刷题背书就能获得好成绩的阶段。科研需要的是创造力、批判性思维，以及面对挫折时的韧性。这些恰恰是我过去十几年教育中最缺乏的部分。我习惯了有标准答案的题目，习惯了按部就班完成任务，但在科研中，往往没有标准答案，甚至连问题都需要自己去发现。</p><p>刚开始的一年，我经历了前所未有的挫败感。实验屡次失败，论文被导师反复修改，同门同学一个个取得进展而我却原地踏步。我开始怀疑自己是否适合读研，怀疑自己过去十几年建立起来的”学霸”身份是不是一场骗局。</p><p>那段时间，我经常失眠，整夜整夜地思考一个简单的问题：读研后悔吗？</p><p>从理性的角度来说，我应该是不后悔的。研究生学历让我在就业市场上有更多选择，让我有机会接触更深层次的专业知识，让我结识了一群优秀的朋友和师长。但情感上，我却时常感到后悔。</p><p>我后悔的不是读研本身，而是在读研过程中失去了很多东西。我失去了那种简单纯粹的快乐，失去了对未来美好生活的憧憬，失去了面对困难时的从容淡定。我开始变得功利，开始计算每一件事情的性价比，开始用结果来评判一切。</p><p>更让我痛苦的是，我发现自己和家人的期望越来越远。在他们眼中，研究生应该是一份光鲜亮丽的身份，应该能找到待遇优渥的工作，应该能够光宗耀祖。但现实是，研究生毕业后，我依然要和本科生一样在就业市场上竞争，甚至因为年龄更大、期望更高而更加艰难。</p><p>去年寒假回家，母亲问我读研到底有什么用，能不能比本科生多挣多少钱。我一时语塞，不知道该如何回答这个问题。是告诉她研究生培养的是科研能力和思维方式，这些软实力很难用金钱衡量？还是承认在经济回报上，研究生的优势并没有想象中那么明显？</p><p>现在的我，已经渐渐接受了这种矛盾。我不再纠结于是否后悔读研，而是开始思考如何让这段经历变得有意义。或许，成长本身就是这样一个不断质疑、不断否定的过程。</p><p>回望这段读研岁月，虽然充满了迷茫和挣扎，但也让我获得了许多宝贵的财富。我学会了独立思考，学会了面对不确定性，学会了接受自己的不完美。更重要的是，我开始理解父母那一代人的局限性，也开始理解他们对我期望背后的良苦用心。</p><p>现在再有人问我读研后悔吗，我会告诉他们：说不后悔是假的，但如果再给我一次选择的机会，我还是会选择读研。不是因为学历的光环，也不是因为更好的就业前景，而是因为这段经历让我真正认识了世界，也认识了更真实的自己。</p><p>也许，这就是教育最根本的意义——不是让我们变得多么优秀，而是让我们能够勇敢地面对自己的平凡，并在平凡中找到属于自己的幸福。</p><p>作为一名曾经的农村做题家，我现在终于明白，人生不是一道道标准答案的题目，而是一篇需要自己书写的文章。这篇文章或许不会惊艳世人，但只要真诚地写完每一页，就足够了。</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>如何在服务器中快捷部署V2Ray代理</title>
      <link>https://ox0pine.github.io/2025/11/11/deploy-v2ray-on-server/</link>
      <description>
        <![CDATA[<blockquote>
<p>将科研工作的第一关由配置各种镜像源改编为配置网络环境。</p>
</blockquote>
<h1 id="V2Ray-代理安装模块"><a href="#V2Ray-代理安装模块" class="headerlink" title="V2Ray]]>
      </description>
      <author>ox0pine</author>
      <category domain="https://ox0pine.github.io/categories/tech/">tech</category>
      <category domain="https://ox0pine.github.io/tags/V2Ray/">V2Ray</category>
      <category domain="https://ox0pine.github.io/tags/%E4%BB%A3%E7%90%86/">代理</category>
      <category domain="https://ox0pine.github.io/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/">服务器</category>
      <category domain="https://ox0pine.github.io/tags/%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7/">网络工具</category>
      <category domain="https://ox0pine.github.io/tags/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%84%9A%E6%9C%AC/">自动化脚本</category>
      <pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<blockquote><p>将科研工作的第一关由配置各种镜像源改编为配置网络环境。</p></blockquote><h1 id="V2Ray-代理安装模块"><a href="#V2Ray-代理安装模块" class="headerlink" title="V2Ray 代理安装模块"></a>V2Ray 代理安装模块</h1><p>V2Ray 完整版安装脚本，无需 root 权限即可安装，支持 VMess、VLESS、Shadowsocks 协议，具备完整的服务器管理和订阅切换功能。</p><h2 id="功能特性"><a href="#功能特性" class="headerlink" title="功能特性"></a>功能特性</h2><ul><li>✅ <strong>多协议支持</strong>: VMess、VLESS、Shadowsocks</li><li>✅ <strong>智能订阅解析</strong>: 自动解析多种格式订阅链接</li><li>✅ <strong>服务器管理</strong>: 节点切换、状态监控、自动重连</li><li>✅ <strong>代理模式</strong>: 本机代理 &#x2F; 局域网共享</li><li>✅ <strong>安全认证</strong>: 支持用户名密码认证</li><li>✅ <strong>DNS 优化</strong>: 国内 DNS 优化配置</li><li>✅ <strong>智能路由</strong>: 分流规则，国内外流量智能处理</li></ul><h2 id="快速使用"><a href="#快速使用" class="headerlink" title="快速使用"></a>快速使用</h2><h3 id="步骤-1：准备工作"><a href="#步骤-1：准备工作" class="headerlink" title="步骤 1：准备工作"></a>步骤 1：准备工作</h3><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"><span class="comment"># 在本地机器上执行（确保本地有代理服务运行在10809端口，根据自己情况，设置别的端口也可以）</span></span><br><span class="line">ssh -R 10809:127.0.0.1:10809 username@your-server-ip -p ssh-port</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><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> http_proxy=http://127.0.0.1:10809</span><br><span class="line"><span class="built_in">export</span> https_proxy=http://127.0.0.1:10809</span><br></pre></td></tr></table></figure><h3 id="步骤-2：下载并运行安装脚本"><a href="#步骤-2：下载并运行安装脚本" class="headerlink" title="步骤 2：下载并运行安装脚本"></a>步骤 2：下载并运行安装脚本</h3><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"># 下载安装脚本</span></span><br><span class="line">wget https://raw.githubusercontent.com/ox0pine/server-scripts/main/proxy/linux/install_v2ray.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 给脚本执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x install_v2ray.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 运行安装脚本</span></span><br><span class="line">./install_v2ray.sh</span><br></pre></td></tr></table></figure><h3 id="步骤-3：输入订阅链接"><a href="#步骤-3：输入订阅链接" class="headerlink" title="步骤 3：输入订阅链接"></a>步骤 3：输入订阅链接</h3><p>安装过程中会提示输入 V2Ray 订阅链接：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">请输入订阅链接: https://your-subscription-url.com/link/xxxxx</span><br></pre></td></tr></table></figure><h3 id="步骤-4：选择服务器"><a href="#步骤-4：选择服务器" class="headerlink" title="步骤 4：选择服务器"></a>步骤 4：选择服务器</h3><p>脚本会自动解析订阅并显示所有可用服务器，选择一个进行连接：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">=== 所有服务器 (25) ===</span><br><span class="line">[1] 🔵 香港-VMess-01</span><br><span class="line">    VMESS - hk1.example.com:443</span><br><span class="line">[2] 🟢 美国-VLESS-02</span><br><span class="line">    VLESS - us1.example.com:443</span><br><span class="line">[3] 🟡 日本-SS-03</span><br><span class="line">    SHADOWSOCKS - jp1.example.com:8080</span><br><span class="line"></span><br><span class="line">请选择要使用的服务器 (1-25) [默认: 1]: 1</span><br></pre></td></tr></table></figure><h3 id="步骤-5：完成安装"><a href="#步骤-5：完成安装" class="headerlink" title="步骤 5：完成安装"></a>步骤 5：完成安装</h3><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"><span class="built_in">source</span> ~/.bashrc</span><br><span class="line">proxy_on</span><br><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br></pre></td></tr></table></figure><h2 id="基本管理命令"><a href="#基本管理命令" class="headerlink" title="基本管理命令"></a>基本管理命令</h2><p>安装完成后，可使用以下别名命令（需要 <code>source ~/.bashrc</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><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 服务管理</span></span><br><span class="line">v2start          <span class="comment"># 启动V2Ray</span></span><br><span class="line">v2stop           <span class="comment"># 停止V2Ray</span></span><br><span class="line">v2restart        <span class="comment"># 重启V2Ray</span></span><br><span class="line">v2status         <span class="comment"># 查看状态</span></span><br><span class="line">v2log            <span class="comment"># 查看日志</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 服务器管理</span></span><br><span class="line">v2switch         <span class="comment"># 切换服务器</span></span><br><span class="line">v2list           <span class="comment"># 列出所有服务器</span></span><br><span class="line">v2vmess          <span class="comment"># 列出VMess服务器</span></span><br><span class="line">v2vless          <span class="comment"># 列出VLESS服务器</span></span><br><span class="line">v2ss             <span class="comment"># 列出Shadowsocks服务器</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 订阅管理</span></span><br><span class="line">v2update         <span class="comment"># 更新订阅</span></span><br><span class="line">v2scan           <span class="comment"># 重新解析订阅</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 代理连接</span></span><br><span class="line">v2connect        <span class="comment"># 快速连接代理</span></span><br><span class="line">proxy_on         <span class="comment"># 开启代理</span></span><br><span class="line">proxy_off        <span class="comment"># 关闭代理</span></span><br><span class="line">proxy_status     <span class="comment"># 查看代理状态</span></span><br></pre></td></tr></table></figure><h2 id="配置说明"><a href="#配置说明" class="headerlink" title="配置说明"></a>配置说明</h2><h3 id="代理端口配置"><a href="#代理端口配置" class="headerlink" title="代理端口配置"></a>代理端口配置</h3><table><thead><tr><th>代理类型</th><th>端口</th><th>用途</th></tr></thead><tbody><tr><td>SOCKS5</td><td>1080</td><td>通用代理协议</td></tr><tr><td>HTTP</td><td>8080</td><td>HTTP 代理协议</td></tr></tbody></table><h3 id="DNS-配置"><a href="#DNS-配置" class="headerlink" title="DNS 配置"></a>DNS 配置</h3><ul><li><strong>国内 DNS</strong>: 223.5.5.5 (阿里云)</li><li><strong>备用 DNS</strong>: 114.114.114.114</li><li><strong>国外 DNS</strong>: 8.8.8.8 (Google)</li><li><strong>分流规则</strong>: 国内外流量智能分流</li></ul><h3 id="路由规则"><a href="#路由规则" class="headerlink" title="路由规则"></a>路由规则</h3><ul><li><strong>直连</strong>: 私有 IP、国内 IP、国内域名</li><li><strong>代理</strong>: 国外 IP 和域名</li><li><strong>策略</strong>: IPOnDemand 智能选择</li></ul><h2 id="文件结构"><a href="#文件结构" class="headerlink" title="文件结构"></a>文件结构</h2><p>安装完成后，V2Ray 的工作目录位于 <code>~/v2ray/</code>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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></pre></td><td class="code"><pre><span class="line">~/v2ray/</span><br><span class="line">├── v2ray                    # V2Ray 主程序</span><br><span class="line">├── config.json              # 当前配置文件</span><br><span class="line">├── servers_all.json         # 所有服务器配置</span><br><span class="line">├── subscription.txt         # 原始订阅内容</span><br><span class="line">├── subscription_url.txt     # 订阅链接</span><br><span class="line">├── v2ray.log                # 运行日志</span><br><span class="line">├── v2ray.pid                # 进程PID文件</span><br><span class="line">├── full_parser.py           # 订阅解析脚本</span><br><span class="line">├── server_manager.py        # 服务器管理脚本</span><br><span class="line">├── start.sh                 # 启动脚本</span><br><span class="line">├── stop.sh                  # 停止脚本</span><br><span class="line">├── restart.sh               # 重启脚本</span><br><span class="line">├── status.sh                # 状态脚本</span><br><span class="line">├── switch.sh                # 切换脚本</span><br><span class="line">├── update.sh                # 更新脚本</span><br><span class="line">└── connect.sh               # 连接脚本</span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-如何更换订阅链接？"><a href="#Q-如何更换订阅链接？" class="headerlink" title="Q: 如何更换订阅链接？"></a>Q: 如何更换订阅链接？</h3><p>A: 运行 <code>v2update</code> 命令，选择输入新的订阅链接即可。</p><h3 id="Q-如何切换到其他服务器？"><a href="#Q-如何切换到其他服务器？" class="headerlink" title="Q: 如何切换到其他服务器？"></a>Q: 如何切换到其他服务器？</h3><p>A: 运行 <code>v2switch</code> 命令，选择要切换的服务器编号。</p><h3 id="Q-局域网其他设备如何连接？"><a href="#Q-局域网其他设备如何连接？" class="headerlink" title="Q: 局域网其他设备如何连接？"></a>Q: 局域网其他设备如何连接？</h3><p>A: 确保选择局域网共享模式，使用以下地址：</p><ul><li>SOCKS5: <code>socks5://用户名:密码@服务器IP:1080</code></li><li>HTTP: <code>http://用户名:密码@服务器IP:8080</code></li></ul><h3 id="Q-如何查看当前使用的服务器？"><a href="#Q-如何查看当前使用的服务器？" class="headerlink" title="Q: 如何查看当前使用的服务器？"></a>Q: 如何查看当前使用的服务器？</h3><p>A: 运行 <code>v2status</code> 命令，会显示当前服务器信息。</p><h3 id="Q-连接失败怎么办？"><a href="#Q-连接失败怎么办？" class="headerlink" title="Q: 连接失败怎么办？"></a>Q: 连接失败怎么办？</h3><p>A:</p><ol><li>检查 <code>v2status</code> 确认服务运行状态</li><li>查看 <code>v2log</code> 检查错误日志</li><li>尝试 <code>v2switch</code> 切换其他服务器</li><li>运行 <code>v2update</code> 更新订阅</li></ol><h2 id="更新日志"><a href="#更新日志" class="headerlink" title="更新日志"></a>更新日志</h2><h3 id="v3-0"><a href="#v3-0" class="headerlink" title="v3.0"></a>v3.0</h3><ul><li>新增 VLESS 协议支持</li><li>优化订阅解析算法</li><li>改进服务器管理界面</li><li>增强错误处理机制</li><li>添加连接测试功能</li></ul><h3 id="v2-0"><a href="#v2-0" class="headerlink" title="v2.0"></a>v2.0</h3><ul><li>重构配置生成逻辑</li><li>支持局域网共享模式</li><li>添加用户认证功能</li><li>优化 DNS 配置</li></ul><h3 id="v1-0"><a href="#v1-0" class="headerlink" title="v1.0"></a>v1.0</h3><ul><li>基础 VMess 支持</li><li>简单订阅解析</li><li>基本服务器切换</li></ul><h2 id="技术支持"><a href="#技术支持" class="headerlink" title="技术支持"></a>技术支持</h2><p>如遇到问题，请：</p><ol><li>查看本文档的常见问题部分</li><li>检查日志文件 <code>~/v2ray/v2ray.log</code></li><li>提交 Issue 到项目仓库</li></ol><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><strong>完整脚本仓库</strong>: <a href="https://github.com/ox0pine/server-scripts">https://github.com/ox0pine/server-scripts</a></li><li><strong>V2Ray 官方文档</strong>: <a href="https://www.v2fly.org/">https://www.v2fly.org/</a></li></ul><hr><p><strong>注意</strong>: 本脚本仅用于学习和研究目的，请遵守当地法律法规。</p>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
