<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>guide</id>
    <title>VPS.Town 教程中心</title>
    <updated>2026-10-06T10:19:46.626Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.vps.town/"/>
    <subtitle>VPS.Town 官方教程中心 - 帮助您更好地使用我们的服务。</subtitle>
    <icon>https://docs.vps.town/logo.png</icon>
    <rights>© 2026 VPS.Town 2.1.0 - All Rights Reserved</rights>
    <entry>
        <title type="html"><![CDATA[iPerf3 分布式网络测试工具全攻略：从安装到进阶监控]]></title>
        <id>/guide/iperf3-distributed-network-test-tool</id>
        <link href="https://docs.vps.town/guide/iperf3-distributed-network-test-tool"/>
        <updated>2026-01-20T02:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文将详解如何部署 iPerf3 分布式网络测试工具。该方案采用 Master/Agent 架构，支持一键安装、现代化仪表盘、三网延迟监控、地铁图风格路由追踪及 Telegram 告警推送，是多节点网络性能管理的高效解决方案。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="iperf3-分布式网络测试工具全攻略从安装到进阶监控"><a href="#iperf3-分布式网络测试工具全攻略从安装到进阶监控" class="rp-header-anchor rp-link" aria-hidden="true">#</a>iPerf3 分布式网络测试工具全攻略：从安装到进阶监控<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#项目简介" class="rp-toc-item rp-link" title="项目简介" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">项目简介</span></a><a href="#核心亮点" class="rp-toc-item rp-link" title="核心亮点" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">核心亮点</span></a><a href="#系统架构" class="rp-toc-item rp-link" title="系统架构" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">系统架构</span></a><a href="#组件技术栈" class="rp-toc-item rp-link" title="组件技术栈" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">组件技术栈</span></a><a href="#环境准备" class="rp-toc-item rp-link" title="环境准备" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">环境准备</span></a><a href="#系统要求" class="rp-toc-item rp-link" title="系统要求" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">系统要求</span></a><a href="#网络端口" class="rp-toc-item rp-link" title="网络端口" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">网络端口</span></a><a href="#快速部署" class="rp-toc-item rp-link" title="快速部署" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">快速部署</span></a><a href="#安装主控节点-master" class="rp-toc-item rp-link" title="安装主控节点 (Master)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装主控节点 (Master)</span></a><a href="#安装代理节点-agent" class="rp-toc-item rp-link" title="安装代理节点 (Agent)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装代理节点 (Agent)</span></a><a href="#核心功能详解" class="rp-toc-item rp-link" title="核心功能详解" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">核心功能详解</span></a><a href="#节点监控仪表盘" class="rp-toc-item rp-link" title="节点监控仪表盘" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">节点监控仪表盘</span></a><a href="#可视化路由追踪-metro-line" class="rp-toc-item rp-link" title="可视化路由追踪 (Metro-line)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">可视化路由追踪 (Metro-line)</span></a><a href="#定时任务调度" class="rp-toc-item rp-link" title="定时任务调度" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">定时任务调度</span></a><a href="#telegram-智能通知" class="rp-toc-item rp-link" title="Telegram 智能通知" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Telegram 智能通知</span></a><a href="#配置参考" class="rp-toc-item rp-link" title="配置参考" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">配置参考</span></a><a href="#环境变量" class="rp-toc-item rp-link" title="环境变量" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">环境变量</span></a><a href="#docker-compose-示例" class="rp-toc-item rp-link" title="Docker Compose 示例" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Docker Compose 示例</span></a><a href="#api-接口一览" class="rp-toc-item rp-link" title="API 接口一览" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">API 接口一览</span></a><a href="#核心接口" class="rp-toc-item rp-link" title="核心接口" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">核心接口</span></a><a href="#路由追踪接口" class="rp-toc-item rp-link" title="路由追踪接口" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">路由追踪接口</span></a><a href="#telegram-配置接口" class="rp-toc-item rp-link" title="Telegram 配置接口" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Telegram 配置接口</span></a><a href="#更新与维护" class="rp-toc-item rp-link" title="更新与维护" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">更新与维护</span></a><a href="#常规版本升级" class="rp-toc-item rp-link" title="常规版本升级" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">常规版本升级</span></a><a href="#agent-自动更新" class="rp-toc-item rp-link" title="Agent 自动更新" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Agent 自动更新</span></a><a href="#故障排查" class="rp-toc-item rp-link" title="故障排查" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">故障排查</span></a><a href="#常见问题速查表" class="rp-toc-item rp-link" title="常见问题速查表" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">常见问题速查表</span></a><a href="#密码重置命令" class="rp-toc-item rp-link" title="密码重置命令" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">密码重置命令</span></a><a href="#强制重建容器" class="rp-toc-item rp-link" title="强制重建容器" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">强制重建容器</span></a><a href="#结语" class="rp-toc-item rp-link" title="结语" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">结语</span></a><a href="#参考链接" class="rp-toc-item rp-link" title="参考链接" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">参考链接</span></a></div></details>
<h2 class="rp-toc-include" id="项目简介"><a href="#项目简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>项目简介</h2>
<p><strong>iPerf3 分布式网络测试工具</strong> 是一款基于 Python 开发的轻量级分布式网络监控套件。它通过 <strong>Master（主控）</strong> 与 <strong>Agent（代理）</strong> 的协同配合，实现了跨节点的带宽测试（iPerf3）、延迟监控（Ping）和路由追踪（Traceroute）可视化分析。</p>
<h3 class="rp-toc-include" id="核心亮点"><a href="#核心亮点" class="rp-header-anchor rp-link" aria-hidden="true">#</a>核心亮点</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>功能</th><th>说明</th></tr></thead><tbody><tr><td>🚀 <strong>一键安装更新</strong></td><td>单条命令完成安装和版本更新，自动检测差异并增量升级</td></tr><tr><td>📊 <strong>现代化仪表盘</strong></td><td>商业级 UI 设计，实时监控节点状态、三网延迟、流媒体解锁</td></tr><tr><td>⏰ <strong>定时任务调度</strong></td><td>周期性自动测试，生成带宽趋势图表和流量统计报告</td></tr><tr><td>🛤️ <strong>Metro 路由追踪</strong></td><td>地铁线路图风格可视化、AS 路径分析、路由变化智能告警</td></tr><tr><td>📈 <strong>Ping 趋势监控</strong></td><td>实时延迟波动监测，Sparkline 迷你图 + 趋势箭头直观展示</td></tr><tr><td>🎬 <strong>流媒体检测</strong></td><td>Netflix、Disney+、ChatGPT 等服务解锁状态自动识别</td></tr><tr><td>🤖 <strong>Telegram 通知</strong></td><td>路由变化、任务失败、节点离线等事件实时推送</td></tr><tr><td>🔐 <strong>IP 白名单保护</strong></td><td>防止 iPerf3 服务被恶意滥用</td></tr></tbody></table></div>
<hr/>
<h2 class="rp-toc-include" id="系统架构"><a href="#系统架构" class="rp-header-anchor rp-link" aria-hidden="true">#</a>系统架构</h2>
<p>项目采用解耦的分布式架构设计。主控节点负责数据持久化、任务调度与 Web 展示；代理节点则专注于执行网络探测任务并回传结果。</p>
<div></div>
<h3 class="rp-toc-include" id="组件技术栈"><a href="#组件技术栈" class="rp-header-anchor rp-link" aria-hidden="true">#</a>组件技术栈</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>组件</th><th>技术栈</th><th>核心职责</th></tr></thead><tbody><tr><td><strong>Master API</strong></td><td>FastAPI + PostgreSQL + Redis</td><td>REST API、Web 面板、调度器、缓存管理</td></tr><tr><td><strong>Agent</strong></td><td>Flask + iPerf3 + MTR</td><td>执行网络测试、路由追踪、流媒体检测、IP 过滤</td></tr><tr><td><strong>Scheduler</strong></td><td>APScheduler</td><td>定时 iPerf3 测试任务和 Traceroute 监控任务</td></tr></tbody></table></div>
<hr/>
<h2 class="rp-toc-include" id="环境准备"><a href="#环境准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>环境准备</h2>
<p>在开始部署前，请确保您的服务器满足以下条件：</p>
<h3 class="rp-toc-include" id="系统要求"><a href="#系统要求" class="rp-header-anchor rp-link" aria-hidden="true">#</a>系统要求</h3>
<ul>
<li><strong>操作系统</strong>：Ubuntu 20.04+、Debian 11+、CentOS 7+ 或其他主流 Linux 发行版</li>
<li><strong>硬件配置</strong>：至少 1 核 CPU / 512MB 内存（建议 2 核 / 1GB 以获得更好体验）</li>
<li><strong>基础依赖</strong>：已安装 Docker、Docker Compose 和 Git</li>
</ul>
<h3 class="rp-toc-include" id="网络端口"><a href="#网络端口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>网络端口</h3>
<p>请确保以下端口在防火墙和安全组中已开放：</p>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>端口</th><th>协议</th><th>用途</th></tr></thead><tbody><tr><td>9000</td><td>TCP</td><td>Master API 接口</td></tr><tr><td>9100</td><td>TCP</td><td>Web 仪表盘面板</td></tr><tr><td>8000</td><td>TCP</td><td>Agent API 接口</td></tr><tr><td>62001</td><td>TCP/UDP</td><td>iPerf3 默认测试端口</td></tr></tbody></table></div>
<hr/>
<h2 class="rp-toc-include" id="快速部署"><a href="#快速部署" class="rp-header-anchor rp-link" aria-hidden="true">#</a>快速部署</h2>
<h3 class="rp-toc-include" id="安装主控节点-master"><a href="#安装主控节点-master" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装主控节点 (Master)</h3>
<p>主控节点包含数据库、缓存和管理后台，是整个系统的核心枢纽。</p>
<p><strong>步骤 1</strong>：克隆项目仓库</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> clone</span><span style="color:var(--shiki-token-string)"> https://github.com/podcctv/iperf3-test-tools.git</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> iperf3-test-tools</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><strong>步骤 2</strong>：执行一键安装脚本</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> ./update_iperf3_master.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>安装过程中，脚本会自动完成以下工作：</p>
<ul>
<li>拉取并构建 Docker 镜像</li>
<li>初始化 PostgreSQL 数据库</li>
<li>生成随机管理员密码</li>
<li>启动所有服务容器</li>
</ul>
<p><strong>步骤 3</strong>：访问仪表盘</p>
<p>安装完成后，访问以下地址进入管理面板：</p>
<div class="rp-codeblock language-text"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="text"><code><span class="line"><span>http://&lt;服务器 IP&gt;:9100/web</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>
首次启动时，系统会在终端输出自动生成的管理员密码，请妥善保存。如果忘记密码，可通过命令重置（见故障排查章节）。</p></div></div>
<h3 class="rp-toc-include" id="安装代理节点-agent"><a href="#安装代理节点-agent" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装代理节点 (Agent)</h3>
<p>代理节点只需运行一条脚本即可完成自动注册。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/podcctv/iperf3-test-tools/main/install_agent.sh</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> --</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --master-url</span><span style="color:var(--shiki-token-string)"> http://</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">Master-I</span><span style="color:var(--shiki-foreground)">P</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)">:9000</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --node-name</span><span style="color:var(--shiki-token-string-expression)"> &quot;香港 BGP 节点&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><strong>参数说明</strong>：</p>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td><code>--master-url</code></td><td>主控节点 API 地址（格式：<code>http://IP:9000</code>）</td></tr><tr><td><code>--node-name</code></td><td>节点显示名称（支持中文，建议包含地区信息）</td></tr></tbody></table></div>
<p>安装完成后，新节点会自动出现在主控仪表盘的节点列表中。</p>
<hr/>
<h2 class="rp-toc-include" id="核心功能详解"><a href="#核心功能详解" class="rp-header-anchor rp-link" aria-hidden="true">#</a>核心功能详解</h2>
<h3 class="rp-toc-include" id="节点监控仪表盘"><a href="#节点监控仪表盘" class="rp-header-anchor rp-link" aria-hidden="true">#</a>节点监控仪表盘</h3>
<p>仪表盘首页提供全方位的节点状态概览：</p>
<ul>
<li><strong>节点状态卡片</strong>：实时显示在线/离线状态，在线节点有呼吸动效</li>
<li><strong>三网延迟</strong>：同时监测电信、联通、移动三大运营商的连接延迟</li>
<li><strong>Ping 趋势图</strong>：通过 Sparkline 迷你图展示 24 小时延迟波动曲线</li>
<li><strong>流媒体检测徽章</strong>：自动识别 Netflix、Disney+、ChatGPT 等服务的解锁状态，并显示区域角标（如 HK / US / SG）</li>
</ul>
<h3 class="rp-toc-include" id="可视化路由追踪-metro-line"><a href="#可视化路由追踪-metro-line" class="rp-header-anchor rp-link" aria-hidden="true">#</a>可视化路由追踪 (Metro-line)</h3>
<p>该工具将复杂的 Traceroute 数据转化为类似&quot;地铁线路图&quot;的可视化界面：</p>
<div></div>
<p><strong>核心功能</strong>：</p>
<ul>
<li><strong>AS 路径分析</strong>：清晰展示数据包经过的自治系统（AS 编号及名称）</li>
<li><strong>延迟胶囊徽章</strong>：根据延迟自动着色（绿色 &lt; 50ms / 黄色 &lt; 150ms / 红色 &gt; 150ms）</li>
<li><strong>ISP/IX 徽章识别</strong>：自动识别 CN2、9929、NTT 等优质线路</li>
<li><strong>智能变化告警</strong>：当路由节点发生变化时，系统通过 Telegram 推送高亮对比差异</li>
</ul>
<h3 class="rp-toc-include" id="定时任务调度"><a href="#定时任务调度" class="rp-header-anchor rp-link" aria-hidden="true">#</a>定时任务调度</h3>
<p>您可以设置周期性的 iPerf3 测试任务，系统将自动记录并分析：</p>
<ul>
<li><strong>上下行带宽</strong>：支持 TCP / UDP 双模式测试</li>
<li><strong>并行连接数</strong>：可配置同时建立的连接数量</li>
<li><strong>趋势图表</strong>：24 小时内的带宽波动曲线</li>
<li><strong>流量统计</strong>：展示节点日消耗流量，适合管理有流量配额的 VPS</li>
</ul>
<h3 class="rp-toc-include" id="telegram-智能通知"><a href="#telegram-智能通知" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Telegram 智能通知</h3>
<p>配置 Telegram Bot 后，系统可自动推送以下事件：</p>
<ul>
<li>📡 路由变化告警（附带跳点差异对比）</li>
<li>⚠️ 定时任务执行失败通知</li>
<li>🔴 节点离线告警</li>
</ul>
<hr/>
<h2 class="rp-toc-include" id="配置参考"><a href="#配置参考" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置参考</h2>
<h3 class="rp-toc-include" id="环境变量"><a href="#环境变量" class="rp-header-anchor rp-link" aria-hidden="true">#</a>环境变量</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>变量名</th><th>说明</th><th>默认值</th></tr></thead><tbody><tr><td><code>DATABASE_URL</code></td><td>PostgreSQL 连接字符串</td><td><code>postgresql://iperf:iperf_pass@db:5432/iperf_db</code></td></tr><tr><td><code>REDIS_URL</code></td><td>Redis 连接字符串</td><td><code>redis://redis:6379</code></td></tr><tr><td><code>DASHBOARD_PASSWORD</code></td><td>仪表盘管理密码</td><td>首次启动自动生成</td></tr><tr><td><code>MASTER_API_PORT</code></td><td>Master API 端口</td><td><code>9000</code></td></tr><tr><td><code>MASTER_WEB_PORT</code></td><td>Web 面板端口</td><td><code>9100</code></td></tr></tbody></table></div>
<h3 class="rp-toc-include" id="docker-compose-示例"><a href="#docker-compose-示例" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Docker Compose 示例</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-comment)"># docker-compose.yml</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  master-api</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    build</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ./master-api</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;9000:9000&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    depends_on</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">db</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">redis</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">DATABASE_URL=postgresql://iperf:iperf_pass@db:5432/iperf_db</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">REDIS_URL=redis://redis:6379</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  db</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> postgres:15-alpine</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      POSTGRES_USER</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> iperf</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      POSTGRES_PASSWORD</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> iperf_pass</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      POSTGRES_DB</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> iperf_db</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  redis</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> redis:7-alpine</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<hr/>
<h2 class="rp-toc-include" id="api-接口一览"><a href="#api-接口一览" class="rp-header-anchor rp-link" aria-hidden="true">#</a>API 接口一览</h2>
<h3 class="rp-toc-include" id="核心接口"><a href="#核心接口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>核心接口</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>方法</th><th>路径</th><th>说明</th></tr></thead><tbody><tr><td>GET</td><td><code>/nodes</code></td><td>获取所有已注册节点</td></tr><tr><td>POST</td><td><code>/nodes</code></td><td>注册新节点</td></tr><tr><td>GET</td><td><code>/nodes/{id}/ping-history</code></td><td>获取节点 Ping 历史数据</td></tr><tr><td>POST</td><td><code>/tests</code></td><td>执行即时测试任务</td></tr><tr><td>GET/POST</td><td><code>/schedules</code></td><td>定时任务 CRUD 管理</td></tr></tbody></table></div>
<h3 class="rp-toc-include" id="路由追踪接口"><a href="#路由追踪接口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>路由追踪接口</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>方法</th><th>路径</th><th>说明</th></tr></thead><tbody><tr><td>POST</td><td><code>/api/trace/run</code></td><td>执行即时 Traceroute</td></tr><tr><td>GET</td><td><code>/api/trace/schedules</code></td><td>获取追踪定时任务列表</td></tr><tr><td>GET</td><td><code>/api/trace/results</code></td><td>获取历史追踪结果</td></tr></tbody></table></div>
<h3 class="rp-toc-include" id="telegram-配置接口"><a href="#telegram-配置接口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Telegram 配置接口</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>方法</th><th>路径</th><th>说明</th></tr></thead><tbody><tr><td>GET</td><td><code>/admin/telegram</code></td><td>获取当前 Telegram 配置</td></tr><tr><td>POST</td><td><code>/admin/telegram</code></td><td>保存 Telegram Bot 配置</td></tr><tr><td>POST</td><td><code>/admin/telegram/test</code></td><td>发送测试消息验证配置</td></tr></tbody></table></div>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">API 文档</div><div class="rp-callout__content"><p>
完整的 API 交互式文档可访问 <code>http://&lt;服务器 IP&gt;:9000/docs</code> 查看（基于 Swagger UI）。</p></div></div>
<hr/>
<h2 class="rp-toc-include" id="更新与维护"><a href="#更新与维护" class="rp-header-anchor rp-link" aria-hidden="true">#</a>更新与维护</h2>
<h3 class="rp-toc-include" id="常规版本升级"><a href="#常规版本升级" class="rp-header-anchor rp-link" aria-hidden="true">#</a>常规版本升级</h3>
<p>在 Master 节点执行以下命令进行版本升级：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> iperf3-test-tools</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">git</span><span style="color:var(--shiki-token-string)"> pull</span><span style="color:var(--shiki-token-string)"> origin</span><span style="color:var(--shiki-token-string)"> main</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> build</span><span style="color:var(--shiki-token-string)"> --no-cache</span><span style="color:var(--shiki-token-string)"> master-api</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="agent-自动更新"><a href="#agent-自动更新" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Agent 自动更新</h3>
<p>Agent 节点支持 Watchdog 自动更新机制。运行以下脚本开启自动同步：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/podcctv/iperf3-test-tools/main/setup-agent-autoupdate.sh</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> bash</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>启用后，当 Master 版本升级时，Agent 会自动检测并完成更新。</p>
<hr/>
<h2 class="rp-toc-include" id="故障排查"><a href="#故障排查" class="rp-header-anchor rp-link" aria-hidden="true">#</a>故障排查</h2>
<h3 class="rp-toc-include" id="常见问题速查表"><a href="#常见问题速查表" class="rp-header-anchor rp-link" aria-hidden="true">#</a>常见问题速查表</h3>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th style="text-align:left">问题现象</th><th style="text-align:left">可能原因</th><th style="text-align:left">解决方法</th></tr></thead><tbody><tr><td style="text-align:left"><strong>容器无法启动</strong></td><td style="text-align:left">端口冲突或依赖服务未就绪</td><td style="text-align:left">执行 <code>docker logs iperf3-test-tools-master-api-1</code> 查看日志</td></tr><tr><td style="text-align:left"><strong>Agent 显示离线</strong></td><td style="text-align:left">防火墙拦截 8000 端口</td><td style="text-align:left">执行 <code>ufw allow 8000/tcp</code> 并验证 <code>curl &lt;Agent-IP&gt;:8000/health</code></td></tr><tr><td style="text-align:left"><strong>iPerf3 测试失败</strong></td><td style="text-align:left">62001 端口未开放</td><td style="text-align:left">在安全组中开放 TCP/UDP 62001 端口</td></tr><tr><td style="text-align:left"><strong>忘记面板密码</strong></td><td style="text-align:left">初始密码未保存</td><td style="text-align:left">执行密码重置命令（见下方）</td></tr></tbody></table></div>
<h3 class="rp-toc-include" id="密码重置命令"><a href="#密码重置命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>密码重置命令</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> exec</span><span style="color:var(--shiki-token-string)"> master-api</span><span style="color:var(--shiki-token-string)"> python</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-string)"> app.auth</span><span style="color:var(--shiki-token-string)"> --set-password</span><span style="color:var(--shiki-token-string-expression)"> &#x27;YourNewPassword&#x27;</span><span style="color:var(--shiki-token-string)"> --force</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="强制重建容器"><a href="#强制重建容器" class="rp-header-anchor rp-link" aria-hidden="true">#</a>强制重建容器</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> down</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --build</span><span style="color:var(--shiki-token-string)"> --force-recreate</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<hr/>
<h2 class="rp-toc-include" id="结语"><a href="#结语" class="rp-header-anchor rp-link" aria-hidden="true">#</a>结语</h2>
<p>iPerf3 分布式网络测试工具通过极简的部署流程和强大的可视化分析能力，为多机房网络性能管理提供了高效的解决方案。无论是日常的带宽监控、路由追踪分析，还是跨节点的网络质量对比，该工具都能满足您的需求。</p>
<p>如有任何问题或建议，欢迎前往 <a href="https://github.com/podcctv/iperf3-test-tools" target="_blank" rel="noopener noreferrer" class="rp-link">GitHub 仓库</a> 提交 Issue 或参与贡献！</p>
<hr/>
<h2 class="rp-toc-include" id="参考链接"><a href="#参考链接" class="rp-header-anchor rp-link" aria-hidden="true">#</a>参考链接</h2>
<ul>
<li><a href="https://github.com/podcctv/iperf3-test-tools" target="_blank" rel="noopener noreferrer" class="rp-link">GitHub 仓库</a></li>
<li>在线 API 文档：部署完成后访问 <code>http://your-ip:9000/docs</code></li>
<li><a href="https://github.com/podcctv/iperf3-test-tools/issues" target="_blank" rel="noopener noreferrer" class="rp-link">问题反馈</a></li>
</ul><!--/$-->]]></content>
        <category label="network-diagnostics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[PVE 安装切 KVM 虚拟机以及基于 NAT 实现独立双栈 IP]]></title>
        <id>/guide/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6</id>
        <link href="https://docs.vps.town/guide/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6"/>
        <updated>2025-12-07T20:45:00.000Z</updated>
        <summary type="html"><![CDATA[从零搭建 PVE 虚拟化环境：用 DD 脚本重装 Debian 12，一键部署 PVE 并配置 NAT 或独立 IP 网络，讲解 KVM 虚拟机创建、Cloud-Init 初始化、独立 IPv6 设置与端口转发。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="pve-安装切-kvm-虚拟机以及基于-nat-实现独立双栈-ip"><a href="#pve-安装切-kvm-虚拟机以及基于-nat-实现独立双栈-ip" class="rp-header-anchor rp-link" aria-hidden="true">#</a>PVE 安装切 KVM 虚拟机以及基于 NAT 实现独立双栈 IP<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>灰机喵喵喵</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 格式审核，投稿内容真实性由原作者负责。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#准备" class="rp-toc-item rp-link" title="准备" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备</span></a><a href="#安装-pve" class="rp-toc-item rp-link" title="安装 PVE" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">安装 PVE</span></a><a href="#dd-重装系统" class="rp-toc-item rp-link" title="DD 重装系统" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">DD 重装系统</span></a><a href="#安装基本包" class="rp-toc-item rp-link" title="安装基本包" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装基本包</span></a><a href="#安装-pve-1" class="rp-toc-item rp-link" title="安装 PVE" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装 PVE</span></a><a href="#配置-pve-宿主机的网络" class="rp-toc-item rp-link" title="配置 PVE 宿主机的网络" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">配置 PVE 宿主机的网络</span></a><a href="#分-kvm-虚拟机" class="rp-toc-item rp-link" title="分 KVM 虚拟机" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">分 KVM 虚拟机</span></a><a href="#给-kvm-虚拟机添加独立-ipv6" class="rp-toc-item rp-link" title="给 KVM 虚拟机添加独立 IPV6" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">给 KVM 虚拟机添加独立 IPV6</span></a><a href="#开启-root-密码登录" class="rp-toc-item rp-link" title="开启 ROOT 密码登录" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">开启 ROOT 密码登录</span></a><a href="#nat-端口转发" class="rp-toc-item rp-link" title="NAT 端口转发" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">NAT 端口转发</span></a></div></details>
<h2 class="rp-toc-include" id="准备"><a href="#准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备</h2>
<ul>
<li>大鸡一台</li>
<li>一个人</li>
<li>一双手</li>
<li>一键盘</li>
</ul>
<h2 class="rp-toc-include" id="安装-pve"><a href="#安装-pve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装 PVE</h2>
<h3 class="rp-toc-include" id="dd-重装系统"><a href="#dd-重装系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>DD 重装系统</h3>
<p>首先，进入 SSH，重装一下系统，这里使用 <a href="https://github.com/bin456789/reinstall" target="_blank" rel="noopener noreferrer" class="rp-link">bin456789/reinstall</a> 的 DD 重装脚本。</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh</span><span style="color:var(--shiki-token-keyword)"> ||</span><span style="color:var(--shiki-token-function)"> wget</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-foreground)"> ${_</span><span style="color:var(--shiki-token-keyword)">##*/</span><span style="color:var(--shiki-foreground)">} $_</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-token-string)"> debian</span><span style="color:var(--shiki-token-constant)"> 12</span><span style="color:var(--shiki-token-string)"> --password</span><span style="color:var(--shiki-token-string)"> 这里填写你的root密码</span><span style="color:var(--shiki-token-string)"> --ssh-key</span><span style="color:var(--shiki-token-string-expression)"> &quot;这里填写你的ssh公钥ID (没有可不填)&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">注意</div><div class="rp-callout__content"><p>安装<code>PVE8</code>必须是<code>Debian12</code>，如果要装<code>PVE9</code>，则需要<code>Debian13</code>。</p></div></div>
<h3 class="rp-toc-include" id="安装基本包"><a href="#安装基本包" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装基本包</h3>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> sudo</span><span style="color:var(--shiki-token-string)"> wget</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="安装-pve-1"><a href="#安装-pve-1" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装 PVE</h3>
<ol>
<li>使用<code>oneclickvirt</code>的<code>install_pve.sh</code>一键安装 PVE 脚本</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> install_pve.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> install_pve.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> install_pve.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="2">
<li>安装直到显示以下对话：</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">Please</span><span style="color:var(--shiki-token-string)"> execute</span><span style="color:var(--shiki-token-string)"> reboot</span><span style="color:var(--shiki-token-string)"> to</span><span style="color:var(--shiki-token-string)"> reboot</span><span style="color:var(--shiki-token-string)"> the</span><span style="color:var(--shiki-token-string)"> system</span><span style="color:var(--shiki-token-string)"> and</span><span style="color:var(--shiki-token-string)"> then</span><span style="color:var(--shiki-token-string)"> execute</span><span style="color:var(--shiki-token-string)"> this</span><span style="color:var(--shiki-token-string)"> script</span><span style="color:var(--shiki-token-string)"> again</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Please</span><span style="color:var(--shiki-token-string)"> wait</span><span style="color:var(--shiki-token-string)"> for</span><span style="color:var(--shiki-token-string)"> at</span><span style="color:var(--shiki-token-string)"> least</span><span style="color:var(--shiki-token-constant)"> 20</span><span style="color:var(--shiki-token-string)"> seconds</span><span style="color:var(--shiki-token-string)"> without</span><span style="color:var(--shiki-token-string)"> automatically</span><span style="color:var(--shiki-token-string)"> rebooting</span><span style="color:var(--shiki-token-string)"> the</span><span style="color:var(--shiki-token-string)"> system</span><span style="color:var(--shiki-token-string)"> before</span><span style="color:var(--shiki-token-string)"> executing</span><span style="color:var(--shiki-token-string)"> this</span><span style="color:var(--shiki-token-string)"> script.</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">请执行</span><span style="color:var(--shiki-token-string)"> reboot</span><span style="color:var(--shiki-token-string)"> 重启系统后再次执行本脚本，再次使用SSH登录后请等待至少20秒未自动重启系统再执行本脚本</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="3">
<li>如文本所示，这时候只需要<code>reboot</code>重启，然后再次连接等待 20s 后再执行一次脚本</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> install_pve.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="4">
<li>然后会要求输入新主机名字：</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">Please</span><span style="color:var(--shiki-token-string)"> enter</span><span style="color:var(--shiki-token-string)"> a</span><span style="color:var(--shiki-token-string)"> new</span><span style="color:var(--shiki-token-string)"> host</span><span style="color:var(--shiki-token-string)"> name</span><span style="color:var(--shiki-foreground)"> (can </span><span style="color:var(--shiki-token-string)">only</span><span style="color:var(--shiki-token-string)"> contain</span><span style="color:var(--shiki-token-string)"> English</span><span style="color:var(--shiki-token-string)"> letters</span><span style="color:var(--shiki-token-string)"> and</span><span style="color:var(--shiki-token-string)"> numbers,</span><span style="color:var(--shiki-token-string)"> not</span><span style="color:var(--shiki-token-string)"> pure</span><span style="color:var(--shiki-token-string)"> numbers</span><span style="color:var(--shiki-token-string)"> or</span><span style="color:var(--shiki-token-string)"> special</span><span style="color:var(--shiki-token-string)"> characters,</span><span style="color:var(--shiki-token-string)"> enter</span><span style="color:var(--shiki-token-string)"> the</span><span style="color:var(--shiki-token-string)"> default</span><span style="color:var(--shiki-token-string)"> pve</span><span style="color:var(--shiki-foreground)">):</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">请输入新的主机名(只能包含英文字母和数字,不能是纯数字或特殊字符,回车默认为pve</span><span style="color:var(--shiki-foreground)">):</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>不修改默认回车就好。
然后等待安装完成。</p>
<ol start="5">
<li>当显示如下信息则已经安装完成：</li>
</ol>
<div class="rp-codeblock language-plaintext"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="plaintext"><code><span class="line"><span>Running kernel: pve-manager/8.4.14/b502d23c55afcba1 (running kernel: 6.1.0-41-cloud-amd64)</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Installation complete, please open HTTPS web page https://123.123.123.123:8006/</span></span>
<span class="line"><span>The username and password are the username and password used by the server (e.g. root and root user&#x27;s password)</span></span>
<span class="line"><span>If the login is correct please do not rush to reboot the system, go to execute the commands of the pre-configured environment and then reboot the system</span></span>
<span class="line"><span>If there is a problem logging in the web side is not up(Referring to the page reporting an error, it keeps loading or is normal), wait 10 seconds and restart the system to see</span></span>
<span class="line"><span></span></span>
<span class="line"><span>安装完毕，请打开HTTPS网页 https://123.123.123.123:8006/</span></span>
<span class="line"><span>用户名、密码就是服务器所使用的用户名、密码(如root和root用户的密码)</span></span>
<span class="line"><span></span></span>
<span class="line"><span>如果登录无误请不要急着重启系统，去执行预配置环境的命令后再重启系统</span></span>
<span class="line"><span>如果登录有问题web端没起来(指的是网页报错，一直在加载还是正常的)，等待10秒后重启系统看看</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这时候就去访问信息中的链接地址就可以访问到 PVE 后台了，用户名是<code>root</code>，密码则是你<code>ssh</code>的<code>root</code>密码。</p>
<h3 class="rp-toc-include" id="配置-pve-宿主机的网络"><a href="#配置-pve-宿主机的网络" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置 PVE 宿主机的网络</h3>
<blockquote>
<p>[!警告]
确定能够进入 PVE 之后，再进行此操作。</p>
</blockquote>
<p>使用一键脚本进行配置：</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string-expression)"> &lt;(</span><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> -qO-</span><span style="color:var(--shiki-token-string)"> --no-check-certificate</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh</span><span style="color:var(--shiki-token-string-expression)">)</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后就会自动创建<code>brige</code>网络接口。
<strong><code>vmbr0</code>负责 v4 的独立 IP，<code>vmbr1</code>负责复杂 v4/v6 的 NAT，<code>vmbr2</code>负责 v6 的独立 IP</strong></p>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">注意</div><div class="rp-callout__content"><p>如果宿主机自带的<code>IPV6</code>是<code>/64</code>的，就不会有<code>vmbr2</code>。</p><p>因为有一些杜甫是直接给多个<code>IPV6</code>的<code>/64</code>子段（VPS.Town 的 A4 就是），这时候就直接用<code>vmbr0</code>去分即可。</p></div></div>
<h2 class="rp-toc-include" id="分-kvm-虚拟机"><a href="#分-kvm-虚拟机" class="rp-header-anchor rp-link" aria-hidden="true">#</a>分 KVM 虚拟机</h2>
<ol>
<li>首先，先下镜像，这里直接用 Debian 的官方镜像，<a href="https://cdimage.debian.org/cdimage/cloud/" target="_blank" rel="noopener noreferrer" class="rp-link">传送门</a>
这里使用<a href="https://cdimage.debian.org/cdimage/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2" target="_blank" rel="noopener noreferrer" class="rp-link">debian-12-genericcloud-amd64.qcow2</a>作为小鸡的系统。
先下载到 PVE 上：</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://cdimage.debian.org/cdimage/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="2">
<li>接下来去创建虚拟机，填写虚拟机名称，然后<code>操作系统</code>选择<code>不使用任何介质</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-1.png" alt="操作系统设置" decoding="async"/></li>
</ol>
<p><code>系统</code>默认即可</p>
<p><code>磁盘</code> 删除掉默认的硬盘，不需要添加硬盘：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-2.png" alt="硬盘设置" decoding="async" loading="lazy"/></p>
<p><code>CPU</code>根据需要选择，<code>类别</code>如需要高性能可选择<code>host</code>否则默认即可：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-3.png" alt="CPU设置" decoding="async" loading="lazy"/></p>
<p><code>内存</code>根据需要给就行：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-4.png" alt="内存设置" decoding="async" loading="lazy"/></p>
<p><code>网络</code>如果有多个独立 IPV4 选择<code>vmbr0</code>，如果使用 NAT，选择<code>vmbr1</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-5.png" alt="网络设置" decoding="async" loading="lazy"/></p>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">注意</div><div class="rp-callout__content"><p>防火墙需要关闭，不然 KVM 虚拟机可能会无法访问公网。如需开启防火墙需要去主机防火墙放行<code>in</code> 来源 IP 内网网段规则。</p></div></div>
<p>然后创建即可。</p>
<ol start="3">
<li>然后进入 PVE 控制台，将镜像导入到该虚拟机中：</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">qm</span><span style="color:var(--shiki-token-string)"> disk</span><span style="color:var(--shiki-token-string)"> import</span><span style="color:var(--shiki-token-constant)"> 100</span><span style="color:var(--shiki-token-string)"> debian-12-genericcloud-amd64.qcow2</span><span style="color:var(--shiki-token-string)"> local</span><span style="color:var(--shiki-token-string)"> --format</span><span style="color:var(--shiki-token-string)"> qcow2</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><code>100</code>是虚拟机 ID <code>debian-12-genericcloud-amd64.qcow2</code>是镜像 <code>local</code>是本地存储</p>
<ol start="4">
<li>
<p>导入之后，进入虚拟机的<code>硬件</code>，找到<code>未使用的硬盘0</code>，双击或者点编辑，然后添加硬盘，<code>总线/设备</code>可选<code>VirtIO Block</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-6.png" alt="添加硬盘" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>然后再选择硬盘，然后点击<code>磁盘操作</code>-<code>调整大小</code>，输入要增大硬盘的大小：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-7.png" alt="调整硬盘大小" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>然后再点<code>选项</code>，双击<code>引导顺序</code>，将<code>virtio0</code>硬盘启用，然后拉到第一位：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-8.png" alt="设置引导顺序" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>再回到<code>硬件</code>，点击<code>添加</code>，选择<code>Cloudinit 设备</code>，然后添加：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-9.png" alt="添加CloudInit" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>然后点击<code>Cloud-Init</code>，然后可以设置<code>用户</code>、<code>密码</code>、<code>SSH公钥</code>、<code>DNS服务器</code>、<code>IP设置</code>
按需设置，这里还需要讲清楚<code>IP设置</code>，NAT4 需要为虚拟机设置固定的内网 IP：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-10.png" alt="设置NAT4" decoding="async" loading="lazy"/></p>
</li>
</ol>
<p>这里因为我要给虚拟机设置独立 IPV6，就不需要设置 NAT6 了，如果需要设置 NAT6，就给它设置 NAT 的子网段，例如：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-11.png" alt="设置NAT6" decoding="async" loading="lazy"/></p>
<ol start="9">
<li>
<p>然后再回到<code>硬件</code>，添加<code>串行接口</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-12.png" alt="添加串行端口" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>然后选中<code>显示</code>，显卡换成<code>串行终端 0</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-13.png" alt="更改显示端口" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>然后就可以正常开机，享受刚切的小鸡鸡了。</p>
</li>
</ol>
<h2 class="rp-toc-include" id="给-kvm-虚拟机添加独立-ipv6"><a href="#给-kvm-虚拟机添加独立-ipv6" class="rp-header-anchor rp-link" aria-hidden="true">#</a>给 KVM 虚拟机添加独立 IPV6</h2>
<ol>
<li>在虚拟机<code>硬件</code>中点击添加<code>网络设备</code>：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-14.png" alt="添加网络设备" decoding="async" loading="lazy"/></li>
</ol>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">注意</div><div class="rp-callout__content"><p>
<code>桥接</code>选择宿主机的<code>vmbr0</code>或者<code>vmbr2</code>，具体看宿主机的 IPV6 分配情况。</p></div></div>
<ol start="2">
<li>
<p>然后回到<code>Cloud-Init</code>中，编辑<code>IP配置(net1)</code>，设置静态的 IPV6：
<img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-15.png" alt="设置静态IPV6" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>进入虚拟机，使用<code>ip.sb</code>测试 IPV4 和 IPV6 是否正常：</p>
</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> ip.sb</span><span style="color:var(--shiki-token-string)"> -4</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> ip.sb</span><span style="color:var(--shiki-token-string)"> -6</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/proxmox-pve-installation-kvm-vm-setup-nat-and-dualstack-ipv4-ipv6/image-16.png" alt="测试IPV4和IPV6" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="开启-root-密码登录"><a href="#开启-root-密码登录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>开启 ROOT 密码登录</h2>
<ol>
<li>
<p>进入虚拟机的<code>控制台</code>，然后输入用户名和密码进行登录</p>
</li>
<li>
<p>编辑<code>/etc/ssh/sshd_config</code>文件</p>
</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>找到<code>PermitRootLogin</code>和<code>PasswordAuthentication</code>，去掉注释改成：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">PermitRootLogin</span><span style="color:var(--shiki-token-string)"> yes</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">PasswordAuthentication</span><span style="color:var(--shiki-token-string)"> yes</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后按<code>Ctrl+X</code>，按 Y 确认然后回车保存，然后再重启 ssh 服务：</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> sshd</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="nat-端口转发"><a href="#nat-端口转发" class="rp-header-anchor rp-link" aria-hidden="true">#</a>NAT 端口转发</h2>
<ol>
<li>使用<code>iptables</code>宿主机上的端口转发到虚拟机的端口上</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">iptables</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> nat</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> PREROUTING</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string)"> vmbr0</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 10000</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> DNAT</span><span style="color:var(--shiki-token-string)"> --to-destination</span><span style="color:var(--shiki-token-string)"> 172.16.1.2:22</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><code>dport</code> 宿主机端口 <code>to-destination</code> 虚拟机地址端口</p>
<ol start="2">
<li>永久保存方法：
编辑<code>/etc/network/interfaces</code>
在<code>iface vmbr1 inet static</code>后面添加上</li>
</ol>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">post-up</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> nat</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> PREROUTING</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string)"> vmbr0</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 10000</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> DNAT</span><span style="color:var(--shiki-token-string)"> --to-destination</span><span style="color:var(--shiki-token-string)"> 172.16.1.2:22</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">post-dodwn</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> nat</span><span style="color:var(--shiki-token-string)"> -D</span><span style="color:var(--shiki-token-string)"> PREROUTING</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string)"> vmbr0</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 10000</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> DNAT</span><span style="color:var(--shiki-token-string)"> --to-destination</span><span style="color:var(--shiki-token-string)"> 172.16.1.2:22</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>保存即可，然后重启网络：</p>
<div class="rp-codeblock language-shell"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="shell"><code><span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> networking</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content>
        <author>
            <name>灰机喵喵喵</name>
        </author>
        <category label="virtualization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[使用 Squashfs 进行服务器数据备份——从为什么，到怎么做]]></title>
        <id>/guide/squashfs-server-backup-guide</id>
        <link href="https://docs.vps.town/guide/squashfs-server-backup-guide"/>
        <updated>2025-11-03T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文对比 tar、zip 等格式，说明 Squashfs 兼具高压缩比、元数据完整保留与随机访问的优势，并介绍用 mksquashfs 创建归档、用 unsquashfs 列出和解压内容，以及直接挂载访问备份的方法。]]></summary>
        <content type="html"><![CDATA[<!--$--><div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>abc1763613206</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 格式审核，投稿内容真实性由原作者负责。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#为什么选择-squashfs" class="rp-toc-item rp-link" title="为什么选择 Squashfs？" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">为什么选择 Squashfs？</span></a><a href="#创建归档" class="rp-toc-item rp-link" title="创建归档" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">创建归档</span></a><a href="#解压与管理归档" class="rp-toc-item rp-link" title="解压与管理归档" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">解压与管理归档</span></a><a href="#列出归档内容不解压" class="rp-toc-item rp-link" title="列出归档内容（不解压）" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">列出归档内容（不解压）</span></a><a href="#解压归档内容" class="rp-toc-item rp-link" title="解压归档内容" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">解压归档内容</span></a><a href="#直接挂载" class="rp-toc-item rp-link" title="直接挂载" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">直接挂载</span></a><a href="#在其他系统上访问" class="rp-toc-item rp-link" title="在其他系统上访问" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">在其他系统上访问</span></a></div></details>
<h1 class="rp-toc-include" id="使用-squashfs-进行服务器数据备份从为什么到怎么做"><a href="#使用-squashfs-进行服务器数据备份从为什么到怎么做" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用 Squashfs 进行服务器数据备份——从为什么，到怎么做<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p><strong>数据无价。</strong> 在现代服务器运维中，数据备份是每一位用户的必修课。如果服务器上承载着不可复现的珍贵数据，那么即便只有万分之一的可能，您也必须为天灾、人祸、乃至「物理上云」的最坏情况做好准备。</p>
<p>而无论是执行备份还是服务迁移，选择一种高效的归档格式都至关重要。与使用 rsync 等工具处理海量的零散文件相比，单个归档文件在管理和传输上显然更为便捷高效。<br/>
<!-- -->本文将详细介绍如何使用 Squashfs 工具，来实现服务器数据的高效归档与备份。</p>
<h2 class="rp-toc-include" id="为什么选择-squashfs"><a href="#为什么选择-squashfs" class="rp-header-anchor rp-link" aria-hidden="true">#</a>为什么选择 Squashfs？</h2>
<p>Squashfs 可能对于 Linux 高手来说已经并不陌生，但是对于大多数平常在用 Windows 的用户而言，当提到压缩与归档格式的时候，第一反应往往是 zip、7z 或者 zip 这一类常见格式。因此在正式开工之前，请允许我使用比较大的篇幅来介绍一下，我们为什么要选择 Squashfs 格式。</p>
<p>我们首先理清一下我们的需求：</p>
<ul>
<li>我们想要对服务器的数据进行备份，而且在我们需要的时候<strong>原样恢复</strong>回去。</li>
<li>我们希望备份文件尽可能小，以节省存储空间和传输时间。</li>
<li>我们希望备份和恢复的过程尽可能简单高效。</li>
<li>虽然对于备份数据而言一般都是冷备份（除非真的发生故障，否则一般都不会去访问），但有时又想从里面拿出一点东西来用。</li>
</ul>
<p>如果你认为如上需求和你的备份理念相符，那么恭喜你 —— Squashfs 很可能是一个非常适合你的选择。</p>
<p>Squashfs 是一款专为 Linux 设计，随 Linux 而生的只读压缩文件系统。它于 Linux 2.6.29 内核中被正式引入主线，并在 Linux 4.14 之后进一步完善成现在的样子。现在这个格式已经被广泛应用于各种 Linux 发行版的 Live CD、嵌入式系统（如 OpenWrt）以及容器镜像中。<br/>
<!-- -->Squashfs 之所以适合备份，有以下几个原因：</p>
<ul>
<li><strong>高压缩比</strong>：Squashfs 支持 Gzip、LZMA、LZO、LZ4、XZ 和 Zstd 等多种压缩算法，可以根据需求选择合适的压缩方式，从而在压缩率和速度之间取得平衡。除此之外，Squashfs 块级压缩的特性还方便了重复数据的去重，从而进一步提升压缩效果。</li>
<li><strong>只读特性</strong>：作为只读文件系统（可以通过 OverlayFS 等方式来实现读写，但是对于备份数据而言超纲了），Squashfs 可以保证备份数据的一致性。而且尤其需要强调的是，Squashfs 能够做到在创建归档文件的同时<strong>完整保留文件的元数据（包括权限、时间戳、符号链接等）</strong>，最大限度保持原样，这对于服务器数据的备份和恢复尤为重要。</li>
<li><strong>随机访问</strong>：Squashfs <strong>支持通过 mount 挂载的方式直接随机访问文件</strong>，这意味着即使在一个大型的归档文件中，也可以快速定位并提取单个文件，而不需要解压整个归档。</li>
<li><strong>支持广泛</strong>：作为随 Linux 内核成长的文件系统，Squashfs 在 Linux 中能够做到<strong>不额外安装任何软件即可通过内核挂载读取数据</strong>，而在 Windows 等平台上，你也可以通过第三方工具（如 7-Zip 及其衍生）来访问 Squashfs 文件。</li>
</ul>
<p>接下来我们将 Squashfs 与常见的归档格式进行对比：</p>
<ul>
<li><code>tar</code> 和他的动物朋友们：<code>tar</code> 本身属于流式归档，并不具备压缩功能。通常需要配合 <code>gzip</code>、<code>bzip2</code>、<code>xz</code> 等压缩工具使用。但是压缩后的文件格式<strong>不支持随机访问</strong>，需要解压整个归档才能访问其中的文件。</li>
<li><code>7z</code> / <code>zip</code> / <code>rar</code>：这三个都是 Windows 上非常流行的压缩格式，但是和 POSIX 系统下的 Linux 生态相比，显得相当水土不服——这些格式都无法完整保留 Linux 文件的元数据（尤其是权限和链接），这对于服务器核心数据的备份来说是不可接受的。此外，可以认为这些格式的随机访问能力和他们的数据去重能力不可兼得：标准 ZIP 格式不支持数据去重，而 7z 和 RAR 格式启用了固实压缩后就失去了随机访问能力。</li>
</ul>
<h2 class="rp-toc-include" id="创建归档"><a href="#创建归档" class="rp-header-anchor rp-link" aria-hidden="true">#</a>创建归档</h2>
<p>虽然 Squashfs 可以在现代 Linux 内核中直接挂载使用，但是创建 Squashfs 归档文件则需要借助 <code>mksquashfs</code> 工具。这个工具通常包含在 <code>squashfs-tools</code> 软件包中，可以通过包管理器安装：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> squashfs-tools</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><code>mksquashfs</code> 的基本用法非常简单，你如果想快速创建一个 Squashfs 归档文件，只需要指定源目录和目标文件名即可：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 备份 /etc 目录到 etc.squashfs</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mksquashfs</span><span style="color:var(--shiki-token-string)"> /etc</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>通过查看 <a href="https://manpages.debian.org/trixie/squashfs-tools/mksquashfs.1.en.html" target="_blank" rel="noopener noreferrer" class="rp-link">manpage</a> ，我们可以知道：在 Debian 13 中如果不加任何参数，<code>mksquashfs</code> 会使用 <code>gzip</code> 进行 9 级压缩，默认分块大小为 128KB，并且保留所有文件扩展元数据。</p>
<p>在归档完成后，<code>mksquashfs</code> 会输出一大串信息，详细给出包括重复文件数、符号链接与硬连接数、块大小、乃至 <code>uid</code> 和 <code>gid</code> 个数等信息，十分详细：
<img src="/assets/images/squashfs-server-backup-guide/image-20251104003449907.png" alt="image-20251104003449907" decoding="async"/></p>
<p>而对于这里的冷备份需求，我们可以牺牲一点时间来换取更高的压缩比，你可以在如上的 <a href="https://manpages.debian.org/trixie/squashfs-tools/mksquashfs.1.en.html" target="_blank" rel="noopener noreferrer" class="rp-link">manpage</a> 中找到更多可选参数（注意对于一些老 Linux 版本，通常不支持使用一些比较新的压缩算法）。<br/>
<!-- -->通常而言，对于归档需求，我会建议换成比 <code>gzip</code> 压缩表现更好的 <code>zstd</code> 算法，把压缩比拉到最高的 22，然后把块大小调大到 <code>mksquashfs</code> 支持的最大值 <code>1M</code>（压缩表现更好，但是会牺牲一些随机读取性能），同时显性要求保留元数据，反映在命令上就是这样：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mksquashfs</span><span style="color:var(--shiki-token-string)"> /etc</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span><span style="color:var(--shiki-token-string)"> -xattrs</span><span style="color:var(--shiki-token-string)"> -comp</span><span style="color:var(--shiki-token-string)"> zstd</span><span style="color:var(--shiki-token-string)"> -Xcompression-level</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-string)"> -b</span><span style="color:var(--shiki-token-string)"> 1M</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>特别的，如果你想要排除掉目录里的某些文件或子目录，可以使用 <code>-e</code> 参数指定排除列表。例如，下面的命令会排除 <code>/etc</code> 目录下的 <code>shadow</code> 和 <code>passwd</code> 文件：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mksquashfs</span><span style="color:var(--shiki-token-string)"> /etc</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span><span style="color:var(--shiki-token-string)"> -xattrs</span><span style="color:var(--shiki-token-string)"> -comp</span><span style="color:var(--shiki-token-string)"> zstd</span><span style="color:var(--shiki-token-string)"> -Xcompression-level</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-string)"> -b</span><span style="color:var(--shiki-token-string)"> 1M</span><span style="color:var(--shiki-token-string)"> -e</span><span style="color:var(--shiki-token-string)"> shadow</span><span style="color:var(--shiki-token-string)"> passwd</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="解压与管理归档"><a href="#解压与管理归档" class="rp-header-anchor rp-link" aria-hidden="true">#</a>解压与管理归档</h2>
<p>创建好的 Squashfs 归档文件可以通过多种方式进行解压和管理。如果你只是想要对归档文件进行管理，最常见的方法是使用 <code>unsquashfs</code> 工具，它同样包含在 <code>squashfs-tools</code> 软件包中。</p>
<p>你同样可以在 <a href="https://manpages.debian.org/trixie/squashfs-tools/unsquashfs.1.en.html" target="_blank" rel="noopener noreferrer" class="rp-link">manpage</a> 中找到 <code>unsquashfs</code> 的使用说明，如下仅介绍一些常见的用法：</p>
<h3 class="rp-toc-include" id="列出归档内容不解压"><a href="#列出归档内容不解压" class="rp-header-anchor rp-link" aria-hidden="true">#</a>列出归档内容（不解压）</h3>
<p>使用 <code>-l</code> (list) 选项：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">unsquashfs</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>它会像 <code>ls -R</code> 命令一样，递归地列出镜像中的所有文件、权限和目录结构。</p>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104005754057.png" alt="image-20251104005754057" decoding="async" loading="lazy"/></p>
<p>如果你想像 <code>ls -lR</code> 一样显示文件权限与所有者，请使用 <code>-ll</code> 选项：</p>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104005900938.png" alt="image-20251104005900938" decoding="async" loading="lazy"/></p>
<p>你可以在后面追加路径参数，来限制只列出某个子目录下的内容，例如：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">unsquashfs</span><span style="color:var(--shiki-token-string)"> -ll</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span><span style="color:var(--shiki-token-string)"> alternatives/</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="解压归档内容"><a href="#解压归档内容" class="rp-header-anchor rp-link" aria-hidden="true">#</a>解压归档内容</h3>
<p>使用 <code>-d</code> (destination) 选项指定解压目录：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> ./etc_backup</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">unsquashfs</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> ./etc_backup</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104010210898.png" alt="image-20251104010210898" decoding="async" loading="lazy"/></p>
<p>你也可以只解压归档中的某个子目录或文件，例如：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">unsquashfs</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> ./alternatives_backup</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span><span style="color:var(--shiki-token-string)"> alternatives/</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104010305910.png" alt="image-20251104010305910" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="直接挂载"><a href="#直接挂载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>直接挂载</h3>
<p>解压并不是 SquashFS 的主要用法。它真正的强大之处在于<strong>直接挂载</strong>，无需解压即可访问。
你可以使用 <code>mount</code> 命令将 Squashfs 归档文件挂载到一个目录中：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> /mnt/etc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> mount</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> loop</span><span style="color:var(--shiki-token-string)"> etc.squashfs</span><span style="color:var(--shiki-token-string)"> /mnt/etc</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104010457857.png" alt="image-20251104010457857" decoding="async" loading="lazy"/></p>
<p>现在，你可以像访问普通目录一样访问里面的文件，但<strong>所有文件都是只读的</strong>：</p>
<p><img src="/assets/images/squashfs-server-backup-guide/image-20251104010611062.png" alt="image-20251104010611062" decoding="async" loading="lazy"/></p>
<p>在你完成访问后，记得卸载挂载点：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> umount</span><span style="color:var(--shiki-token-string)"> /mnt/etc</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="在其他系统上访问"><a href="#在其他系统上访问" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在其他系统上访问</h3>
<p>如上所述，你可以使用 7-Zip 等第三方工具在 Windows 上访问 Squashfs 文件。他可能并没有被加入默认文件关联中，所以你需要手动打开 7-Zip，然后通过它的界面打开 Squashfs 文件进行浏览和提取。在此不再赘述。</p><!--/$-->]]></content>
        <author>
            <name>abc1763613206</name>
        </author>
        <category label="system-security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何解决 VPS.Town A3 VDS 上 PVE 8/9 虚拟机无法正常开机的问题]]></title>
        <id>/guide/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89</id>
        <link href="https://docs.vps.town/guide/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89"/>
        <updated>2025-10-15T05:00:00.000Z</updated>
        <summary type="html"><![CDATA[A3 VDS 上 PVE 8/9 虚拟机开启 KVM 硬件虚拟化后无法开机，可将 CPU 改为 KVM64 或 EPYC-Milan-v2 并关闭 KVM 硬件虚拟化解决，文末附提升流畅度的配置。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何解决-vpstown-a3-vds-上-pve-89-虚拟机无法正常开机的问题"><a href="#如何解决-vpstown-a3-vds-上-pve-89-虚拟机无法正常开机的问题" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何解决 VPS.Town A3 VDS 上 PVE 8/9 虚拟机无法正常开机的问题<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1问题描述" class="rp-toc-item rp-link" title="1.问题描述" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1.问题描述</span></a><a href="#2第一种解决办法" class="rp-toc-item rp-link" title="2.第一种解决办法" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2.第一种解决办法</span></a><a href="#3第二种解决办法" class="rp-toc-item rp-link" title="3.第二种解决办法" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3.第二种解决办法</span></a><a href="#4彩蛋怎么让pve虚拟出来的虚拟机更流畅仅可用于vpstown-a3虚拟化出的虚拟机" class="rp-toc-item rp-link" title="4.【彩蛋】怎么让PVE虚拟出来的虚拟机更流畅（仅可用于VPS.TOWN A3虚拟化出的虚拟机）" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4.【彩蛋】怎么让PVE虚拟出来的虚拟机更流畅（仅可用于VPS.TOWN A3虚拟化出的虚拟机）</span></a></div></details>
<h2 class="rp-toc-include" id="1问题描述"><a href="#1问题描述" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.问题描述</h2>
<blockquote>
<p>正常配置好虚拟机，开机在控制台界面上看到如下报错，无法进入登陆界面。</p>
<p>如果CPU是host模拟模式，<strong>关闭KVM硬件虚拟化</strong>开机，控制台提示报错：kvm: CPU model &#x27;host&#x27; requires KVM or HVF</p>
<p>将CPU类型改为<strong>KVM64模式</strong>并<strong>不关闭选项内的KVM硬件虚拟化</strong>，还是有如下报错。</p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/1.png" alt="1" decoding="async"/></p>
<h2 class="rp-toc-include" id="2第一种解决办法"><a href="#2第一种解决办法" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.第一种解决办法</h2>
<blockquote>
<p>将cpu的虚拟化类型改为KVM64并<strong>关闭虚拟机选项内的KVM硬件虚拟化</strong></p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/2.png" alt="2" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/2-17609703582815.png" alt="2" decoding="async" loading="lazy"/></p>
<blockquote>
<p>服务器正常开机</p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/4.png" alt="4" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="3第二种解决办法"><a href="#3第二种解决办法" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.第二种解决办法</h2>
<blockquote>
<p>将CPU模拟调整为EPYC-Milan-v2，为什么调整为这个？</p>
<p>是因为A3 VDS服务器的CPU是EPYC 7c13,代号： &quot;Milan&quot; （米兰），EPYC 7003 系列处理器。EPYC-Milan这个模拟模式比较老，EPYC-Milan-v2比较新的 Milan 微码更新，更完善的漏洞修复。</p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/5.png" alt="5" decoding="async" loading="lazy"/></p>
<blockquote>
<p>修改为EPYC-Milan-v2，如果不关闭<strong>虚拟机选项内的KVM硬件虚拟化</strong>，将会有如下报错，所以需要关闭KVM硬件虚拟化。</p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/6.png" alt="6" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/7.png" alt="7" decoding="async" loading="lazy"/></p>
<hr/>
<h2 class="rp-toc-include" id="4彩蛋怎么让pve虚拟出来的虚拟机更流畅仅可用于vpstown-a3虚拟化出的虚拟机"><a href="#4彩蛋怎么让pve虚拟出来的虚拟机更流畅仅可用于vpstown-a3虚拟化出的虚拟机" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.【彩蛋】怎么让PVE虚拟出来的虚拟机更流畅（仅可用于VPS.TOWN A3虚拟化出的虚拟机）</h2>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span># 以下三种任选</span></span>
<span class="line"><span># 第一种：使用CPU x86_64虚拟化</span></span>
<span class="line"><span>cpu: x86-64-v4,flags=+virt-ssbd;+amd-ssbd;+aes</span></span>
<span class="line"><span>args: -cpu kvm64,accel=kvm,kvm=on,vmware-cpuid-freq=on,,+invtsc,+aes,+svm</span></span>
<span class="line"><span></span></span>
<span class="line"><span># 第二种:使用CPU代号的虚拟化（优先推荐）</span></span>
<span class="line"><span>cpu: EPYC-Milan-v2,flags=+virt-ssbd;+amd-ssbd;+aes</span></span>
<span class="line"><span>args:  -cpu EPYC-Milan-v2,kvm=on,vmware-cpuid-freq=on,,+invtsc,+aes,+svm</span></span>
<span class="line"><span></span></span>
<span class="line"><span># 第三种:使用CPU host方式进行虚拟化</span></span>
<span class="line"><span>cpu: host,flags=+virt-ssbd;+amd-ssbd;+aes</span></span>
<span class="line"><span>args:  -cpu max,kvm=on,vmware-cpuid-freq=on,+invtsc,+aes,+svm</span></span>
<span class="line"><span></span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p><strong>操作步骤</strong></p>
</blockquote>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span># SSH 连接宿主机</span></span>
<span class="line"><span>ssh root@xx.xxx.xx.xx</span></span>
<span class="line"><span></span></span>
<span class="line"><span># 切换到虚拟机配置文件目录下</span></span>
<span class="line"><span>cd /etc/pve/qemu-server</span></span>
<span class="line"><span></span></span>
<span class="line"><span># 编辑虚拟机配置文件(这里以虚拟机ID为100的虚拟机配置文件作演示)</span></span>
<span class="line"><span>vi 100.conf</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/image-20251016220007445.png" alt="image-20251016220007445" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/image-20251016220304564.png" alt="image-20251016220304564" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/image-20251016220327975.png" alt="image-20251016220327975" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/image-20251016220432380.png" alt="image-20251016220432380" decoding="async" loading="lazy"/></p>
<blockquote>
<p>回到<strong>PVE网页端</strong>查看虚拟机启动完毕</p>
</blockquote>
<p><img src="/assets/images/how-to-resolve-virtual-machine-failure-on-vpstown-a3-vds-pve89-proxmox-ve-89/image-20251016220530780.png" alt="image-20251016220530780" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <category label="virtualization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在 VPS.Town 的 Debian 12 上安装 PVE（Proxmox VE）教程]]></title>
        <id>/guide/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town</id>
        <link href="https://docs.vps.town/guide/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town"/>
        <updated>2025-09-03T01:30:00.000Z</updated>
        <summary type="html"><![CDATA[本文逐步说明如何在 VPS.Town 的 Debian 12 环境上安装 Proxmox VE（PVE），包含每步的命令、原因与常见故障排查，适合想简便安装PVE的用户。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="在-vpstown-的-debian-12-上安装-pveproxmox-ve教程"><a href="#在-vpstown-的-debian-12-上安装-pveproxmox-ve教程" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 VPS.Town 的 Debian 12 上安装 PVE（Proxmox VE）教程<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>赛博丁真</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 格式审核，投稿内容真实性由原作者负责。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#前言" class="rp-toc-item rp-link" title="前言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">前言</span></a><a href="#环境与准备建议先读" class="rp-toc-item rp-link" title="环境与准备（建议先读）" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">环境与准备（建议先读）</span></a><a href="#why-pve" class="rp-toc-item rp-link" title="why pve" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">why pve</span></a><a href="#前置准备" class="rp-toc-item rp-link" title="前置准备" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">前置准备</span></a><a href="#使用-dd-脚本对系统进行-dd使用默认系统会导致安装-pve-后出现网卡丢失机子失联的情况注意-dd-系统会导致数据丢失请提前备份数据" class="rp-toc-item rp-link" title="使用 dd 脚本对系统进行 dd，使用默认系统会导致安装 pve 后出现网卡丢失机子失联的情况，注意 dd 系统会导致数据丢失，请提前备份数据。" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">使用 dd 脚本对系统进行 dd，使用默认系统会导致安装 pve 后出现网卡丢失机子失联的情况，注意 dd 系统会导致数据丢失，请提前备份数据。</span></a><a href="#1修改-vps-主机名" class="rp-toc-item rp-link" title="1.修改 vps 主机名" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1.修改 vps 主机名</span></a><a href="#2将主机名写入-host" class="rp-toc-item rp-link" title="2.将主机名写入 host" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2.将主机名写入 host</span></a><a href="#3检测主机名解析生效" class="rp-toc-item rp-link" title="3.检测主机名解析生效" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3.检测主机名解析生效</span></a><a href="#4添加-pve-仓库以及密钥并更新软件包" class="rp-toc-item rp-link" title="4.添加 pve 仓库以及密钥并更新软件包" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4.添加 pve 仓库以及密钥并更新软件包</span></a><a href="#5安装-pve-内核并重启" class="rp-toc-item rp-link" title="5.安装 pve 内核并重启" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5.安装 pve 内核并重启</span></a><a href="#6安装-pve-软件包" class="rp-toc-item rp-link" title="6.安装 pve 软件包" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">6.安装 pve 软件包</span></a><a href="#7移除原本的-debian-内核" class="rp-toc-item rp-link" title="7.移除原本的 debian 内核" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">7.移除原本的 debian 内核</span></a><a href="#8最后再升级并检查-grub2-并重启一次" class="rp-toc-item rp-link" title="8.最后再升级并检查 grub2 并重启一次" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">8.最后再升级并检查 grub2 并重启一次</span></a><a href="#9然后就可以进入后台了" class="rp-toc-item rp-link" title="9.然后就可以进入后台了" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">9.然后就可以进入后台了</span></a></div></details>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>Proxmox VE（简称 PVE）是一款基于 Debian 的开源虚拟化平台，支持 KVM（完整虚拟化）和 LXC（容器化），并带有友好的 Web 管理界面。把一台 Debian 12 主机转成 PVE 节点的典型做法是：添加 Proxmox 的软件源、安装 PVE 软件包与专用内核、移除冲突的内核并重启。下面按步骤展开，逐条解释每一步的目的与常见问题。</p>
<hr/>
<h2 class="rp-toc-include" id="环境与准备建议先读"><a href="#环境与准备建议先读" class="rp-header-anchor rp-link" aria-hidden="true">#</a>环境与准备（建议先读）</h2>
<ul>
<li>推荐环境：VPS.Town A3 系列（示例），但方法对其他云厂商的 Debian 12 通常也适用。</li>
<li>最低要求（建议更高）：1 核 CPU / 2GB RAM / 可用 IPv4 地址 / SSD 系统盘。</li>
<li>强烈建议：在开始前做好重要数据备份。</li>
</ul>
<hr/>
<h2 class="rp-toc-include" id="why-pve"><a href="#why-pve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>why pve</h2>
<p><strong>1. pve 作为虚拟化平台</strong></p>
<p>🖥️ pve 支持<strong>KVM 虚拟机</strong>和<strong>LXC 容器</strong>，可以同时跑完整系统和轻量应用环境。</p>
<p><strong>2. Web 管理界面</strong></p>
<p>🌐 pve 自带超好用的<strong>网页管理面板</strong>，可一键创建、监控和管理 VM 和容器。</p>
<p><strong>3. 开源 &amp; 免费</strong></p>
<p>🆓 pve 基础功能完全开源免费，用起来放心。</p>
<h2 class="rp-toc-include" id="前置准备"><a href="#前置准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前置准备</h2>
<h3 class="rp-toc-include" id="使用-dd-脚本对系统进行-dd使用默认系统会导致安装-pve-后出现网卡丢失机子失联的情况注意-dd-系统会导致数据丢失请提前备份数据"><a href="#使用-dd-脚本对系统进行-dd使用默认系统会导致安装-pve-后出现网卡丢失机子失联的情况注意-dd-系统会导致数据丢失请提前备份数据" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用 dd 脚本对系统进行 dd，使用默认系统会导致安装 pve 后出现网卡丢失机子失联的情况，注意 dd 系统会导致数据丢失，请提前备份数据。</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> --no-check-certificate</span><span style="color:var(--shiki-token-string)"> -qO</span><span style="color:var(--shiki-token-string)"> InstallNET.sh</span><span style="color:var(--shiki-token-string-expression)"> &#x27;https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh&#x27;</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> a+x</span><span style="color:var(--shiki-token-string)"> InstallNET.sh</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> InstallNET.sh</span><span style="color:var(--shiki-token-string)"> -debian</span><span style="color:var(--shiki-token-constant)"> 12</span><span style="color:var(--shiki-token-string)"> -port</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-string)"> -pwd</span><span style="color:var(--shiki-token-string)"> yourspassword</span><span style="color:var(--shiki-token-comment)"> #请将yourspassword改为你自己的root密码</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="1修改-vps-主机名"><a href="#1修改-vps-主机名" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.修改 vps 主机名</h2>
<ul>
<li>PVE 对主机名和主机名解析比较敏感，建议设置一个短且固定的主机名（如 pve01）。</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> hostnamectl</span><span style="color:var(--shiki-token-string)"> set-hostname</span><span style="color:var(--shiki-token-string)"> pve01</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="2将主机名写入-host"><a href="#2将主机名写入-host" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.将主机名写入 host</h2>
<ul>
<li>
<p>PVE 在启动和一些管理功能中，会检查主机名对应的 IP。如果主机名只解析为回环地址（127.0.0.1），会导致服务间通信或面板登录出现问题。</p>
</li>
<li>
<p>因此把主机名和真实 IP 映射写进 /etc/hosts 能保证本机解析正确。</p>
</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;154.19.1.0 pve01&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string)"> /etc/hosts</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#其中154.19.1.0改为你自己vps的ip，注意不能是127.0.0.1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="3检测主机名解析生效"><a href="#3检测主机名解析生效" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.检测主机名解析生效</h2>
<ul>
<li>如果返回 127.0.0.1 或 127.0.1.1，说明解析没有正确设置，需要检查 /etc/hosts。</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">hostname</span><span style="color:var(--shiki-token-string)"> --ip-address</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>返回结果</p>
<p><img src="/assets/images/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town/image.png" alt="image.png" decoding="async"/></p>
<p>注意该结果不能为回环 ip 127.0.0.1</p>
<h2 class="rp-toc-include" id="4添加-pve-仓库以及密钥并更新软件包"><a href="#4添加-pve-仓库以及密钥并更新软件包" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.添加 pve 仓库以及密钥并更新软件包</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 添加 pve 仓库（针对 bookworm / Debian 12）</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/pve-install-repo.list</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 下载并安装 Proxmox 的 GPG 公钥</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 更新并升级当前包</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> apt</span><span style="color:var(--shiki-token-string)"> full-upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="5安装-pve-内核并重启"><a href="#5安装-pve-内核并重启" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5.安装 pve 内核并重启</h2>
<ul>
<li>Proxmox 使用定制的内核（包含 KVM、ZFS、网络相关的补丁与模块），安装 proxmox-default-kernel 会将系统引导到适配 PVE 的内核上。</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> proxmox-default-kernel</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> reboot</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town/image%201.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="6安装-pve-软件包"><a href="#6安装-pve-软件包" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6.安装 pve 软件包</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> proxmox-ve</span><span style="color:var(--shiki-token-string)"> postfix</span><span style="color:var(--shiki-token-string)"> open-iscsi</span><span style="color:var(--shiki-token-string)"> chrony</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ul>
<li>安装过程中系统可能提示设置 postfix，默认选择 Internet Site 并填写主机名通常是可行的（按 Tab 选择 OK 并回车）。</li>
</ul>
<p><img src="/assets/images/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town/image%202.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="7移除原本的-debian-内核"><a href="#7移除原本的-debian-内核" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.移除原本的 debian 内核</h2>
<ul>
<li>为了避免 pve 升级时旧内核与 Proxmox 内核冲突或引导时选择错误内核，建议移除原生 Debian 内核包。</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> remove</span><span style="color:var(--shiki-token-string)"> linux-image-amd64</span><span style="color:var(--shiki-token-string-expression)"> &#x27;linux-image-6.1*&#x27;</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="8最后再升级并检查-grub2-并重启一次"><a href="#8最后再升级并检查-grub2-并重启一次" class="rp-header-anchor rp-link" aria-hidden="true">#</a>8.最后再升级并检查 grub2 并重启一次</h2>
<ul>
<li>update-grub 会重新生成 GRUB 引导配置，确保默认引导项为 Proxmox 内核。</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">update-grub</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> reboot</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="9然后就可以进入后台了"><a href="#9然后就可以进入后台了" class="rp-header-anchor rp-link" aria-hidden="true">#</a>9.然后就可以进入后台了</h2>
<ul>
<li>登录凭据：</li>
</ul>
<p>用户名：root</p>
<p>密码：你在系统中设置的 root 密码</p>
<p>默认使用 HTTPS（端口 8006），浏览器可能提示自签名证书警告，可先接受例外进入界面。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">https://your-ip:8006</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/tutorial-for-installing-pve-proxmox-ve-on-debian-12-in-vps-town/image%203.png" alt="image.png" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>赛博丁真</name>
        </author>
        <category label="virtualization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在 Debian 12 上安装并使用 RSStT]]></title>
        <id>/guide/how-to-setup-rsstt-debian-12-guide-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-setup-rsstt-debian-12-guide-vps-town"/>
        <updated>2025-05-25T05:30:00.000Z</updated>
        <summary type="html"><![CDATA[指导您如何在 Debian 12 服务器上使用 Docker Compose 轻松安装和配置 RSS-to-Telegram-Bot (RSStT)，这是官方推荐且对新手友好的方式。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="在-debian-12-上安装并使用-rsstt"><a href="#在-debian-12-上安装并使用-rsstt" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 Debian 12 上安装并使用 RSStT<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<blockquote>
<p>更关心您阅读体验的 Telegram RSS 机器人</p>
</blockquote>
<p><a href="https://github.com/Rongronggg9/RSS-to-Telegram-Bot" target="_blank" rel="noopener noreferrer" class="rp-link">RSS-to-Telegram-Bot (RSStT)</a> 是一个功能强大的 Telegram 机器人，可以将 RSS 源的更新推送到 Telegram。使用 Docker Compose 是官方<strong>最推荐</strong>的部署方式，它极大地简化了安装、配置和更新过程，将应用程序及其依赖项打包在隔离的容器中运行，非常适合新手和追求便捷管理的用户。本教程将指导您如何在 Debian 12 服务器上一步步完成 Docker Compose 部署。</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>k08255-lxm</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 50 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-准备工作" class="rp-toc-item rp-link" title="1. 准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 准备工作</span></a><a href="#11-获取-telegram-bot-token" class="rp-toc-item rp-link" title="1.1 获取 Telegram Bot Token" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.1 获取 Telegram Bot Token</span></a><a href="#12-获取你的-telegram-user-id" class="rp-toc-item rp-link" title="1.2 获取你的 Telegram User ID" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.2 获取你的 Telegram User ID</span></a><a href="#13-获取-telegraph-api-tokens" class="rp-toc-item rp-link" title="1.3 获取 Telegraph API Token(s)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.3 获取 Telegraph API Token(s)</span></a><a href="#2-服务器环境准备安装-docker-和-docker-compose" class="rp-toc-item rp-link" title="2. 服务器环境准备：安装 Docker 和 Docker Compose" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 服务器环境准备：安装 Docker 和 Docker Compose</span></a><a href="#21-更新系统软件包" class="rp-toc-item rp-link" title="2.1 更新系统软件包" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1 更新系统软件包</span></a><a href="#22-安装-docker" class="rp-toc-item rp-link" title="2.2 安装 Docker" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2 安装 Docker</span></a><a href="#3-使用-docker-compose-安装-rsstt" class="rp-toc-item rp-link" title="3. 使用 Docker Compose 安装 RSStT" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. 使用 Docker Compose 安装 RSStT</span></a><a href="#31-创建工作目录并下载配置文件" class="rp-toc-item rp-link" title="3.1 创建工作目录并下载配置文件" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.1 创建工作目录并下载配置文件</span></a><a href="#32-配置-docker-composeyml-文件" class="rp-toc-item rp-link" title="3.2 配置 docker-compose.yml 文件" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.2 配置 docker-compose.yml 文件</span></a><a href="#33-启动-rsstt-服务" class="rp-toc-item rp-link" title="3.3 启动 RSStT 服务" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.3 启动 RSStT 服务</span></a><a href="#34-检查服务状态和日志" class="rp-toc-item rp-link" title="3.4 检查服务状态和日志" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.4 检查服务状态和日志</span></a><a href="#4-管理-rsstt-服务-docker-compose" class="rp-toc-item rp-link" title="4. 管理 RSStT 服务 (Docker Compose)" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4. 管理 RSStT 服务 (Docker Compose)</span></a><a href="#5-更新-rsstt" class="rp-toc-item rp-link" title="5. 更新 RSStT" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5. 更新 RSStT</span></a><a href="#6-常见问题与注意事项-docker" class="rp-toc-item rp-link" title="6. 常见问题与注意事项 (Docker)" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">6. 常见问题与注意事项 (Docker)</span></a><a href="#7使用" class="rp-toc-item rp-link" title="7.使用" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">7.使用</span></a><a href="#71-添加订阅" class="rp-toc-item rp-link" title="7.1 添加订阅" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.1 添加订阅</span></a><a href="#72-管理订阅" class="rp-toc-item rp-link" title="7.2 管理订阅" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.2 管理订阅</span></a><a href="#73-导入与导出" class="rp-toc-item rp-link" title="7.3 导入与导出" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.3 导入与导出</span></a><a href="#74-自定义设置" class="rp-toc-item rp-link" title="7.4 自定义设置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.4 自定义设置</span></a><a href="#75-bot-管理员命令-仅限-manager-用户-id" class="rp-toc-item rp-link" title="7.5 Bot 管理员命令 (仅限 MANAGER 用户 ID)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.5 Bot 管理员命令 (仅限 MANAGER 用户 ID)</span></a><a href="#76-其他命令" class="rp-toc-item rp-link" title="7.6 其他命令" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.6 其他命令</span></a><a href="#77-获取帮助-help" class="rp-toc-item rp-link" title="7.7 获取帮助 (/help):" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.7 获取帮助 (/help):</span></a><a href="#8-结语" class="rp-toc-item rp-link" title="8. 结语" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">8. 结语</span></a></div></details>
<h2 class="rp-toc-include" id="1-准备工作"><a href="#1-准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 准备工作</h2>
<p>与任何安装方式一样，我们首先需要获取一些必要的凭证信息。如果您已在其他教程中获取过，可以跳过此步。</p>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">所需信息</div><div class="rp-callout__content"><ul>
<li><strong>Telegram Bot Token:</strong> 用于让我们的程序作为 Bot 连接到 Telegram。</li>
<li><strong>管理员 Telegram User ID:</strong> 用于管理 Bot 的权限。</li>
<li><strong>Telegraph API Token(s):</strong> 用于将过长的消息发布为 Telegraph 文章 (推荐获取 5 个)。</li>
</ul></div></div>
<h3 class="rp-toc-include" id="11-获取-telegram-bot-token"><a href="#11-获取-telegram-bot-token" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.1 获取 Telegram Bot Token</h3>
<p><img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/1.png" alt="Get_BotToken" decoding="async"/></p>
<ol>
<li>打开 Telegram，搜索并与 <a href="https://t.me/BotFather" target="_blank" rel="noopener noreferrer" class="rp-link">@BotFather</a> 开始对话。</li>
<li>发送 <code>/newbot</code> 命令，按提示设置 Bot 的名字 (Name) 和用户名 (Username, 必须以 <code>bot</code> 结尾)。</li>
<li>创建成功后，复制 BotFather 发送的 <strong>HTTP API Token</strong>。<strong>妥善保管</strong>。</li>
<li><strong>（重要）</strong> 接着，向 BotFather 发送 <code>/setinline</code> 命令，选择你刚创建的 Bot，然后随意回复一条消息（如：<code>输入命令...</code>）以启用内联模式。</li>
</ol>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">记录 Token</div><div class="rp-callout__content"><p>
将获取到的 Bot Token 复制下来备用。我们称之为 <code>TOKEN</code>。</p></div></div>
<p>然后与您的机器人对话，并发送<code>/start</code>命令。
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/4.png" alt="Activate_Bot" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="12-获取你的-telegram-user-id"><a href="#12-获取你的-telegram-user-id" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.2 获取你的 Telegram User ID</h3>
<p><img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/2.png" alt="Get_TGUserID" decoding="async" loading="lazy"/></p>
<ol>
<li>打开 Telegram，搜索并与 <a href="https://t.me/userinfobot" target="_blank" rel="noopener noreferrer" class="rp-link">@userinfobot</a> 开始对话。</li>
<li>发送 <code>/start</code> 或任何消息。</li>
<li>复制它回复的纯数字 <strong>User ID</strong>。</li>
</ol>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">记录 User ID</div><div class="rp-callout__content"><p>
将获取到的 User ID 复制下来备用。我们称之为 <code>MANAGER</code>。</p></div></div>
<h3 class="rp-toc-include" id="13-获取-telegraph-api-tokens"><a href="#13-获取-telegraph-api-tokens" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.3 获取 Telegraph API Token(s)</h3>
<p><img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/3.png" alt="Get_TelegraphAPIToken" decoding="async" loading="lazy"/></p>
<ol>
<li>访问 <a href="https://api.telegra.ph/createAccount?short_name=RSStT&amp;author_name=Generated%20by%20RSStT&amp;author_url=https%3A%2F%2Fgithub.com%2FRongronggg9%2FRSS-to-Telegram-Bot" target="_blank" rel="noopener noreferrer" class="rp-link">Telegraph API 创建页面（此链接会在生成的文章页脚留下 RSStT 的项目标识）</a>。<!-- -->
<blockquote>
<p>自定义无标识链接：
<a href="https://api.telegra.ph/createAccount?short_name=YourName" target="_blank" rel="noopener noreferrer" class="rp-link">https://api.telegra.ph/createAccount?short_name=YourName</a></p>
</blockquote>
</li>
<li>复制页面结果中 <code>access_token</code> 的值。</li>
<li><strong>（重要）</strong> <strong>刷新页面</strong>以获取新的、不同的 <code>access_token</code>。重复此操作，<strong>至少获取 5 个</strong> Token。</li>
</ol>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">记录 Telegraph Token</div><div class="rp-callout__content"><p>
将获取到的所有 Telegraph API Token 用<strong>逗号</strong>连接起来，复制备用。我们称之为 <code>TELEGRAPH_TOKEN</code>。例如：<code>token1,token2,token3,token4,token5</code>。</p></div></div>
<h2 class="rp-toc-include" id="2-服务器环境准备安装-docker-和-docker-compose"><a href="#2-服务器环境准备安装-docker-和-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 服务器环境准备：安装 Docker 和 Docker Compose</h2>
<p>Docker Compose 需要 Docker Engine 运行环境。我们将安装最新的 Docker 版本。</p>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">操作环境</div><div class="rp-callout__content"><p>
本教程假设您使用的是一台拥有 <code>sudo</code> 权限用户的 Debian 12 服务器。所有命令默认使用 <code>sudo</code> 提升权限，除非已将用户添加到 <code>docker</code> 组。</p></div></div>
<h3 class="rp-toc-include" id="21-更新系统软件包"><a href="#21-更新系统软件包" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1 更新系统软件包</h3>
<p>首先，确保系统是最新的。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="22-安装-docker"><a href="#22-安装-docker" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2 安装 Docker</h3>
<ol>
<li>
<p><strong>卸载旧版本 (如果存在):</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> remove</span><span style="color:var(--shiki-token-string)"> docker</span><span style="color:var(--shiki-token-string)"> docker-engine</span><span style="color:var(--shiki-token-string)"> docker.io</span><span style="color:var(--shiki-token-string)"> containerd</span><span style="color:var(--shiki-token-string)"> runc</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li>
<p><strong>安装必要的依赖包:</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> ca-certificates</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> gnupg</span><span style="color:var(--shiki-token-string)"> lsb-release</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li>
<p><strong>使用一键脚本</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://get.docker.com</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
</ol>
<h2 class="rp-toc-include" id="3-使用-docker-compose-安装-rsstt"><a href="#3-使用-docker-compose-安装-rsstt" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 使用 Docker Compose 安装 RSStT</h2>
<p>现在 Docker 环境准备就绪，我们可以开始部署 RSStT 了。</p>
<h3 class="rp-toc-include" id="31-创建工作目录并下载配置文件"><a href="#31-创建工作目录并下载配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1 创建工作目录并下载配置文件</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建一个专门的目录存放 RSStT 的配置和数据</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> ~/rsstt_docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> ~/rsstt_docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 下载官方提供的 docker-compose.yml 示例文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/Rongronggg9/RSS-to-Telegram-Bot/dev/docker-compose.yml.sample</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> docker-compose.yml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="32-配置-docker-composeyml-文件"><a href="#32-配置-docker-composeyml-文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2 配置 docker-compose.yml 文件</h3>
<p><code>docker-compose.yml</code> 文件定义了运行 RSStT 所需的服务（即容器）及其配置。我们需要编辑它来填入之前准备好的凭证信息。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 使用 nano 编辑器编辑文件 (也可以使用 vim 或其他编辑器)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> docker-compose.yml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>找到 <code>services:</code> -&gt; <code>rsstt:</code> -&gt; <code>environment:</code> 部分。这里定义了 RSStT 运行所需的环境变量。你需要修改以下几行：</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__title">docker-compose.yml (environment 部分)</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml" data-title="docker-compose.yml (environment 部分)"><code><span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  rsstt</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # ... (其他配置保持不变)</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # --- Required ---</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Telegram Bot Token (从 @BotFather 获取)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">TOKEN=781243512:AAGSDGHSRTGHJTRDSFGDSSD</span><span style="color:var(--shiki-token-comment)"> # &lt;--- 修改这里</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Bot 管理员的 Telegram User ID (从 @userinfobot 获取)</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MANAGER=123456789</span><span style="color:var(--shiki-token-comment)"> # &lt;--- 修改这里</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Telegraph API Tokens (一行一个，至少一个，推荐5个)</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">      TELEGRAPH_TOKEN=&lt;你的Telegraph_API_Token1&gt;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        1599373e3dbf55515XXXXX8658d28297fa3</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        f2a8f5c5db81c740bcXxxxX52287ec413</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        361935c66b7XXX7ce645af19</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        0702249218XXXXXc2ab7fcd981b9db820d80098c03ce6</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">        130f258173dXXXX10ef89adf51477535822a94fca708f578d62</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 数据库类型 (Docker Compose 默认使用 sqlite, 数据存储在 volume 中)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 如果你想使用外部 PostgreSQL 数据库，需要取消注释并修改下面两行</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # - DB_TYPE=postgre</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # - DATABASE_URL=postgresql://user:password@host:port/database</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # --- Optional ---</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Telegram API 的代理 (例如: socks5://192.168.1.100:1080, 注意这里的 IP 通常是宿主机 IP 或代理服务容器 IP)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # - PROXY=socks5://192.168.1.100:1080</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # RSS 源的代理</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # - RSS_PROXY=http://192.168.1.100:1081</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # 启用 HTML 表格转图片 (需要容器内字体支持，官方镜像已包含)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # - TABLE_TO_IMAGE=1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><strong>重要修改点：</strong></p>
<ul>
<li>将 <code>&lt;你的机器人TOKEN&gt;</code> 替换为你的真实 Bot Token。</li>
<li>将 <code>&lt;你的Telegram用户ID&gt;</code> 替换为你的真实 User ID。</li>
<li>将 <code>&lt;你的Telegraph_API_Token1&gt;</code> 替换为你之前生成的 Telegraph Token ，一行一个。</li>
<li>如果需要代理，请取消对应 <code>- PROXY=</code> 或 <code>- RSS_PROXY=</code> 行的注释并填入正确的代理地址。注意，如果代理在宿主机上，地址通常是宿主机的局域网 IP 或 <code>172.17.0.1</code> (Docker 默认网桥 IP)，而不是 <code>127.0.0.1</code>。</li>
<li>默认使用 SQLite 数据库，数据会保存在 Docker Volume (<code>rsstt-data</code>) 中，无需额外配置。</li>
</ul>
<p>编辑完成后，按 <code>Ctrl + X</code>，然后按 <code>Y</code>，最后按 <code>Enter</code> 保存并退出 <code>nano</code>。</p>
<h3 class="rp-toc-include" id="33-启动-rsstt-服务"><a href="#33-启动-rsstt-服务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.3 启动 RSStT 服务</h3>
<p>现在，只需要一条命令即可启动 RSStT：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 确保你在 ~/rsstt_docker 目录下</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果你没有将用户添加到 docker 组，请使用 sudo docker compose up -d</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ul>
<li><code>up</code>: 创建并启动 <code>docker-compose.yml</code> 文件中定义的服务。</li>
<li><code>-d</code>: Detached mode，表示在后台运行容器。</li>
</ul>
<p>Docker 会自动下载 RSStT 的镜像 (如果本地没有)，然后创建并启动容器。</p>
<h3 class="rp-toc-include" id="34-检查服务状态和日志"><a href="#34-检查服务状态和日志" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.4 检查服务状态和日志</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 查看正在运行的容器 (应该能看到名为 rsstt_docker-rsstt-1 或类似的容器)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果你没有将用户添加到 docker 组，请使用 sudo docker ps</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> ps</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 查看 RSStT 容器的实时日志</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果你没有将用户添加到 docker 组，请使用 sudo docker compose logs -f</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> -f</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>如果日志滚动显示，并且没有明显的错误信息 (如 <code>ERROR</code> 级别的日志)，最后看到类似 <code>INFO:telegram.ext.Application:Getting updates</code> 的信息，说明 Bot 已经成功启动。</p>
<p>此时，你可以打开 Telegram，与你的 Bot 对话，发送 <code>/start</code> 或 <code>/help</code> 命令进行测试。</p>
<p>按 <code>Ctrl + C</code> 停止查看实时日志 (服务仍在后台运行)。</p>
<h2 class="rp-toc-include" id="4-管理-rsstt-服务-docker-compose"><a href="#4-管理-rsstt-服务-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 管理 RSStT 服务 (Docker Compose)</h2>
<p>使用 Docker Compose 管理 RSStT 非常方便：</p>
<ul>
<li><strong>启动服务 (后台运行):</strong> <code>docker compose up -d</code></li>
<li><strong>停止并移除容器:</strong> <code>docker compose down</code> (数据卷 <code>rsstt-data</code> 默认会保留)</li>
<li><strong>停止服务 (不移除容器):</strong> <code>docker compose stop</code></li>
<li><strong>启动已停止的服务:</strong> <code>docker compose start</code></li>
<li><strong>重启服务:</strong> <code>docker compose restart</code></li>
<li><strong>查看所有服务日志:</strong> <code>docker compose logs</code></li>
<li><strong>查看实时日志:</strong> <code>docker compose logs -f</code></li>
<li><strong>拉取最新镜像 (用于更新):</strong> <code>docker compose pull</code></li>
</ul>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">执行命令的位置</div><div class="rp-callout__content"><p>
以上所有 <code>docker compose</code> 命令都需要在包含 <code>docker-compose.yml</code> 文件的目录 (<code>~/rsstt_docker</code>) 下执行。</p></div></div>
<h2 class="rp-toc-include" id="5-更新-rsstt"><a href="#5-更新-rsstt" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. 更新 RSStT</h2>
<p>更新 RSStT 非常简单：</p>
<ol>
<li><strong>进入工作目录:</strong>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> ~/rsstt_docker</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li><strong>拉取最新的 Docker 镜像:</strong>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 如果你没有将用户添加到 docker 组，请使用 sudo docker compose pull</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> pull</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li><strong>停止当前容器并使用新镜像重新创建启动:</strong>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 如果你没有将用户添加到 docker 组，请使用 sudo docker compose up -d</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --remove-orphans</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<code>--remove-orphans</code> 会移除旧版本可能遗留的不再需要的容器。</li>
</ol>
<p>更新完成！数据因为存储在 Docker Volume 中，所以会保留下来。</p>
<h2 class="rp-toc-include" id="6-常见问题与注意事项-docker"><a href="#6-常见问题与注意事项-docker" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6. 常见问题与注意事项 (Docker)</h2>
<ul>
<li><strong>Bot 没有响应?</strong>
<ul>
<li>检查容器是否在运行: <code>docker ps</code> (或 <code>sudo docker ps</code>)。</li>
<li>查看容器日志: <code>docker compose logs -f</code> (或 <code>sudo docker compose logs -f</code>)。</li>
<li>确认 <code>docker-compose.yml</code> 文件中的 <code>TOKEN</code>, <code>MANAGER</code>, <code>TELEGRAPH_TOKEN</code> 是否正确填写且没有多余空格。</li>
<li>确认服务器网络是否正常，Docker 容器的网络是否能访问 Telegram API (检查代理设置 <code>PROXY</code> 是否正确)。</li>
<li>确认是否启用了 inline 模式 (<code>/setinline</code> @BotFather)。</li>
</ul>
</li>
<li><strong>RSS 抓取失败?</strong>
<ul>
<li>检查 RSS 源地址是否有效。</li>
<li>确认 Docker 容器的网络是否能访问该 RSS 源 (检查代理设置 <code>RSS_PROXY</code> 是否正确)。</li>
<li>查看容器日志获取详细错误信息。</li>
</ul>
</li>
<li><strong>消息过长被截断?</strong>
<ul>
<li>确认 <code>docker-compose.yml</code> 文件中的 <code>TELEGRAPH_TOKEN</code> 是否配置正确且有效 (确保有多个，用逗号分隔)。</li>
<li>检查容器日志看是否有 Telegraph 相关的错误。</li>
</ul>
</li>
<li><strong>数据持久化:</strong> <code>docker-compose.yml</code> 文件中定义了名为 <code>rsstt-data</code> 的 Docker Volume。只要你不手动删除这个 Volume (<code>docker volume rm rsstt_docker_rsstt-data</code>)，你的订阅和配置信息就会在容器停止、重启或更新后保留下来。</li>
<li><strong>资源占用:</strong> 可以使用 <code>docker stats</code> (或 <code>sudo docker stats</code>) 命令查看 RSStT 容器的实时资源使用情况 (CPU, 内存等)。</li>
</ul>
<h2 class="rp-toc-include" id="7使用"><a href="#7使用" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.使用</h2>
<p>现在您的 RSStT 机器人已经在 Docker 中成功运行，是时候开始使用它来订阅和管理 RSS 源了。以下是一些基本的操作指令：</p>
<h3 class="rp-toc-include" id="71-添加订阅"><a href="#71-添加订阅" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.1 添加订阅</h3>
<p>这是核心功能，用于添加新的 RSS 源。</p>
<ul>
<li>
<p><strong>为自己订阅 (Bot 向私聊发送信息):</strong></p>
<ul>
<li>
<p>订阅单个源: <code>/sub &lt;RSS 订阅 URL&gt;</code>
将<code>&lt;RSS 订阅 URL&gt;</code>替换为你想要订阅的 url，例如<code>/sub https://rss.nodeseek.com/</code></p>
</li>
<li>
<p>批量订阅: <code>/sub &lt;URL1&gt; &lt;URL2&gt; ... (url之间用空格分隔)</code>
例如：<code>/sub https://rss.nodeseek.com/ https://docs.vps.town/rss/event.xml</code>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/5.png" alt="Single_Sub" decoding="async" loading="lazy"/></p>
</li>
</ul>
</li>
<li>
<p><strong>为群组/频道订阅:</strong></p>
<ul>
<li>
<p>首先，将机器人添加为群组成员或频道管理员(需发布消息权限)。</p>
</li>
<li>
<p>将机器人加入至群组的步骤：
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/6.png" alt="Join_Group" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>将机器人加入至频道的步骤：
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/7.png" alt="Join_Channel_S1" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/8.png" alt="Join_Channel_S2" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/9.png" alt="Join_Channel_S3" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/10.png" alt="Join_Channel_S4" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>方法一 (直接在群组/频道内):</p>
<ul>
<li>在群组或频道内直接发送 <code>/sub &lt;RSS 订阅 URL&gt;。</code>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/11.png" alt="Control_Bot_Public" decoding="async" loading="lazy"/></li>
</ul>
</li>
<li>
<p>方法二 (在与 Bot 的私聊中指定目标):</p>
<ul>
<li>
<p>使用用户名: <code>/sub @频道或群组用户名 &lt;RSS 订阅 URL&gt;</code>
例如：<code>/sub @MyChannelName https://example.com/feed.xml</code>
(注意：@ 符号必不可少)<br/>
<img src="/assets/images/how-to-setup-rsstt-debian-12-guide-vps-town/12.png" alt="Control_Bot_in_Private_Chat" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>使用 Chat ID: <code>/sub &lt;频道或群组ID&gt; &lt;RSS 订阅 URL&gt;</code>
例如：<code>/sub -1001234567890 https://example.com/feed.xml</code></p>
<p>(注意：频道/群组 ID 通常以 -100 开头。您可以通过转发频道/群组消息给 @userinfobot 等方式获取 ID)</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 class="rp-toc-include" id="72-管理订阅"><a href="#72-管理订阅" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.2 管理订阅</h3>
<p><strong>对于在群组或频道中的管理可以参见 7.1：</strong><code>在群组或频道内直接发送命令</code>或<code>在与 Bot 的私聊中指定目标</code></p>
<ul>
<li>列出订阅:
发送 <code>/list</code> 查看您（或当前群组/频道）的所有订阅。</li>
<li>取消订阅:<!-- -->
<ul>
<li>发送 <code>/unsub</code>，机器人会列出订阅并提供按钮供您选择取消。</li>
<li>或发送 <code>/unsub &lt;RSS 订阅 URL&gt;</code> 直接指定取消。</li>
</ul>
</li>
<li>全部取消订阅:
发送 <code>/unsub_all</code> 将一次性取消当前聊天（私聊、群组或频道）中的所有 RSS 订阅。请谨慎使用！</li>
<li>停用订阅:
发送 <code>/deactivate_subs</code>，可以选择暂时停止接收某些源的更新，但保留订阅关系。</li>
<li>启用订阅:
发送 <code>/activate_subs</code>，可以选择重新启用之前被停用的订阅源。</li>
</ul>
<h3 class="rp-toc-include" id="73-导入与导出"><a href="#73-导入与导出" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.3 导入与导出</h3>
<p>方便地迁移和备份您的订阅列表。</p>
<ul>
<li>导入订阅:
发送 /import 命令，然后按提示上传一个 OPML 文件 (一种常见的 RSS 订阅列表格式)。机器人会将文件中的订阅源添加到当前聊天。</li>
<li>导出订阅:
发送 /export，机器人会将当前聊天的所有订阅打包成一个 OPML 文件发送给您，方便备份或迁移到其他阅读器。</li>
</ul>
<h3 class="rp-toc-include" id="74-自定义设置"><a href="#74-自定义设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.4 自定义设置</h3>
<p>调整订阅和机器人的行为。</p>
<ul>
<li>单个订阅设置:
发送 /set，可以选择一个已订阅的源，并对其进行详细设置（如：通知格式、过滤规则、Webpage Preview 等）。这是进行精细化管理的入口。</li>
<li>默认设置:
发送 /set_default，可以为之后新添加的订阅设置默认的行为（类似 /set 中的选项，但作为默认值）。</li>
<li>选择语言:
发送 <code>/lang</code>，可以更改机器人界面的显示语言。</li>
</ul>
<h3 class="rp-toc-include" id="75-bot-管理员命令-仅限-manager-用户-id"><a href="#75-bot-管理员命令-仅限-manager-用户-id" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.5 Bot 管理员命令 (仅限 MANAGER 用户 ID)</h3>
<p>这些命令仅限在 docker-compose.yml 中配置为 MANAGER 的用户 ID 在与机器人私聊时使用。</p>
<ul>
<li>测试订阅源:
发送 <code>/test &lt;RSS 订阅 URL&gt;</code> 来检查机器人是否能成功抓取和解析该源。这对于诊断问题非常有用。</li>
<li>更改 Bot 配置:
允许 Bot 管理员修改一些全局性的机器人配置参数。</li>
<li>用户信息:
查看或修改与特定用户相关的信息（通常用于管理）。</li>
</ul>
<h3 class="rp-toc-include" id="76-其他命令"><a href="#76-其他命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.6 其他命令</h3>
<ul>
<li>查看版本:
发送 <code>/version</code> 查看当前运行的 RSStT 机器人版本。</li>
</ul>
<h3 class="rp-toc-include" id="77-获取帮助-help"><a href="#77-获取帮助-help" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.7 获取帮助 (/help):</h3>
<p>发送 <code>/help</code> 显示所有可用命令及其简要说明，您可以自行探索该机器人的更多用法。</p>
<h2 class="rp-toc-include" id="8-结语"><a href="#8-结语" class="rp-header-anchor rp-link" aria-hidden="true">#</a>8. 结语</h2>
<p>恭喜！您已经通过 Docker Compose 在 Debian 12 服务器上成功部署并运行了 RSS-to-Telegram-Bot。这种方式不仅安装过程简洁，后续的维护和更新也十分方便。</p>
<p>现在，您可以开始在 Telegram 上与您的 Bot 互动，添加您想要关注的 RSS 源了。</p>
<p>如果遇到任何问题或想了解更多高级功能，请查阅官方文档：</p>
<ul>
<li><strong>项目仓库:</strong> <a href="https://github.com/Rongronggg9/RSS-to-Telegram-Bot" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/Rongronggg9/RSS-to-Telegram-Bot</a></li>
<li><strong>文档导航:</strong> <a href="https://github.com/Rongronggg9/RSS-to-Telegram-Bot/tree/dev/docs" target="_blank" rel="noopener noreferrer" class="rp-link">docs</a></li>
<li><strong>FAQ:</strong> <a href="https://github.com/Rongronggg9/RSS-to-Telegram-Bot/blob/dev/docs/FAQ.zh.md" target="_blank" rel="noopener noreferrer" class="rp-link">docs/FAQ.zh.md</a></li>
</ul><!--/$-->]]></content>
        <author>
            <name>k08255-lxm</name>
        </author>
        <category label="web-services"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[vps.town 磁盘扩容新手指南]]></title>
        <id>/guide/how-to-setup-lvm-conversion-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-setup-lvm-conversion-vps-town"/>
        <updated>2025-04-18T16:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文详细介绍了如何在不丢失数据的情况下，将普通分区转换为 LVM 分区，并实现磁盘扩容。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="vpstown-磁盘扩容新手指南"><a href="#vpstown-磁盘扩容新手指南" class="rp-header-anchor rp-link" aria-hidden="true">#</a>vps.town 磁盘扩容新手指南<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-准备工作" class="rp-toc-item rp-link" title="1. 准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 准备工作</span></a><a href="#查看当前磁盘情况" class="rp-toc-item rp-link" title="查看当前磁盘情况" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">查看当前磁盘情况</span></a><a href="#2-原磁盘本身扩容" class="rp-toc-item rp-link" title="2. 原磁盘本身扩容" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 原磁盘本身扩容</span></a><a href="#21-取消原磁盘挂载" class="rp-toc-item rp-link" title="2.1 取消原磁盘挂载" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1 取消原磁盘挂载</span></a><a href="#22-转为-gpt-格式" class="rp-toc-item rp-link" title="2.2 转为 GPT 格式" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2 转为 GPT 格式</span></a><a href="#23-调整分区大小" class="rp-toc-item rp-link" title="2.3 调整分区大小" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.3 调整分区大小</span></a><a href="#24-重新挂载" class="rp-toc-item rp-link" title="2.4 重新挂载" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.4 重新挂载</span></a><a href="#25-检查磁盘挂载情况" class="rp-toc-item rp-link" title="2.5 检查磁盘挂载情况" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.5 检查磁盘挂载情况</span></a><a href="#3-新增磁盘扩容与原有磁盘合并" class="rp-toc-item rp-link" title="3. 新增磁盘扩容，与原有磁盘合并" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. 新增磁盘扩容，与原有磁盘合并</span></a><a href="#31-备份原本磁盘数据devvdb-devvdc" class="rp-toc-item rp-link" title="3.1. 备份原本磁盘数据（/dev/vdb-&gt;/dev/vdc）" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.1. 备份原本磁盘数据（/dev/vdb-&gt;/dev/vdc）</span></a><a href="#311-在新硬盘上创建新分区并格式化" class="rp-toc-item rp-link" title="3.1.1 在新硬盘上创建新分区并格式化" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">3.1.1 在新硬盘上创建新分区并格式化</span></a><a href="#312-将旧硬盘内容传输至新硬盘" class="rp-toc-item rp-link" title="3.1.2 将旧硬盘内容传输至新硬盘" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">3.1.2 将旧硬盘内容传输至新硬盘</span></a><a href="#32-修改原磁盘为-lvm-卷组如-devvdb" class="rp-toc-item rp-link" title="3.2 修改原磁盘为 LVM 卷组（如 /dev/vdb）" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.2 修改原磁盘为 LVM 卷组（如 /dev/vdb）</span></a><a href="#321-删除-devvdb-当前分区" class="rp-toc-item rp-link" title="3.2.1 删除 /dev/vdb 当前分区" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">3.2.1 删除 /dev/vdb 当前分区</span></a><a href="#322-将-devvdb-转换为-lvm-卷组" class="rp-toc-item rp-link" title="3.2.2 将 /dev/vdb 转换为 LVM 卷组" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">3.2.2 将 /dev/vdb 转换为 LVM 卷组</span></a><a href="#33-将新硬盘上的数据传至-lvm-卷组" class="rp-toc-item rp-link" title="3.3 将新硬盘上的数据传至 LVM 卷组" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.3 将新硬盘上的数据传至 LVM 卷组</span></a><a href="#34-将新硬盘加入-lvm-卷组" class="rp-toc-item rp-link" title="3.4 将新硬盘加入 LVM 卷组" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.4 将新硬盘加入 LVM 卷组</span></a><a href="#35-扩容-lvm-卷组的文件系统" class="rp-toc-item rp-link" title="3.5 扩容 LVM 卷组的文件系统" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.5 扩容 LVM 卷组的文件系统</span></a><a href="#4-注意事项" class="rp-toc-item rp-link" title="4. 注意事项" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4. 注意事项</span></a></div></details>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>200 元余额</code> 奖励。</p></div></div>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">操作风险提示</div><div class="rp-callout__content"><p>
在进行磁盘扩容操作时，请特别注意以下几点：</p><ol>
<li><strong>数据安全</strong>：操作前必须进行<strong>完整的数据备份</strong>，有准备应急恢复方案。</li>
<li><strong>系统状态</strong>：确保系统处于<strong>稳定</strong>状态，在系统<strong>低负载</strong>情况下进行操作。</li>
<li><strong>操作过程</strong>：<strong>严格按照步骤</strong>执行，<strong>验证</strong>每个步骤完成情况。</li>
<li><strong>后续维护</strong>：<strong>定期检查</strong>磁盘状态，<strong>监控</strong>文件系统使用情况。</li>
</ol></div></div>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">使用须知</div><div class="rp-callout__content"><p>
<strong>请务必先完整阅读后在操作，并确保你具有以下知识：</strong></p><ul>
<li>了解磁盘分区和 LVM 原理</li>
<li>明白数据是无价的</li>
<li>熟悉基本的 Linux 命令操作</li>
<li>了解文件系统的基本概念</li>
</ul><p><strong>系统要求：</strong></p><ul>
<li>Linux 系统（推荐 Ubuntu 20.04 或更高版本）</li>
<li>足够的磁盘空间用于备份</li>
<li>root 权限或 sudo 权限</li>
</ul><p><strong>术语说明：</strong></p><ul>
<li>LVM (Logical Volume Manager)：逻辑卷管理器，用于管理磁盘存储的高级工具</li>
<li>PV (Physical Volume)：物理卷，LVM 的基本存储单元</li>
<li>VG (Volume Group)：卷组，由多个物理卷组成的存储池</li>
<li>LV (Logical Volume)：逻辑卷，从卷组中划分出的逻辑存储空间</li>
</ul><p><strong>文档结构说明：</strong>
本文分为四个主要部分：</p><ol>
<li>准备工作：介绍必要的系统检查和工具安装</li>
<li>原磁盘本身扩容：适用于已有分区需要扩容的情况</li>
<li>新增磁盘扩容：适用于需要合并多个磁盘的情况</li>
<li>注意事项：总结操作过程中的重要提示</li>
</ol></div></div>
<h2 class="rp-toc-include" id="1-准备工作"><a href="#1-准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 准备工作</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 查看系统中是否安装了 LVM 管理工具</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> list</span><span style="color:var(--shiki-token-string)"> --installed</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> grep</span><span style="color:var(--shiki-token-string)"> lvm2</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如提示未安装，执行下面命令安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> lvm2</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 检查系统磁盘情况</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> grep</span><span style="color:var(--shiki-token-string)"> /dev/vd</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> grep</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> vda</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/7.png" alt="系统磁盘列表" decoding="async"/>
<strong>一般默认除系统盘后，系统第一个磁盘是<code>/dev/vdb</code>、第二个是<code>/dev/vdc</code></strong></p>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">磁盘命名说明</summary><div class="rp-callout__content"><p>
在 Linux 系统中，磁盘设备通常按以下规则命名：</p><ul>
<li><code>/dev/vda</code>：系统盘（通常是第一个磁盘）</li>
<li><code>/dev/vdb</code>：第一个数据盘</li>
<li><code>/dev/vdc</code>：第二个数据盘</li>
<li>以此类推...</li>
</ul><p>在物理服务器上，可能会看到 <code>/dev/sda</code>、<code>/dev/sdb</code> 等命名方式，这是不同的磁盘控制器类型导致的命名差异。</p></div></details>
<h3 class="rp-toc-include" id="查看当前磁盘情况"><a href="#查看当前磁盘情况" class="rp-header-anchor rp-link" aria-hidden="true">#</a>查看当前磁盘情况</h3>
<p>使用命令 <code>fdisk -l</code> 或者 <code>lsblk</code> 找到新增的未分区的磁盘。</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">提示</div><div class="rp-callout__content"><p>
如果看不到新增的磁盘，可以执行以下命令扫描：</p><div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-keyword)">for</span><span style="color:var(--shiki-foreground)"> file </span><span style="color:var(--shiki-token-keyword)">in</span><span style="color:var(--shiki-token-string-expression)"> `</span><span style="color:var(--shiki-token-function)">ls</span><span style="color:var(--shiki-token-string)"> /sys/class/scsi_host</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-foreground)">; \</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">do</span><span style="color:var(--shiki-token-function)"> echo</span><span style="color:var(--shiki-token-string-expression)"> &#x27;- - -&#x27;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /sys/class/scsi_host/</span><span style="color:var(--shiki-foreground)">$file</span><span style="color:var(--shiki-token-string)">/scan</span><span style="color:var(--shiki-foreground)"> ; \</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">done</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><p><strong>注意事项：</strong></p><ul>
<li>执行扫描命令后，建议等待几秒钟让系统识别新磁盘</li>
<li>如果仍然无法识别，可以尝试重启系统</li>
<li>在云服务器环境中，可能需要先在控制台挂载新磁盘</li>
</ul></div></div>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">重要提示</div><div class="rp-callout__content"><p><strong>需求确认</strong>：</p><ol>
<li>需要扩容原本的/dev/vdb1 空间以利用/dev/vdb 所有空间，请参考<code>2. 原磁盘本身扩容</code></li>
<li>需要将/dev/vdc 和/dev/vdb 合并使用，请参考<code>3. 新增磁盘扩容，与原有磁盘合并</code></li>
</ol></div></div>
<h2 class="rp-toc-include" id="2-原磁盘本身扩容"><a href="#2-原磁盘本身扩容" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 原磁盘本身扩容</h2>
<p><strong>适用情况</strong>:原磁盘已有分区，但申请了新增了磁盘空间
类似于下图：本身 vdb1 只有 500GB，但对 vdb 磁盘新增了 500G，本次需要对 vdb1 扩容至 1000G</p>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/10.png" alt="lsblk情况" decoding="async" loading="lazy"/></p>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">扩容原理说明</summary><div class="rp-callout__content"><p>
磁盘扩容的基本原理是：</p><ol>
<li>首先取消磁盘挂载，确保数据安全</li>
<li>将分区表转换为 GPT 格式，支持更大容量</li>
<li>调整分区大小，使其占用所有可用空间</li>
<li>扩展文件系统以使用新增的空间</li>
<li>重新挂载并验证扩容结果</li>
</ol></div></details>
<h3 class="rp-toc-include" id="21-取消原磁盘挂载"><a href="#21-取消原磁盘挂载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1 取消原磁盘挂载</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> /etc/fstab</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">注释以下行</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-comment)"># /dev/vdb1 /home ext4 defaults 0 0</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">并</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">ESC</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">和</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">:wq</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">保存退出</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/11.png" alt="fstab情况" decoding="async" loading="lazy"/></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> -a</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">umount</span><span style="color:var(--shiki-token-string)"> /home</span><span style="color:var(--shiki-token-comment)">  ## 取消/home挂载</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">挂载点说明</summary><div class="rp-callout__content"><ul>
<li><code>/etc/fstab</code> 文件记录了系统启动时需要自动挂载的文件系统</li>
<li>在修改挂载配置前，请确保了解每个挂载点的用途</li>
<li>建议在修改前备份 <code>/etc/fstab</code> 文件</li>
</ul></div></details>
<h3 class="rp-toc-include" id="22-转为-gpt-格式"><a href="#22-转为-gpt-格式" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2 转为 GPT 格式</h3>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">gdisk</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span><span style="color:var(--shiki-token-comment)">  # 选择磁盘</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">w</span><span style="color:var(--shiki-token-comment)">               # 写入，是否转为GPT格式</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Y</span><span style="color:var(--shiki-token-comment)">               # 确定转格式</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 等待执行完成</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/12.png" alt="gdisk情况" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="23-调整分区大小"><a href="#23-调整分区大小" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.3 调整分区大小</h3>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 检查文件系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">e2fsck</span><span style="color:var(--shiki-token-string)"> -f</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 使用 parted 调整分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">parted</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span><span style="color:var(--shiki-token-comment)">                      # 操作磁盘</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">               print</span><span style="color:var(--shiki-token-comment)">                 # 打印信息</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">parted</span><span style="color:var(--shiki-foreground)">)       </span><span style="color:var(--shiki-token-function)">resizepart</span><span style="color:var(--shiki-token-constant)"> 1</span><span style="color:var(--shiki-token-comment)">          # 选择分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">End?</span><span style="color:var(--shiki-foreground)"> [500GB]</span><span style="color:var(--shiki-token-keyword)">?</span><span style="color:var(--shiki-foreground)">  100%                  </span><span style="color:var(--shiki-token-comment)"># 扩展到全部空间</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">parted</span><span style="color:var(--shiki-foreground)">)       </span><span style="color:var(--shiki-token-function)">quit</span><span style="color:var(--shiki-token-comment)">                  # 退出</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 扩展文件系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">resize2fs</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/13.png" alt="调整分区大小" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="24-重新挂载"><a href="#24-重新挂载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.4 重新挂载</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span><span style="color:var(--shiki-token-string)"> /home</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> /etc/fstab</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 注释以下行`/dev/vdb1 /home ext4 defaults 0 0`并`ESC`和`:wq`保存退出</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/14.png" alt="fstab情况2" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="25-检查磁盘挂载情况"><a href="#25-检查磁盘挂载情况" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.5 检查磁盘挂载情况</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> -a</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">lsblk</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">df</span><span style="color:var(--shiki-token-string)"> -hT</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/15.png" alt="检查磁盘挂载情况" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="3-新增磁盘扩容与原有磁盘合并"><a href="#3-新增磁盘扩容与原有磁盘合并" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 新增磁盘扩容，与原有磁盘合并</h2>
<p><strong>适用情况:已有磁盘/dev/vdb，需要将新磁盘/dev/vdc 合并，即把/dev/vdc 空间和/dev/vdb 合并使用</strong></p>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">LVM 扩容优势</summary><div class="rp-callout__content"><p>
使用 LVM 进行磁盘扩容的主要优势：</p><ol>
<li>支持在线扩容，无需停机</li>
<li>可以灵活管理多个物理磁盘</li>
<li>支持动态调整分区大小</li>
<li>提供更好的数据管理能力</li>
</ol></div></details>
<h3 class="rp-toc-include" id="31-备份原本磁盘数据devvdb-devvdc"><a href="#31-备份原本磁盘数据devvdb-devvdc" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1. 备份原本磁盘数据（/dev/vdb-&gt;/dev/vdc）</h3>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">数据备份重要性</div><div class="rp-callout__content"><p>
在进行任何磁盘操作前，数据备份是必不可少的步骤：</p><ol>
<li>确保备份目标磁盘有足够空间</li>
<li>建议在备份前进行数据完整性检查</li>
<li>备份完成后进行验证</li>
<li>保留备份直到确认新系统运行正常</li>
</ol></div></div>
<h4 class="rp-toc-include" id="311-在新硬盘上创建新分区并格式化"><a href="#311-在新硬盘上创建新分区并格式化" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1.1 在新硬盘上创建新分区并格式化</h4>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 查看新硬盘信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建新分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">g</span><span style="color:var(--shiki-token-comment)">    # 新建一份 GPT 分区表</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">n</span><span style="color:var(--shiki-token-comment)">    # 添加新分区</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 分区号</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 第一个扇区</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 大小</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">w</span><span style="color:var(--shiki-token-comment)">    # 将分区表写入磁盘并退出</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 格式化分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkfs.ext4</span><span style="color:var(--shiki-token-string)"> /dev/vdc1</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 验证分区创建</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> /dev/vdc1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="312-将旧硬盘内容传输至新硬盘"><a href="#312-将旧硬盘内容传输至新硬盘" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1.2 将旧硬盘内容传输至新硬盘</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 建议先验证源分区和目标分区的大小，需求 vdc 区大于或等于 vdb 区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span><span style="color:var(--shiki-token-string)"> /dev/vdc1</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 开始数据迁移</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">dd</span><span style="color:var(--shiki-token-string)"> if=/dev/vdb1</span><span style="color:var(--shiki-token-string)"> of=/dev/vdc1</span><span style="color:var(--shiki-token-string)"> bs=512M</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 可以再开一个终端执行此命令查看进度</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">watch</span><span style="color:var(--shiki-token-string)"> -n</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> -USR1</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">ps</span><span style="color:var(--shiki-token-string)"> aux</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> grep</span><span style="color:var(--shiki-token-string-expression)"> &quot;dd if=/dev/vdb1&quot;</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">grep</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> grep</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">awk</span><span style="color:var(--shiki-token-string-expression)"> &#x27;{print $2}&#x27;</span><span style="color:var(--shiki-foreground)">)</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">数据迁移注意事项</div><div class="rp-callout__content"><ul>
<li>迁移过程中请勿中断操作</li>
<li>建议在迁移前进行数据完整性检查</li>
<li>迁移完成后务必进行验证</li>
<li>如果发现数据不一致，请立即停止操作并联系技术支持</li>
</ul></div></div>
<h3 class="rp-toc-include" id="32-修改原磁盘为-lvm-卷组如-devvdb"><a href="#32-修改原磁盘为-lvm-卷组如-devvdb" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2 修改原磁盘为 LVM 卷组（如 /dev/vdb）</h3>
<h4 class="rp-toc-include" id="321-删除-devvdb-当前分区"><a href="#321-删除-devvdb-当前分区" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2.1 删除 /dev/vdb 当前分区</h4>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 卸载正在使用的硬盘</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">umount</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果提示设备正忙，可以使用 fuser 命令查看正在操作硬盘的进程，并合理关闭它们</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fuser</span><span style="color:var(--shiki-token-string)"> -cu</span><span style="color:var(--shiki-token-string)"> /dev/vdb1</span><span style="color:var(--shiki-token-comment)"> # 找到进程号</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">ps</span><span style="color:var(--shiki-token-string)"> -ef</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">grep</span><span style="color:var(--shiki-token-string)"> 进程号</span><span style="color:var(--shiki-token-comment)">  # 找到对应进程</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">kill</span><span style="color:var(--shiki-token-string)"> -9</span><span style="color:var(--shiki-token-string)"> 进程号</span><span style="color:var(--shiki-token-comment)">      # 杀死进程</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如当前终端处于 /home 路径，切换到其他路径，如 `cd /`，避免占用</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 删除磁盘分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">d</span><span style="color:var(--shiki-token-comment)">    # 删除分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">w</span><span style="color:var(--shiki-token-comment)">    # 将分区表写入磁盘并退出</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/3.png" alt="删除分区操作" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="322-将-devvdb-转换为-lvm-卷组"><a href="#322-将-devvdb-转换为-lvm-卷组" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2.2 将 /dev/vdb 转换为 LVM 卷组</h4>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 检查当前磁盘状态</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">lsblk</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 清除磁盘签名，会删除 /dev/vdb 数据</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wipefs</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建物理卷 (PV)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">pvcreate</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建卷组 (VG)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vgcreate</span><span style="color:var(--shiki-token-string)"> vg_data</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建逻辑卷 (LV)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">lvcreate</span><span style="color:var(--shiki-token-string)"> -n</span><span style="color:var(--shiki-token-string)"> lv_data</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> 100%FREE</span><span style="color:var(--shiki-token-string)"> vg_data</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 格式化逻辑卷 (LV)，**需要等一会儿执行完成**</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkfs.ext4</span><span style="color:var(--shiki-token-string)"> /dev/mapper/vg_data-lv_data</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 挂载逻辑卷 /home</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> /dev/mapper/vg_data-lv_data</span><span style="color:var(--shiki-token-string)"> /home</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 设置自动挂载</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> /etc/fstab</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 按a进入编辑模式，添加下面一行</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">/dev/mapper/vg_data-lv_data</span><span style="color:var(--shiki-token-string)"> /home</span><span style="color:var(--shiki-token-string)"> ext4</span><span style="color:var(--shiki-token-string)"> defaults</span><span style="color:var(--shiki-token-constant)"> 0</span><span style="color:var(--shiki-token-constant)"> 0</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># esc 后再 :wq 保存</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 手动挂载</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> -a</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 检查挂载情况</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">df</span><span style="color:var(--shiki-token-string)"> -h</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/4.png" alt="LVM 创建过程1" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/9.png" alt="LVM 创建过程2" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/6.png" alt="fstab 信息" decoding="async" loading="lazy"/></p>
<p><strong>重启机器后，检查挂载情况</strong></p>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/5.png" alt="重启后挂载检查" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="33-将新硬盘上的数据传至-lvm-卷组"><a href="#33-将新硬盘上的数据传至-lvm-卷组" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.3 将新硬盘上的数据传至 LVM 卷组</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 开始数据迁移，**等待执行完成**</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">dd</span><span style="color:var(--shiki-token-string)"> if=/dev/vdc1</span><span style="color:var(--shiki-token-string)"> of=/dev/mapper/vg_data-lv_data</span><span style="color:var(--shiki-token-string)"> bs=512M</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 可以再开一个终端执行此命令查看进度</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">watch</span><span style="color:var(--shiki-token-string)"> -n</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-string)"> kill</span><span style="color:var(--shiki-token-string)"> -USR1</span><span style="color:var(--shiki-foreground)"> $(</span><span style="color:var(--shiki-token-function)">ps</span><span style="color:var(--shiki-token-string)"> aux</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> grep</span><span style="color:var(--shiki-token-string-expression)"> &quot;dd if=/dev/vdc1&quot;</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">grep</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> grep</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">awk</span><span style="color:var(--shiki-token-string-expression)"> &#x27;{print $2}&#x27;</span><span style="color:var(--shiki-foreground)">)</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="34-将新硬盘加入-lvm-卷组"><a href="#34-将新硬盘加入-lvm-卷组" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.4 将新硬盘加入 LVM 卷组</h3>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 警告</div><div class="rp-callout__content"><p>高危操作，请小心执行</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 删除原有分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fdisk</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">d</span><span style="color:var(--shiki-token-comment)">    # 删除分区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">n</span><span style="color:var(--shiki-token-comment)">    # 添加新分区</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 分区号</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 第一个扇区</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">     # 默认回车 大小</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">w</span><span style="color:var(--shiki-token-comment)">    # 将分区表写入磁盘并退出</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 通知操作系统分区表更新</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">partprobe</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 查看 pv 信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">pvs</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建 pv</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">pvcreate</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 扩展卷组(VG)空间</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vgextend</span><span style="color:var(--shiki-token-string)"> vg_data</span><span style="color:var(--shiki-token-string)"> /dev/vdc</span><span style="color:var(--shiki-token-comment)"> # 往 vg_data 添加</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">lvextend</span><span style="color:var(--shiki-token-string)"> -l</span><span style="color:var(--shiki-token-string)"> +100%FREE</span><span style="color:var(--shiki-token-string)"> /dev/mapper/vg_data-lv_data</span><span style="color:var(--shiki-token-comment)"> # 100%空间分配</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="35-扩容-lvm-卷组的文件系统"><a href="#35-扩容-lvm-卷组的文件系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.5 扩容 LVM 卷组的文件系统</h3>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">文件系统扩容注意事项</div><div class="rp-callout__content"><ul>
<li>确保文件系统支持在线扩容</li>
<li>扩容过程中不要中断操作</li>
<li>建议在扩容后检查文件系统完整性</li>
</ul></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 检查当前文件系统类型</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">df</span><span style="color:var(--shiki-token-string)"> -hT</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 根据文件系统类型选择扩容命令</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果是 ext4 文件系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">resize2fs</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /dev/mapper/vg_data-lv_data</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果是 xfs 文件系统</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># xfs_growfs /dev/mapper/vg_data-lv_data</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 检查挂载信息</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">df</span><span style="color:var(--shiki-token-string)"> -hT</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-setup-lvm-conversion-vps-town/8.png" alt="文件系统扩容结果" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="4-注意事项"><a href="#4-注意事项" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 注意事项</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">常见问题处理</div><div class="rp-callout__content"><p>
如果遇到问题，可以尝试以下解决方案：</p><ol>
<li>
<p><strong>磁盘无法识别</strong></p>
<ul>
<li>检查磁盘是否已正确连接</li>
<li>执行磁盘扫描命令</li>
<li>检查系统日志</li>
</ul>
</li>
<li>
<p><strong>挂载失败</strong></p>
<ul>
<li>检查文件系统是否损坏</li>
<li>验证挂载点权限</li>
<li>检查 fstab 配置</li>
</ul>
</li>
<li>
<p><strong>LVM 操作失败</strong></p>
<ul>
<li>检查 PV、VG、LV 状态</li>
<li>确保有足够的空间</li>
<li>查看系统日志</li>
</ul>
</li>
</ol></div></div><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="system-security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在 VPS.Town 上部署 Vaultwarden 密码管理器完全指南]]></title>
        <id>/guide/how-to-using-vaultwarden-as-password-manager-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-using-vaultwarden-as-password-manager-vps-town"/>
        <updated>2025-04-16T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[本教程详细介绍如何使用 Docker 部署 Vaultwarden 密码管理器，包括环境准备、安装配置、反向代理设置、账户管理、浏览器插件使用、安全建议和故障排除等内容，帮助您搭建一个安全可靠的自托管密码管理解决方案。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="在-vpstown-上部署-vaultwarden-密码管理器完全指南"><a href="#在-vpstown-上部署-vaultwarden-密码管理器完全指南" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 VPS.Town 上部署 Vaultwarden 密码管理器完全指南<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>--</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#前言" class="rp-toc-item rp-link" title="前言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">前言</span></a><a href="#vaultwarden-的主要特点" class="rp-toc-item rp-link" title="Vaultwarden 的主要特点：" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Vaultwarden 的主要特点：</span></a><a href="#1-安装-docker-和-docker-compose" class="rp-toc-item rp-link" title="1. 安装 Docker 和 Docker Compose" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 安装 Docker 和 Docker Compose</span></a><a href="#2-安装-vaultwarden" class="rp-toc-item rp-link" title="2. 安装 vaultwarden" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 安装 vaultwarden</span></a><a href="#3-配置反向代理" class="rp-toc-item rp-link" title="3. 配置反向代理" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. 配置反向代理</span></a><a href="#4-账户设置和浏览器插件使用" class="rp-toc-item rp-link" title="4. 账户设置和浏览器插件使用" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4. 账户设置和浏览器插件使用</span></a><a href="#41-创建账户" class="rp-toc-item rp-link" title="4.1 创建账户" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">4.1 创建账户</span></a><a href="#42-安装浏览器扩展" class="rp-toc-item rp-link" title="4.2 安装浏览器扩展" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">4.2 安装浏览器扩展</span></a><a href="#5-安全建议" class="rp-toc-item rp-link" title="5. 安全建议" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5. 安全建议</span></a><a href="#6-故障排除" class="rp-toc-item rp-link" title="6. 故障排除" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">6. 故障排除</span></a><a href="#61-常见问题" class="rp-toc-item rp-link" title="6.1 常见问题" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">6.1 常见问题</span></a><a href="#62-日志查看" class="rp-toc-item rp-link" title="6.2 日志查看" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">6.2 日志查看</span></a><a href="#7-备份与恢复" class="rp-toc-item rp-link" title="7. 备份与恢复" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">7. 备份与恢复</span></a><a href="#71-备份数据" class="rp-toc-item rp-link" title="7.1 备份数据" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.1 备份数据</span></a><a href="#72-恢复数据" class="rp-toc-item rp-link" title="7.2 恢复数据" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">7.2 恢复数据</span></a><a href="#8-更新-vaultwarden" class="rp-toc-item rp-link" title="8. 更新 Vaultwarden" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">8. 更新 Vaultwarden</span></a></div></details>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>在当今数字化时代，我们每天都需要使用大量的账号和密码。使用简单或重复的密码会带来严重的安全风险，而记住众多复杂密码又几乎不可能。这就是为什么我们需要一个可靠的密码管理工具。</p>
<p>Vaultwarden 是 Bitwarden 的一个非官方实现，它是一个开源的密码管理解决方案，允许您安全地存储和管理您的密码、信用卡信息、身份信息和其他敏感数据。与商业密码管理器不同，Vaultwarden 可以自托管，这意味着您的数据完全由您自己控制，不依赖于第三方服务。</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">为什么选择 Vaultwarden</div><div class="rp-callout__content"><p>相比其他密码管理工具，Vaultwarden 具有以下优势：</p><ul>
<li>完全开源，代码透明可审计</li>
<li>可以完全控制自己的数据</li>
<li>资源占用低，适合在 VPS 上运行</li>
<li>支持所有主流平台和浏览器</li>
</ul></div></div>
<h3 class="rp-toc-include" id="vaultwarden-的主要特点"><a href="#vaultwarden-的主要特点" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Vaultwarden 的主要特点：</h3>
<ul>
<li><strong>开源且免费</strong>：完全开源，无需支付订阅费用</li>
<li><strong>自托管</strong>：您的数据存储在您自己的服务器上，提高隐私保护</li>
<li><strong>跨平台支持</strong>：提供 Windows、macOS、Linux、iOS 和 Android 客户端</li>
<li><strong>浏览器扩展</strong>：支持 Chrome、Firefox、Safari 等主流浏览器</li>
<li><strong>强大的加密</strong>：使用 AES-256 加密、PBKDF2 和 SHA-256 哈希算法</li>
<li><strong>资源占用低</strong>：相比官方 Bitwarden 服务器，Vaultwarden 对系统资源要求更低</li>
<li><strong>功能丰富</strong>：支持密码生成、安全笔记、身份信息管理、文件附件等</li>
</ul>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">安全提示</div><div class="rp-callout__content"><p>在开始部署之前，请确保：</p><ol>
<li>您的服务器已经配置了防火墙</li>
<li>使用 HTTPS 访问 Vaultwarden</li>
<li>定期备份您的数据</li>
<li>使用强密码保护您的账户</li>
</ol></div></div>
<p>本教程将指导您如何使用 Docker 在自己的服务器上部署 Vaultwarden，并进行基本配置和使用。</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">适用环境</div><div class="rp-callout__content"><p>
本教程适用于 Ubuntu 22.04 系统，其他 Linux 发行版可能需要调整部分命令。</p></div></div>
<h2 class="rp-toc-include" id="1-安装-docker-和-docker-compose"><a href="#1-安装-docker-和-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 安装 Docker 和 Docker Compose</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 更新软件包索引，下载 Docker 官方 GPG 密钥，并允许所有人读取</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> ca-certificates</span><span style="color:var(--shiki-token-string)"> curl</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-constant)"> 0755</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://download.docker.com/linux/ubuntu/gpg</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> chmod</span><span style="color:var(--shiki-token-string)"> a+r</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 将 Docker 仓库添加到 Apt 源列表</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  &quot;deb [arch=$(</span><span style="color:var(--shiki-token-function)">dpkg</span><span style="color:var(--shiki-token-string)"> --print-architecture</span><span style="color:var(--shiki-token-string-expression)">) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  $(</span><span style="color:var(--shiki-token-function)">.</span><span style="color:var(--shiki-token-string)"> /etc/os-release</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;${UBUNTU_CODENAME</span><span style="color:var(--shiki-token-keyword)">:-</span><span style="color:var(--shiki-token-string-expression)">$VERSION_CODENAME}&quot;) stable&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/docker.list</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /dev/null</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 安装 docker 软件包</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> docker-ce</span><span style="color:var(--shiki-token-string)"> docker-ce-cli</span><span style="color:var(--shiki-token-string)"> containerd.io</span><span style="color:var(--shiki-token-string)"> docker-buildx-plugin</span><span style="color:var(--shiki-token-string)"> docker-compose-plugin</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 启动 docker 服务和开机自启</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 验证安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> version</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">验证安装</div><div class="rp-callout__content"><p>
如果看到类似以下输出，说明安装成功：</p><div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>● docker.service - Docker Application Container Engine</span></span>
<span class="line"><span>     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)</span></span>
<span class="line"><span>     Active: active (running) since ...</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div></div></div>
<h2 class="rp-toc-include" id="2-安装-vaultwarden"><a href="#2-安装-vaultwarden" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 安装 vaultwarden</h2>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">准备工作</div><div class="rp-callout__content"><p>在开始安装之前，请确保：</p><ol>
<li>已经配置好域名并指向您的服务器</li>
<li>已经安装好 nginx 并配置好 SSL 证书</li>
<li>防火墙已开放相应端口</li>
</ol></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建数据目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建 docker-compose.yml 文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> cat</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden/docker-compose.yml</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">services:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  vaultwarden:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    image: vaultwarden/server:latest</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    container_name: vaultwarden</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    restart: unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    environment:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      DOMAIN: &quot;https://vw.domain.tld/vault&quot;  ## 修改为您自己的域名</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    volumes:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      - ./vw-data/:/data/</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    ports:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      - 10080:80  ## （可选）修改前面的映射端口</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 启动服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>执行<code>docker ps</code>查看程序启动状态
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744816150283.png" alt="Docker 容器运行状态检查" decoding="async"/></p>
<h2 class="rp-toc-include" id="3-配置反向代理"><a href="#3-配置反向代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 配置反向代理</h2>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">反向代理配置</div><div class="rp-callout__content"><p>
我们建议使用 Nginx 作为反向代理，并配置 SSL 证书以确保安全。</p></div></div>
<p>以 <code>nginx</code> 为例，修改 nginx.conf，添加类似于如下配置：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">location</span><span style="color:var(--shiki-token-string)"> /vault/</span><span style="color:var(--shiki-token-string)"> {</span><span style="color:var(--shiki-token-comment)"> # 注意这个路径和上面 docker 配置的域名路径名一致</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_http_version</span><span style="color:var(--shiki-token-constant)"> 1.1</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_set_header</span><span style="color:var(--shiki-token-string)"> Host</span><span style="color:var(--shiki-foreground)"> $host;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Real-IP</span><span style="color:var(--shiki-foreground)"> $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-For</span><span style="color:var(--shiki-foreground)"> $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-Proto</span><span style="color:var(--shiki-foreground)"> $scheme;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    proxy_pass</span><span style="color:var(--shiki-token-string)"> http://127.0.0.1:10080</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>重启 nginx：<code>service nginx restart</code></p>
<p>使用浏览器访问 <code>https://vw.domain.tld/vault</code></p>
<h2 class="rp-toc-include" id="4-账户设置和浏览器插件使用"><a href="#4-账户设置和浏览器插件使用" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 账户设置和浏览器插件使用</h2>
<h3 class="rp-toc-include" id="41-创建账户"><a href="#41-创建账户" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.1 创建账户</h3>
<ol>
<li>
<p>点击&quot;创建账户&quot;
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817120248.png" alt="创建新账户界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>填写您的账户信息
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817144425.png" alt="账户信息填写表单" decoding="async" loading="lazy"/></p>
</li>
</ol>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">密码安全</div><div class="rp-callout__content"><ul>
<li>使用强密码（至少 12 个字符，包含大小写字母、数字和特殊字符）</li>
<li>建议使用密码生成器生成主密码</li>
<li>妥善保管您的主密码，这是恢复账户的唯一方式</li>
</ul></div></div>
<ol start="3">
<li>创建完成后，登录您的账户
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817244800.png" alt="登录界面" decoding="async" loading="lazy"/></li>
</ol>
<h3 class="rp-toc-include" id="42-安装浏览器扩展"><a href="#42-安装浏览器扩展" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.2 安装浏览器扩展</h3>
<ol>
<li>
<p>安装扩展
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817305288.png" alt="浏览器扩展安装指引" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>配置扩展信息，固定到标签栏
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817425109.png" alt="扩展配置和固定到标签栏" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>选择自托管，输入您的域名（如 <code>https://vw.domain.tld/vault</code>），再输入您注册的账户和密码
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817462403.png" alt="自托管服务器配置界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>之后登录或注册网站时，会提示您是否要保存密码
<img src="/assets/images/how-to-using-vaultwarden-as-password-manager-vps-town/1744817728258.png" alt="密码保存提示界面" decoding="async" loading="lazy"/></p>
</li>
</ol>
<h2 class="rp-toc-include" id="5-安全建议"><a href="#5-安全建议" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. 安全建议</h2>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">重要安全提示</div><div class="rp-callout__content"><ol>
<li>定期备份您的数据目录（<code>/opt/vaultwarden/vw-data/</code>）</li>
<li>启用双因素认证（2FA）</li>
<li>定期更新 Vaultwarden 到最新版本</li>
<li>监控服务器日志，及时发现异常</li>
<li>使用强密码保护您的账户</li>
</ol></div></div>
<h2 class="rp-toc-include" id="6-故障排除"><a href="#6-故障排除" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6. 故障排除</h2>
<h3 class="rp-toc-include" id="61-常见问题"><a href="#61-常见问题" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6.1 常见问题</h3>
<ol>
<li>
<p><strong>无法访问 Web 界面</strong></p>
<ul>
<li>检查 Docker 容器是否正常运行：<code>docker ps</code></li>
<li>检查端口是否正确映射：<code>netstat -tulpn | grep 10080</code></li>
<li>检查 Nginx 配置是否正确</li>
</ul>
</li>
<li>
<p><strong>无法保存密码</strong></p>
<ul>
<li>检查浏览器扩展是否正确配置</li>
<li>确认服务器地址是否正确</li>
<li>检查网络连接是否正常</li>
</ul>
</li>
<li>
<p><strong>数据同步问题</strong></p>
<ul>
<li>检查服务器状态</li>
<li>尝试重新登录账户</li>
<li>检查网络连接</li>
</ul>
</li>
</ol>
<h3 class="rp-toc-include" id="62-日志查看"><a href="#62-日志查看" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6.2 日志查看</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 查看容器日志</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> vaultwarden</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 实时查看日志</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> -f</span><span style="color:var(--shiki-token-string)"> vaultwarden</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="7-备份与恢复"><a href="#7-备份与恢复" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7. 备份与恢复</h2>
<h3 class="rp-toc-include" id="71-备份数据"><a href="#71-备份数据" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.1 备份数据</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建备份目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /backup/vaultwarden</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 备份数据</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">tar</span><span style="color:var(--shiki-token-string)"> -czf</span><span style="color:var(--shiki-token-string)"> /backup/vaultwarden/backup-</span><span style="color:var(--shiki-foreground)">$(</span><span style="color:var(--shiki-token-function)">date</span><span style="color:var(--shiki-token-string)"> +%Y%m%d</span><span style="color:var(--shiki-foreground)">)</span><span style="color:var(--shiki-token-string)">.tar.gz</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden/vw-data/</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="72-恢复数据"><a href="#72-恢复数据" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7.2 恢复数据</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 停止服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> down</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 恢复数据</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">tar</span><span style="color:var(--shiki-token-string)"> -xzf</span><span style="color:var(--shiki-token-string)"> /backup/vaultwarden/backup-YYYYMMDD.tar.gz</span><span style="color:var(--shiki-token-string)"> -C</span><span style="color:var(--shiki-token-string)"> /</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重启服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">备份建议</div><div class="rp-callout__content"><ul>
<li>建议设置自动备份脚本</li>
<li>将备份文件存储在安全的位置</li>
<li>定期测试备份的可用性</li>
</ul></div></div>
<h2 class="rp-toc-include" id="8-更新-vaultwarden"><a href="#8-更新-vaultwarden" class="rp-header-anchor rp-link" aria-hidden="true">#</a>8. 更新 Vaultwarden</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 进入项目目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /opt/vaultwarden</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 拉取最新镜像</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> pull</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重启服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">更新建议</div><div class="rp-callout__content"><ul>
<li>更新前先备份数据</li>
<li>关注 Vaultwarden 的更新日志</li>
<li>建议定期检查更新</li>
</ul></div></div><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="system-security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何使用 Acme.sh 自动更新 Nginx 网站证书]]></title>
        <id>/guide/how-to-use-acme.sh-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-use-acme.sh-vps-town"/>
        <updated>2025-04-15T07:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文详细介绍了如何使用 Acme.sh 工具自动申请和更新 SSL 证书，包括安装配置、CloudFlare DNS API验证、证书申请流程以及 Nginx 服务器配置 SSL 证书的具体步骤。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何使用-acmesh-自动更新-nginx-网站证书"><a href="#如何使用-acmesh-自动更新-nginx-网站证书" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何使用 Acme.sh 自动更新 Nginx 网站证书<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>--</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-acmesh-安装" class="rp-toc-item rp-link" title="1. acme.sh 安装" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. acme.sh 安装</span></a><a href="#2-使用-cloudflare-dns-api-验证" class="rp-toc-item rp-link" title="2. 使用 CloudFlare DNS api 验证" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 使用 CloudFlare DNS api 验证</span></a><a href="#21-添加您的域名到-cloudflare" class="rp-toc-item rp-link" title="2.1. 添加您的域名到 CloudFlare" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1. 添加您的域名到 CloudFlare</span></a><a href="#22-创建-api-令牌" class="rp-toc-item rp-link" title="2.2. 创建 API 令牌" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2. 创建 API 令牌</span></a><a href="#23-区域-id-和账户-id" class="rp-toc-item rp-link" title="2.3. 区域 ID 和账户 ID" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.3. 区域 ID 和账户 ID</span></a><a href="#24-申请-ssl-域名证书" class="rp-toc-item rp-link" title="2.4. 申请 SSL 域名证书" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.4. 申请 SSL 域名证书</span></a><a href="#3-nginx-等程序配置-ssl" class="rp-toc-item rp-link" title="3. nginx 等程序配置 ssl" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. nginx 等程序配置 ssl</span></a></div></details>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">介绍</div><div class="rp-callout__content"><p>Acme.sh 是一个纯粹用 Shell（Unix shell）语言编写的 ACME 协议客户端。可自动帮您申请 SSL 证书并自动更新。</p></div></div>
<h2 class="rp-toc-include" id="1-acmesh-安装"><a href="#1-acmesh-安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. acme.sh 安装</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 将 my@example.com 换成您自己的邮箱地址</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> https://get.acme.sh</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sh</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> email=my@example.com</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">小贴士</div><div class="rp-callout__content"><p>
安装完成后，程序安装在<code>/root/.acme.sh/</code>下，且可在任何地方使用<code>acme.sh</code>命令</p></div></div>
<p><img src="/assets/images/how-to-use-acme.sh-vps-town/1.png" alt="acme.sh安装完成界面" decoding="async"/></p>
<h2 class="rp-toc-include" id="2-使用-cloudflare-dns-api-验证"><a href="#2-使用-cloudflare-dns-api-验证" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 使用 CloudFlare DNS api 验证</h2>
<h3 class="rp-toc-include" id="21-添加您的域名到-cloudflare"><a href="#21-添加您的域名到-cloudflare" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1. 添加您的域名到 CloudFlare</h3>
<ul>
<li>
<p><code>账户主页</code>-<code>添加域</code>：按照页面指示添加您的个人域名
<img src="/assets/images/how-to-use-acme.sh-vps-town/2.png" alt="CloudFlare添加域名界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p><code>选择计划</code>：选择下方的<code>free计划</code>，点击<code>继续</code>
<img src="/assets/images/how-to-use-acme.sh-vps-town/3.png" alt="CloudFlare选择免费计划界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p><code>dns记录</code>：会自动导入已有的 dns 记录，检查没什么问题，点击继续
<img src="/assets/images/how-to-use-acme.sh-vps-town/4.png" alt="CloudFlare DNS记录导入界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p><code>更新名称服务器</code>：根据指引，在您域名之前网站，修改 ns 记录。主要删除原来的 dns 锁定和删除并添加新的 ns 记录
<img src="/assets/images/how-to-use-acme.sh-vps-town/5.png" alt="CloudFlare更新名称服务器界面" decoding="async" loading="lazy"/></p>
</li>
<li>
<p><code>验证</code>：修改完成后，检查添加状态是否正常，如不正常，可手动最下方立即检查或手动检查添加过程是否正确
<img src="/assets/images/how-to-use-acme.sh-vps-town/6.png" alt="CloudFlare域名验证界面" decoding="async" loading="lazy"/></p>
</li>
</ul>
<h3 class="rp-toc-include" id="22-创建-api-令牌"><a href="#22-创建-api-令牌" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2. 创建 API 令牌</h3>
<p><img src="/assets/images/how-to-use-acme.sh-vps-town/7.png" alt="CloudFlare API令牌创建入口" decoding="async" loading="lazy"/></p>
<ul>
<li>点击创建令牌
<img src="/assets/images/how-to-use-acme.sh-vps-town/8.png" alt="CloudFlare创建令牌界面" decoding="async" loading="lazy"/></li>
<li>选择使用模版 <code>编辑区域dns</code>
<img src="/assets/images/how-to-use-acme.sh-vps-town/9.png" alt="CloudFlare选择API模板界面" decoding="async" loading="lazy"/></li>
<li>权限配置
<img src="/assets/images/how-to-use-acme.sh-vps-town/10.png" alt="CloudFlare API权限配置界面" decoding="async" loading="lazy"/></li>
<li>确定创建令牌
<img src="/assets/images/how-to-use-acme.sh-vps-town/11.png" alt="CloudFlare确认创建令牌界面" decoding="async" loading="lazy"/></li>
<li>复制生成的 token 值
<img src="/assets/images/how-to-use-acme.sh-vps-town/12.png" alt="CloudFlare API令牌生成结果" decoding="async" loading="lazy"/></li>
</ul>
<h3 class="rp-toc-include" id="23-区域-id-和账户-id"><a href="#23-区域-id-和账户-id" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.3. 区域 ID 和账户 ID</h3>
<p><img src="/assets/images/how-to-use-acme.sh-vps-town/13.png" alt="CloudFlare区域ID和账户ID位置" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="24-申请-ssl-域名证书"><a href="#24-申请-ssl-域名证书" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.4. 申请 SSL 域名证书</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># API令牌：上述步骤获取的令牌token值</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> CF_Token</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 以下二选一</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 单个域名：上述区域ID值</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">export</span><span style="color:var(--shiki-foreground)"> CF_Zone_ID</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;763eac4f1bcebd8b5c95e9fc50d010b4&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 多个域名：上述账户ID值</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># export CF_Account_ID=&quot;763eac4f1bcebd8b5c95e9fc50d010b4&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ul>
<li>配置以上环境变量后，手动执行申请</li>
</ul>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 以下申请ssl通配证书，根据提示操作</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">acme.sh</span><span style="color:var(--shiki-token-string)"> --issue</span><span style="color:var(--shiki-token-string)"> --dns</span><span style="color:var(--shiki-token-string)"> dns_cf</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> example.com</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string-expression)"> &#x27;*.example.com&#x27;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">小贴士</div><div class="rp-callout__content"><p>
设置和使用的任何环境变量都将保存在 ~/.acme.sh/account.conf</p></div></div>
<p>检查脚本执行日志，是否获取证书正常，提示证书文件保存在何地
<img src="/assets/images/how-to-use-acme.sh-vps-town/14.png" alt="acme.sh证书申请成功界面" decoding="async" loading="lazy"/></p>
<ul>
<li>后续定期更新，是由计划任务 cron 里的定期检查和自动更新
<img src="/assets/images/how-to-use-acme.sh-vps-town/15.png" alt="acme.sh自动更新计划任务" decoding="async" loading="lazy"/></li>
</ul>
<h2 class="rp-toc-include" id="3-nginx-等程序配置-ssl"><a href="#3-nginx-等程序配置-ssl" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. nginx 等程序配置 ssl</h2>
<p>在<code>nginx.conf</code>配置文件，添加 ssl 相关配置并重启服务，浏览器检查 https 访问是否正常。以下供参考：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">        ssl_certificate</span><span style="color:var(--shiki-token-string)">      /opt/ssl_cert.pem</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ssl_certificate_key</span><span style="color:var(--shiki-token-string)"> /opt/ssl_key.pem</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ssl_protocols</span><span style="color:var(--shiki-token-string)">             TLSv1.2</span><span style="color:var(--shiki-token-string)"> TLSv1.3</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ssl_prefer_server_ciphers</span><span style="color:var(--shiki-token-string)"> on</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ssl_ciphers</span><span style="color:var(--shiki-token-string)">               ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        ssl_ecdh_curve</span><span style="color:var(--shiki-token-string)">            secp521r1:secp384r1:secp256r1:x25519</span><span style="color:var(--shiki-foreground)">;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-use-acme.sh-vps-town/16.png" alt="Nginx SSL配置示例" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="system-security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 服务器上安装并配置青龙面板]]></title>
        <id>/guide/how-to-setup-qinglong-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-setup-qinglong-vps-town"/>
        <updated>2025-04-14T16:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文详细介绍了如何在 VPS.Town 服务器上安装并配置青龙面板，包括安装 Docker 和 Docker Compose、创建路径、创建 docker compose 文件、启动青龙面板、配置通知、设置用户名和密码等步骤。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-服务器上安装并配置青龙面板"><a href="#如何在-vpstown-服务器上安装并配置青龙面板" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 服务器上安装并配置青龙面板<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 150 元</code> (共三篇文章) 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-安装-docker-和-docker-compose" class="rp-toc-item rp-link" title="1. 安装 Docker 和 Docker Compose" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 安装 Docker 和 Docker Compose</span></a><a href="#11-更新软件包索引" class="rp-toc-item rp-link" title="1.1 更新软件包索引" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.1 更新软件包索引</span></a><a href="#12-添加-docker-仓库" class="rp-toc-item rp-link" title="1.2 添加 Docker 仓库" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.2 添加 Docker 仓库</span></a><a href="#13-安装-docker-和-docker-compose" class="rp-toc-item rp-link" title="1.3 安装 Docker 和 Docker Compose" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.3 安装 Docker 和 Docker Compose</span></a><a href="#2-安装青龙面板" class="rp-toc-item rp-link" title="2. 安装青龙面板" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 安装青龙面板</span></a><a href="#21-创建路径" class="rp-toc-item rp-link" title="2.1 创建路径" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1 创建路径</span></a><a href="#22-创建-docker-compose-文件" class="rp-toc-item rp-link" title="2.2 创建 docker compose 文件" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2 创建 docker compose 文件</span></a><a href="#23-启动青龙面板" class="rp-toc-item rp-link" title="2.3 启动青龙面板" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.3 启动青龙面板</span></a><a href="#24-安装完成" class="rp-toc-item rp-link" title="2.4 安装完成" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.4 安装完成</span></a><a href="#3青龙面板配置" class="rp-toc-item rp-link" title="3、青龙面板配置" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3、青龙面板配置</span></a><a href="#31-通知配置" class="rp-toc-item rp-link" title="3.1 通知配置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.1 通知配置</span></a><a href="#32-用户名密码设置" class="rp-toc-item rp-link" title="3.2 用户名、密码设置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.2 用户名、密码设置</span></a><a href="#33-青龙后台" class="rp-toc-item rp-link" title="3.3 青龙后台" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.3 青龙后台</span></a></div></details>
<h2 class="rp-toc-include" id="1-安装-docker-和-docker-compose"><a href="#1-安装-docker-和-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 安装 Docker 和 Docker Compose</h2>
<h3 class="rp-toc-include" id="11-更新软件包索引"><a href="#11-更新软件包索引" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.1 更新软件包索引</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 更新软件包索引，下载 Docker 官方 GPG 密钥，并允许所有人读取</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> ca-certificates</span><span style="color:var(--shiki-token-string)"> curl</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-constant)"> 0755</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://download.docker.com/linux/ubuntu/gpg</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> chmod</span><span style="color:var(--shiki-token-string)"> a+r</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="12-添加-docker-仓库"><a href="#12-添加-docker-仓库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.2 添加 Docker 仓库</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  &quot;deb [arch=$(</span><span style="color:var(--shiki-token-function)">dpkg</span><span style="color:var(--shiki-token-string)"> --print-architecture</span><span style="color:var(--shiki-token-string-expression)">) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  $(</span><span style="color:var(--shiki-token-function)">.</span><span style="color:var(--shiki-token-string)"> /etc/os-release</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;${UBUNTU_CODENAME</span><span style="color:var(--shiki-token-keyword)">:-</span><span style="color:var(--shiki-token-string-expression)">$VERSION_CODENAME}&quot;) stable&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/docker.list</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /dev/null</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="13-安装-docker-和-docker-compose"><a href="#13-安装-docker-和-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.3 安装 Docker 和 Docker Compose</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 更新软件包索引</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 安装docker软件包</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> docker-ce</span><span style="color:var(--shiki-token-string)"> docker-ce-cli</span><span style="color:var(--shiki-token-string)"> containerd.io</span><span style="color:var(--shiki-token-string)"> docker-buildx-plugin</span><span style="color:var(--shiki-token-string)"> docker-compose-plugin</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 启动docker服务和开机自启</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 验证安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> version</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>验证显示 docker 启动正常，docker compose 版本号显示正常即可，如下图：
<img src="/assets/images/how-to-setup-qinglong-vps-town/1.png" alt="docker验证" decoding="async"/></p>
<h2 class="rp-toc-include" id="2-安装青龙面板"><a href="#2-安装青龙面板" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 安装青龙面板</h2>
<h3 class="rp-toc-include" id="21-创建路径"><a href="#21-创建路径" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1 创建路径</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建路径</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /opt/qinglong</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /opt/qinglong</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="22-创建-docker-compose-文件"><a href="#22-创建-docker-compose-文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2 创建 docker compose 文件</h3>
<p>创建 docker compose 文件，可修改映射目录./data、映射端口 5700</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> cat</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /opt/qinglong/docker-compose.yml</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">services:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  web:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    image: whyour/qinglong:latest</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    volumes:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      - ./data:/ql/data</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    ports:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      - &quot;5700:5700&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    environment:</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">      QlBaseUrl: &#x27;/&#x27;</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">    restart: unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="23-启动青龙面板"><a href="#23-启动青龙面板" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.3 启动青龙面板</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 启动青龙面板</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="24-安装完成"><a href="#24-安装完成" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.4 安装完成</h3>
<p><img src="/assets/images/how-to-setup-qinglong-vps-town/2.png" alt="docker验证" decoding="async" loading="lazy"/></p>
<p>如下图状态，即启动正常</p>
<p><img src="/assets/images/how-to-setup-qinglong-vps-town/3.png" alt="docker验证" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="3青龙面板配置"><a href="#3青龙面板配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3、青龙面板配置</h2>
<ul>
<li>打开浏览器访问: http://<strong>ip 地址</strong>:5700</li>
<li>首次访问需要设置管理员账号和密码
<img src="/assets/images/how-to-setup-qinglong-vps-town/4.png" alt="初始化配置" decoding="async" loading="lazy"/></li>
</ul>
<h3 class="rp-toc-include" id="31-通知配置"><a href="#31-通知配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1 通知配置</h3>
<p>以配置 telegram 机器人为例
<img src="/assets/images/how-to-setup-qinglong-vps-town/5.png" alt="通知配置" decoding="async" loading="lazy"/></p>
<ul>
<li>先申请个人机器人
与 <a href="https://t.me/BotFather" target="_blank" rel="noopener noreferrer" class="rp-link">@BotFather</a> 对话，创建机器人
<img src="/assets/images/how-to-setup-qinglong-vps-town/6.png" alt="创建机器人" decoding="async" loading="lazy"/></li>
<li>输入机器人名称，<strong>名称需要以 bot 结尾</strong>，然后拿到<strong>token</strong>
<img src="/assets/images/how-to-setup-qinglong-vps-town/7.png" alt="机器人token" decoding="async" loading="lazy"/></li>
<li><strong>创建机器人成功后，需要主动对话一次才可使机器人实际生效</strong></li>
<li>获取个人 userid
与 <a href="https://t.me/userinfobot" target="_blank" rel="noopener noreferrer" class="rp-link">@userinfobot</a> 对话，随便输入，拿到个人<strong>userid</strong>
<img src="/assets/images/how-to-setup-qinglong-vps-town/8.png" alt="userid" decoding="async" loading="lazy"/></li>
</ul>
<p><strong>把上方获取到的机器人 token 和个人 userid 填入上方的通知配置中</strong></p>
<h3 class="rp-toc-include" id="32-用户名密码设置"><a href="#32-用户名密码设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2 用户名、密码设置</h3>
<p>保存后，输入用户名和密码后登陆后台
<img src="/assets/images/how-to-setup-qinglong-vps-town/9.png" alt="用户名密码设置" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="33-青龙后台"><a href="#33-青龙后台" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.3 青龙后台</h3>
<p><img src="/assets/images/how-to-setup-qinglong-vps-town/10.png" alt="青龙后台" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="automation-scripts"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何使用青龙面板定时运行 Bilibili 日常签到脚本]]></title>
        <id>/guide/vps-town-qinglong-bilibili-daily</id>
        <link href="https://docs.vps.town/guide/vps-town-qinglong-bilibili-daily"/>
        <updated>2025-04-14T16:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文介绍如何在青龙面板中修改配置文件、订阅 BiliBiliToolPro 仓库拉取签到脚本，并通过扫码登录保存 Cookie，让 Bilibili 每日任务按计划自动运行。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何使用青龙面板定时运行-bilibili-日常签到脚本"><a href="#如何使用青龙面板定时运行-bilibili-日常签到脚本" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何使用青龙面板定时运行 Bilibili 日常签到脚本<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 150 元</code> (共三篇文章) 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-登录青龙面板并修改配置文件" class="rp-toc-item rp-link" title="1. 登录青龙面板并修改配置文件" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 登录青龙面板并修改配置文件</span></a><a href="#2拉取库文件" class="rp-toc-item rp-link" title="2、拉取库文件" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2、拉取库文件</span></a><a href="#3-检查定时任务" class="rp-toc-item rp-link" title="3. 检查定时任务" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. 检查定时任务</span></a><a href="#4-登录获取-cookie" class="rp-toc-item rp-link" title="4. 登录获取 cookie" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4. 登录获取 cookie</span></a><a href="#5-手动执行bili每日任务任务" class="rp-toc-item rp-link" title="5. 手动执行bili每日任务任务" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5. 手动执行<code>bili每日任务</code>任务</span></a></div></details>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">提示</div><div class="rp-callout__content"><p>前提条件：已成功完成青龙面板安装，安装教程请参考 <a href="/guide/how-to-setup-qinglong-vps-town" class="rp-link">如何在 VPS.Town 服务器上安装并配置青龙面板</a></p></div></div>
<h2 class="rp-toc-include" id="1-登录青龙面板并修改配置文件"><a href="#1-登录青龙面板并修改配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 登录青龙面板并修改配置文件</h2>
<p>青龙面板，<code>配置文件</code>页。</p>
<ul>
<li>修改<code>RepoFileExtensions=&quot;js mjs py pyc&quot;</code> 为 <code>RepoFileExtensions=&quot;js mjs py pyc sh&quot;</code></li>
<li>新增<code>export BILI_MODE=&quot;bilitool&quot; # bili运行模式，dotnet或bilitool</code>
<img src="/assets/images/vps-town-qinglong-bilibili-daily/1.png" alt="修改配置文件" decoding="async"/></li>
</ul>
<h2 class="rp-toc-include" id="2拉取库文件"><a href="#2拉取库文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2、拉取库文件</h2>
<p>青龙面板，<code>订阅管理</code>页，点击右上角<code>创建订阅</code></p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">名称</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Bilibili</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">类型</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 公开仓库</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">链接</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> https://github.com/RayWangQvQ/BiliBiliToolPro.git</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">定时类型</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> crontab</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">定时规则</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 1 0 * * *</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">白名单</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> bili_task_.+\.sh</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">文件后缀</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/vps-town-qinglong-bilibili-daily/2.png" alt="创建订阅1" decoding="async" loading="lazy"/>
<img src="/assets/images/vps-town-qinglong-bilibili-daily/3.png" alt="创建订阅2" decoding="async" loading="lazy"/></p>
<p>点击确定后，点击<code>运行</code>拉取库文件
<img src="/assets/images/vps-town-qinglong-bilibili-daily/4.png" alt="创建订阅2" decoding="async" loading="lazy"/>
可点击<code>日志</code>，检查拉取过程是否正常
<img src="/assets/images/vps-town-qinglong-bilibili-daily/5.png" alt="拉取日志" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="3-检查定时任务"><a href="#3-检查定时任务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 检查定时任务</h2>
<p>如果正常，拉库成功后，会自动添加 bilibili 相关的 task 任务。
<img src="/assets/images/vps-town-qinglong-bilibili-daily/6.png" alt="拉取日志" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="4-登录获取-cookie"><a href="#4-登录获取-cookie" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 登录获取 cookie</h2>
<p>首次运行会自动安装环境，时间可能长一点，之后就不需要重复安装了。</p>
<p>在青龙定时任务中，点击运行 <code>bili扫码登录</code> 任务，查看运行日志，扫描日志中的二维码进行登录。</p>
<p><img src="/assets/images/vps-town-qinglong-bilibili-daily/7.png" alt="拉取日志1" decoding="async" loading="lazy"/></p>
<p>登录成功后，会提示手动保存 cookie：
<img src="/assets/images/vps-town-qinglong-bilibili-daily/8.png" alt="拉取日志2" decoding="async" loading="lazy"/></p>
<p>手工设置 cookie
<img src="/assets/images/vps-town-qinglong-bilibili-daily/9.png" alt="手工设置cookie" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="5-手动执行bili每日任务任务"><a href="#5-手动执行bili每日任务任务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. 手动执行<code>bili每日任务</code>任务</h2>
<p><img src="/assets/images/vps-town-qinglong-bilibili-daily/10.png" alt="bili每日任务日志" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="automation-scripts"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[VPS.Town 服务器新手入门保姆级教程]]></title>
        <id>/guide/vps-town-101-guide</id>
        <link href="https://docs.vps.town/guide/vps-town-101-guide"/>
        <updated>2025-04-14T07:00:00.000Z</updated>
        <summary type="html"><![CDATA[VPS.Town 服务器新手入门保姆级教程，涵盖了从购买 VPS.Town 服务器、连接、重置密码、优化配置、安装常用软件、配置 Fail2ban 保护您的服务器等操作。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="vpstown-服务器新手入门保姆级教程"><a href="#vpstown-服务器新手入门保姆级教程" class="rp-header-anchor rp-link" aria-hidden="true">#</a>VPS.Town 服务器新手入门保姆级教程<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>biebiele</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 25 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-网站管理界面" class="rp-toc-item rp-link" title="1. 网站管理界面" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. 网站管理界面</span></a><a href="#11-已开通产品列表" class="rp-toc-item rp-link" title="1.1 已开通产品列表" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.1 已开通产品列表</span></a><a href="#12-服务器列表界面" class="rp-toc-item rp-link" title="1.2 服务器列表界面" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.2 服务器列表界面</span></a><a href="#13-服务器详情界面" class="rp-toc-item rp-link" title="1.3 服务器详情界面" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1.3 服务器详情界面</span></a><a href="#2-远程连接服务器" class="rp-toc-item rp-link" title="2. 远程连接服务器" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 远程连接服务器</span></a><a href="#21-下载-putty" class="rp-toc-item rp-link" title="2.1 下载 Putty" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1 下载 Putty</span></a><a href="#22-添加新主机并配置信息" class="rp-toc-item rp-link" title="2.2 添加新主机并配置信息" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2 添加新主机并配置信息</span></a><a href="#221-配置地址和端口" class="rp-toc-item rp-link" title="2.2.1 配置地址和端口" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">2.2.1 配置地址和端口</span></a><a href="#222-连接实例" class="rp-toc-item rp-link" title="2.2.2 连接实例" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">2.2.2 连接实例</span></a><a href="#3可选项是否网络重装操作系统" class="rp-toc-item rp-link" title="3.（可选项）是否网络重装操作系统" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3.（可选项）是否网络重装操作系统</span></a><a href="#下载-dd-脚本到本地" class="rp-toc-item rp-link" title="下载 dd 脚本到本地" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">下载 dd 脚本到本地</span></a><a href="#选择要重装的操作系统" class="rp-toc-item rp-link" title="选择要重装的操作系统" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">选择要重装的操作系统</span></a><a href="#4-修改密码" class="rp-toc-item rp-link" title="4. 修改密码" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4. 修改密码</span></a><a href="#5-优化-ssh-配置" class="rp-toc-item rp-link" title="5. 优化 SSH 配置" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5. 优化 SSH 配置</span></a><a href="#6-优化内核参数" class="rp-toc-item rp-link" title="6. 优化内核参数" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">6. 优化内核参数</span></a><a href="#7-安装常用软件" class="rp-toc-item rp-link" title="7. 安装常用软件" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">7. 安装常用软件</span></a><a href="#8-防火墙配置" class="rp-toc-item rp-link" title="8. 防火墙配置" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">8. 防火墙配置</span></a><a href="#9-增加历史执行命令记录" class="rp-toc-item rp-link" title="9. 增加历史执行命令记录" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">9. 增加历史执行命令记录</span></a><a href="#10-可选配置" class="rp-toc-item rp-link" title="10. 可选配置" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">10. 可选配置</span></a><a href="#101-禁用检测更新" class="rp-toc-item rp-link" title="10.1 禁用检测更新" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">10.1 禁用检测更新</span></a><a href="#102-登录提示文字优化" class="rp-toc-item rp-link" title="10.2 登录提示文字优化" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">10.2 登录提示文字优化</span></a><a href="#103-安装-fail2ban保护您的服务器" class="rp-toc-item rp-link" title="10.3 安装 fail2ban，保护您的服务器" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">10.3 安装 fail2ban，保护您的服务器</span></a><a href="#配置规则" class="rp-toc-item rp-link" title="配置规则" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">配置规则</span></a><a href="#重启服务" class="rp-toc-item rp-link" title="重启服务" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">重启服务</span></a><a href="#常用命令" class="rp-toc-item rp-link" title="常用命令" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">常用命令</span></a><a href="#配置详解" class="rp-toc-item rp-link" title="配置详解" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">配置详解</span></a></div></details>
<h2 class="rp-toc-include" id="1-网站管理界面"><a href="#1-网站管理界面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 网站管理界面</h2>
<h3 class="rp-toc-include" id="11-已开通产品列表"><a href="#11-已开通产品列表" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.1 已开通产品列表</h3>
<p>购买产品之后，可在个人中心-已开通产品内看到购买的服务器。如下图：</p>
<p><img src="/assets/images/vps-town-101-guide/1.png" alt="服务器管理" decoding="async"/></p>
<p>在已开通产品列表中，您可以：</p>
<ul>
<li>查看所有已购买的服务器</li>
<li>查看每个服务器的基本信息（如服务器名称、状态等）</li>
<li>通过操作按钮进入具体服务器的管理界面</li>
</ul>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">小贴士</div><div class="rp-callout__content"><p>
建议定期检查服务器状态，确保服务正常运行。</p></div></div>
<h3 class="rp-toc-include" id="12-服务器列表界面"><a href="#12-服务器列表界面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.2 服务器列表界面</h3>
<p>点击进入管理界面，其中有 IP 信息、管理，如下图：</p>
<p><img src="/assets/images/vps-town-101-guide/2.png" alt="服务器列表" decoding="async" loading="lazy"/></p>
<p>在服务器列表界面中，您可以：</p>
<ul>
<li>查看服务器的 IP 地址信息（<strong>点击后可看到具体的 IPv6 地址</strong>）</li>
<li>查看服务器的运行状态</li>
<li>进行服务器的基本操作（如重启、关机等）</li>
<li>查看服务器的配置信息</li>
</ul>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">警告</div><div class="rp-callout__content"><p>
进行服务器重启或关机操作前，请确保已保存所有重要数据。</p></div></div>
<h3 class="rp-toc-include" id="13-服务器详情界面"><a href="#13-服务器详情界面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1.3 服务器详情界面</h3>
<p>点击操作按钮，进入具体服务器管理页面，如下图，主要有以下关键信息：</p>
<p><img src="/assets/images/vps-town-101-guide/3.png" alt="管理界面" decoding="async" loading="lazy"/></p>
<p>在服务器详情界面中，您可以：</p>
<ul>
<li>查看服务器的详细配置信息</li>
<li>进行服务器的各项管理操作</li>
<li>查看服务器的使用统计信息</li>
<li>管理服务器的安全组设置</li>
<li>查看服务器的监控信息</li>
</ul>
<h2 class="rp-toc-include" id="2-远程连接服务器"><a href="#2-远程连接服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 远程连接服务器</h2>
<p>初始安装时，默认是支持使用用户名、密码的 SSH 连接，以下以 Putty 工具为例：</p>
<h3 class="rp-toc-include" id="21-下载-putty"><a href="#21-下载-putty" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1 下载 Putty</h3>
<p>您可以在 <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html" target="_blank" rel="noopener noreferrer" class="rp-link">官方网站</a> 下载 Putty 的客户端。<a href="https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe" target="_blank" rel="noopener noreferrer" class="rp-link">点此直接下载 Windows 64 位版</a></p>
<p><img src="/assets/images/vps-town-101-guide/4.png" alt="putty下载" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="22-添加新主机并配置信息"><a href="#22-添加新主机并配置信息" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2 添加新主机并配置信息</h3>
<h4 class="rp-toc-include" id="221-配置地址和端口"><a href="#221-配置地址和端口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2.1 配置地址和端口</h4>
<p>在 session 页填写服务器<strong>IP 地址、端口</strong></p>
<p><img src="/assets/images/vps-town-101-guide/5.png" alt="配置地址和端口" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="222-连接实例"><a href="#222-连接实例" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2.2 连接实例</h4>
<p>点击 Open 按钮连接到实例。如果是第一次连接到实例，可能会看到对于密钥的验证信息。点击 Accept 按钮确认连接即可。连接成功后，会提示你输入用户名、密码，校验成功后进入控制台。即可开始 linux 管理。</p>
<p><img src="/assets/images/vps-town-101-guide/6.png" alt="输入用户名、密码" decoding="async" loading="lazy"/></p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">使用说明</div><div class="rp-callout__content"><p>
本文档适用于 Ubuntu 22.04 系统，其他 Linux 发行版可能需要适当调整命令。</p></div></div>
<h2 class="rp-toc-include" id="3可选项是否网络重装操作系统"><a href="#3可选项是否网络重装操作系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.（可选项）是否网络重装操作系统</h2>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">提示</div><div class="rp-callout__content"><p>
这是一个可选步骤，仅在您需要更换默认操作系统时使用。</p></div></div>
<p>使用 <a href="https://github.com/bin456789/reinstall" target="_blank" rel="noopener noreferrer" class="rp-link">dd 脚本</a> 重装操作系统。</p>
<h3 class="rp-toc-include" id="下载-dd-脚本到本地"><a href="#下载-dd-脚本到本地" class="rp-header-anchor rp-link" aria-hidden="true">#</a>下载 dd 脚本到本地</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 使用 curl 或 wget 下载 reinstall.sh 脚本</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># -O: 将下载的文件保存为指定名称</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh</span><span style="color:var(--shiki-token-keyword)"> ||</span><span style="color:var(--shiki-token-function)"> wget</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-foreground)"> $_</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="选择要重装的操作系统"><a href="#选择要重装的操作系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>选择要重装的操作系统</h3>
<p>以下示例为重装为 Ubuntu 22.04 最小化版本：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 执行重装脚本</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># ubuntu: 目标操作系统</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 22.04: 版本号</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># --minimal: 最小化安装，只安装基本系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-token-string)"> ubuntu</span><span style="color:var(--shiki-token-constant)"> 22.04</span><span style="color:var(--shiki-token-string)"> --minimal</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>执行后，会提示输入重装后的密码，命令执行完成后，输入 <code>reboot</code> 重启操作系统，等待约 5-10 分钟后，使用 SSH 工具重新连接服务器。</p>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">支持的操作系统列表</summary><div class="rp-callout__content"><div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-token-string)"> anolis</span><span style="color:var(--shiki-token-constant)">      7</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">23</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  opencloudos</span><span style="color:var(--shiki-token-constant)"> 8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">9</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">23</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  rocky</span><span style="color:var(--shiki-token-constant)">       8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">9</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  redhat</span><span style="color:var(--shiki-token-constant)">      8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">9</span><span style="color:var(--shiki-token-string)">   --img=</span><span style="color:var(--shiki-token-string-expression)">&quot;http://xxx.com/xxx.qcow2&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  oracle</span><span style="color:var(--shiki-token-constant)">      8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">9</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  almalinux</span><span style="color:var(--shiki-token-constant)">   8</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">9</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  centos</span><span style="color:var(--shiki-token-constant)">      9</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">10</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  fedora</span><span style="color:var(--shiki-token-constant)">      40</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">41</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  nixos</span><span style="color:var(--shiki-token-constant)">       24.11</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  debian</span><span style="color:var(--shiki-token-constant)">      9</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">10</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">11</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">12</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  opensuse</span><span style="color:var(--shiki-token-constant)">    15.6</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">tumbleweed</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  alpine</span><span style="color:var(--shiki-token-constant)">      3.18</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">3.19</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">3.20</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">3.21</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  openeuler</span><span style="color:var(--shiki-token-constant)">   20.03</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">22.03</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">24.03</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">25.03</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  ubuntu</span><span style="color:var(--shiki-token-constant)">      16.04</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">18.04</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">20.04</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">22.04</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">24.04</span><span style="color:var(--shiki-token-keyword)">|</span><span style="color:var(--shiki-token-function)">24.10</span><span style="color:var(--shiki-foreground)"> [--minimal]</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  kali</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  arch</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  gentoo</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  aosc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">                  fnos</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div></div></details>
<h2 class="rp-toc-include" id="4-修改密码"><a href="#4-修改密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 修改密码</h2>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">安全提示</div><div class="rp-callout__content"><p>请确保使用强密码，并妥善保管。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 切换到 root 用户</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> -i</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 修改 root 用户密码</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># root:&lt;password&gt;: 设置 root 用户的密码</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># chpasswd: 批量修改用户密码的命令</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string)"> root:</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">passwor</span><span style="color:var(--shiki-foreground)">d</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> chpasswd</span><span style="color:var(--shiki-token-string)"> root</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="5-优化-ssh-配置"><a href="#5-优化-ssh-配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. 优化 SSH 配置</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">配置说明</div><div class="rp-callout__content"><p>
以下配置将优化 SSH 连接的安全性和性能。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 配置系统更新后自动重启</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &quot;s/^#\?\$nrconf{restart}.*/\$nrconf{restart} = \&#x27;a\&#x27;;/g&quot;</span><span style="color:var(--shiki-token-string)"> /etc/needrestart/needrestart.conf</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 删除可能冲突的 SSH 配置文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -rf</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config.d/*.conf</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 修改 SSH 配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?PermitRootLogin.*/PermitRootLogin yes/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;  </span><span style="color:var(--shiki-token-comment)"># 启用 root 登录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?Port.*/Port 3022/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;                     </span><span style="color:var(--shiki-token-comment)"># 修改默认端口为 3022</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;  </span><span style="color:var(--shiki-token-comment)"># 启用密码认证</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?UseDNS.*/UseDNS no/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;                   </span><span style="color:var(--shiki-token-comment)"># 禁用 DNS 反向解析</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?GSSAPIAuthentication.*/GSSAPIAuthentication no/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;  </span><span style="color:var(--shiki-token-comment)"># 禁用 GSSAPI 认证</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?ClientAliveInterval.*/ClientAliveInterval 60/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;    </span><span style="color:var(--shiki-token-comment)"># 设置客户端活动检测间隔</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?ClientAliveCountMax.*/ClientAliveCountMax 10/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;    </span><span style="color:var(--shiki-token-comment)"># 设置客户端活动检测最大次数</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?X11Forwarding.*/X11Forwarding no/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/ssh/sshd_config</span><span style="color:var(--shiki-foreground)">;                </span><span style="color:var(--shiki-token-comment)"># 禁用 X11 转发</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 修改 systemd socket 配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?ListenStream.*/ListenStream=3022/g&#x27;</span><span style="color:var(--shiki-token-string)"> /usr/lib/systemd/system/ssh.socket</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重启 SSH 服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">service</span><span style="color:var(--shiki-token-string)"> sshd</span><span style="color:var(--shiki-token-string)"> restart</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> daemon-reload</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> ssh.socket</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="6-优化内核参数"><a href="#6-优化内核参数" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6. 优化内核参数</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">性能优化</div><div class="rp-callout__content"><p>
以下配置将优化网络性能和连接稳定性。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">tee</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string)"> /etc/sysctl.conf</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)"> EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.core.default_qdisc=fq</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_congestion_control=bbr</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_available_congestion_control=cubic bbr</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_fastopen=3</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_keepalive_time=600</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_keepalive_intvl=30</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_keepalive_probes=5</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_rmem=8192 262144 536870912</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">net.ipv4.tcp_wmem=4096 16384 536870912</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 应用配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sysctl</span><span style="color:var(--shiki-token-string)"> -p</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="7-安装常用软件"><a href="#7-安装常用软件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>7. 安装常用软件</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 设置时区</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> timedatectl</span><span style="color:var(--shiki-token-string)"> set-timezone</span><span style="color:var(--shiki-token-string)"> Asia/Shanghai</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 更新软件包列表并安装常用工具</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> wget</span><span style="color:var(--shiki-token-string)"> net-tools</span><span style="color:var(--shiki-token-string)"> telnet</span><span style="color:var(--shiki-token-string)"> fail2ban</span><span style="color:var(--shiki-token-string)"> cron</span><span style="color:var(--shiki-token-string)"> zip</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="8-防火墙配置"><a href="#8-防火墙配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>8. 防火墙配置</h2>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">警告</div><div class="rp-callout__content"><p>
配置防火墙前请确保已保存当前 SSH 连接，避免配置错误导致无法连接。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 安装防火墙工具</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> iptables-persistent</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 配置防火墙持久化，防止重启后失效</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> echo</span><span style="color:var(--shiki-token-string)"> -e</span><span style="color:var(--shiki-token-string-expression)"> &quot;# CLOUD_IMG: This file was created/modified by the Cloud Image build process\nIPTABLES_RESTORE_NOFLUSH=no\nIP6TABLES_RESTORE_NOFLUSH=no&quot;</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/default/netfilter-persistent</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables-save</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> awk</span><span style="color:var(--shiki-token-string-expression)"> &#x27;{if($1==&quot;COMMIT&quot;){delete x}}$1==&quot;-A&quot;?!x[$0]++:1&#x27;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> iptables-restore</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> netfilter-persistent</span><span style="color:var(--shiki-token-string)"> save</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> netfilter-persistent</span><span style="color:var(--shiki-token-string)"> reload</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 清除现有规则</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -P</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> DROP</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -P</span><span style="color:var(--shiki-token-string)"> FORWARD</span><span style="color:var(--shiki-token-string)"> DROP</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -P</span><span style="color:var(--shiki-token-string)"> OUTPUT</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -F</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -X</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -Z</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 配置基本规则</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string)"> lo</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> OUTPUT</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> lo</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-string)"> conntrack</span><span style="color:var(--shiki-token-string)"> --ctstate</span><span style="color:var(--shiki-token-string)"> ESTABLISHED,RELATED</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 开放必要端口</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 22</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 443</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 443</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-string)"> 8001:9999</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-string)"> 8001:9999</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 3022</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 3022</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 5700</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 5700</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> tcp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 7000</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-constant)"> 7000</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 允许 ICMP (ping)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> icmp</span><span style="color:var(--shiki-token-string)"> --icmp-type</span><span style="color:var(--shiki-token-constant)"> 8</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> INPUT</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> icmp</span><span style="color:var(--shiki-token-string)"> --icmp-type</span><span style="color:var(--shiki-token-constant)"> 0</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> ACCEPT</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 配置端口转发</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">iptables</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> nat</span><span style="color:var(--shiki-token-string)"> -A</span><span style="color:var(--shiki-token-string)"> PREROUTING</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> udp</span><span style="color:var(--shiki-token-string)"> --dport</span><span style="color:var(--shiki-token-string)"> 8001:9999</span><span style="color:var(--shiki-token-string)"> -j</span><span style="color:var(--shiki-token-string)"> REDIRECT</span><span style="color:var(--shiki-token-string)"> --to-ports</span><span style="color:var(--shiki-token-constant)"> 443</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">iptables</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> nat</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string)"> PREROUTING</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> -n</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 保存并应用配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string)"> -v</span><span style="color:var(--shiki-token-string)"> -n</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> netfilter-persistent</span><span style="color:var(--shiki-token-string)"> save</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">service</span><span style="color:var(--shiki-token-string)"> iptables</span><span style="color:var(--shiki-token-string)"> restart</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="9-增加历史执行命令记录"><a href="#9-增加历史执行命令记录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>9. 增加历史执行命令记录</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">小贴士</div><div class="rp-callout__content"><p>
此配置将记录所有执行过的命令，方便后续查看和审计。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> bash</span><span style="color:var(--shiki-token-string)"> -c</span><span style="color:var(--shiki-token-string-expression)"> &#x27;cat &gt;&gt; /etc/profile &lt;&lt;EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 配置历史记录的时间格式</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">export HISTTIMEFORMAT=&quot;%Y-%m-%d %H:%M:%S &quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 设置保存历史记录的文件路径</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">HISTORY_FILE=&quot;\$HOME/command_history.log&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 自定义命令日志函数</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">log_command() {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    local HISTFILE_PATH=\$HISTFILE</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    local HIST_ENTRY_NUMBER=\$1</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    local HIST_ENTRY=&quot;\$(history \$HIST_ENTRY_NUMBER | tail -n 1)&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    local CURRENT_USER=\$(whoami)</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    local LOG_ENTRY=&quot;[USER: \$CURRENT_USER] \$HIST_ENTRY&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">    echo &quot;\$LOG_ENTRY&quot; &gt;&gt; \$HISTORY_FILE</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"># 在每个命令之后，将命令追加到自定义的日志文件中，同时同步到 HISTFILE</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">PROMPT_COMMAND=&quot;history -a; log_command 1&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">ulimit -SHn 1000000</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">EOF&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 应用配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">source</span><span style="color:var(--shiki-token-string)"> /etc/profile</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="10-可选配置"><a href="#10-可选配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>10. 可选配置</h2>
<h3 class="rp-toc-include" id="101-禁用检测更新"><a href="#101-禁用检测更新" class="rp-header-anchor rp-link" aria-hidden="true">#</a>10.1 禁用检测更新</h3>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">警告</div><div class="rp-callout__content"><p>
此配置适用于不需要自动更新的环境。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> bash</span><span style="color:var(--shiki-token-string)"> -c</span><span style="color:var(--shiki-token-string-expression)"> &#x27;cat &gt; /etc/apt/apt.conf.d/10periodic &lt;&lt;EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">APT::Periodic::Update-Package-Lists &quot;0&quot;;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">APT::Periodic::Download-Upgradeable-Packages &quot;0&quot;;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">APT::Periodic::AutocleanInterval &quot;0&quot;;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">EOF&#x27;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> bash</span><span style="color:var(--shiki-token-string)"> -c</span><span style="color:var(--shiki-token-string-expression)"> &#x27;cat &gt; /etc/apt/apt.conf.d/20auto-upgrades &lt;&lt;EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">APT::Periodic::Update-Package-Lists &quot;0&quot;;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">APT::Periodic::Unattended-Upgrade &quot;0&quot;;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">EOF&#x27;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="102-登录提示文字优化"><a href="#102-登录提示文字优化" class="rp-header-anchor rp-link" aria-hidden="true">#</a>10.2 登录提示文字优化</h3>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">简单提示</div><div class="rp-callout__content"><p>
此配置将优化登录时的提示信息显示。</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?ENABLED=.*/ENABLED=0/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/default/motd-news</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">touch</span><span style="color:var(--shiki-token-string)"> /var/lib/ubuntu-advantage/hide-esm-in-motd</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">touch</span><span style="color:var(--shiki-token-string)"> /var/lib/update-notifier/hide-esm-in-motd</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -rf</span><span style="color:var(--shiki-token-string)"> /var/lib/update-notifier/updates-available</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">chmod</span><span style="color:var(--shiki-token-string)"> -x</span><span style="color:var(--shiki-token-string)"> /etc/update-motd.d/90-updates-available</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> rm</span><span style="color:var(--shiki-token-string)"> /var/lib/ubuntu-release-upgrader/release-upgrade-available</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s/^#\?Prompt.*/Prompt=never/g&#x27;</span><span style="color:var(--shiki-token-string)"> /etc/update-manager/release-upgrades</span><span style="color:var(--shiki-foreground)">;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="103-安装-fail2ban保护您的服务器"><a href="#103-安装-fail2ban保护您的服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a>10.3 安装 fail2ban，保护您的服务器</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> wget</span><span style="color:var(--shiki-token-string)"> net-tools</span><span style="color:var(--shiki-token-string)"> telnet</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> fail2ban</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="配置规则"><a href="#配置规则" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置规则</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cat</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /etc/fail2ban/jail.local</span><span style="color:var(--shiki-token-keyword)"> &lt;&lt;</span><span style="color:var(--shiki-foreground)">EOF</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"># 默认规则</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[DEFAULT]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)"># 白名单,不受规则限制，以下规则为每60秒错误2次，永久封禁，限制访问所有端口</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">ignoreip = 127.0.0.1/8 ::1 223.104.0.0/16</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">findtime = 60s</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">maxretry = 2</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">bantime = -1</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">action = iptables-allports</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-string)"># sshd拦截规则，注意端口填写，默认为22</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">[sshd]</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">enabled  = true</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">port    = 22</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">logpath = /var/log/auth.log</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">EOF</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="重启服务"><a href="#重启服务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>重启服务</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> fail2ban</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> fail2ban</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> fail2ban</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="常用命令"><a href="#常用命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>常用命令</h4>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 查看fail2ban状态</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fail2ban-client</span><span style="color:var(--shiki-token-string)"> status</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 查看sshd jail状态</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fail2ban-client</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> sshd</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 解封IP</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fail2ban-client</span><span style="color:var(--shiki-token-string)"> set</span><span style="color:var(--shiki-token-string)"> sshd</span><span style="color:var(--shiki-token-string)"> unbanip</span><span style="color:var(--shiki-token-string)"> IP地址</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 查看被封禁的IP列表</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">fail2ban-client</span><span style="color:var(--shiki-token-string)"> banned</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h4 class="rp-toc-include" id="配置详解"><a href="#配置详解" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置详解</h4>
<h5 class="rp-toc-include" id="主配置文件"><a href="#主配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>主配置文件</h5>
<p>Fail2Ban 的主配置文件是<code>/etc/fail2ban/fail2ban.conf</code>，建议创建副本<code>/etc/fail2ban/fail2ban.local</code>进行修改。</p>
<h5 class="rp-toc-include" id="封禁配置"><a href="#封禁配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>封禁配置</h5>
<ul>
<li><code>bantime</code>: 封禁时间长度，单位可以是 m(分钟)、d(天)或 s(秒)</li>
<li><code>findtime</code>: 计算登录失败的时间窗口</li>
<li><code>maxretry</code>: 最大失败尝试次数</li>
<li><code>ignoreip</code>: 白名单 IP，多个 IP 用空格分隔</li>
<li><code>action</code>: 封禁时采取的动作<!-- -->
<ul>
<li><code>action_</code>: 默认动作，拒绝流量</li>
<li><code>action_mw</code>: 封禁并发送邮件通知</li>
<li><code>action_mwl</code>: 封禁并发送邮件通知，包含相关日志</li>
<li><code>action_xarf</code>: 封禁并发送 XARF 格式邮件</li>
</ul>
</li>
</ul>
<h5 class="rp-toc-include" id="注意事项"><a href="#注意事项" class="rp-header-anchor rp-link" aria-hidden="true">#</a>注意事项</h5>
<ol>
<li>如果 SSH 使用密钥登录并禁用密码登录，则不需要 Fail2Ban 保护</li>
<li>修改配置后需要重启 fail2ban 服务才能生效</li>
<li>建议将常用 IP 加入白名单，避免误封</li>
<li>封禁时间设置要合理，避免影响正常用户</li>
</ol>
<h5 class="rp-toc-include" id="常见问题"><a href="#常见问题" class="rp-header-anchor rp-link" aria-hidden="true">#</a>常见问题</h5>
<h6 class="rp-toc-include" id="启动服务报错提示varlogauthlog-文件不存在"><a href="#启动服务报错提示varlogauthlog-文件不存在" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动服务报错，提示/var/log/auth.log 文件不存在</h6>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 最小化系统，未启用日志服务，执行以下命令启用</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> rsyslog</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> rsyslog</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> rsyslog</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> rsyslog</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h6 class="rp-toc-include" id="防火墙未启用导致-fail2ban-未实际生效以下启用防火墙参考"><a href="#防火墙未启用导致-fail2ban-未实际生效以下启用防火墙参考" class="rp-header-anchor rp-link" aria-hidden="true">#</a>防火墙未启用，导致 fail2ban 未实际生效，以下启用防火墙参考</h6>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> iptables</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> iptables</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> iptables</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content>
        <author>
            <name>biebiele</name>
        </author>
        <category label="getting-started"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 服务器中安装 Syncthing]]></title>
        <id>/guide/how-to-install-syncthing-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-syncthing-vps-town"/>
        <updated>2025-04-13T14:00:00.000Z</updated>
        <summary type="html"><![CDATA[本教程详细介绍了如何在您的 Debian 12 VPS.Town 服务器上安装 Syncthing，以实现安全、去中心化的文件实时同步，方便您在多个设备间管理文件。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-服务器中安装-syncthing"><a href="#如何在-vpstown-服务器中安装-syncthing" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 服务器中安装 Syncthing<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>k08255-lxm</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>--</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#什么是-syncthing" class="rp-toc-item rp-link" title="什么是 Syncthing?" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">什么是 Syncthing?</span></a><a href="#为什么选择-vpstown" class="rp-toc-item rp-link" title="为什么选择 VPS.Town?" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">为什么选择 VPS.Town?</span></a><a href="#准备工作" class="rp-toc-item rp-link" title="准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备工作</span></a><a href="#在-vpstown-服务器-debian-12-上安装-syncthing" class="rp-toc-item rp-link" title="在 VPS.Town 服务器 (Debian 12) 上安装 Syncthing" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">在 VPS.Town 服务器 (Debian 12) 上安装 Syncthing</span></a><a href="#首次配置与访问-web-ui" class="rp-toc-item rp-link" title="首次配置与访问 Web UI" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">首次配置与访问 Web UI</span></a><a href="#使用" class="rp-toc-item rp-link" title="使用" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">使用</span></a><a href="#总结" class="rp-toc-item rp-link" title="总结" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">总结</span></a></div></details>
<h2 class="rp-toc-include" id="什么是-syncthing"><a href="#什么是-syncthing" class="rp-header-anchor rp-link" aria-hidden="true">#</a>什么是 Syncthing?</h2>
<p>Syncthing 是一个开源、免费、跨平台的点对点 (P2P) 文件同步工具。与传统的云存储服务（如 Dropbox 或 Google Drive）不同，Syncthing 的数据传输是去中心化的，直接在您控制的设备之间进行，不经过任何中央服务器。这为您提供了更高的数据隐私性和控制权。</p>
<p>在 VPS.Town 服务器上使用 Syncthing 可以带来诸多便利：</p>
<ul>
<li><strong>服务器文件备份：</strong> 将服务器上的重要配置文件、网站数据等实时同步到您的本地电脑或其他服务器。</li>
<li><strong>多服务器文件分发：</strong> 如果您管理多个 VPS.Town 实例，可以使用 Syncthing 轻松地将文件或更新分发到所有实例。</li>
<li><strong>构建个人同步云：</strong> 结合 VPS.Town 服务器的稳定在线特性，您可以将其作为同步网络中的一个可靠节点。</li>
</ul>
<p>本教程将指导您在基于 Debian 12 的 VPS.Town 服务器上安装和基本配置 Syncthing。</p>
<h2 class="rp-toc-include" id="为什么选择-vpstown"><a href="#为什么选择-vpstown" class="rp-header-anchor rp-link" aria-hidden="true">#</a>为什么选择 VPS.Town?</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">🔄 VPS.Town 备份解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，随时随地备份大量数据；</li>
<li>同时提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、同步速度更稳定；</li>
<li>完善的售后保障，支持随时增加硬盘、灵活升级配置，还支持 7 天内有理由退款；</li>
<li>1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，对于移动用户更加友好</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">运行环境说明</div><div class="rp-callout__content"><p>本教程明确针对 <strong>VPS.Town 的 Debian 12 (Bookworm) 服务器实例</strong> 操作。</p><p>Syncthing 的配置步骤在其他 Linux 发行版上基本一致，但软件包安装和防火墙配置命令可能不同。</p></div></div>
<p>在开始之前，请确保您满足以下条件：</p>
<ul>
<li>至少拥有一台运行 <strong>Debian 12</strong> 的服务器实例。</li>
<li>您需要同步的另一台设备（可以是本地电脑 Windows/macOS/Linux，或另一台服务器）。</li>
<li>具备基本的 Linux 命令行操作知识。</li>
<li>拥有服务器的 root 权限或 sudo 权限。</li>
</ul>
<h2 class="rp-toc-include" id="在-vpstown-服务器-debian-12-上安装-syncthing"><a href="#在-vpstown-服务器-debian-12-上安装-syncthing" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 VPS.Town 服务器 (Debian 12) 上安装 Syncthing</h2>
<p>我们将使用 Syncthing 官方推荐的 APT 仓库进行安装，以确保获取最新版本。该方法在 Debian 12 上运行良好。</p>
<ol>
<li>
<p><strong>安装依赖 (如果需要):</strong>
确保 <code>curl</code> 和 <code>gpg</code> 已安装。通常 Debian 12 默认包含，但执行一下无妨。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> gpg</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li>
<p><strong>添加 Syncthing 的 PGP 密钥：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /usr/share/keyrings/syncthing-archive-keyring.gpg</span><span style="color:var(--shiki-token-string)"> https://syncthing.net/release-key.gpg</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这条命令会下载 Syncthing 的发布密钥并保存到指定位置，用于验证软件包的真实性。</p>
</li>
<li>
<p><strong>添加 Syncthing 的 APT 仓库：</strong>
推荐使用 <code>stable</code> (稳定版) 频道。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/syncthing.list</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这条命令将 Syncthing 的稳定版仓库地址写入 APT 的源列表文件中。</p>
</li>
<li>
<p><strong>更新软件包列表并安装 Syncthing：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> syncthing</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>首先更新本地的软件包索引，然后执行安装命令。</p>
</li>
<li>
<p><strong>验证安装：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">syncthing</span><span style="color:var(--shiki-token-string)"> --version</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>如果看到 Syncthing 的版本号输出，则表示安装成功，输出应该类似于这样：</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>syncthing v1.29.5 &quot;Gold Grasshopper&quot; (go1.24.2 linux-amd64) debian@github.syncthing.net 2025-04-12 12:55:24 UTC [noupgrade]</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
</ol>
<h2 class="rp-toc-include" id="首次配置与访问-web-ui"><a href="#首次配置与访问-web-ui" class="rp-header-anchor rp-link" aria-hidden="true">#</a>首次配置与访问 Web UI</h2>
<p>Syncthing 提供了一个基于 Web 的图形用户界面 (GUI) 来进行管理。默认情况下，它只监听本地回环地址 (<code>127.0.0.1</code>) 的 <code>8384</code> 端口，需要修改配置才能从外部访问。</p>
<ol>
<li>
<p><strong>首次运行 Syncthing (生成配置)：</strong>
在服务器上执行一次 <code>syncthing</code> 命令(最好是非 root 的普通用户)，它会生成默认的配置文件，然后按 <code>Ctrl+C</code> 停止它。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">syncthing</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#下面是我执行以后输出的最后几行</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># [35WMX] 2025/04/13 21:15:25 INFO: Creating new HTTPS certificate</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 INFO: Ready to synchronize &quot;Default Folder&quot; (default) (sendreceive)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 INFO: Completed initial scan of sendreceive folder &quot;Default Folder&quot; (default)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 INFO: GUI and API listening on 127.0.0.1:8384</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 INFO: Access the GUI via the following URL: http://127.0.0.1:8384/</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 INFO: My name is &quot;HKG-A2-AF0CIDDAFCR68WMC&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">#[35WMX] 2025/04/13 21:15:25 WARNING: Syncthing should not run as a privileged or system user. Please consider using a normal user account.</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li>
<p><strong>确认并编辑配置文件：</strong>
Syncthing 的配置文件通常位于 <code>/用户名/.local/state/syncthing/config.xml</code>。您可以通过以下命令确认具体路径：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">syncthing</span><span style="color:var(--shiki-token-string)"> --paths</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>记下 &quot;Configuration&quot; 对应的路径。下面以常见的 <code>/root/.local/state/syncthing/config.xml</code> 为例进行编辑（如果您的路径不同，请替换命令中的路径）：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> ~/.config/syncthing/config.xml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
<li>
<p><strong>允许远程访问 Web UI (重要！)：</strong>
找到 <code>&lt;gui&gt;</code> 标签下的 <code>&lt;address&gt;</code> 行，将其内容从 <code>127.0.0.1:8384</code> 修改为 <code>0.0.0.0:8384</code>：</p>
<div class="rp-codeblock language-xml"><div class="rp-codeblock__title">nano ~/.config/syncthing/config.xml</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="xml" data-title="nano ~/.config/syncthing/config.xml"><code><span class="line"><span style="color:var(--shiki-foreground)">&lt;</span><span style="color:var(--shiki-token-string-expression)">gui</span><span style="color:var(--shiki-token-function)"> enabled</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;true&quot;</span><span style="color:var(--shiki-token-function)"> tls</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;false&quot;</span><span style="color:var(--shiki-token-function)"> debugging</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">&quot;false&quot;</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    &lt;</span><span style="color:var(--shiki-token-string-expression)">address</span><span style="color:var(--shiki-foreground)">&gt;0.0.0.0:8384&lt;/</span><span style="color:var(--shiki-token-string-expression)">address</span><span style="color:var(--shiki-foreground)">&gt; </span><span style="color:var(--shiki-token-comment)">&lt;!-- 修改这里 --&gt;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    &lt;!-- user 和 password 稍后在 Web UI 中设置 --&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    &lt;</span><span style="color:var(--shiki-token-string-expression)">user</span><span style="color:var(--shiki-foreground)">&gt;&lt;/</span><span style="color:var(--shiki-token-string-expression)">user</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    &lt;</span><span style="color:var(--shiki-token-string-expression)">password</span><span style="color:var(--shiki-foreground)">&gt;&lt;/</span><span style="color:var(--shiki-token-string-expression)">password</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    &lt;</span><span style="color:var(--shiki-token-string-expression)">apikey</span><span style="color:var(--shiki-foreground)">&gt;...&lt;/</span><span style="color:var(--shiki-token-string-expression)">apikey</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    &lt;</span><span style="color:var(--shiki-token-string-expression)">theme</span><span style="color:var(--shiki-foreground)">&gt;default&lt;/</span><span style="color:var(--shiki-token-string-expression)">theme</span><span style="color:var(--shiki-foreground)">&gt;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">&lt;/</span><span style="color:var(--shiki-token-string-expression)">gui</span><span style="color:var(--shiki-foreground)">&gt;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>按 <code>Ctrl+X</code>，然后按 <code>Y</code> 保存，最后按 Enter 确认。</p>
<p>也可以使用一键命令来进行修改（需替换自己的路径）</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash $</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash $"><code><span class="line"><span style="color:var(--shiki-token-function)">sed</span><span style="color:var(--shiki-token-string)"> -i</span><span style="color:var(--shiki-token-string-expression)"> &#x27;s|&lt;address&gt;127.0.0.1:8384&lt;/address&gt;|&lt;address&gt;0.0.0.0:8384&lt;/address&gt;|g&#x27;</span><span style="color:var(--shiki-token-string)"> /root/.local/state/syncthing/config.xml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
</li>
</ol>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">⚠️ 安全风险提示</div><div class="rp-callout__content"><p>将 Web UI 直接监听在 <code>0.0.0.0</code> (所有网络接口) 会将其暴露于公网，存在安全风险。<strong>强烈建议</strong> 采取以下至少一种安全措施：</p><ul>
<li><strong>配置防火墙：</strong> 仅允许特定可信 IP 地址访问 8384 端口。</li>
<li><strong>使用 SSH 隧道：</strong> (推荐用于临时或个人访问) 这是更安全的方式，无需修改监听地址或开放防火墙。</li>
<li><strong>设置反向代理：</strong> (推荐用于长期或多人访问) 使用 Nginx 或 Caddy 等设置反向代理，并配置 HTTPS 加密和访问控制。</li>
</ul></div></div>
<ol start="4">
<li>
<p><strong>启动 Syncthing 服务 (Systemd):</strong>
为了让 Syncthing 在后台持续运行并开机自启，我们使用 <code>systemd</code>。将 <code>&lt;user&gt;</code> 替换为您运行 Syncthing 的用户名（<strong>必须是您生成配置文件的那个用户</strong>）。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> syncthing@</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">use</span><span style="color:var(--shiki-foreground)">r</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)">.service</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> syncthing@</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">use</span><span style="color:var(--shiki-foreground)">r</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)">.service</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>例如，如果您的用户名是 <code>vpstownuser</code>：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> syncthing@vpstownuser.service</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> syncthing@vpstownuser.service</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>检查服务状态：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> syncthing@</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">use</span><span style="color:var(--shiki-foreground)">r</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)">.service</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>如果服务正常运行，您应该看到 <code>Active (running)</code> 的状态。</p>
</li>
<li>
<p><strong>访问 Web UI 并进行初始设置：</strong></p>
<ul>
<li><strong>如果配置了公网访问:</strong> 在浏览器中访问 <code>http://&lt;你的服务器 IP&gt;:8384</code>。</li>
<li><strong>如果使用 SSH 隧道 :</strong> 在您的 <strong>本地电脑</strong> 上打开终端，运行以下命令（将 <code>&lt;user&gt;</code> 替换为您服务器的用户名，<code>&lt;你的 VPS.Town 服务器 IP&gt;</code> 替换为实际 IP）：<!-- -->
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">ssh</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string)"> 8384:localhost:8384</span><span style="color:var(--shiki-token-keyword)"> &lt;</span><span style="color:var(--shiki-token-string)">use</span><span style="color:var(--shiki-foreground)">r</span><span style="color:var(--shiki-token-keyword)">&gt;</span><span style="color:var(--shiki-token-string)">@</span><span style="color:var(--shiki-token-keyword)">&lt;</span><span style="color:var(--shiki-token-string)">你的</span><span style="color:var(--shiki-token-string)"> VPS.Town</span><span style="color:var(--shiki-token-string)"> 服务器</span><span style="color:var(--shiki-token-string)"> I</span><span style="color:var(--shiki-foreground)">P</span><span style="color:var(--shiki-token-keyword)">&gt;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<!-- -->保持这个 SSH 连接处于活动状态，然后在您的 <strong>本地电脑</strong> 浏览器中访问 <code>http://localhost:8384</code>。这种方式更安全，无需暴露端口或修改监听地址。</li>
</ul>
<p>首次访问 Web UI 时，Syncthing 会提示您设置界面访问的用户名和密码。<strong>请务必设置一个强密码！</strong></p>
<p><img src="/assets/images/how-to-install-syncthing-vps-town/img1.png" alt="页面介绍配图" decoding="async"/></p>
<p>点击提示框里面的 &quot;Settings&quot; (设置)，在 &quot;GUI&quot; 选项卡中设置 &quot;GUI Authentication User&quot; (用户名) 和 &quot;GUI Authentication Password&quot; (密码)，然后点击 &quot;Save&quot; (保存)。</p>
<p>浏览器会要求您使用新凭据重新登录。</p>
<p><img src="/assets/images/how-to-install-syncthing-vps-town/img2.png" alt="设置页面配图" decoding="async" loading="lazy"/></p>
<p>至此，安装完成</p>
</li>
</ol>
<h2 class="rp-toc-include" id="使用"><a href="#使用" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用</h2>
<p>下次填坑，可以参考其<a href="https://docs.syncthing.net/users/index.html" target="_blank" rel="noopener noreferrer" class="rp-link">官方文档</a>或移步搜索引擎。</p>
<h2 class="rp-toc-include" id="总结"><a href="#总结" class="rp-header-anchor rp-link" aria-hidden="true">#</a>总结</h2>
<p>通过以上步骤，您已成功在您的 Debian 12 VPS.Town 服务器上安装并配置了 Syncthing，并与您的本地电脑建立了一个安全、自动的文件同步通道。</p>
<p>Syncthing 功能强大，还支持文件版本控制、忽略规则、单向同步等高级功能，您可以进一步探索其<a href="https://docs.syncthing.net/users/index.html" target="_blank" rel="noopener noreferrer" class="rp-link">官方文档</a> 来满足更复杂的需求。</p>
<p>现在，您可以利用 Syncthing 轻松地备份服务器数据、在多设备间保持文件一致，享受去中心化同步带来的便利和安全性。</p><!--/$-->]]></content>
        <author>
            <name>k08255-lxm</name>
        </author>
        <category label="cloud-drive"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[VPS.Town 大盘鸡 + JuiceFS + MiniIO = 无限扩展存储空间]]></title>
        <id>/guide/how-to-setup-minio-juicefs-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-setup-minio-juicefs-vps-town"/>
        <updated>2025-04-13T14:00:00.000Z</updated>
        <summary type="html"><![CDATA[使用 VPS.Town 大盘鸡 搭配 JuiceFS + MiniIO 技术实现无限扩展存储空间，为您的小存储 VPS 轻松赋能、扩容硬盘更轻松！]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="vpstown-大盘鸡--juicefs--miniio--无限扩展存储空间"><a href="#vpstown-大盘鸡--juicefs--miniio--无限扩展存储空间" class="rp-header-anchor rp-link" aria-hidden="true">#</a>VPS.Town 大盘鸡 + JuiceFS + MiniIO = 无限扩展存储空间<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>solar</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>100 元无门槛代金券</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#准备工作" class="rp-toc-item rp-link" title="准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备工作</span></a><a href="#第一步使用大盘鸡-server-a-部署-minio" class="rp-toc-item rp-link" title="第一步：使用大盘鸡 (server-A) 部署 MinIO" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第一步：使用大盘鸡 (<code>server-A</code>) 部署 MinIO</span></a><a href="#第二步在大盘鸡-server-a-上使用部署-redis" class="rp-toc-item rp-link" title="第二步：在大盘鸡 (server-A) 上使用部署 Redis" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第二步：在大盘鸡 (<code>server-A</code>) 上使用部署 Redis</span></a><a href="#第三步在小盘鸡-server-b-中安装创建并挂载-juicefs" class="rp-toc-item rp-link" title="第三步：在小盘鸡 (server-B) 中安装、创建并挂载 Juicefs" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第三步：在小盘鸡 (<code>server-B</code>) 中安装、创建并挂载 Juicefs</span></a><a href="#教程结束" class="rp-toc-item rp-link" title="教程结束" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">教程结束</span></a></div></details>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">🌰 VPS.Town &amp; JuiceFS 集群解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，扩容硬盘更轻松；</li>
<li>同时提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、JuiceFS 速度更稳定；</li>
<li>完善的售后保障，12*7 在线客服，更支持 7 天有理由退款；</li>
<li>搭配 JuiceFS 使用，可以实现无限扩展存储空间，扩容硬盘更轻松！</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<ol>
<li>服务器<!-- -->
<ul>
<li><code>server-A</code>: <a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">VPS Town 大盘鸡</a></li>
<li><code>server-B</code>: 任意其他 vps (例如，<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=3" target="_blank" rel="noopener noreferrer" class="rp-link">VPS.Town 传家宝</a>)</li>
</ul>
</li>
<li>软件工具<!-- -->
<ul>
<li>MinIO</li>
<li>Juicefs</li>
<li>Redis</li>
<li>docker/podman</li>
<li>docker-compose/podman-compose</li>
</ul>
</li>
</ol>
<p>硬盘无限扩展分为以下三个步骤，<del>1. 打开冰箱门；2. 硬盘放进冰箱里；3. 关闭冰箱门</del>。</p>
<h2 class="rp-toc-include" id="第一步使用大盘鸡-server-a-部署-minio"><a href="#第一步使用大盘鸡-server-a-部署-minio" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一步：使用大盘鸡 (<code>server-A</code>) 部署 MinIO</h2>
<blockquote>
<p>(VPSTown 的数据盘与系统盘分开，刚好适合 MinIO)</p>
</blockquote>
<p>假设大盘的分区路径为 <code>/dev/vdb</code>，让我们格式化一下分区，创建标签名为 <code>MINIODRIVE1</code> 的 XFS 文件系统：:</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">格式化分区</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="格式化分区"><code><span class="line"><span style="color:var(--shiki-token-function)">mkfs.xfs</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string)"> MINIODRIVE1</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后创建一个目录 (<code>/minio/data</code>) 挂载上去：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">挂载分区</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="挂载分区"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /minio/data</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mount</span><span style="color:var(--shiki-token-string)"> -t</span><span style="color:var(--shiki-token-string)"> xfs</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string-expression)"> &quot;noatime,nodiratime&quot;</span><span style="color:var(--shiki-token-string)"> /dev/vdb</span><span style="color:var(--shiki-token-string)"> /minio/data</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>创建 MinIO 的配置文件 <code>/etc/default/minio</code>，内容如下（注意修改用户名和密码： <code>MINIO_ROOT_USER</code>，<code>MINIO_ROOT_PASSWORD</code>）：</p>
<div class="rp-codeblock language-ini"><div class="rp-codeblock__title">minio.conf</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="ini" data-title="minio.conf"><code><span class="line"><span style="color:var(--shiki-token-keyword)">MINIO_ROOT_USER=</span><span style="color:var(--shiki-foreground)">minio-user-name</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">MINIO_ROOT_PASSWORD=</span><span style="color:var(--shiki-foreground)">minio-password-123</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">MINIO_VOLUMES=</span><span style="color:var(--shiki-token-string-expression)">&quot;/data&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">MINIO_OPTS=</span><span style="color:var(--shiki-token-string-expression)">&quot;--console-address :9001&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>接下来使用容器启动 MinIO：</p>
<blockquote>
<p>假设你已经安装 docker/podman 和 docker-compose</p>
</blockquote>
<p>Minio 的 <code>compose.yaml</code> 文件内容如下：</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3.8&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  minio_local</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> quay.io/minio/minio</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> minio_local</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">9000:9000</span><span style="color:var(--shiki-token-comment)"> # MinIO API 端口</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">9001:9001</span><span style="color:var(--shiki-token-comment)"> # MinIO Web 控制台端口</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/minio/data:/data</span><span style="color:var(--shiki-token-comment)"> # 替换为上面挂载了分区的目录</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/etc/default/minio:/etc/config.env</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MINIO_CONFIG_ENV_FILE=/etc/config.env</span><span style="color:var(--shiki-token-comment)"> # 指定配置文件路径</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    command</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> server --console-address &quot;:9001&quot;</span><span style="color:var(--shiki-token-comment)"> # 启动 MinIO 服务器并指定控制台端口</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span><span style="color:var(--shiki-token-comment)"> # 容器自动重启策略</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>让我们启动 Minio: <code>docker compose -f compose.yaml up -d </code></p>
<p>打开 <code>http://{机器 ip}:9001</code> 看看是否启动成功，看到如下界面说明成功</p>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/minio-success.png" alt="MinIO Web 控制台启动成功" decoding="async"/></p>
<p>输入用户名密码登录 (例如，用户名：minio-user-name, 密码：minio-password-123)，点击左侧 <code>Buckets -&gt; Create bucket</code> 创建新存储桶，例如命名为 <code>juicefs</code>：</p>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/minio-create-bucket.png" alt="MinIO 创建 juicefs 存储桶" decoding="async" loading="lazy"/></p>
<p>然后创建新的 keys 用于后续的 juicefs。</p>
<p>点击左侧 <code>Access Keys</code>创建新的 keys，并记录：</p>
<blockquote>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/minio-api-key.png" alt="MinIO 创建 Access Keys" decoding="async" loading="lazy"/></p>
</blockquote>
<p>现在 Minio 部署完成了。</p>
<h2 class="rp-toc-include" id="第二步在大盘鸡-server-a-上使用部署-redis"><a href="#第二步在大盘鸡-server-a-上使用部署-redis" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二步：在大盘鸡 (<code>server-A</code>) 上使用部署 Redis</h2>
<p>使用容器部署 Redis 十分简单，先找个目录创建 redis 配置文件，例如 <code>/redis/redis.conf</code>，内容如下：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">redis.conf</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="redis.conf"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 关闭保护</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">protected-mode</span><span style="color:var(--shiki-token-string)"> no</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 绑定监听IP地址</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">bind</span><span style="color:var(--shiki-token-constant)"> 0.0.0.0</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">maxmemory</span><span style="color:var(--shiki-token-string)"> 1024mb</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">appendonly</span><span style="color:var(--shiki-token-string)"> yes</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">appendfsync</span><span style="color:var(--shiki-token-string)"> everysec</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后创建容器 <code>compose.yaml</code> 文件，内容如下（注意修改 <code>--requirepass</code> 后面的密码，例如 <code>redis-passwd-123</code>)：</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__title">compose.yaml</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml" data-title="compose.yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  juicefs-redis</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> redis:latest</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> juicefs-redis</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    deploy</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      resources</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        limits</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          memory</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 2G</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">          cpus</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;2&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">6379:6379</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">redis-data:/data</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./redis.conf:/etc/redis.conf</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    command</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> redis-server /etc/redis.conf --requirepass redis-passwd-123</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  db-data</span><span style="color:var(--shiki-token-keyword)">:</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后启动容器：<code>docker compose up -d</code></p>
<p>然后使用以下命令验证 redis 是否成功：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> exec</span><span style="color:var(--shiki-token-string)"> juicefs-redis</span><span style="color:var(--shiki-token-string)"> redis-cli</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string)"> redis-passwd-123</span><span style="color:var(--shiki-token-string)"> ping</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>显示 <code>pong</code> 表示 redis 启动成功，现在第二步完成了。</p>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/redis.png" alt="Redis ping 返回 pong" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第三步在小盘鸡-server-b-中安装创建并挂载-juicefs"><a href="#第三步在小盘鸡-server-b-中安装创建并挂载-juicefs" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步：在小盘鸡 (<code>server-B</code>) 中安装、创建并挂载 Juicefs</h2>
<ol>
<li>执行以下命令安装 juicefs:</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://d.juicefs.com/install</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sh</span><span style="color:var(--shiki-token-string)"> -</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="2">
<li>创建一个目录用于挂载 juicefs，例如 <code>/shared-jfs</code></li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> /shared-jfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="3">
<li>创建名为 shared-jfs 的 juicefs：</li>
</ol>
<blockquote>
<p>假设：</p>
<ul>
<li>
<p>server-A ip 为：<code>1.2.3.4</code>，</p>
</li>
<li>
<p>Minio 创建的存储桶名字为 <code>juicefs</code></p>
</li>
<li>
<p>minio 的访问密钥对：</p>
<ul>
<li>access-key: <code>8lzuaquVzxmnzbl87DsU</code>,</li>
<li>secret-key: <code>UbkAcsYeeaOMebTNPJrgHme2PLGBWU8yOi1AolRc</code>，</li>
</ul>
</li>
<li>
<p>redis 密码为：<code>redis-passwd-123</code>,</p>
</li>
<li>
<p>redis 端口为：<code>6379</code>，</p>
</li>
<li>
<p>juicefs 文件系统名为 <code>shared-jfs</code></p>
</li>
</ul>
</blockquote>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">juicefs</span><span style="color:var(--shiki-token-string)"> format</span><span style="color:var(--shiki-token-string)"> --storage</span><span style="color:var(--shiki-token-string)"> minio</span><span style="color:var(--shiki-token-string)"> --bucket</span><span style="color:var(--shiki-token-string)"> http://1.2.3.4:9000/juicefs</span><span style="color:var(--shiki-token-string)"> --access-key</span><span style="color:var(--shiki-token-string)"> 8lzuaquVzxmnzbl87DsU</span><span style="color:var(--shiki-token-string)"> --secret-key</span><span style="color:var(--shiki-token-string)"> UbkAcsYeeaOMebTNPJrgHme2PLGBWU8yOi1AolRc</span><span style="color:var(--shiki-token-string)"> redis://:redis-passwd-123@1.2.3.4:6379/1</span><span style="color:var(--shiki-token-string)"> shared-jfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p>注：redis 地址中最后的 1 改为其他值可以创建新的 juicefs</p>
</blockquote>
<p>成功后会在 MinIO web 控制台的 juicefs 存储桶中看到名为 <code>shared-jfs</code> 的文件夹。</p>
<p>然后挂载 juicefs 文件系统到 <code>/shared-jfs</code> 目录：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">juicefs</span><span style="color:var(--shiki-token-string)"> mount</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> redis://:redis-passwd-123@1.2.3.4:6379/1</span><span style="color:var(--shiki-token-string)"> /shared-jfs</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p>-d 表示后台运行</p>
</blockquote>
<p>最后让我们运行 juicefs 自带的性能测试看下是否成功 (这里我们关闭了大文件测试，太耗时啦 🤣)：</p>
<p>juicefs bench --big-file-size 0 /shared-jfs</p>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/juicefs-bench.png" alt="JuiceFS bench 性能测试结果" decoding="async" loading="lazy"/></p>
<p>再来看一下存储空间：</p>
<p><img src="/assets/images/how-to-setup-minio-juicefs-vps-town/juicefs-df.png" alt="JuiceFS 挂载后的存储空间" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="教程结束"><a href="#教程结束" class="rp-header-anchor rp-link" aria-hidden="true">#</a>教程结束</h2>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">🎉 教程结束！</div><div class="rp-callout__content"><p>啊哈，现在 <code>server-B</code> 也有一个超级大的存储空间了。</p><p>😁 冰箱门关闭。</p></div></div><!--/$-->]]></content>
        <author>
            <name>solar</name>
        </author>
        <category label="object-storage"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在 VPS.Town 上使用 Docker 部署 MinIO 个人图床完全指南]]></title>
        <id>/guide/build-miniio-image-hosting-service-with-vps-town</id>
        <link href="https://docs.vps.town/guide/build-miniio-image-hosting-service-with-vps-town"/>
        <updated>2025-04-13T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文详细介绍了如何使用 Docker 在 VPS.Town 服务器上部署 MinIO 对象存储服务，并通过 Nginx 反向代理和 Cloudflare 加速，打造一个高性能的个人图床。文章还包含完整的安装配置步骤和 PicGo 客户端连接指南。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="在-vpstown-上使用-docker-部署-minio-个人图床完全指南"><a href="#在-vpstown-上使用-docker-部署-minio-个人图床完全指南" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 VPS.Town 上使用 Docker 部署 MinIO 个人图床完全指南<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>听风</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 50 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#前言" class="rp-toc-item rp-link" title="前言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">前言</span></a><a href="#准备工作" class="rp-toc-item rp-link" title="准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备工作</span></a><a href="#购买-vps" class="rp-toc-item rp-link" title="购买 VPS" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">购买 VPS</span></a><a href="#安装-docker" class="rp-toc-item rp-link" title="安装 Docker" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装 Docker</span></a><a href="#docker-安装-minio" class="rp-toc-item rp-link" title="Docker 安装 MinIO" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Docker 安装 MinIO</span></a><a href="#配置反向代理和-cloudflare-加速" class="rp-toc-item rp-link" title="配置反向代理和 Cloudflare 加速" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">配置反向代理和 Cloudflare 加速</span></a><a href="#配置-minio-存储桶" class="rp-toc-item rp-link" title="配置 MinIO 存储桶" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">配置 MinIO 存储桶</span></a><a href="#picgo-连接图床上传图片" class="rp-toc-item rp-link" title="PicGo 连接图床上传图片" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">PicGo 连接图床上传图片</span></a><a href="#测试图床" class="rp-toc-item rp-link" title="测试图床" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">测试图床</span></a></div></details>
<h2 class="rp-toc-include" id="前言"><a href="#前言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>前言</h2>
<p>MinIO 是一种开源的大型、高性能、分布式对象存储服务，可以作为个人网盘、图床的通用基座。需要注意的是，MinIO 虽然有着非常好的优化，但如果只是作为个人图床使用，我们更推荐 Lsky 这类的轻量图床应用。</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">适用环境</div><div class="rp-callout__content"><p>
本教程适用于 Debian 12 系统，其他 Linux 发行版可能需要调整部分命令。</p></div></div>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<h3 class="rp-toc-include" id="购买-vps"><a href="#购买-vps" class="rp-header-anchor rp-link" aria-hidden="true">#</a>购买 VPS</h3>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">🖼️ VPS.Town &amp; MiniIO + PicGo 图床解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，随时随地为您的图床安个新家；</li>
<li>同时提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、上传图片更稳定；</li>
<li>完善的 7/12 售后保障，支持随时灵活升级配置、支持 7 天内有理由退款；</li>
<li>可在香港抗下 DMCA 版权投诉，分享图床更安全；</li>
<li>服务器位于香港，距离大陆近，对于移动用户更加友好</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<h3 class="rp-toc-include" id="安装-docker"><a href="#安装-docker" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装 Docker</h3>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">提示</div><div class="rp-callout__content"><p>
如果已安装 Docker，则可以跳过这一步，您可以使用 <code>docker -v</code> 命令检查是否已安装。</p></div></div>
<p>Debian 12 系统可直接复制以下命令安装 docker、docker-compose，其它系统请参见 Docker 官方文档。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">安装 Docker CE 和 Docker Compose</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="安装 Docker CE 和 Docker Compose"><code><span class="line"><span style="color:var(--shiki-token-keyword)">for</span><span style="color:var(--shiki-foreground)"> pkg </span><span style="color:var(--shiki-token-keyword)">in</span><span style="color:var(--shiki-token-string)"> docker.io</span><span style="color:var(--shiki-token-string)"> docker-doc</span><span style="color:var(--shiki-token-string)"> docker-compose</span><span style="color:var(--shiki-token-string)"> docker-compose-v2</span><span style="color:var(--shiki-token-string)"> podman-docker</span><span style="color:var(--shiki-token-string)"> containerd</span><span style="color:var(--shiki-token-string)"> runc</span><span style="color:var(--shiki-foreground)">; </span><span style="color:var(--shiki-token-keyword)">do</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> remove</span><span style="color:var(--shiki-foreground)"> $pkg; </span><span style="color:var(--shiki-token-keyword)">done</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> ca-certificates</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-constant)"> 0755</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://download.docker.com/linux/debian/gpg</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> chmod</span><span style="color:var(--shiki-token-string)"> a+r</span><span style="color:var(--shiki-token-string)"> /etc/apt/keyrings/docker.asc</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  &quot;deb [arch=$(</span><span style="color:var(--shiki-token-function)">dpkg</span><span style="color:var(--shiki-token-string)"> --print-architecture</span><span style="color:var(--shiki-token-string-expression)">) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)">  $(</span><span style="color:var(--shiki-token-function)">.</span><span style="color:var(--shiki-token-string)"> /etc/os-release</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;$VERSION_CODENAME&quot;) stable&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/docker.list</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /dev/null</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt-get</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> docker-ce</span><span style="color:var(--shiki-token-string)"> docker-ce-cli</span><span style="color:var(--shiki-token-string)"> containerd.io</span><span style="color:var(--shiki-token-string)"> docker-buildx-plugin</span><span style="color:var(--shiki-token-string)"> docker-compose-plugin</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="docker-安装-minio"><a href="#docker-安装-minio" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Docker 安装 MinIO</h2>
<p>首先创建并进入你的安装目录，编辑 docker-compose.yaml，这里我的目录是 <code>/root/minio</code></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /root/minio</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /root/minio</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">vim</span><span style="color:var(--shiki-token-string)"> docker-compose.yaml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>将以下内容输入后，按下 <code>esc</code> <code>:x</code> 保存，输入 <code>docker compose up -d</code> 启动</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__title">docker-compose.yaml</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml" data-title="docker-compose.yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  minio</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> minio</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> quay.io/minio/minio</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./data:/data</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">TZ=Asia/Shanghai</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MINIO_BROWSER_REDIRECT_URL=https://minio.yourdomain/minio/ui</span><span style="color:var(--shiki-token-comment)"> # 请在这里输入你的域名</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MINIO_SERVER_URL=https://minio.yourdomain</span><span style="color:var(--shiki-token-comment)"> # 请在这里输入你的域名</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MINIO_ROOT_USER=user</span><span style="color:var(--shiki-token-comment)"> # 请在这里输入你的用户名</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">MINIO_ROOT_PASSWORD=password</span><span style="color:var(--shiki-token-comment)"> # 请在这里输入你的密码</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;9001:9000&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;9091:9090&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    command</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> server /data --console-address &quot;:9090&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">安全提示</div><div class="rp-callout__content"><p>
请务必修改默认的用户名和密码，使用强密码增强安全性。同时确保将 yourdomain 替换为你实际使用的域名。</p></div></div>
<h2 class="rp-toc-include" id="配置反向代理和-cloudflare-加速"><a href="#配置反向代理和-cloudflare-加速" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置反向代理和 Cloudflare 加速</h2>
<p>不出意外的话，你已经可以通过 <code>ip:端口号</code> 的方式访问 MinIO 的管理面板了，但考虑到存储服务的公开性，我强烈建议开启反向代理并启用 Cloudflare 加速，这里我使用 nginx proxy manager 配置反向代理，npm 的具体安装方式请参照官方文档。</p>
<p>配置 nginx 你首先需要一个域名，以 Cloudflare 为例，添加如下的 DNS 解析，<strong>注意开启小黄云</strong>。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413202218082.png" alt="Cloudflare 添加 DNS 解析" decoding="async"/></p>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">小黄云说明</div><div class="rp-callout__content"><p>
Cloudflare 的&quot;小黄云&quot;是指开启了 Cloudflare 代理服务，它能为你的服务提供额外的安全防护和性能优化。</p></div></div>
<p>由于 Cloudflare 代理会修改请求头，导致 MinIO 的鉴权出现问题，并且缓存对象存储违反了 Cloudflare 的用户协议，我们需要关闭该子域名的缓存。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413202521077.png" alt="Cloudflare 关闭子域名缓存" decoding="async" loading="lazy"/></p>
<p>在 <code>缓存</code> - <code>Cache Rules</code> 下创建一条新的规则如下</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413203005683.png" alt="Cloudflare 创建缓存规则" decoding="async" loading="lazy"/></p>
<p>现在，我们进入 npm 的管理面板进行配置，请尽量按照我的配置方式，避免不必要的折腾。</p>
<div class="rp-callout rp-callout--danger"><div class="rp-callout__title">重要提醒</div><div class="rp-callout__content"><p>
由于 MinIO 同 nginx 的适配非常烂，如果要关闭小黄云可能需要另外的 nginx 配置。所以建议 <code>开启小黄云+绕过缓存</code>。</p></div></div>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233600362.png" alt="npm 反向代理配置界面" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233648402.png" alt="npm 反向代理配置续" decoding="async" loading="lazy"/></p>
<p>点设置按钮，填入以下信息：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">nginx 配置</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="nginx 配置"><code><span class="line"><span style="color:var(--shiki-token-function)">location</span><span style="color:var(--shiki-token-string)"> /minio/ui/</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      rewrite</span><span style="color:var(--shiki-token-string)"> ^/minio/ui/</span><span style="color:var(--shiki-foreground)">(</span><span style="color:var(--shiki-token-function)">.</span><span style="color:var(--shiki-token-string)">*</span><span style="color:var(--shiki-foreground)">) </span><span style="color:var(--shiki-token-string)">/</span><span style="color:var(--shiki-foreground)">$1 </span><span style="color:var(--shiki-token-string)">break</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> Host</span><span style="color:var(--shiki-foreground)"> $http_host;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Real-IP</span><span style="color:var(--shiki-foreground)"> $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-For</span><span style="color:var(--shiki-foreground)"> $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-Proto</span><span style="color:var(--shiki-foreground)"> $scheme;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-NginX-Proxy</span><span style="color:var(--shiki-token-constant)"> true</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # This is necessary to pass the correct IP to be hashed</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      real_ip_header</span><span style="color:var(--shiki-token-string)"> X-Real-IP</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_connect_timeout</span><span style="color:var(--shiki-token-constant)"> 300</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # To support websockets in MinIO versions released after January 2023</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_http_version</span><span style="color:var(--shiki-token-constant)"> 1.1</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_buffering</span><span style="color:var(--shiki-token-string)"> off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> Upgrade</span><span style="color:var(--shiki-foreground)"> $http_upgrade;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_set_header</span><span style="color:var(--shiki-token-string)"> Connection</span><span style="color:var(--shiki-token-string-expression)"> &quot;upgrade&quot;</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      # Uncomment the following line to set the Origin request to an empty string</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">      #  proxy_set_header Origin &#x27;&#x27;;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">      chunked_transfer_encoding</span><span style="color:var(--shiki-token-string)"> off</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">      proxy_pass</span><span style="color:var(--shiki-token-string)"> http://172.17.0.1:9091</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">   }</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233750641.png" alt="npm 反向代理 SSL 配置" decoding="async" loading="lazy"/></p>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">SSL 必要性</div><div class="rp-callout__content"><p>
务必开启 SSL。</p></div></div>
<h2 class="rp-toc-include" id="配置-minio-存储桶"><a href="#配置-minio-存储桶" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配置 MinIO 存储桶</h2>
<p>现在你应该可以访问 <code>https://minio.yourdomain/minio/ui</code>，输入你在 docker-compose.yaml 中填写的用户名和密码登录到 MinIO 的后台。</p>
<p>点击 <code>Create a Bucket</code> 创建一个新的存储桶。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413204745325.png" alt="MinIO 点击 Create a Bucket" decoding="async" loading="lazy"/></p>
<p>这里以 <code>img</code> 为例，下面三个选项一般无需勾选。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413204913593.png" alt="MinIO 创建 img 存储桶" decoding="async" loading="lazy"/></p>
<p>创建好桶后第一步是配置权限，首先将匿名用户的对根路径的权限设为 <code>read only</code>。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205059650.png" alt="匿名用户权限设为只读" decoding="async" loading="lazy"/></p>
<p><strong>刷新</strong>页面后，手动调整关闭匿名用户的 <code>s3:ListBucket</code> 权限，避免被刷目录，删除红框中标记的行，及上一行结尾的逗号，并保存。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205326303.png" alt="删除 s3:ListBucket 权限" decoding="async" loading="lazy"/></p>
<div class="rp-callout rp-callout--note"><div class="rp-callout__title">权限说明</div><div class="rp-callout__content"><p>
关闭 <code>s3:ListBucket</code> 权限是为了防止他人浏览你的存储桶中的所有文件，这是一个重要的安全措施。</p></div></div>
<p>现在，你可以点击右上角的文件夹图标，进入 <code>img</code> 存储桶的根目录，上传一张照片，并测试他的预览和加载功能是否正常。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413205916965.png" alt="img 存储桶上传测试图片" decoding="async" loading="lazy"/></p>
<p>同时，开启一个浏览器的匿名窗口，使用以下格式的直链测试外部访问，请注意将域名和路径替换为你自己的。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210054959.png" alt="匿名窗口测试图片直链" decoding="async" loading="lazy"/></p>
<p>如果能够正常打开，恭喜你，你的图床已经可用了。</p>
<h2 class="rp-toc-include" id="picgo-连接图床上传图片"><a href="#picgo-连接图床上传图片" class="rp-header-anchor rp-link" aria-hidden="true">#</a>PicGo 连接图床上传图片</h2>
<p>PicGo 是一个非常实用的 Markdown 图片上传软件，为了能够连接你搭建的 MinIO 图床，你需要为存储桶配置密钥，密钥在创建后<strong>只会显示一次，请妥善保存</strong>。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210715130.png" alt="MinIO 为存储桶创建密钥" decoding="async" loading="lazy"/></p>
<p>同时，你还要为 PicGo 安装一个插件。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413210835177.png" alt="PicGo 安装 MinIO 插件" decoding="async" loading="lazy"/></p>
<p>接下来配置这个插件。注意将端口设为 <code>443</code> 并勾选 <code>useSSL</code></p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211019552.png" alt="PicGo 插件端口与 SSL 设置" decoding="async" loading="lazy"/></p>
<p><code>bucket</code> 是你存储桶的名称，<code>基础目录</code> 可任意填写，<code>自定义域名</code> 建议手动填写，否则图片链接会添加 443 端口，不太美观，<code>归档</code> 建议开启。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211222401.png" alt="PicGo 存储桶与域名配置" decoding="async" loading="lazy"/></p>
<p>在 <code>上传区</code> 将默认图床修改为 <code>MinIO图床</code>，拖动并上传文件测试。</p>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413211529002.png" alt="PicGo 上传区测试上传" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="测试图床"><a href="#测试图床" class="rp-header-anchor rp-link" aria-hidden="true">#</a>测试图床</h2>
<p><img src="/assets/images/build-miniio-image-hosting-service-with-vps-town/image-20250413233425534.png" alt="图床图片正常加载" decoding="async" loading="lazy"/></p>
<p>图片可以正常加载，至此为止，搭建完成。</p>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">MinIO 的其他用途</summary><div class="rp-callout__content"><p>
除了作为图床使用外，MinIO 还可以用作：</p><ul>
<li>个人网盘系统</li>
<li>网站静态资源存储</li>
<li>应用程序的对象存储后端</li>
<li>备份存储解决方案</li>
</ul><p>你可以根据自己的需求进一步探索 MinIO 的高级功能。</p></div></details><!--/$-->]]></content>
        <author>
            <name>听风</name>
        </author>
        <category label="object-storage"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何将 GitHub 仓库代码迁移到使用 VPS.Town 搭建的 Gitea 中]]></title>
        <id>/guide/how-to-migrate-github-repo-to-gitea-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-migrate-github-repo-to-gitea-vps-town"/>
        <updated>2025-04-13T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文介绍如何将 GitHub 等代码仓库迁移至部署在 VPS.Town 上的 Gitea 自托管平台。通过图文步骤指导用户进行公开与私有仓库的迁移，特别适合因合规问题需转移仓库的项目，如 unlock-music。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何将-github-仓库代码迁移到使用-vpstown-搭建的-gitea-中"><a href="#如何将-github-仓库代码迁移到使用-vpstown-搭建的-gitea-中" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何将 GitHub 仓库代码迁移到使用 VPS.Town 搭建的 Gitea 中<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 (<a href="#" class="rp-link">赛博丁真</a>) 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>7 折循环优惠券</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#引言" class="rp-toc-item rp-link" title="引言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">引言</span></a><a href="#vpstown-大盘机" class="rp-toc-item rp-link" title="VPS.Town 大盘机" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">VPS.Town 大盘机</span></a><a href="#选择右上角号" class="rp-toc-item rp-link" title="选择右上角+号" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">选择右上角+号</span></a><a href="#可选择-github-等平台" class="rp-toc-item rp-link" title="可选择 github 等平台" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">可选择 github 等平台</span></a><a href="#public-repo-无需填写-token直接迁移即可" class="rp-toc-item rp-link" title="public repo 无需填写 token，直接迁移即可" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">public repo 无需填写 token，直接迁移即可</span></a><a href="#private-repo-迁移教程" class="rp-toc-item rp-link" title="private repo 迁移教程" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">private repo 迁移教程</span></a><a href="#github-创建令牌教程" class="rp-toc-item rp-link" title="github 创建令牌教程" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">github 创建令牌教程</span></a><a href="#点击右上角头像-settings" class="rp-toc-item rp-link" title="点击右上角头像 →settings" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">点击右上角头像 →settings</span></a><a href="#往下拉找到-developer-settings" class="rp-toc-item rp-link" title="往下拉，找到 developer settings" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">往下拉，找到 developer settings</span></a><a href="#选择-generate-classic-token" class="rp-toc-item rp-link" title="选择 generate classic token" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">选择 generate classic token</span></a><a href="#把-repo-的权限选上" class="rp-toc-item rp-link" title="把 repo 的权限选上" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">把 repo 的权限选上</span></a><a href="#确认后等待迁移即可" class="rp-toc-item rp-link" title="确认后等待迁移即可" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">确认后等待迁移即可</span></a><a href="#迁移成功的范本" class="rp-toc-item rp-link" title="迁移成功的范本" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">迁移成功的范本</span></a></div></details>
<h2 class="rp-toc-include" id="引言"><a href="#引言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>引言</h2>
<p>本教程将引导你如何从 GitHub 等第代码托管平台迁移至 VPS.Town 大盘机搭建的自托管 Gitea</p>
<p><code>unlock-music</code> 项目曾经因为 DMCA，被 GitHub 官方下架</p>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image.png" alt="image.png" decoding="async"/></p>
<p>最近 GitHub 也开始屏蔽来自中国大陆 IP 的访问，不难想象后续还会发生什么事情：删除国人的仓库、组织，甚至封号。</p>
<p>而 <a href="http://VPS.Town" target="_blank" rel="noopener noreferrer" class="rp-link">VPS.Town</a> 大盘机抗 DMCA，允许托管该类仓库，没有任何后顾之忧。</p>
<h3 class="rp-toc-include" id="vpstown-大盘机"><a href="#vpstown-大盘机" class="rp-header-anchor rp-link" aria-hidden="true">#</a><a href="http://VPS.Town" target="_blank" rel="noopener noreferrer" class="rp-link">VPS.Town</a> 大盘机</h3>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，延迟低，速度快</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<h2 class="rp-toc-include" id="选择右上角号"><a href="#选择右上角号" class="rp-header-anchor rp-link" aria-hidden="true">#</a>选择右上角+号</h2>
<p>迁移外部仓库</p>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%201.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="可选择-github-等平台"><a href="#可选择-github-等平台" class="rp-header-anchor rp-link" aria-hidden="true">#</a>可选择 github 等平台</h3>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%202.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="public-repo-无需填写-token直接迁移即可"><a href="#public-repo-无需填写-token直接迁移即可" class="rp-header-anchor rp-link" aria-hidden="true">#</a>public repo 无需填写 token，直接迁移即可</h3>
<p>private repo 请接着往下看</p>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%203.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="private-repo-迁移教程"><a href="#private-repo-迁移教程" class="rp-header-anchor rp-link" aria-hidden="true">#</a>private repo 迁移教程</h2>
<h3 class="rp-toc-include" id="github-创建令牌教程"><a href="#github-创建令牌教程" class="rp-header-anchor rp-link" aria-hidden="true">#</a>github 创建令牌教程</h3>
<h4 class="rp-toc-include" id="点击右上角头像-settings"><a href="#点击右上角头像-settings" class="rp-header-anchor rp-link" aria-hidden="true">#</a>点击右上角头像 →settings</h4>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%204.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="往下拉找到-developer-settings"><a href="#往下拉找到-developer-settings" class="rp-header-anchor rp-link" aria-hidden="true">#</a>往下拉，找到 developer settings</h4>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%205.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="选择-generate-classic-token"><a href="#选择-generate-classic-token" class="rp-header-anchor rp-link" aria-hidden="true">#</a>选择 generate classic token</h4>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%206.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="把-repo-的权限选上"><a href="#把-repo-的权限选上" class="rp-header-anchor rp-link" aria-hidden="true">#</a>把 repo 的权限选上</h4>
<p>如果需要迁移其他内容则需要给令牌更多的权限</p>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%207.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h4 class="rp-toc-include" id="确认后等待迁移即可"><a href="#确认后等待迁移即可" class="rp-header-anchor rp-link" aria-hidden="true">#</a>确认后等待迁移即可</h4>
<p><img src="/assets/images/how-to-migrate-github-repo-to-gitea-vps-town/image%208.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="迁移成功的范本"><a href="#迁移成功的范本" class="rp-header-anchor rp-link" aria-hidden="true">#</a>迁移成功的范本</h2>
<p>迁移完成后的仓库地址为 <code>gitea.886663.xyz/agczsz/unlock-music1</code>（作者自建的实例，不保证长期可以访问），迁移结果可参考上方截图。</p><!--/$-->]]></content>
        <author>
            <name>赛博丁真</name>
        </author>
        <category label="code-version-control"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[使用 VPS.Town 大盘机搭建 Gitea 自托管代码，不再依赖 GitHub]]></title>
        <id>/guide/how-to-self-hosted-deploy-gitea-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-self-hosted-deploy-gitea-vps-town"/>
        <updated>2025-04-13T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[本文详细介绍了如何使用 VPS.Town 的大盘机部署 Gitea 代码托管平台的全过程。内容包括安装 Docker、配置 docker-compose 文件、设置反向代理与 SSL 证书，适合开发者去 GitHub 化，实现代码自托管自由。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="使用-vpstown-大盘机搭建-gitea-自托管代码不再依赖-github"><a href="#使用-vpstown-大盘机搭建-gitea-自托管代码不再依赖-github" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用 VPS.Town 大盘机搭建 Gitea 自托管代码，不再依赖 GitHub<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 (<a href="#" class="rp-link">赛博丁真</a>) 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 40 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#引言" class="rp-toc-item rp-link" title="引言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">引言</span></a><a href="#为什么选择-gitea" class="rp-toc-item rp-link" title="为什么选择 Gitea？🚀" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">为什么选择 Gitea？🚀</span></a><a href="#其中-vpstown-的大盘鸡方案最适合-gitea-部署使用" class="rp-toc-item rp-link" title="其中 VPS.Town 的「大盘鸡」方案最适合 Gitea 部署使用" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>其中 VPS.Town 的「大盘鸡」方案最适合 Gitea 部署使用</strong></span></a><a href="#️-安装教程" class="rp-toc-item rp-link" title="🛠️ 安装教程" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🛠️ 安装教程</span></a><a href="#第一步连接到您的-vps-服务器" class="rp-toc-item rp-link" title="第一步：连接到您的 VPS 服务器" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc"><strong>第一步：连接到您的 VPS 服务器</strong></span></a><a href="#第二步安装-docker" class="rp-toc-item rp-link" title="第二步：安装 docker" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc"><strong>第二步：安装 docker</strong></span></a><a href="#第三步创建-docker-compose-配置文件" class="rp-toc-item rp-link" title="第三步：创建 docker-compose 配置文件" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第三步：创建 docker-compose 配置文件</span></a><a href="#创建-gitea-目录" class="rp-toc-item rp-link" title="创建 gitea 目录" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">创建 gitea 目录</span></a><a href="#填入-docker-compose-的内容" class="rp-toc-item rp-link" title="填入 docker-compose 的内容" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">填入 docker-compose 的内容</span></a><a href="#默认配置使用-sqlite" class="rp-toc-item rp-link" title="默认配置，使用 sqlite" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">默认配置，使用 sqlite</span></a><a href="#启动-gitea" class="rp-toc-item rp-link" title="启动 gitea" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">启动 gitea</span></a><a href="#配合宝塔面板配置反向代理" class="rp-toc-item rp-link" title="配合宝塔面板配置反向代理" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">配合宝塔面板配置反向代理</span></a><a href="#选择网站--反向代理--添加反代" class="rp-toc-item rp-link" title="选择网站 → 反向代理 → 添加反代" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">选择网站 → 反向代理 → 添加反代</span></a><a href="#填入你的域名目标地址填入本地-ipgitea-端口" class="rp-toc-item rp-link" title="填入你的域名、目标地址填入本地 ip+gitea 端口" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">填入你的域名、目标地址填入本地 ip+gitea 端口</span></a><a href="#1-申请-ssl-证书" class="rp-toc-item rp-link" title="1. 申请 ssl 证书" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1. 申请 ssl 证书</span></a><a href="#将域名-ip-解析到-vps" class="rp-toc-item rp-link" title="将域名 IP 解析到 vps" style="padding-left:24px" data-depth="2"><span class="rp-toc-item__text rp-doc">将域名 IP 解析到 vps</span></a><a href="#2-选择网站的-ssl-设置" class="rp-toc-item rp-link" title="2. 选择网站的 ssl 设置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2. 选择网站的 ssl 设置</span></a><a href="#3-使用文件验证申请证书" class="rp-toc-item rp-link" title="3. 使用文件验证申请证书" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3. 使用文件验证申请证书</span></a><a href="#4-执行安装" class="rp-toc-item rp-link" title="4. 执行安装" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">4. 执行安装</span></a><a href="#5-创建账户" class="rp-toc-item rp-link" title="5. 创建账户" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">5. 创建账户</span></a><a href="#6-创建仓库" class="rp-toc-item rp-link" title="6. 创建仓库" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">6. 创建仓库</span></a><a href="#使用方法同-github" class="rp-toc-item rp-link" title="使用方法同 github" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">使用方法同 github</span></a><a href="#进阶使用-mysql-数据库进行安装" class="rp-toc-item rp-link" title="进阶：使用 MySQL 数据库进行安装" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">进阶：使用 MySQL 数据库进行安装</span></a></div></details>
<h2 class="rp-toc-include" id="引言"><a href="#引言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>引言</h2>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">本文配图</summary><div class="rp-callout__content"><p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/banner.png" alt="banner" decoding="async"/></p></div></details>
<blockquote>
<p><strong>🧩Gitea</strong> 是一个轻量级的 <strong>Git 代码托管平台</strong>，也就是说，它可以用来像 GitHub、GitLab 一样管理代码仓库。</p>
</blockquote>
<h2 class="rp-toc-include" id="为什么选择-gitea"><a href="#为什么选择-gitea" class="rp-header-anchor rp-link" aria-hidden="true">#</a>为什么选择 Gitea？🚀</h2>
<ol>
<li>
<p><strong>自托管（Self-hosted）🔐</strong></p>
<p>Gitea 支持完全自托管，可以在自己的服务器上安装和运行。这意味着所有的代码和数据都由自己掌控，<strong>极大地提升了数据安全性</strong>，有效防止敏感代码外泄的风险。</p>
</li>
<li>
<p><strong>避免平台风险 ❌🌐</strong></p>
<p>相比于 GitHub 可能因政策原因被阻断访问，或 Gitee 存在的内容审查机制，Gitea 作为自托管平台，不依赖第三方服务，从根本上杜绝了外部平台带来的访问限制与内容审查问题，保障了研发工作的连续性与自由性。</p>
</li>
<li>
<p><strong>灵活配置 CDN 加速 ⚡️🌍</strong></p>
<p>使用 Gitea 可以根据自身网络环境，自由选择并配置 CDN 服务，从而优化访问速度和稳定性，特别适合在多地协作或访问环境复杂的情况下使用。</p>
</li>
<li>
<p><strong>资源占用小，部署简便 🧩📦</strong></p>
<p>Gitea 是用 Go 语言编写的，编译后的单一可执行文件体积小，运行效率高，资源占用少，部署和维护都非常方便，适合中小型团队或个人开发者快速上手。</p>
</li>
<li>
<p><strong>开源社区活跃，功能不断迭代 🔄🛠️</strong></p>
<p>Gitea 拥有活跃的开源社区，持续进行功能更新与漏洞修复，保障了平台的可用性和稳定性。同时支持丰富的功能如 issue 管理、PR 流程、代码审查、Webhook 等，能够满足大多数开发场景需求。</p>
</li>
</ol>
<h2 class="rp-toc-include" id="其中-vpstown-的大盘鸡方案最适合-gitea-部署使用"><a href="#其中-vpstown-的大盘鸡方案最适合-gitea-部署使用" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>其中 VPS.Town 的「大盘鸡」方案最适合 Gitea 部署使用</strong></h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">🚀 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<h2 class="rp-toc-include" id="️-安装教程"><a href="#️-安装教程" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🛠️ 安装教程</h2>
<h3 class="rp-toc-include" id="第一步连接到您的-vps-服务器"><a href="#第一步连接到您的-vps-服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第一步：连接到您的 VPS 服务器</strong></h3>
<p>使用 SSH 工具连接到您的 VPS.Town 服务器实例，确保您切换到 root 用户，以便执行后续操作。</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%201.png" alt="SSH 连接 VPS 服务器" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="第二步安装-docker"><a href="#第二步安装-docker" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第二步：安装 docker</strong></h3>
<p>我们将使用 docker 官方的安装脚本。该脚本简化了 docker 编译安装过程，操作更加便捷。</p>
<p>安装 docker 是为了隔离系统与运行环境，保障 VPS 的安全，同时也能简化配置，节省配置时间</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://get.docker.com</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> docker</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="第三步创建-docker-compose-配置文件"><a href="#第三步创建-docker-compose-配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步：创建 docker-compose 配置文件</h2>
<h3 class="rp-toc-include" id="创建-gitea-目录"><a href="#创建-gitea-目录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>创建 gitea 目录</h3>
<p>使用 <a href="https://vps.town" target="_blank" rel="noopener noreferrer" class="rp-link">VPS.TOWN</a> 大盘机时，默认挂载目录为/home，无需对硬盘格式化</p>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，延迟低，速度快</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image.png" alt="image.png" decoding="async" loading="lazy"/></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)">  /home/gitea</span><span style="color:var(--shiki-token-comment)"> #在数据盘上创建目录存放数据</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> gitea</span><span style="color:var(--shiki-token-comment)"> #存放docker-compose文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> ./gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> ./docker-compose.yaml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="填入-docker-compose-的内容"><a href="#填入-docker-compose-的内容" class="rp-header-anchor rp-link" aria-hidden="true">#</a>填入 docker-compose 的内容</h3>
<h4 class="rp-toc-include" id="默认配置使用-sqlite"><a href="#默认配置使用-sqlite" class="rp-header-anchor rp-link" aria-hidden="true">#</a>默认配置，使用 sqlite</h4>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  gitea</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    external</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  server</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> gitea/gitea:1.21.1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">USER_UID=1000</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">USER_GID=1000</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/home/gitea:/data</span><span style="color:var(--shiki-token-comment)"> #/home/gitea 可修改为自定义数据目录</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/etc/timezone:/etc/timezone:ro</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">/etc/localtime:/etc/localtime:ro</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;&#x27;127.0.0.1:3000&#x27;:3000&quot;</span><span style="color:var(--shiki-token-comment)"> #若需要修改端口可修改127.0.0.1:3000</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;&#x27;127.0.0.1:2222&#x27;:22&quot;</span><span style="color:var(--shiki-token-comment)"> #容器内ssh端口映射，安全起见设置为本地，有需要可以重新打开</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>完成后 CTRL+X 推出，保存时选 Y</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%201.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="启动-gitea"><a href="#启动-gitea" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动 gitea</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%202.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="配合宝塔面板配置反向代理"><a href="#配合宝塔面板配置反向代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>配合宝塔面板配置反向代理</h3>
<blockquote>
<p>宝塔面板适合新手快速配置反向代理，当然，你也可以使用 1panel 等工具进行配置</p>
</blockquote>
<p>安装宝塔面板：<a href="https://www.bt.cn/new/download.html" target="_blank" rel="noopener noreferrer" class="rp-link">宝塔面板下载，免费全能的服务器运维软件</a></p>
<p>首次进入网站设置项会提示安装 nginx，选择版本安装即可</p>
<h3 class="rp-toc-include" id="选择网站--反向代理--添加反代"><a href="#选择网站--反向代理--添加反代" class="rp-header-anchor rp-link" aria-hidden="true">#</a>选择网站 → 反向代理 → 添加反代</h3>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%203.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="填入你的域名目标地址填入本地-ipgitea-端口"><a href="#填入你的域名目标地址填入本地-ipgitea-端口" class="rp-header-anchor rp-link" aria-hidden="true">#</a>填入你的域名、目标地址填入本地 ip+gitea 端口</h3>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%204.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="1-申请-ssl-证书"><a href="#1-申请-ssl-证书" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 申请 ssl 证书</h3>
<h4 class="rp-toc-include" id="将域名-ip-解析到-vps"><a href="#将域名-ip-解析到-vps" class="rp-header-anchor rp-link" aria-hidden="true">#</a>将域名 IP 解析到 vps</h4>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%205.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="2-选择网站的-ssl-设置"><a href="#2-选择网站的-ssl-设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 选择网站的 ssl 设置</h3>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%206.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="3-使用文件验证申请证书"><a href="#3-使用文件验证申请证书" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 使用文件验证申请证书</h3>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%207.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="4-执行安装"><a href="#4-执行安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4. 执行安装</h3>
<p>打开你的域名，按照官方指引进行设置即可（默认使用 sqlite）</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%207.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="5-创建账户"><a href="#5-创建账户" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. 创建账户</h3>
<p>创建账户后即可使用，第一个创建的用户即为管理员账户</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%209.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="6-创建仓库"><a href="#6-创建仓库" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6. 创建仓库</h3>
<p>点击＋号，即可创建并托管你的第一个代码仓库</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%208.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="使用方法同-github"><a href="#使用方法同-github" class="rp-header-anchor rp-link" aria-hidden="true">#</a>使用方法同 github</h3>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%209.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="进阶使用-mysql-数据库进行安装"><a href="#进阶使用-mysql-数据库进行安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>进阶：使用 MySQL 数据库进行安装</h2>
<p>将 docker-compose 文件修改为以下内容：</p>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">⚠️ 强烈建议修改 MySQL 密码</div><div class="rp-callout__content"><p>虽然 docker 的网络不暴露在公网，但为了安全起见，强烈建议修改 MySQL 密码</p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">version:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">networks:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  gitea:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    external:</span><span style="color:var(--shiki-token-constant)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">services:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  server:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    image:</span><span style="color:var(--shiki-token-string)"> gitea/gitea:1.21.1</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    container_name:</span><span style="color:var(--shiki-token-string)"> gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    environment:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> USER_UID=</span><span style="color:var(--shiki-token-constant)">1000</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> USER_GID=</span><span style="color:var(--shiki-token-constant)">1000</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> GITEA__database__DB_TYPE=mysql</span><span style="color:var(--shiki-token-comment)"> #请注意修改用户名和密码</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> GITEA__database__HOST=db:3306</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> GITEA__database__NAME=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> GITEA__database__USER=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> GITEA__database__PASSWD=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    restart:</span><span style="color:var(--shiki-token-string)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    networks:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    volumes:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> /home/gitea:/data</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> /etc/timezone:/etc/timezone:ro</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> /etc/localtime:/etc/localtime:ro</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    ports:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string-expression)"> &quot;3000:3000&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string-expression)"> &quot;222:22&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    depends_on:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> db</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">  db:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    image:</span><span style="color:var(--shiki-token-string)"> mysql:8</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    restart:</span><span style="color:var(--shiki-token-string)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    environment:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> MYSQL_ROOT_PASSWORD=gitea</span><span style="color:var(--shiki-token-comment)"> #请注意修改用户名和密码</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> MYSQL_USER=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> MYSQL_PASSWORD=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> MYSQL_DATABASE=gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    networks:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> gitea</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    volumes:</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">      -</span><span style="color:var(--shiki-token-string)"> ./mysql:/var/lib/mysql</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>安装时选择 mysql，填入相关信息安装即可</p>
<p><img src="/assets/images/how-to-self-hosted-deploy-gitea-vps-town/image%2010.png" alt="image.png" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>赛博丁真</name>
        </author>
        <category label="code-version-control"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[新人专用：兰空图床安装配置手册]]></title>
        <id>/guide/how-to-install-lsky-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-lsky-vps-town"/>
        <updated>2025-04-13T06:34:00.000Z</updated>
        <summary type="html"><![CDATA[本文介绍了在 VPS.Town VPS (Debian 系统)上使用 Docker 安装兰空图床，并通过 Nginx 反代访问的完整步骤，适合 Docker 新手快速上手。]]></summary>
        <content type="html"><![CDATA[<!--$--><div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>xiaoqingnian-</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>--</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#准备工作" class="rp-toc-item rp-link" title="准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备工作</span></a><a href="#第一步创建项目目录" class="rp-toc-item rp-link" title="第一步：创建项目目录" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第一步：创建项目目录</span></a><a href="#第二步创建-docker-compose-配置文件" class="rp-toc-item rp-link" title="第二步：创建 Docker Compose 配置文件" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第二步：创建 Docker Compose 配置文件</span></a><a href="#第三步启动服务" class="rp-toc-item rp-link" title="第三步：启动服务" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第三步：启动服务</span></a><a href="#第四步配置-nginx-反向代理" class="rp-toc-item rp-link" title="第四步：配置 Nginx 反向代理" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第四步：配置 Nginx 反向代理</span></a><a href="#第五步完成兰空图床初始设置" class="rp-toc-item rp-link" title="第五步：完成兰空图床初始设置" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第五步：完成兰空图床初始设置</span></a><a href="#1-打开浏览器访问你的域名" class="rp-toc-item rp-link" title="1. 打开浏览器，访问你的域名" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">1. 打开浏览器，访问你的域名</span></a><a href="#2-数据库配置--管理员配置页面" class="rp-toc-item rp-link" title="2. 数据库配置 &amp; 管理员配置页面" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2. 数据库配置 &amp; 管理员配置页面</span></a><a href="#3-安装完成" class="rp-toc-item rp-link" title="3. 安装完成" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3. 安装完成</span></a><a href="#恭喜你" class="rp-toc-item rp-link" title="恭喜你" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">恭喜你</span></a><a href="#常见问题解决" class="rp-toc-item rp-link" title="常见问题解决" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">常见问题解决</span></a><a href="#安装过程中断或出错" class="rp-toc-item rp-link" title="安装过程中断或出错" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装过程中断或出错</span></a><a href="#上传图片失败" class="rp-toc-item rp-link" title="上传图片失败" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">上传图片失败</span></a></div></details>
<h1 class="rp-toc-include" id="新人专用兰空图床安装配置手册"><a href="#新人专用兰空图床安装配置手册" class="rp-header-anchor rp-link" aria-hidden="true">#</a>新人专用：兰空图床安装配置手册<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<p>看到有人在某坛问兰空图床的问题，意识到虽然有官方文档和社区加持，但可能仍然有一些细节存在坑点，导致安装不成功。最近入了 VPS.Town 的 A2 大盘鸡，刚好要再装一次，便分享一份安装指南，回馈社区。</p>
<p>本指南适用于在 VPS.Town 服务器(Debian 系统) 上使用 Docker 安装兰空图床，并通过宿主机上的 Nginx 进行访问。整个过程分为 5 个简单步骤，即使是没有接触过的新人同学也可以很快上手，轻松完成。</p>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<p><strong>需要的环境：</strong></p>
<ul>
<li>Debian 系统（确保你能正确使用 <code>SSH / VNC</code> 登入）</li>
<li>Docke 已安装</li>
<li>Nginx 已安装在宿主机</li>
<li>准备一个已经完成好 DNS 解析的域名 (例如：<code>img.domain.com</code>)</li>
</ul>
<p><strong>确认 Docker 是否正常：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 在终端输入以下命令</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> version</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果显示版本号，说明Docker已安装</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p>未安装的话，可参考以下命令快速安装</p>
</blockquote>
<p><strong>Docker 安装</strong></p>
<ol>
<li>更新系统包列表</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> upgrade</span><span style="color:var(--shiki-token-string)"> -y</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="2">
<li>安装必要的依赖</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> apt-transport-https</span><span style="color:var(--shiki-token-string)"> ca-certificates</span><span style="color:var(--shiki-token-string)"> curl</span><span style="color:var(--shiki-token-string)"> gnupg</span><span style="color:var(--shiki-token-string)"> lsb-release</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="3">
<li>添加 Docker 官方 GPG 密钥</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://download.docker.com/linux/debian/gpg</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> gpg</span><span style="color:var(--shiki-token-string)"> --dearmor</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /usr/share/keyrings/docker-archive-keyring.gpg</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="4">
<li>添加 Docker 仓库</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">echo</span><span style="color:var(--shiki-token-string-expression)"> &quot;deb [arch=$(</span><span style="color:var(--shiki-token-function)">dpkg</span><span style="color:var(--shiki-token-string)"> --print-architecture</span><span style="color:var(--shiki-token-string-expression)">) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(</span><span style="color:var(--shiki-token-function)">lsb_release</span><span style="color:var(--shiki-token-string)"> -cs</span><span style="color:var(--shiki-token-string-expression)">) stable&quot;</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sudo</span><span style="color:var(--shiki-token-string)"> tee</span><span style="color:var(--shiki-token-string)"> /etc/apt/sources.list.d/docker.list</span><span style="color:var(--shiki-token-keyword)"> &gt;</span><span style="color:var(--shiki-token-string)"> /dev/null</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="5">
<li>安装 Docker Engine</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> docker-ce</span><span style="color:var(--shiki-token-string)"> docker-ce-cli</span><span style="color:var(--shiki-token-string)"> containerd.io</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<ol start="6">
<li>验证</li>
</ol>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> version</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><strong>确认 Nginx 是否正常：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 在终端输入以下命令</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nginx</span><span style="color:var(--shiki-token-string)"> -v</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 如果显示版本号，说明Nginx已安装</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p>如未安装，可 Refer <a href="/guide/how-to-install-nginx-vps-town" class="rp-link">nginx 安装手册</a></p>
</blockquote>
<h2 class="rp-toc-include" id="第一步创建项目目录"><a href="#第一步创建项目目录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一步：创建项目目录</h2>
<p>如果你没有修改挂载目录的话 ，那么你可以直接照着做就可以。建议把 Docker 数据放数据盘，不占用系统盘容量，当然如果你进行了扩容且够用的话当我没说。</p>
<p><strong>先查看挂载目录</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">df</span><span style="color:var(--shiki-token-string)"> -h</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/c187b4412ff5/df-h.png" alt="df-h" decoding="async"/>
可以看到数据盘是在 <code>/home</code> 路径</p>
<p><strong>然后我们来创建项目目录</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建项目目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> /home/Docker/lsky-pro</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /home/Docker/lsky-pro</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 创建数据目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> ./mysql</span><span style="color:var(--shiki-token-comment)">  # MySQL数据存储</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> ./lsky</span><span style="color:var(--shiki-token-comment)">   # Lsky数据存储</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="第二步创建-docker-compose-配置文件"><a href="#第二步创建-docker-compose-配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二步：创建 Docker Compose 配置文件</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 在项目目录中创建Docker-compose.yml文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> Docker-compose.yml</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>复制以下内容到编辑器中：</p>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  mysql</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> mysql:8.0</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lsky_mysql</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      MYSQL_ROOT_PASSWORD</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> mysql_password</span><span style="color:var(--shiki-token-comment)"> # 请修改为强密码</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      MYSQL_DATABASE</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lsky</span><span style="color:var(--shiki-token-comment)"> # 数据库名称</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      MYSQL_USER</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lsky</span><span style="color:var(--shiki-token-comment)"> # 数据库用户名</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      MYSQL_PASSWORD</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lsky_password</span><span style="color:var(--shiki-token-comment)"> # 请修改为强密码</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./mysql:/var/lib/mysql</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">lsky_network</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    healthcheck</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      test</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> [</span><span style="color:var(--shiki-token-string-expression)">&quot;CMD&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;mysqladmin&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;ping&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;-h&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;localhost&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;-u&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;root&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-string-expression)"> &quot;-p$$MYSQL_ROOT_PASSWORD&quot;</span><span style="color:var(--shiki-foreground)">]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      interval</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 5s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      timeout</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> 5s</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      retries</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 5</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  lsky</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> halcyonazure/lsky-pro-Docker:latest</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lskypro</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> always</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;127.0.0.1:8089:8089&quot;</span><span style="color:var(--shiki-token-comment)"> # 只监听本地接口，增加安全性</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./lsky:/var/www/html/storage</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    depends_on</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      mysql</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">        condition</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> service_healthy</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">lsky_network</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  lsky_network</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    driver</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> bridge</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">重要提示</div><div class="rp-callout__content"><p>
请将示例中的 <code>mysql_password</code> 和 <code>lsky_password</code> 修改为你自己的强密码</p></div></div>
<p>按 <code>Ctrl+O</code> 保存文件，然后按 <code>Enter</code> 确认，最后按 <code>Ctrl+X</code> 退出编辑器。</p>
<h2 class="rp-toc-include" id="第三步启动服务"><a href="#第三步启动服务" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步：启动服务</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 在/home/Docker/lsky-pro目录中运行</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /home/Docker/lsky-pro</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这条命令会启动 MySQL 和兰空图床两个容器，<code>-d</code> 表示在后台运行。</p>
<p><strong>检查服务是否正常运行：</strong></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> ps</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/c187b4412ff5/docker-ps.png" alt="Docker-ps" decoding="async" loading="lazy"/>
你应该看到两个容器都处于 <code>Up</code> 状态，说明启动成功。</p>
<h2 class="rp-toc-include" id="第四步配置-nginx-反向代理"><a href="#第四步配置-nginx-反向代理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四步：配置 Nginx 反向代理</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建Nginx配置文件</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nano</span><span style="color:var(--shiki-token-string)"> /etc/nginx/conf.d/lsky.conf</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>复制以下内容到编辑器中（包含注释）：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">server</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    listen</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-foreground)">;                          </span><span style="color:var(--shiki-token-comment)"># 监听80端口</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server_name</span><span style="color:var(--shiki-token-string)"> img.example.com</span><span style="color:var(--shiki-foreground)">;        </span><span style="color:var(--shiki-token-comment)"># [修改] 将这里改为你的域名</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">    # 日志文件位置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    access_log</span><span style="color:var(--shiki-token-string)"> /var/log/nginx/lsky.access.log</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    error_log</span><span style="color:var(--shiki-token-string)"> /var/log/nginx/lsky.error.log</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">    location</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_pass</span><span style="color:var(--shiki-token-string)"> http://127.0.0.1:8089</span><span style="color:var(--shiki-foreground)">;      </span><span style="color:var(--shiki-token-comment)"># 转发请求到兰空图床服务</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # 设置HTTP请求头</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> Host</span><span style="color:var(--shiki-foreground)"> $host;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Real-IP</span><span style="color:var(--shiki-foreground)"> $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-For</span><span style="color:var(--shiki-foreground)"> $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-Proto</span><span style="color:var(--shiki-foreground)"> $scheme;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">        # 上传文件大小限制和超时设置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        client_max_body_size</span><span style="color:var(--shiki-token-string)"> 100m</span><span style="color:var(--shiki-foreground)">;             </span><span style="color:var(--shiki-token-comment)"># 允许上传的最大文件大小</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_connect_timeout</span><span style="color:var(--shiki-token-constant)"> 120</span><span style="color:var(--shiki-foreground)">;             </span><span style="color:var(--shiki-token-comment)"># 连接超时时间</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_send_timeout</span><span style="color:var(--shiki-token-constant)"> 120</span><span style="color:var(--shiki-foreground)">;                </span><span style="color:var(--shiki-token-comment)"># 发送超时时间</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_read_timeout</span><span style="color:var(--shiki-token-constant)"> 120</span><span style="color:var(--shiki-foreground)">;                </span><span style="color:var(--shiki-token-comment)"># 读取超时时间</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">重要提示</div><div class="rp-callout__content"><p>
请将 <code>img.example.com</code> 替换为你自己的域名</p></div></div>
<p>按 <code>Ctrl+O</code> 保存文件，然后按 <code>Enter</code> 确认，最后按 <code>Ctrl+X</code> 退出编辑器。
然后重新加载 Nginx 配置：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 检查Nginx配置是否有错误</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nginx</span><span style="color:var(--shiki-token-string)"> -t</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重新加载Nginx配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">nginx</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> reload</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="第五步完成兰空图床初始设置"><a href="#第五步完成兰空图床初始设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五步：完成兰空图床初始设置</h2>
<h3 class="rp-toc-include" id="1-打开浏览器访问你的域名"><a href="#1-打开浏览器访问你的域名" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. 打开浏览器，访问你的域名</h3>
<p>例如：<code>http://img.example.com</code>（替换为你自己的域名）
以上配置正确的话，会进入到兰空图床安装程序，请点击下一步
展示如下：
<img src="/assets/images/c187b4412ff5/lsky-step-1.png" alt="step-1" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="2-数据库配置--管理员配置页面"><a href="#2-数据库配置--管理员配置页面" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 数据库配置 &amp; 管理员配置页面</h3>
<p><img src="/assets/images/c187b4412ff5/lsky-step-2.png" alt="step-2" decoding="async" loading="lazy"/>
填写以下信息：</p>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>配置项</th><th>填写内容</th><th>注意事项</th></tr></thead><tbody><tr><td>数据库地址</td><td><code>lsky_mysql</code></td><td>这里填写容器名称，不要填写 127.0.0.1</td></tr><tr><td>数据库端口</td><td><code>3306</code></td><td>保持默认</td></tr><tr><td>数据库名称</td><td><code>lsky</code></td><td>与<code>Docker-compose.yml</code>中设置一致</td></tr><tr><td>数据库用户名</td><td><code>lsky</code></td><td>与<code>Docker-compose.yml</code>中设置一致</td></tr><tr><td>数据库用户密码</td><td><code>lsky_password</code></td><td>与<code>Docker-compose.yml</code>中设置一致</td></tr></tbody></table></div>
<div class="rp-callout rp-callout--warning"><div class="rp-callout__title">注意</div><div class="rp-callout__content"><ul>
<li>数据库地址必须填写 <code>lsky_mysql</code> (容器名称)，而不是 localhost 或 127.0.0.1</li>
<li>确保密码与 Docker-compose.yml 中设置的一致</li>
</ul></div></div>
<p>点击【立即安装】，等待安装完成。</p>
<h3 class="rp-toc-include" id="3-安装完成"><a href="#3-安装完成" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 安装完成</h3>
<p>安装成功后，系统会自动跳转到登录页面。使用刚才设置的管理员账号和密码登录系统。</p>
<h2 class="rp-toc-include" id="恭喜你"><a href="#恭喜你" class="rp-header-anchor rp-link" aria-hidden="true">#</a>恭喜你</h2>
<p>现在你已经成功安装了兰空图床！你可以开始使用它来管理和分享你的图片了。</p>
<p>但仍然有一些安全策略需要进行，如为你的网站添加 https ，控制并发请求数，设置合理的访问控制和防火墙策略等。另外还有一些兰空图床的具体玩法，如设置用户组，设置不同的存储策略（ e.g oss 存储,sftp ），邮件配置等等，这里也都不逐一展开了。</p>
<p>祝你玩的愉快， Have Fun!</p>
<h2 class="rp-toc-include" id="常见问题解决"><a href="#常见问题解决" class="rp-header-anchor rp-link" aria-hidden="true">#</a>常见问题解决</h2>
<h3 class="rp-toc-include" id="安装过程中断或出错"><a href="#安装过程中断或出错" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装过程中断或出错</h3>
<p>如果安装过程中断或出错，可以重置数据库后重新开始：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 停止所有服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /home/Docker/lsky-pro</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> down</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 删除MySQL数据目录 再重新创建</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">rm</span><span style="color:var(--shiki-token-string)"> -rf</span><span style="color:var(--shiki-token-string)"> ./mysql</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> mkdir</span><span style="color:var(--shiki-token-string)"> ./mysql</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重新启动服务</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>然后重新访问你的域名，再次进行安装。</p>
<h3 class="rp-toc-include" id="上传图片失败"><a href="#上传图片失败" class="rp-header-anchor rp-link" aria-hidden="true">#</a>上传图片失败</h3>
<p>如果上传图片失败，可能是权限问题，执行：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 修复上传目录权限</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">Docker</span><span style="color:var(--shiki-token-string)"> exec</span><span style="color:var(--shiki-token-string)"> -it</span><span style="color:var(--shiki-token-string)"> lsky-pro</span><span style="color:var(--shiki-token-string)"> chown</span><span style="color:var(--shiki-token-string)"> -R</span><span style="color:var(--shiki-token-string)"> www-data:www-data</span><span style="color:var(--shiki-token-string)"> /var/www/html/storage/app/uploads</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div><!--/$-->]]></content>
        <author>
            <name>xiaoqingnian-</name>
        </author>
        <category label="object-storage"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在 VPS.Town 安装 Nginx 完全指南]]></title>
        <id>/guide/how-to-install-nginx-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-nginx-vps-town"/>
        <updated>2025-04-13T04:38:00.000Z</updated>
        <summary type="html"><![CDATA[Nginx 安装指南: 介绍了什么是 Nginx 以及其安装方法、基础配置和服务管理，适合初学者快速掌握核心功能。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="在-vpstown-安装-nginx-完全指南"><a href="#在-vpstown-安装-nginx-完全指南" class="rp-header-anchor rp-link" aria-hidden="true">#</a>在 VPS.Town 安装 Nginx 完全指南<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 <code>xiaoqingnian-</code> 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>--</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#1-nginx-简介" class="rp-toc-item rp-link" title="1. Nginx 简介" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">1. Nginx 简介</span></a><a href="#2-安装准备" class="rp-toc-item rp-link" title="2. 安装准备" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">2. 安装准备</span></a><a href="#21-系统要求" class="rp-toc-item rp-link" title="2.1 系统要求" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.1 系统要求</span></a><a href="#22-安装前的准备工作" class="rp-toc-item rp-link" title="2.2 安装前的准备工作" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">2.2 安装前的准备工作</span></a><a href="#3-安装方法" class="rp-toc-item rp-link" title="3. 安装方法" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">3. 安装方法</span></a><a href="#31-使用包管理器安装-五星推荐" class="rp-toc-item rp-link" title="3.1 使用包管理器安装 (五星推荐)" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.1 使用包管理器安装 (<strong>五星推荐</strong>)</span></a><a href="#32-源代码编译安装" class="rp-toc-item rp-link" title="3.2 源代码编译安装" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.2 源代码编译安装</span></a><a href="#33-验证安装" class="rp-toc-item rp-link" title="3.3 验证安装" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">3.3 验证安装</span></a><a href="#4配置-nginx" class="rp-toc-item rp-link" title="4.配置 Nginx" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">4.配置 Nginx</span></a><a href="#41-目录结构" class="rp-toc-item rp-link" title="4.1 目录结构" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">4.1 目录结构</span></a><a href="#42-常见配置场景" class="rp-toc-item rp-link" title="4.2 常见配置场景" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">4.2 常见配置场景</span></a><a href="#5-nginx-管理" class="rp-toc-item rp-link" title="5. Nginx 管理" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">5. Nginx 管理</span></a><a href="#51-服务控制" class="rp-toc-item rp-link" title="5.1 服务控制" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">5.1 服务控制</span></a><a href="#6-extra" class="rp-toc-item rp-link" title="6. Extra" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">6. Extra</span></a><a href="#refer" class="rp-toc-item rp-link" title="Refer" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Refer</span></a></div></details>
<h2 class="rp-toc-include" id="1-nginx-简介"><a href="#1-nginx-简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>1. Nginx 简介</h2>
<p>Nginx (发音为 &quot;engine-x&quot;) 是一个高性能的开源 Web 服务器和反向代理服务器。它因其高效、稳定、低内存消耗和高并发连接处理能力而闻名。</p>
<p><strong>主要用途：</strong></p>
<ul>
<li>Web 服务器：提供静态内容，如 HTML、CSS、JavaScript 等</li>
<li>反向代理：将客户端请求转发到后端服务器</li>
<li>负载均衡器：在多个后端服务器之间分配流量</li>
<li>缓存服务器：缓存静态内容，减轻后端压力</li>
<li>API 网关：管理 API 请求和响应</li>
</ul>
<p><img src="/assets/images/c187b4412ff5/nginx-architecture.svg" alt="nginx-architecture" decoding="async"/></p>
<h2 class="rp-toc-include" id="2-安装准备"><a href="#2-安装准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2. 安装准备</h2>
<h3 class="rp-toc-include" id="21-系统要求"><a href="#21-系统要求" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.1 系统要求</h3>
<p>Nginx 可以在多种操作系统上运行，包括： Linux (各种发行版)、FreeBSD、macOS、Windows。</p>
<h3 class="rp-toc-include" id="22-安装前的准备工作"><a href="#22-安装前的准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>2.2 安装前的准备工作</h3>
<p>在安装 Nginx 前，请确保系统已更新并安装必要的依赖包：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># Debian/Ubuntu 系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> build-essential</span><span style="color:var(--shiki-token-string)"> libpcre3</span><span style="color:var(--shiki-token-string)"> libpcre3-dev</span><span style="color:var(--shiki-token-string)"> zlib1g</span><span style="color:var(--shiki-token-string)"> zlib1g-dev</span><span style="color:var(--shiki-token-string)"> libssl-dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># CentOS/RHEL 系统</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> yum</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> gcc</span><span style="color:var(--shiki-token-string)"> gcc-c++</span><span style="color:var(--shiki-token-string)"> make</span><span style="color:var(--shiki-token-string)"> pcre</span><span style="color:var(--shiki-token-string)"> pcre-devel</span><span style="color:var(--shiki-token-string)"> zlib</span><span style="color:var(--shiki-token-string)"> zlib-devel</span><span style="color:var(--shiki-token-string)"> openssl</span><span style="color:var(--shiki-token-string)"> openssl-devel</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>我更偏爱 Debian 一点，以我的本地环境(Debian 12.0)为例，给出安装截图：
<img src="/assets/images/c187b4412ff5/nginx-base.2.2.png" alt="nginx-architecture" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="3-安装方法"><a href="#3-安装方法" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3. 安装方法</h2>
<h3 class="rp-toc-include" id="31-使用包管理器安装-五星推荐"><a href="#31-使用包管理器安装-五星推荐" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.1 使用包管理器安装 (<strong>五星推荐</strong>)</h3>
<p>Debian/Ubuntu</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> update</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> -y</span><span style="color:var(--shiki-token-string)"> nginx</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>CentOS/RHEL</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> epel-release</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> yum</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> nginx</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>安装完记的去设置开机启动，参见<a href="#5-nginx-%E7%AE%A1%E7%90%86" class="rp-link">Nginx 管理</a>。</p>
<h3 class="rp-toc-include" id="32-源代码编译安装"><a href="#32-源代码编译安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.2 源代码编译安装</h3>
<p>源码安装可以个性化选择想要的模块，集成自己想要的第三方模块，还可以针对特定硬件做优化。
但对于我们普通用户来说可以但没必要。以前玩树莓派的时候编过，现在没有热情了没有再完整编译安装过，这里也不做推荐。只是为了文档完整性，作为补充。</p>
<p><img src="/assets/images/c187b4412ff5/nginx-source-install.svg" alt="nginx-source-install" decoding="async" loading="lazy"/></p>
<p>步骤 1:下载源码包</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 创建下载目录</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">mkdir</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> ~/nginx-build</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> cd</span><span style="color:var(--shiki-token-string)"> ~/nginx-build</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 下载最新稳定版</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> http://nginx.org/download/nginx-1.24.0.tar.gz</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>步骤 2: 解压源码包</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">tar</span><span style="color:var(--shiki-token-string)"> -zxvf</span><span style="color:var(--shiki-token-string)"> nginx-1.24.0.tar.gz</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> nginx-1.24.0</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>步骤 3:配置编译选项</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">./configure</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --prefix=/usr/local/nginx</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --with-http_ssl_module</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --with-http_v2_module</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --with-http_realip_module</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --with-http_gzip_static_module</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  --with-http_stub_status_module</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>步骤 4: 编译和安装</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 编译</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">make</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 安装</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> make</span><span style="color:var(--shiki-token-string)"> install</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="33-验证安装"><a href="#33-验证安装" class="rp-header-anchor rp-link" aria-hidden="true">#</a>3.3 验证安装</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 检查 Nginx 版本</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">/usr/local/nginx/sbin/nginx</span><span style="color:var(--shiki-token-string)"> -v</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 检查配置文件语法</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">/usr/local/nginx/sbin/nginx</span><span style="color:var(--shiki-token-string)"> -t</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/c187b4412ff5/nginx-base.3.3.png" alt="nginx-architecture" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="4配置-nginx"><a href="#4配置-nginx" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.配置 Nginx</h2>
<h3 class="rp-toc-include" id="41-目录结构"><a href="#41-目录结构" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.1 目录结构</h3>
<p>安装完成后， Nginx 的主要目录结构如下：</p>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>目录/文件</th><th>描述</th></tr></thead><tbody><tr><td>/etc/nginx/ 或 /usr/local/nginx/conf/</td><td>配置文件目录</td></tr><tr><td>/etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf</td><td>主配置文件</td></tr><tr><td>/etc/nginx/sites-available/</td><td>可用站点配置</td></tr><tr><td>/etc/nginx/sites-enabled/</td><td>已启用站点配置</td></tr><tr><td>/var/log/nginx/ 或 /usr/local/nginx/logs/</td><td>日志文件目录</td></tr><tr><td>/usr/share/nginx/html/ 或 /usr/local/nginx/html/</td><td>默认网站文件目录</td></tr></tbody></table></div>
<h3 class="rp-toc-include" id="42-常见配置场景"><a href="#42-常见配置场景" class="rp-header-anchor rp-link" aria-hidden="true">#</a>4.2 常见配置场景</h3>
<p>静态网站配置</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">nginxserver</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    listen</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server_name</span><span style="color:var(--shiki-token-string)"> example.com</span><span style="color:var(--shiki-token-string)"> www.example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    root</span><span style="color:var(--shiki-token-string)"> /var/www/example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    index</span><span style="color:var(--shiki-token-string)"> index.html</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">    location</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        try_files</span><span style="color:var(--shiki-foreground)"> $uri $uri</span><span style="color:var(--shiki-token-string)">/</span><span style="color:var(--shiki-token-string)"> =</span><span style="color:var(--shiki-token-constant)">404</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>反向代理配置</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">nginxserver</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    listen</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server_name</span><span style="color:var(--shiki-token-string)"> api.example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">    location</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_pass</span><span style="color:var(--shiki-token-string)"> http://localhost:3000</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> Host</span><span style="color:var(--shiki-foreground)"> $host;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Real-IP</span><span style="color:var(--shiki-foreground)"> $remote_addr;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-For</span><span style="color:var(--shiki-foreground)"> $proxy_add_x_forwarded_for;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_set_header</span><span style="color:var(--shiki-token-string)"> X-Forwarded-Proto</span><span style="color:var(--shiki-foreground)"> $scheme;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>负载均衡配置</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">nginxupstream</span><span style="color:var(--shiki-token-string)"> backend</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server</span><span style="color:var(--shiki-token-string)"> backend1.example.com</span><span style="color:var(--shiki-token-string)"> weight=</span><span style="color:var(--shiki-token-constant)">3</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server</span><span style="color:var(--shiki-token-string)"> backend2.example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server</span><span style="color:var(--shiki-token-string)"> backend3.example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">server</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    listen</span><span style="color:var(--shiki-token-constant)"> 80</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">    server_name</span><span style="color:var(--shiki-token-string)"> example.com</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">    location</span><span style="color:var(--shiki-token-string)"> /</span><span style="color:var(--shiki-token-string)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">        proxy_pass</span><span style="color:var(--shiki-token-string)"> http://backend</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">    }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="5-nginx-管理"><a href="#5-nginx-管理" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5. Nginx 管理</h2>
<h3 class="rp-toc-include" id="51-服务控制"><a href="#51-服务控制" class="rp-header-anchor rp-link" aria-hidden="true">#</a>5.1 服务控制</h3>
<p>系统服务方式 (systemd)</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 启动 Nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 停止 Nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重启 Nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重新加载配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> reload</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 查看状态</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 设置开机启动 (建议开启)</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> nginx</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>手动控制</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-comment)"># 启动 Nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 停止 Nginx</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> nginx</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> stop</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 优雅停止（等待请求处理完毕）</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> nginx</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> quit</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 重新加载配置</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> nginx</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> reload</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 检查配置文件语法</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> nginx</span><span style="color:var(--shiki-token-string)"> -t</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="6-extra"><a href="#6-extra" class="rp-header-anchor rp-link" aria-hidden="true">#</a>6. Extra</h2>
<p>还有一些别的配置，如日志管理， Nginx 性能优化、安全配置，这里暂且不谈，有机会在下一篇我们再聊。</p>
<h2 class="rp-toc-include" id="refer"><a href="#refer" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Refer</h2>
<p><a href="https://nginx.org/" target="_blank" rel="noopener noreferrer" class="rp-link">1. Nginx 官方手册</a></p>
<p><a href="https://github.com/nginx/nginx" target="_blank" rel="noopener noreferrer" class="rp-link">2. Nginx Github 仓库</a></p><!--/$-->]]></content>
        <author>
            <name>xiaoqingnian-</name>
        </author>
        <category label="web-services"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 上安装一套可以自动更新的番剧影音系统]]></title>
        <id>/guide/how-to-install-autobangumi-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-autobangumi-vps-town"/>
        <updated>2025-04-12T14:33:00.000Z</updated>
        <summary type="html"><![CDATA[本文基于 Debian 12 使用 AutoBangumi 配合 Mikanani 网站订阅相关番剧 RSS 并推送至 Qbittorrent自动进行下载，完成后对番剧进行重命名以便 Emby 服务识别刮削信息来实现一套完整的番剧自动更新影音系统]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-上安装一套可以自动更新的番剧影音系统"><a href="#如何在-vpstown-上安装一套可以自动更新的番剧影音系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 上安装一套可以自动更新的番剧影音系统<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#服务器配置阶段" class="rp-toc-item rp-link" title="服务器配置阶段" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">服务器配置阶段</span></a><a href="#第一步-部署安装-docker-与-docker-compose" class="rp-toc-item rp-link" title="第一步 部署安装 Docker 与 Docker-compose" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第一步 部署安装 Docker 与 Docker-compose</span></a><a href="#第二步-检查磁盘目录" class="rp-toc-item rp-link" title="第二步 检查磁盘目录" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第二步 检查磁盘目录</span></a><a href="#第三步-创建数据目录" class="rp-toc-item rp-link" title="第三步 创建数据目录" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第三步 创建数据目录</span></a><a href="#第四步-将代码复制并粘贴至-anime-目录下命名为-docker-composeyml" class="rp-toc-item rp-link" title="第四步 将代码复制并粘贴至 anime 目录下，命名为 docker-compose.yml" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第四步 将代码复制并粘贴至 anime 目录下，命名为 docker-compose.yml</span></a><a href="#第五步-启动容器" class="rp-toc-item rp-link" title="第五步 启动容器" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第五步 启动容器</span></a><a href="#web-配置阶段" class="rp-toc-item rp-link" title="Web 配置阶段" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Web 配置阶段</span></a><a href="#第一步-下载器服务配置" class="rp-toc-item rp-link" title="第一步 下载器服务配置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第一步 下载器服务配置</span></a><a href="#第二步-autobangumi-配置" class="rp-toc-item rp-link" title="第二步 AutoBangumi 配置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第二步 AutoBangumi 配置</span></a><a href="#第三步-订阅番剧" class="rp-toc-item rp-link" title="第三步 订阅番剧" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第三步 订阅番剧</span></a><a href="#第四步-设置番剧自动推送下载" class="rp-toc-item rp-link" title="第四步 设置番剧自动推送下载" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第四步 设置番剧自动推送下载</span></a><a href="#第五步-emby-影音库配置" class="rp-toc-item rp-link" title="第五步 Emby 影音库配置" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">第五步 Emby 影音库配置</span></a><a href="#-结语" class="rp-toc-item rp-link" title="🎉 结语" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🎉 结语</span></a></div></details>
<h2 class="rp-toc-include" id="服务器配置阶段"><a href="#服务器配置阶段" class="rp-header-anchor rp-link" aria-hidden="true">#</a>服务器配置阶段</h2>
<h3 class="rp-toc-include" id="第一步-部署安装-docker-与-docker-compose"><a href="#第一步-部署安装-docker-与-docker-compose" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一步 部署安装 Docker 与 Docker-compose</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://get.docker.com</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> docker</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -L</span><span style="color:var(--shiki-token-string-expression)"> &quot;https://github.com/docker/compose/releases/download/v2.35.0/docker-compose-$(</span><span style="color:var(--shiki-token-function)">uname</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string-expression)">)-$(</span><span style="color:var(--shiki-token-function)">uname</span><span style="color:var(--shiki-token-string)"> -m</span><span style="color:var(--shiki-token-string-expression)">)&quot;</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> /usr/local/bin/docker-compose</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> /usr/local/bin/docker-compose</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<blockquote>
<p>文章使用编写时 Docker-compose 最新版本，如后续部署请查看版本发行地址： <a href="https://github.com/docker/compose/releases" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/docker/compose/releases</a></p>
</blockquote>
<h3 class="rp-toc-include" id="第二步-检查磁盘目录"><a href="#第二步-检查磁盘目录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二步 检查磁盘目录</h3>
<p>确认存储盘挂载目录 (默认为 <code>/home</code>)</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-1.png" alt="挂载目录指引" decoding="async"/></p>
<h3 class="rp-toc-include" id="第三步-创建数据目录"><a href="#第三步-创建数据目录" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步 创建数据目录</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">  cd</span><span style="color:var(--shiki-token-string)"> /home</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  mkdir</span><span style="color:var(--shiki-token-string)"> anime</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  cd</span><span style="color:var(--shiki-token-string)"> anime</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">  mkdir</span><span style="color:var(--shiki-token-string)"> autoBangumi</span><span style="color:var(--shiki-token-string)"> qbittorrent</span><span style="color:var(--shiki-token-string)"> emby</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="第四步-将代码复制并粘贴至-anime-目录下命名为-docker-composeyml"><a href="#第四步-将代码复制并粘贴至-anime-目录下命名为-docker-composeyml" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四步 将代码复制并粘贴至 anime 目录下，命名为 docker-compose.yml</h3>
<div class="rp-codeblock language-yaml"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="yaml"><code><span class="line"><span style="color:var(--shiki-token-keyword)">version</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;3.8&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">services</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  autobangumi</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> ghcr.io/estrellaxd/auto_bangumi:latest</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> AutoBangumi</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;27892:7892&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      TZ</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Asia/Shanghai</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      PUID</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;${PUID:-1000}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      PGID</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;${PGID:-1000}&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      UMASK</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> &quot;022&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./autobangumi/config:/app/config</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./autobangumi/data:/app/data</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">media</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    dns</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-constant)">8.8.8.8</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  qbittorrent</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> lscr.io/linuxserver/qbittorrent:5.0.4</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> qbittorrent</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;28989:28989&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;26881:26881&quot;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;26881:26881/udp&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    environment</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      PUID</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1000</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      PGID</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 1000</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      TZ</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> Asia/Shanghai</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      WEBUI_PORT</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 28989</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">      TORRENTING_PORT</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 26881</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./qbittorrent/appdata:/config</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./qbittorrent/downloads:/downloads</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">media</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  embyserver</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    image</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> emby/embyserver:4.9.0.43</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    container_name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> embyserver</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    restart</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> unless-stopped</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    ports</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">&quot;28096:8096&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    volumes</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./emby/config:/config</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">./qbittorrent/downloads:/mnt/share1</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">      - </span><span style="color:var(--shiki-token-string-expression)">media</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">networks</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">  media</span><span style="color:var(--shiki-token-keyword)">:</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">    driver</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-string-expression)"> bridge</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>端口分别为：</p>
<ul>
<li>AutoBangumi：27892</li>
<li>qBittorrent：28989</li>
<li>emby：28096</li>
</ul>
<h3 class="rp-toc-include" id="第五步-启动容器"><a href="#第五步-启动容器" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五步 启动容器</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker-compose</span><span style="color:var(--shiki-token-string)"> up</span><span style="color:var(--shiki-token-string)"> -d</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-2.png" alt="启动容器指引" decoding="async" loading="lazy"/></p>
<p>恭喜你，三个服务就已经部署完成了接下来需要打开浏览器进行配置</p>
<h2 class="rp-toc-include" id="web-配置阶段"><a href="#web-配置阶段" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Web 配置阶段</h2>
<h3 class="rp-toc-include" id="第一步-下载器服务配置"><a href="#第一步-下载器服务配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一步 下载器服务配置</h3>
<ol>
<li>
<p>首先，我们需要查看 qBittorrent 的日志来获取临时密码</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> qbittorrent</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-3.png" alt="获取密码指引" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>打开浏览器访问 <code>http://IP:28989</code></p>
<p>账号：admin</p>
<p>密码为获取到的临时密码</p>
</li>
<li>
<p>修改语言和密码配置</p>
<p>成功登录进界面后默认为英语，我们需要修改他为常用语言并修改临时密码，首先查看左上角顶栏菜单 Tools 菜单下的 Options...</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-4.png" alt="下载器修改语言指引-1" decoding="async" loading="lazy"/></p>
<p>打开设置界面第一页点选下拉框，将语言选择为常用语言</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-5.png" alt="下载器修改语言指引-2" decoding="async" loading="lazy"/></p>
<p>选择后点击下方 Save 保存语言配置</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-6.png" alt="下载器修改语言指引-3" decoding="async" loading="lazy"/></p>
<p>保存完成后，再次进入“选项”菜单，选择横向菜单栏中的 WebUI 进行用户名与密码修改</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-7.png" alt="下载器修改密码指引" decoding="async" loading="lazy"/></p>
<p>建议将用户名与密码都修改为自定义配置</p>
</li>
</ol>
<h3 class="rp-toc-include" id="第二步-autobangumi-配置"><a href="#第二步-autobangumi-配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二步 AutoBangumi 配置</h3>
<ol>
<li>
<p>首先，打开浏览器访问 <code>http://IP:27892</code></p>
<p>用户名：admin</p>
<p>密码：adminadmin</p>
</li>
<li>
<p>修改用户名与密码</p>
<p>登录成功后，点选右上角方形图标选择账户设置</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-8.png" alt="订阅器修改密码指引-1" decoding="async" loading="lazy"/></p>
<p>弹出修改账户窗口，建议用户名与密码都修改为自定义配置设置完成后点选更新</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-9.png" alt="订阅器修改密码指引-2" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>配置下载器信息</p>
<p>查看左侧边栏，选择齿轮图标进入设置界面</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-10.png" alt="订阅器修改配置指引-1" decoding="async" loading="lazy"/></p>
<p>进入设置界面后，点击下载设置展开选项卡</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-11.png" alt="订阅器修改配置指引-2" decoding="async" loading="lazy"/></p>
<p>分别填写下载器地址、用户名、密码</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-12.png" alt="订阅器修改配置指引-3" decoding="async" loading="lazy"/></p>
<p>将以上信息修改为实际下载器的配置，完成后点击右下角应用</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-13.png" alt="订阅器修改配置指引-4" decoding="async" loading="lazy"/></p>
</li>
</ol>
<h3 class="rp-toc-include" id="第三步-订阅番剧"><a href="#第三步-订阅番剧" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步 订阅番剧</h3>
<ol>
<li>
<p>首先，使用浏览器打开网址：<a href="https://mikanani.me/" target="_blank" rel="noopener noreferrer" class="rp-link">https://mikanani.me/</a>，如果你在国内且没有科学可以访问：<a href="https://mikanime.tv/" target="_blank" rel="noopener noreferrer" class="rp-link">https://mikanime.tv/</a></p>
<p>进入网站后，如果没有账户请先查看右上角选择注册</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-14.png" alt="网站指引注册指引-1" decoding="async" loading="lazy"/></p>
<p>进入注册界面，填入相关信息并点击底部注册按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-15.png" alt="网站指引注册指引-2" decoding="async" loading="lazy"/></p>
<p>注册完成后登录即可，本文不过多赘述</p>
<p>登录后可以向下翻阅新番列表，对希望订阅的番剧点击展开菜单后订阅对应字幕组和字幕</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-16.png" alt="网站订阅指引-1" decoding="async" loading="lazy"/></p>
<p>订阅后在顶部会显示订阅番剧的信息，点击右下角的 RSS 订阅 左侧图标按钮可以进入链接</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-17.png" alt="网站订阅指引-2" decoding="async" loading="lazy"/></p>
<p>可以右键复制也可以打开新页面后复制链接地址</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-18.png" alt="网站订阅指引-3" decoding="async" loading="lazy"/></p>
</li>
</ol>
<h3 class="rp-toc-include" id="第四步-设置番剧自动推送下载"><a href="#第四步-设置番剧自动推送下载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四步 设置番剧自动推送下载</h3>
<ol>
<li>
<p>首先，打开 AutoBangumi 页面地址为：<code>http://IP:27892/</code></p>
<p>点击右上角顶栏加号图标，添加 RSS 信息将上一步骤获取的订阅链接填入第一栏并打开聚合 RSS 开关点击添加</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-19.png" alt="订阅器番剧配置指引-1" decoding="async" loading="lazy"/></p>
</li>
<li>
<p>查看订阅状态，点击侧边栏 RSS 图标</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-20.png" alt="订阅器番剧配置指引-2" decoding="async" loading="lazy"/></p>
<p>可以查看当前的 RSS 订阅，也可以设置启动与停止状态</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-21.png" alt="订阅器番剧配置指引-3" decoding="async" loading="lazy"/></p>
<p>恭喜你到这里订阅下载服务就已经配置完成，订阅刷新大概需要 10 分钟左右稍等片刻就可以看到在 qBittorrent 中的下载状态</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-22.png" alt="订阅器番剧配置指引-4" decoding="async" loading="lazy"/></p>
<p>待下载部分完成后再进入下一个步骤</p>
</li>
</ol>
<h3 class="rp-toc-include" id="第五步-emby-影音库配置"><a href="#第五步-emby-影音库配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五步 Emby 影音库配置</h3>
<ul>
<li>
<p>首先，打开浏览器访问：<code>http://IP:28096</code></p>
<p>成功进入页面后按照向导进行配置，第一个是选择显示语言请选择您的常用语言并点击 Next</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-23.png" alt="影音库初始化指引-1" decoding="async" loading="lazy"/></p>
<p>第二个页面设置用户名与密码，建议复杂一些完成后点击 Next</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-24.png" alt="影音库初始化指引-2" decoding="async" loading="lazy"/></p>
<p>第三个界面为媒体库设置，这里先跳过直接点击 Next 按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-25.png" alt="影音库初始化指引-3" decoding="async" loading="lazy"/></p>
<p>第四个界面为是否开启远程连接，这里默认开启可以直接点击 Next 按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-26.png" alt="影音库初始化指引-4" decoding="async" loading="lazy"/></p>
<p>最后一个界面，同意协议后点击 Next 按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-27.png" alt="影音库初始化指引-5" decoding="async" loading="lazy"/></p>
<p>到这里前期配置就完成了，点击 Finish 按钮结束配置</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-28.png" alt="影音库初始化指引-6" decoding="async" loading="lazy"/></p>
<p>结束配置后 Emby 会跳转至登录页面，首先点击手动登录</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-29.png" alt="影音库初始化指引-7" decoding="async" loading="lazy"/></p>
<p>跳转页面后，输入设定的用户名与密码并点击登录</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-30.png" alt="影音库初始化指引-8" decoding="async" loading="lazy"/></p>
<p>登录成功后，点击右上角齿轮图标进入设置</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-31.png" alt="影音库配置指引-1" decoding="async" loading="lazy"/></p>
<p>进入设置后，点击左侧边栏中媒体库选项</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-32.png" alt="影音库配置指引-2" decoding="async" loading="lazy"/></p>
<p>点击新增媒体库</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-33.png" alt="影音库配置指引-3" decoding="async" loading="lazy"/></p>
<p>弹出菜单后，第一个内容类型选择电视节目第二个名称可自定义填写完成后点击下方添加按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-34.png" alt="影音库配置指引-4" decoding="async" loading="lazy"/></p>
<p>进入路径菜单后，如您使用的是默认配置则选择图中路径即可</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-35.png" alt="影音库配置指引-5" decoding="async" loading="lazy"/></p>
<p>进入目录后继续点击 Bangumi 文件夹</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-36.png" alt="影音库配置指引-6" decoding="async" loading="lazy"/></p>
<p>进入目录后点击确定按钮</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-37.png" alt="影音库配置指引-7" decoding="async" loading="lazy"/></p>
<p>确认后回到媒体库菜单，下方选项可以参考我的配置也可以自行按照经验设定</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-38.png" alt="影音库配置指引-8" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-39.png" alt="影音库配置指引-9" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-40.png" alt="影音库配置指引-10" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-41.png" alt="影音库配置指引-11" decoding="async" loading="lazy"/></p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-42.png" alt="影音库配置指引-12" decoding="async" loading="lazy"/></p>
<p>下方为默认配置，完成后点击确定</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-43.png" alt="影音库配置指引-13" decoding="async" loading="lazy"/></p>
<p>等待自动刮削完成</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-44.png" alt="影音库配置指引-14" decoding="async" loading="lazy"/></p>
<p>完成后点击左侧菜单栏选择首页，查看刮削后的媒体信息</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-45.png" alt="影音库配置指引-15" decoding="async" loading="lazy"/></p>
<p>可以看到大部分内容已经刮削完毕，部分错误可以手动刮削进行处理</p>
<p><img src="/assets/images/how-to-install-autobangumi-vps-town/image-46.png" alt="影音库配置指引-16" decoding="async" loading="lazy"/></p>
</li>
</ul>
<h2 class="rp-toc-include" id="-结语"><a href="#-结语" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🎉 结语</h2>
<p>至此，我们已经完成了 AutoBangumi + qBittorrent + Emby 的联动配置，实现了番剧自动订阅 → 下载 → 播放 的完整自动化流程。</p>
<p>你可以进一步优化：</p>
<ul>
<li>配置 Nginx/Caddy 做反向代理 + HTTPS</li>
<li>使用 DDNS 配置外部访问</li>
<li>配合 Telegram 实现推送通知</li>
<li>使用 BT 或 1Panel 面板简化容器管理</li>
</ul><!--/$-->]]></content>
        <category label="download-media"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cloudreve V4 私有云网盘搭建与优化全攻略]]></title>
        <id>/guide/how-to-install-cloudreve-v4-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-cloudreve-v4-vps-town"/>
        <updated>2025-04-12T07:00:00.000Z</updated>
        <summary type="html"><![CDATA[全面图文教程，手把手教你在 Linux 服务器上搭建 Cloudreve 私有云网盘，附带 Docker、反向代理、从机节点和离线下载配置方法。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="cloudreve-v4-私有云网盘搭建与优化全攻略"><a href="#cloudreve-v4-私有云网盘搭建与优化全攻略" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Cloudreve V4 私有云网盘搭建与优化全攻略<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#-项目简介" class="rp-toc-item rp-link" title="📦 项目简介" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">📦 项目简介</span></a><a href="#-环境准备" class="rp-toc-item rp-link" title="🧰 环境准备" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🧰 环境准备</span></a><a href="#-下载安装-cloudreve" class="rp-toc-item rp-link" title="📥 下载安装 Cloudreve" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">📥 下载安装 Cloudreve</span></a><a href="#-安装命令示例" class="rp-toc-item rp-link" title="📦 安装命令示例：" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">📦 安装命令示例：</span></a><a href="#-安装文件示意" class="rp-toc-item rp-link" title="📸 安装文件示意：" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">📸 安装文件示意：</span></a><a href="#-首次运行与激活" class="rp-toc-item rp-link" title="🚀 首次运行与激活" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🚀 首次运行与激活</span></a><a href="#-配置守护进程-systemd" class="rp-toc-item rp-link" title="🔁 配置守护进程 systemd" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🔁 配置守护进程 systemd</span></a><a href="#日后管理-cloudreve" class="rp-toc-item rp-link" title="日后管理 Cloudreve：" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">日后管理 Cloudreve：</span></a><a href="#停止-cloudreve" class="rp-toc-item rp-link" title="停止 Cloudreve" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">停止 Cloudreve</span></a><a href="#启动-cloudreve" class="rp-toc-item rp-link" title="启动 Cloudreve" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">启动 Cloudreve</span></a><a href="#重启-cloudreve" class="rp-toc-item rp-link" title="重启 Cloudreve" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">重启 Cloudreve</span></a><a href="#查看-cloudreve-状态" class="rp-toc-item rp-link" title="查看 Cloudreve 状态" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">查看 Cloudreve 状态</span></a><a href="#️-配置-confini-详解" class="rp-toc-item rp-link" title="⚙️ 配置 conf.ini 详解" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">⚙️ 配置 conf.ini 详解</span></a><a href="#优化建议" class="rp-toc-item rp-link" title="优化建议" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">优化建议</span></a><a href="#-1panel-图形化反向代理--ssl" class="rp-toc-item rp-link" title="🌐 1Panel 图形化反向代理 + SSL" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🌐 1Panel 图形化反向代理 + SSL</span></a><a href="#-添加存储策略" class="rp-toc-item rp-link" title="📁 添加存储策略" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">📁 添加存储策略</span></a><a href="#-使用-docker-安装可选" class="rp-toc-item rp-link" title="🐳 使用 Docker 安装（可选）" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🐳 使用 Docker 安装（可选）</span></a><a href="#️-部署从机节点--离线下载" class="rp-toc-item rp-link" title="🛰️ 部署从机节点 &amp; 离线下载" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">🛰️ 部署从机节点 &amp; 离线下载</span></a><a href="#-部署说明" class="rp-toc-item rp-link" title="📌 部署说明" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">📌 部署说明</span></a><a href="#aria2-配置" class="rp-toc-item rp-link" title="Aria2 配置：" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Aria2 配置：</span></a><a href="#-安装-aria2" class="rp-toc-item rp-link" title="📦 安装 Aria2" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">📦 安装 Aria2</span></a><a href="#️-修改-aria2-配置文件" class="rp-toc-item rp-link" title="⚙️ 修改 Aria2 配置文件" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">⚙️ 修改 Aria2 配置文件</span></a><a href="#️-注意" class="rp-toc-item rp-link" title="⚠️ 注意：" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">⚠️ 注意：</span></a><a href="#qbittorrent-安装设置" class="rp-toc-item rp-link" title="qBittorrent 安装设置：" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">qBittorrent 安装设置：</span></a><a href="#安装-qbittorrent-439" class="rp-toc-item rp-link" title="安装 qBittorrent 4.3.9" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装 qBittorrent 4.3.9</span></a><a href="#-常见问题-faq" class="rp-toc-item rp-link" title="❓ 常见问题 FAQ" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">❓ 常见问题 FAQ</span></a></div></details>
<h2 class="rp-toc-include" id="-项目简介"><a href="#-项目简介" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📦 项目简介</h2>
<p>Cloudreve 是一款开源网盘系统，支持多用户、多存储策略（本地、S3、Ali OSS、OneDrive 等），适合搭建私有云盘或文件分享服务。</p>
<p>✅ 特性：</p>
<ul>
<li>多用户、多存储支持</li>
<li>分享系统、团队协作、离线下载</li>
<li>Docker / 从机分布式部署</li>
<li>可接入 下载独立 CDN + 多个自定义域名</li>
</ul>
<h2 class="rp-toc-include" id="-环境准备"><a href="#-环境准备" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🧰 环境准备</h2>
<p>推荐部署环境：VPS.Town A2 系列</p>
<p>注：这里用捐赠版进行演示说明</p>
<ul>
<li><strong>系统</strong>：Debian 12 或 Ubuntu 22.04</li>
<li><strong>CPU</strong>：1 核以上</li>
<li><strong>内存</strong>：1 GB 以上</li>
<li><strong>硬盘</strong>：系统盘 SSD，推荐带 HHD 的独立数据盘 A2 系列</li>
<li><strong>网络</strong>：1 IPV4</li>
</ul>
<p>必备工具：</p>
<ul>
<li>SSH 终端（FinalShell、XShell）</li>
<li>能上网的电脑</li>
<li>会仔细阅读理解的大脑</li>
</ul>
<h2 class="rp-toc-include" id="-下载安装-cloudreve"><a href="#-下载安装-cloudreve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📥 下载安装 Cloudreve</h2>
<p>前往官方 Release 页面下载 Cloudreve 程序：</p>
<p>👉 <a href="https://github.com/cloudreve/Cloudreve/releases" target="_blank" rel="noopener noreferrer" class="rp-link">Cloudreve Releases</a></p>
<p>选择与你系统架构相符的版本（这里选择 linux_amd64），使用 FinalShell 等工具上传至服务器 <code>/root</code> 目录。</p>
<p>为什么选择 <code>linux_amd64</code> ？</p>
<p><code>linux_amd64</code> 表示：
系统平台：Linux
CPU 架构：amd64，也叫 x86_64，常见于大多数主流云服务器、VPS 和普通电脑
只要你用的是 Linux 操作系统 + x86/64 架构的 CPU，就选 linux_amd64</p>
<h3 class="rp-toc-include" id="-安装命令示例"><a href="#-安装命令示例" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📦 安装命令示例：</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">cd</span><span style="color:var(--shiki-token-string)"> /root</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>这代表了赋予 Cloudreve 可执行权限，如果无法打开 有可能就是这步出问题了。</p>
<h3 class="rp-toc-include" id="-安装文件示意"><a href="#-安装文件示意" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📸 安装文件示意：</h3>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/cloudreve-download.jpg" alt="Cloudreve下载" decoding="async"/></p>
<h2 class="rp-toc-include" id="-首次运行与激活"><a href="#-首次运行与激活" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🚀 首次运行与激活</h2>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">./cloudreve</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)"># 捐赠版则需要运行下面这个，需要授权的：</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">./cloudreve</span><span style="color:var(--shiki-token-string)"> --license-key</span><span style="color:var(--shiki-token-string-expression)"> &quot;你的授权密钥&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>新版本在打开时需要进行 --license-key 授权，v3 版本的则不需要。
运行后按 <code>Ctrl + C</code> 停止程序，进入配置阶段。</p>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/first-run.jpg" alt="首次运行输出" decoding="async" loading="lazy"/>
首次运行需要初始化数据库、配置文件等
（如果直接退出了，则说明有地方没有配置对）</p>
<h2 class="rp-toc-include" id="-配置守护进程-systemd"><a href="#-配置守护进程-systemd" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🔁 配置守护进程 systemd</h2>
<p>配置好进程守护才能保证进程的运行，至关重要。
新建服务文件：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> update</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">apt</span><span style="color:var(--shiki-token-string)"> install</span><span style="color:var(--shiki-token-string)"> vim</span><span style="color:var(--shiki-token-string)"> -y</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> vim</span><span style="color:var(--shiki-token-string)"> /etc/systemd/system/cloudreve.service</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>填入的内容如下：</p>
<div class="rp-codeblock language-ini"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="ini"><code><span class="line"><span style="color:var(--shiki-foreground)">[Unit]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Description=</span><span style="color:var(--shiki-foreground)">Cloudreve</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">After=</span><span style="color:var(--shiki-foreground)">network.target</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Service]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">WorkingDirectory=</span><span style="color:var(--shiki-foreground)">/root</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">ExecStart=</span><span style="color:var(--shiki-foreground)">/root/cloudreve</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Restart=</span><span style="color:var(--shiki-foreground)">on-failure</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">RestartSec=</span><span style="color:var(--shiki-foreground)">5</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">KillMode=</span><span style="color:var(--shiki-foreground)">mixed</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Environment=</span><span style="color:var(--shiki-token-string-expression)">&quot;CR_LICENSE_KEY=你的授权密钥&quot;</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">StandardOutput=</span><span style="color:var(--shiki-foreground)">file:/var/log/cloudreve.log</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">StandardError=</span><span style="color:var(--shiki-foreground)">journal</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Install]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">WantedBy=</span><span style="color:var(--shiki-foreground)">multi-user.target</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/systemd-setup.jpg" alt="systemd配置" decoding="async" loading="lazy"/></p>
<p>通过 Systemd 启动 Cloudreve</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> daemon-reload</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> enable</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span>
<span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="日后管理-cloudreve"><a href="#日后管理-cloudreve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>日后管理 Cloudreve：</h2>
<p>以后都从这里运行和关闭程序，非常方便</p>
<h3 class="rp-toc-include" id="停止-cloudreve"><a href="#停止-cloudreve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>停止 Cloudreve</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="启动-cloudreve"><a href="#启动-cloudreve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>启动 Cloudreve</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="重启-cloudreve"><a href="#重启-cloudreve" class="rp-header-anchor rp-link" aria-hidden="true">#</a>重启 Cloudreve</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> restart</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="查看-cloudreve-状态"><a href="#查看-cloudreve-状态" class="rp-header-anchor rp-link" aria-hidden="true">#</a>查看 Cloudreve 状态</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> systemctl</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> cloudreve</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="️-配置-confini-详解"><a href="#️-配置-confini-详解" class="rp-header-anchor rp-link" aria-hidden="true">#</a>⚙️ 配置 conf.ini 详解</h2>
<p>请按照需要修改：</p>
<div class="rp-codeblock language-ini"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="ini"><code><span class="line"><span style="color:var(--shiki-foreground)">[System]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 运行模式，可选值为 master/slave 无需修改，默认即可</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Mode</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> master</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; HTTP 监听端口，默认为 5212</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 如果没有其他服务，可以选择修改成80端口+cdn</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Listen</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> :5212</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 是否开启 Debug 模式，默认为 false 无需修改，默认即可</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Debug</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> false</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 呈递客户端 IP 时使用的 Header，默认为 X-Forwarded-For 无需修改，默认即可</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">ProxyHeader</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> X-Forwarded-For</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 进程安全退出的最长缓冲时间，默认为 0，不限制 无需修改，默认即可</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">GracePeriod</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 0</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 日志级别，可选值为 debug/info/warning/error，默认为 info</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 可选修改成error 这样日志会少很多</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">LogLevel</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> info</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; SSL 相关</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 如果配置反向代理或者加cdn 则无需添加ssl配置！</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[SSL]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; SSL 监听端口，默认为 443</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Listen</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> :443</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 证书路径，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">CertPath</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 私钥路径，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">KeyPath</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 启用 Unix Socket 监听</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Unix]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; Unix Socket 监听路径，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Listen</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> /run/cloudreve/cloudreve.sock</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 设置产生的 socket 文件的权限，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Perm</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 0666</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库相关，如果你只想使用内置的 SQLite 数据库，这一部分直接删去即可</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Database]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库类型，目前支持 sqlite/mysql/postgres，默认为 sqlite</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Type</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> sqlite</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库端口，默认为 3306</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Port</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 3306</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 用户名，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">User</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 密码，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Password</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库地址，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Host</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 127.0.0.1</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库名称，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Name</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> cloudreve</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 连接字符集，默认为 utf8mb4</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Charset</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> utf8mb4</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; SQLite 数据库文件路径，默认为 data/cloudreve.db</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">DBFile</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> cloudreve.db</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 使用 Unix Socket 连接到数据库, 默认为 false，如需开启，请在 Host 中指定 Unix Socket 路径</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">UnixSocket</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 从机模式下的配置</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Slave]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 通信密钥，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Secret</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 回调请求超时时间 (s)，默认为 20</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">CallbackTimeout</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 20</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 签名有效期 (s)，默认为 600</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">SignatureTTL</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 600</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 跨域配置</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[CORS]</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">AllowOrigins</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> *</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">AllowMethods</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> OPTIONS,GET,POST</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">AllowHeaders</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> *</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">AllowCredentials</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> false</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; Redis 相关</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[Redis]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 连接类型，默认为 tcp</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Network</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> tcp</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 服务器地址，默认为空，不启用</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Server</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 127.0.0.1:6379</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 密码，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">Password</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 数据库，默认为 0</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">DB</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 0</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 用户名，默认为空</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">User</span><span style="color:var(--shiki-token-keyword)"> =</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 从机配置应用配置覆盖</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">[OptionOverwrite]</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">; 可直接使用 `设置名称 = 值` 的格式覆盖</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">queue_slave_worker_num</span><span style="color:var(--shiki-token-keyword)"> =</span><span style="color:var(--shiki-foreground)"> 50</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="优化建议"><a href="#优化建议" class="rp-header-anchor rp-link" aria-hidden="true">#</a>优化建议</h2>
<ol>
<li>开启 Redis 缓存</li>
<li>独立数据库部署</li>
<li>启用 CDN</li>
<li>开启 HTTP/2 + GZIP</li>
<li>日志等级改为 <code>error</code></li>
<li>上传目录挂载至独立数据盘</li>
</ol>
<h2 class="rp-toc-include" id="-1panel-图形化反向代理--ssl"><a href="#-1panel-图形化反向代理--ssl" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🌐 1Panel 图形化反向代理 + SSL</h2>
<p>安装 1Panel：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://resource.fit2cloud.com/1panel/package/quick_start.sh</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>控制台界面：</p>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/7ac14a965c5ac170aa58ef0db58cd271.image.jpg" alt="安装 1Panel" decoding="async" loading="lazy"/></p>
<p>设置反代：</p>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/reverse-proxy.jpg" alt="反向代理设置" decoding="async" loading="lazy"/></p>
<p>配置 HTTPS：</p>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/ssl-setup.jpg" alt="SSL 配置" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="-添加存储策略"><a href="#-添加存储策略" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📁 添加存储策略</h2>
<p>后台 → 存储策略 → 添加</p>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/add-storage.jpg" alt="添加存储" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="-使用-docker-安装可选"><a href="#-使用-docker-安装可选" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🐳 使用 Docker 安装（可选）</h2>
<p>安装 docker</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://get.docker.com/</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-token-string)"> -d</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> cloudreve</span><span style="color:var(--shiki-token-string)"> -p</span><span style="color:var(--shiki-token-string)"> 5212:5212</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -v</span><span style="color:var(--shiki-token-string)"> /root/cloudreve:/cloudreve</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  -e</span><span style="color:var(--shiki-token-string)"> CR_LICENSE_KEY=你的密钥</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-token-string)">  cloudreve.azurecr.io/cloudreve/pro:latest</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/docker-login.jpg" alt="docker 登录" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-v4-vps-town/docker-login1.jpg" alt="docker 登录" decoding="async" loading="lazy"/></p>
<p>剩下的内容请参考：前文的使用 1panel 反向代理</p>
<h2 class="rp-toc-include" id="️-部署从机节点--离线下载"><a href="#️-部署从机节点--离线下载" class="rp-header-anchor rp-link" aria-hidden="true">#</a>🛰️ 部署从机节点 &amp; 离线下载</h2>
<p>从机节点：</p>
<p>Cloudreve 除了主节点，还可以部署多个<strong>从机节点</strong>（Slave），用于<strong>分担主节点压力、提升扩展性</strong>。</p>
<ul>
<li>
<p>📦 <strong>解压缩</strong><br/>
<!-- -->解压缩非常占用 CPU，通过从机，将上传的压缩包（.zip/.rar/.7z）通过从机解压到指定目录。</p>
</li>
<li>
<p>🗜️ <strong>创建压缩文件</strong><br/>
<!-- -->用户可在 Web 面板批量选择文件，生成压缩包。（耗费流量和 CPU）</p>
</li>
<li>
<p>🚀 <strong>离线下载</strong><br/>
<!-- -->将磁力链接、BT 种子、HTTP 下载链接推送至从机节点，由从机执行下载任务，再同步到主节点存储。（耗费大量资源）</p>
</li>
</ul>
<hr/>
<ul>
<li>分担主节点 CPU 和 IO 压力</li>
<li>多个从机可同时解压、打包、下载，提升并发性能</li>
<li>远程离线下载，不占用主节点带宽</li>
</ul>
<hr/>
<h2 class="rp-toc-include" id="-部署说明"><a href="#-部署说明" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📌 部署说明</h2>
<ol>
<li>安装 Cloudreve 至其他服务器 （参考上文安装流程）</li>
<li>在后台里面 - 新建节点 - 自动单独生成从机 <code>conf.ini</code></li>
<li>粘贴到从机的<code>conf.ini</code> 文件内</li>
<li>启动从机节点服务</li>
</ol>
<p>部署命令示例：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">./cloudreve</span><span style="color:var(--shiki-token-string)"> --slave</span><span style="color:var(--shiki-token-string)"> --license-key</span><span style="color:var(--shiki-token-string-expression)"> &quot;你的授权密钥&quot;</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/slave-setup.jpg" alt="从机节点" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="aria2-配置"><a href="#aria2-配置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Aria2 配置：</h2>
<p>Cloudreve 内的配置内容
<img src="/assets/images/how-to-install-cloudreve-v4-vps-town/aria2.jpg" alt="aria2 配置" decoding="async" loading="lazy"/></p>
<p>VPS 上的配置内容</p>
<h3 class="rp-toc-include" id="-安装-aria2"><a href="#-安装-aria2" class="rp-header-anchor rp-link" aria-hidden="true">#</a>📦 安装 Aria2</h3>
<p>执行以下命令安装：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> -N</span><span style="color:var(--shiki-token-string)"> git.io/aria2.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> aria2.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> ./aria2.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>执行过程中，输入 1 确认安装。</p>
<p>安装完成后，终端会输出 Aria2 相关配置信息及默认下载路径。</p>
<h3 class="rp-toc-include" id="️-修改-aria2-配置文件"><a href="#️-修改-aria2-配置文件" class="rp-header-anchor rp-link" aria-hidden="true">#</a>⚙️ 修改 Aria2 配置文件</h3>
<p>执行命令打开配置文件：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">sudo</span><span style="color:var(--shiki-token-string)"> vim</span><span style="color:var(--shiki-token-string)"> /root/.aria2c/aria2.conf</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<hr/>
<p>建议修改以下参数：</p>
<p>将最大同时下载任务数调大
将单服务器最大连接数调大
将下载目录改为独立数据盘，防止主盘爆满</p>
<hr/>
<p>###📄 配置修改参考：</p>
<div class="rp-codeblock language-ini"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="ini"><code><span class="line"><span style="color:var(--shiki-token-keyword)">dir=</span><span style="color:var(--shiki-foreground)">/home/aria2/downloads</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">max-concurrent-downloads=</span><span style="color:var(--shiki-foreground)">500</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">max-connection-per-server=</span><span style="color:var(--shiki-foreground)">320</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">split=</span><span style="color:var(--shiki-foreground)">640</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="️-注意"><a href="#️-注意" class="rp-header-anchor rp-link" aria-hidden="true">#</a>⚠️ 注意：</h3>
<p>修改完配置后，务必重启 Aria2 服务，否则配置不生效。</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">./aria2.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="qbittorrent-安装设置"><a href="#qbittorrent-安装设置" class="rp-header-anchor rp-link" aria-hidden="true">#</a>qBittorrent 安装设置：</h2>
<h3 class="rp-toc-include" id="安装-qbittorrent-439"><a href="#安装-qbittorrent-439" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装 qBittorrent 4.3.9</h3>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">wget</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/networkdu/qb439/refs/heads/main/install.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> chmod</span><span style="color:var(--shiki-token-string)"> +x</span><span style="color:var(--shiki-token-string)"> install.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> ./install.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/how-to-install-cloudreve-v4-vps-town/qb-setup.jpg" alt="qbittorrent" decoding="async" loading="lazy"/></p>
<p>修改下载路径到存储盘
<img src="/assets/images/how-to-install-cloudreve-v4-vps-town/qb2.jpg" alt="qbittorrent" decoding="async" loading="lazy"/></p>
<p>进入网盘后台配置 qb 离线下载
<img src="/assets/images/how-to-install-cloudreve-v4-vps-town/crqb.jpg" alt="qbittorrent" decoding="async" loading="lazy"/></p>
<p>测试一下即可使用
<img src="/assets/images/how-to-install-cloudreve-v4-vps-town/qbtest.jpg" alt="qbittorrent" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="-常见问题-faq"><a href="#-常见问题-faq" class="rp-header-anchor rp-link" aria-hidden="true">#</a>❓ 常见问题 FAQ</h2>
<p><strong>Q: 上传失败？</strong><br/>
<!-- -->A: 检查权限、磁盘空间、nginx 上传限制</p>
<p><strong>Q: 登录后台失败？</strong><br/>
<!-- -->A: 检查端口监听、防火墙和授权密钥</p>
<p><strong>Q: 如何启用 HTTPS？</strong><br/>
<!-- -->A: 推荐 1Panel 自动申请证书</p>
<p><strong>Q: 🚀 Docker 部署 vs 直接部署对比</strong></p>
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th style="text-align:left">特性/维度</th><th style="text-align:left">Docker 部署</th><th style="text-align:left">直接部署（本地二进制）</th></tr></thead><tbody><tr><td style="text-align:left">📦 安装复杂度</td><td style="text-align:left">简单，<strong>一条命令搞定</strong>，镜像自带环境</td><td style="text-align:left">稍复杂，需自己下载程序、授权、配置 systemd</td></tr><tr><td style="text-align:left">⚙️ 环境隔离性</td><td style="text-align:left"><strong>完全隔离</strong>，程序与主机环境解耦，互不影响</td><td style="text-align:left">直接运行在主机环境，依赖主机本地环境</td></tr><tr><td style="text-align:left">🔄 升级维护方便性</td><td style="text-align:left"><strong>简单换镜像</strong>，无缝更新</td><td style="text-align:left">手动替换程序，改 systemd，重启</td></tr><tr><td style="text-align:left">🐳 依赖管理</td><td style="text-align:left">镜像内自带依赖，<strong>不依赖宿主机安装额外组件</strong></td><td style="text-align:left">依赖本地环境，MySQL/Redis/Aria2 需自己部署</td></tr><tr><td style="text-align:left">📁 数据持久化</td><td style="text-align:left">需要<strong>挂载卷（volume）</strong>，否则容器重启数据丢失</td><td style="text-align:left">默认保存在本地目录，持久化简单</td></tr><tr><td style="text-align:left">🚀 性能</td><td style="text-align:left">稍有容器虚拟化开销（一般忽略不计）</td><td style="text-align:left"><strong>原生性能</strong>，直接运行</td></tr><tr><td style="text-align:left">📚 配置文件管理</td><td style="text-align:left">建议挂载配置文件目录，方便更新和备份</td><td style="text-align:left">本地直接编辑 <code>/root/conf.ini</code> 即可</td></tr><tr><td style="text-align:left">📦 多节点部署</td><td style="text-align:left"><strong>Docker Compose / Swarm / Kubernetes 集群化更方便</strong></td><td style="text-align:left">需手动维护多机 systemd 和环境</td></tr><tr><td style="text-align:left">📄 日志管理</td><td style="text-align:left">容器日志走 <code>docker logs</code>，或挂载日志目录</td><td style="text-align:left">写入本地文件或 systemd 日志</td></tr><tr><td style="text-align:left">📱 运维习惯</td><td style="text-align:left">偏 DevOps / 云原生，现代运维偏好</td><td style="text-align:left">传统 VPS、服务器部署方式</td></tr><tr><td style="text-align:left">🛑 出错恢复</td><td style="text-align:left">重启容器即可恢复，镜像固定</td><td style="text-align:left">手动排查、修改配置、重启 systemd</td></tr></tbody></table></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，延迟低，速度快</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div><!--/$-->]]></content>
        <category label="cloud-drive"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 服务器上安装和配置 Cloudreve 个人网盘]]></title>
        <id>/guide/how-to-install-cloudreve-vps-town</id>
        <link href="https://docs.vps.town/guide/how-to-install-cloudreve-vps-town"/>
        <updated>2025-04-11T13:30:00.000Z</updated>
        <summary type="html"><![CDATA[本教程详细介绍了如何在 VPS.Town 的 Debian 12 服务器上安装和配置 Cloudreve 个人网盘]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-服务器上安装和配置-cloudreve-个人网盘"><a href="#如何在-vpstown-服务器上安装和配置-cloudreve-个人网盘" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 服务器上安装和配置 Cloudreve 个人网盘<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 (<a href="#" class="rp-link">grys2012</a>) 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 35 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#引言" class="rp-toc-item rp-link" title="引言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">引言</span></a><a href="#第一步连接到您的-vps-服务器" class="rp-toc-item rp-link" title="第一步：连接到您的 VPS 服务器" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第一步：连接到您的 VPS 服务器</strong></span></a><a href="#第二步安装-1panel-面板" class="rp-toc-item rp-link" title="第二步：安装 1Panel 面板" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第二步：安装 1Panel 面板</strong></span></a><a href="#第三步设置域名信息若无域名也可略过这步不影响后续步骤" class="rp-toc-item rp-link" title="第三步：设置域名信息（若无域名也可略过这步，不影响后续步骤）" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第三步：设置域名信息（若无域名也可略过这步，不影响后续步骤）</strong></span></a><a href="#第四步安装-cloudreve这是我目前使用起来得心应手的网盘适合自用以及给他人分享" class="rp-toc-item rp-link" title="第四步：安装 cloudreve，这是我目前使用起来得心应手的网盘，适合自用以及给他人分享" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第四步：安装 cloudreve，这是我目前使用起来得心应手的网盘，适合自用以及给他人分享</strong></span></a><a href="#第五步享受成果" class="rp-toc-item rp-link" title="第五步：享受成果" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第五步：享受成果</strong></span></a></div></details>
<h2 class="rp-toc-include" id="引言"><a href="#引言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>引言</h2>
<p>本教程基于 Debian 12 系统，将引导您如何在 VPS.Town 服务器上安装和配置 Cloudreve 个人网盘。</p>
<blockquote>
<p><strong>Q: 为什么要部署 Cloudreve？</strong><br/>
<!-- -->A: Cloudreve 是我目前使用认为比较方便以及排版好看的网盘</p>
</blockquote>
<p>先来看看官方是怎么宣传的：Cloudreve 可以让您快速搭建起公私兼备的网盘系统。Cloudreve 在底层支持不同的云存储平台，用户在实际使用时 无须关心物理存储方式。你可以使用 Cloudreve 搭建个人用网盘、文件分享系统，亦或是针对大小团体的公有云系统。</p>
<p>下面，让我们开始安装吧</p>
<h2 class="rp-toc-include" id="第一步连接到您的-vps-服务器"><a href="#第一步连接到您的-vps-服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第一步：连接到您的 VPS 服务器</strong></h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，延迟低，速度快</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<p>使用 SSH 工具连接到您的 VPS.Town 服务器实例，确保您切换到 root 用户，以便执行后续操作。</p>
<p><img src="/assets/images/how-to-install-cloudreve-vps-town/67f9009145647.webp" alt="image.webp" decoding="async"/></p>
<h2 class="rp-toc-include" id="第二步安装-1panel-面板"><a href="#第二步安装-1panel-面板" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第二步：安装 1Panel 面板</strong></h2>
<p>或可自行选择基底面板如宝塔，对 Nginx 熟悉的也可以跳过这一步</p>
<p>以下命令适用于 Debian 12 系统，其他系统安装 1Panel 可 <a href="https://1panel.cn/#quickstart" target="_blank" rel="noopener noreferrer" class="rp-link">参考此链接</a></p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">安装 1panel 面板</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="安装 1panel 面板"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -sSL</span><span style="color:var(--shiki-token-string)"> https://resource.fit2cloud.com/1panel/package/quick_start.sh</span><span style="color:var(--shiki-token-string)"> -o</span><span style="color:var(--shiki-token-string)"> quick_start.sh</span><span style="color:var(--shiki-token-punctuation)"> &amp;&amp;</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> quick_start.sh</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>可选择中文安装，按照步骤提示，设置属于自己的安装目录、端口号、账号密码等信息
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f901e949b97.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9023260330.webp" alt="image.webp" decoding="async" loading="lazy"/>
安装后会输出后台信息
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9025be8e6f.webp" alt="image.webp" decoding="async" loading="lazy"/>
登录即可
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90279b081d.webp" alt="image.webp" decoding="async" loading="lazy"/>
在左侧菜单栏（网站-网站处）安装 openresty
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9030b9c902.webp" alt="image.webp" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第三步设置域名信息若无域名也可略过这步不影响后续步骤"><a href="#第三步设置域名信息若无域名也可略过这步不影响后续步骤" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第三步：设置域名信息（若无域名也可略过这步，不影响后续步骤）</strong></h2>
<p>在该处选择填写您的 acme 账户以及 DNS 账户
如下
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90505b198f.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f905392d4b0.webp" alt="image.webp" decoding="async" loading="lazy"/>
注意：Acme 账户可填写任意邮箱，我以<a href="mailto:A123321EEE@gmail.com" target="_blank" rel="noopener noreferrer" class="rp-link">A123321EEE@gmail.com</a>举例
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90565b5843.webp" alt="image.webp" decoding="async" loading="lazy"/>
填写后保存即可</p>
<p>DNS 账户需要根据您的域名服务商，打开对应控制页面，我以 CF 举例，打开如下网址并登录</p>
<div class="rp-codeblock language-txt"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="txt"><code><span class="line"><span>https://www.cloudflare.com/</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p>右上角打开配置文件
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9044593fc3.webp" alt="image.webp" decoding="async" loading="lazy"/>
API 令牌
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9045ce1304.webp" alt="image.webp" decoding="async" loading="lazy"/>
创建令牌
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90477aee9f.webp" alt="image.webp" decoding="async" loading="lazy"/>
使用模板
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f904896f69a.webp" alt="image.webp" decoding="async" loading="lazy"/>
选择你的对应域名，选择继续
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f904b4afda8.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f904b717700.webp" alt="image.webp" decoding="async" loading="lazy"/>
创建令牌
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f904d19cb8e.webp" alt="image.webp" decoding="async" loading="lazy"/>
获取生成的令牌后妥善保存好
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f904e9b2084.webp" alt="image.webp" decoding="async" loading="lazy"/>
复制刚刚生成的 API 令牌，填入 DNS 账户处(邮箱为 CF 账户邮箱)
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f905ace9c57.webp" alt="image.webp" decoding="async" loading="lazy"/>
到此处，已完成域名信息的填写</p>
<h2 class="rp-toc-include" id="第四步安装-cloudreve这是我目前使用起来得心应手的网盘适合自用以及给他人分享"><a href="#第四步安装-cloudreve这是我目前使用起来得心应手的网盘适合自用以及给他人分享" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第四步：安装 cloudreve，这是我目前使用起来得心应手的网盘，适合自用以及给他人分享</strong></h2>
<p>进入 1panel 应用商店，安装 cloudreve
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f906238c0bd.webp" alt="image.webp" decoding="async" loading="lazy"/>
记住您的端口，且开放外部端口访问并安装
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90661a9f21.webp" alt="image.webp" decoding="async" loading="lazy"/>
等待安装完毕
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f906770e428.webp" alt="image.webp" decoding="async" loading="lazy"/>
安装完毕后，打开日志，查看账号密码
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9082f4323c.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f908504cfd6.webp" alt="image.webp" decoding="async" loading="lazy"/>
访问您的 IP 加设置的端口号，输入账号密码后登录后台
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9087166811.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9088279ef6.webp" alt="image.webp" decoding="async" loading="lazy"/></p>
<p>过程中可以先设置好域名和 HTTPS
访问域名服务商后台，将您的域名和 IP 绑定上，这里不演示了，下面进行后续步骤
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f906949f2ff.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f906fb66f46.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9070d064a8.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90738708b4.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90734b733c.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f907649cc4a.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90783cd438.webp" alt="image.webp" decoding="async" loading="lazy"/>
保存即可
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f907a43d9df.webp" alt="image.webp" decoding="async" loading="lazy"/>
访问您的域名
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f907ca443f6.webp" alt="image.webp" decoding="async" loading="lazy"/>
登录后打开后台管理面板
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9096e84dcd.webp" alt="image.webp" decoding="async" loading="lazy"/>
会提示不一致，点击更改即可
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f9098329581.webp" alt="image.webp" decoding="async" loading="lazy"/>
在该处可以设置空间大小，以及用户组和用户信息等高阶玩法，可以自行研究</p>
<h2 class="rp-toc-include" id="第五步享受成果"><a href="#第五步享受成果" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第五步：享受成果</strong></h2>
<p>可以拖拽上传文件，也可以利用 QB、aria2 等下载磁力链接，毕竟 VPS.Town 抗版权投诉，请自由发挥</p>
<p><img src="/assets/images/how-to-install-cloudreve-vps-town/67f90aa992428.webp" alt="image.webp" decoding="async" loading="lazy"/>
<img src="/assets/images/how-to-install-cloudreve-vps-town/67f90aac74e94.webp" alt="image.webp" decoding="async" loading="lazy"/></p>
<p>还可以分享给朋友</p>
<p><img src="/assets/images/how-to-install-cloudreve-vps-town/67f90abe72148.webp" alt="image.webp" decoding="async" loading="lazy"/></p>
<p><strong>这个网盘是我目前使用认为比较方便以及排版好看的网盘，推荐给大家</strong></p><!--/$-->]]></content>
        <author>
            <name>grys2012</name>
        </author>
        <category label="cloud-drive"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 服务器上安装 qBittorent 和 AList]]></title>
        <id>/guide/vps-town-install-qbittorrent-alist</id>
        <link href="https://docs.vps.town/guide/vps-town-install-qbittorrent-alist"/>
        <updated>2025-04-11T11:21:00.000Z</updated>
        <summary type="html"><![CDATA[本教程详细介绍了如何在 Debian 12 系统的 VPS.Town 服务器上，通过 Docker 安装和配置 qBittorrent 进行 BT 下载，并结合 AList 实现离线下载文件至网盘的功能。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-服务器上安装-qbittorent-和-alist"><a href="#如何在-vpstown-服务器上安装-qbittorent-和-alist" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 服务器上安装 qBittorent 和 AList<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由用户 (<a href="#" class="rp-link">赛博丁真</a>) 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 20 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#引言" class="rp-toc-item rp-link" title="引言" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">引言</span></a><a href="#第一步连接到您的-vps-服务器" class="rp-toc-item rp-link" title="第一步：连接到您的 VPS 服务器" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第一步：连接到您的 VPS 服务器</strong></span></a><a href="#第二步安装-docker" class="rp-toc-item rp-link" title="第二步：安装 docker" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc"><strong>第二步：安装 docker</strong></span></a><a href="#第三步运行-docker-命令" class="rp-toc-item rp-link" title="第三步：运行 docker 命令" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第三步：运行 docker 命令</span></a><a href="#第四步查看-webui-密码并登录修改密码" class="rp-toc-item rp-link" title="第四步：查看 webui 密码并登录修改密码" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第四步：查看 webui 密码并登录修改密码</span></a><a href="#打开-webui" class="rp-toc-item rp-link" title="打开 webui" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">打开 webui</span></a><a href="#修改密码并拉到最下方保存" class="rp-toc-item rp-link" title="修改密码并拉到最下方保存" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">修改密码并拉到最下方保存</span></a><a href="#第五步下载种子" class="rp-toc-item rp-link" title="第五步，下载种子" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第五步，下载种子</span></a><a href="#进阶教程配合-alist-实现离线下载上传至网盘" class="rp-toc-item rp-link" title="进阶教程：配合 AList 实现离线下载、上传至网盘" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">进阶教程：配合 AList 实现离线下载、上传至网盘</span></a><a href="#进入后台设置--其他--qbittorent" class="rp-toc-item rp-link" title="进入后台设置 → 其他 → qbittorent" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">进入后台设置 → 其他 → qbittorent</span></a></div></details>
<h2 class="rp-toc-include" id="引言"><a href="#引言" class="rp-header-anchor rp-link" aria-hidden="true">#</a>引言</h2>
<p>本教程详细介绍了如何在 Debian 12 系统的 VPS.Town 服务器上，通过 Docker 安装和配置 qBittorrent 进行 BT 下载，并结合 AList 实现离线下载文件至网盘的功能。</p>
<h2 class="rp-toc-include" id="第一步连接到您的-vps-服务器"><a href="#第一步连接到您的-vps-服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第一步：连接到您的 VPS 服务器</strong></h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<p>使用 SSH 工具连接到您的 VPS.Town 服务器实例，确保您切换到 root 用户，以便执行后续操作。</p>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/image.png" alt="image.png" decoding="async"/></p>
<h2 class="rp-toc-include" id="第二步安装-docker"><a href="#第二步安装-docker" class="rp-header-anchor rp-link" aria-hidden="true">#</a><strong>第二步：安装 docker</strong></h2>
<p>我们将使用 docker 官方的安装脚本。该脚本简化了 docker 编译安装过程，操作更加便捷。</p>
<p>安装 docker 是为了隔离系统与运行环境，同时也能简化配置</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -fsSL</span><span style="color:var(--shiki-token-string)"> https://get.docker.com</span><span style="color:var(--shiki-token-keyword)"> |</span><span style="color:var(--shiki-token-function)"> bash</span><span style="color:var(--shiki-token-string)"> -s</span><span style="color:var(--shiki-token-string)"> docker</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="第三步运行-docker-命令"><a href="#第三步运行-docker-命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步：运行 docker 命令</h2>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">小贴士 💡</div><div class="rp-callout__content"><p>请把 <code>-v /mnt:/Downloads</code> 中的 <code>/mnt</code> 改为硬盘的挂载路径，例如 <code>/data/qbittorrent</code></p></div></div>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> run</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--name=qbittorrent \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">QB_WEBUI_PORT=</span><span style="color:var(--shiki-token-constant)">8989</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">QB_EE_BIN=</span><span style="color:var(--shiki-token-constant)">false</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">UID=</span><span style="color:var(--shiki-token-constant)">1000</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">GID=</span><span style="color:var(--shiki-token-constant)">1000</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-e </span><span style="color:var(--shiki-token-string)">UMASK=</span><span style="color:var(--shiki-token-constant)">022</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-p </span><span style="color:var(--shiki-token-string)">6881:6881</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-p </span><span style="color:var(--shiki-token-string)">6881:6881/udp</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-p </span><span style="color:var(--shiki-token-string)">8989:8989</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/docker/johngong:/config</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">-v </span><span style="color:var(--shiki-token-string)">/mnt:/Downloads</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">--restart </span><span style="color:var(--shiki-token-string)">unless-stopped</span><span style="color:var(--shiki-foreground)"> \</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">johngong/qbittorrent:latest</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h2 class="rp-toc-include" id="第四步查看-webui-密码并登录修改密码"><a href="#第四步查看-webui-密码并登录修改密码" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四步：查看 webui 密码并登录修改密码</h2>
<p>第一次启动会生成密码，查看即可</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">docker</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> qbittorrent</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="打开-webui"><a href="#打开-webui" class="rp-header-anchor rp-link" aria-hidden="true">#</a>打开 webui</h3>
<p>选择 <strong>工具</strong> → <strong>选项</strong></p>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/1.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h3 class="rp-toc-include" id="修改密码并拉到最下方保存"><a href="#修改密码并拉到最下方保存" class="rp-header-anchor rp-link" aria-hidden="true">#</a>修改密码并拉到最下方保存</h3>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/2.png" alt="image.png" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第五步下载种子"><a href="#第五步下载种子" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五步，下载种子</h2>
<p>选择左侧图标，可以下载磁链，右侧可以上传种子文件进行下载</p>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/3.png" alt="image.png" decoding="async" loading="lazy"/></p>
<hr/>
<h2 class="rp-toc-include" id="进阶教程配合-alist-实现离线下载上传至网盘"><a href="#进阶教程配合-alist-实现离线下载上传至网盘" class="rp-header-anchor rp-link" aria-hidden="true">#</a>进阶教程：配合 AList 实现离线下载、上传至网盘</h2>
<p>安装 AList 请参见 <a href="https://alist.nn.ci/zh/guide/install/script.html" target="_blank" rel="noopener noreferrer" class="rp-link">官方的一键脚本</a></p>
<h3 class="rp-toc-include" id="进入后台设置--其他--qbittorent"><a href="#进入后台设置--其他--qbittorent" class="rp-header-anchor rp-link" aria-hidden="true">#</a>进入后台设置 → 其他 → qbittorent</h3>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/4.png" alt="image.png" decoding="async" loading="lazy"/></p>
<p>将 URL 改为</p>
<p><code>http://admin:[密码]@localhost:8989/</code></p>
<p>进入要离线到网盘的目录，选择侧边栏的离线下载功能即可</p>
<p><img src="/assets/images/vps-town-install-qbittorrent-alist/5.png" alt="image.png" decoding="async" loading="lazy"/></p><!--/$-->]]></content>
        <author>
            <name>赛博丁真</name>
        </author>
        <category label="download-media"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[如何在 VPS.Town 服务器上安装飞牛 OS]]></title>
        <id>/guide/fnos</id>
        <link href="https://docs.vps.town/guide/fnos"/>
        <updated>2025-03-03T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[本教程基于 Debian 11 系统，将引导您如何在 VPS.Town 服务器实例上安装 飞牛 (fnOS) 系统。]]></summary>
        <content type="html"><![CDATA[<!--$--><h1 class="rp-toc-include" id="如何在-vpstown-服务器上安装飞牛-os"><a href="#如何在-vpstown-服务器上安装飞牛-os" class="rp-header-anchor rp-link" aria-hidden="true">#</a>如何在 VPS.Town 服务器上安装飞牛 OS<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg></div><span>复制 Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg width="1em" height="1em" viewBox="0 0 32 32" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M16 22 6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg></button></div>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">温馨提示</div><div class="rp-callout__content"><p>本文由社区用户 (<a href="#" class="rp-link">@grys2012</a>) 撰写，并已加入 <code>VPS.Town 优秀原创文章激励计划</code>，本站享有完整版权，未经允许不得转载。</p><p>本文已通过 <a href="/kb/community" class="rp-link">VPS.Town 社区文章投稿及奖励规则 (试行稿)</a> 审核，并获得 <code>现金 200 元</code> 奖励。</p></div></div>
<details class="rp-callout rp-callout--details"><summary class="rp-callout__title">📖 本文目录</summary><div class="rp-callout__content"><a href="#准备工作" class="rp-toc-item rp-link" title="准备工作" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">准备工作</span></a><a href="#第一步连接到您的-vps-服务器" class="rp-toc-item rp-link" title="第一步：连接到您的 VPS 服务器" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第一步：连接到您的 VPS 服务器</span></a><a href="#第二步下载安装脚本" class="rp-toc-item rp-link" title="第二步：下载安装脚本" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第二步：下载安装脚本</span></a><a href="#脚本来源" class="rp-toc-item rp-link" title="脚本来源" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">脚本来源</span></a><a href="#下载脚本" class="rp-toc-item rp-link" title="下载脚本" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">下载脚本</span></a><a href="#第三步运行安装脚本并设置参数" class="rp-toc-item rp-link" title="第三步：运行安装脚本并设置参数" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第三步：运行安装脚本并设置参数</span></a><a href="#执行安装命令" class="rp-toc-item rp-link" title="执行安装命令" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">执行安装命令</span></a><a href="#设置关键参数" class="rp-toc-item rp-link" title="设置关键参数" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">设置关键参数</span></a><a href="#第四步等待安装完成并重启系统" class="rp-toc-item rp-link" title="第四步：等待安装完成并重启系统" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第四步：等待安装完成并重启系统</span></a><a href="#安装进度监控" class="rp-toc-item rp-link" title="安装进度监控" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">安装进度监控</span></a><a href="#重启系统" class="rp-toc-item rp-link" title="重启系统" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">重启系统</span></a><a href="#第五步访问-fnos-管理后台" class="rp-toc-item rp-link" title="第五步：访问 FNOS 管理后台" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">第五步：访问 FNOS 管理后台</span></a><a href="#登录方式" class="rp-toc-item rp-link" title="登录方式" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">登录方式</span></a><a href="#安装完成" class="rp-toc-item rp-link" title="安装完成！" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">安装完成！</span></a></div></details>
<h2 class="rp-toc-include" id="准备工作"><a href="#准备工作" class="rp-header-anchor rp-link" aria-hidden="true">#</a>准备工作</h2>
<p>本教程基于 Debian 11 系统，将引导您如何在 VPS.Town 服务器实例上安装 <code>飞牛 (fnOS)</code> 系统。</p>
<h2 class="rp-toc-include" id="第一步连接到您的-vps-服务器"><a href="#第一步连接到您的-vps-服务器" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第一步：连接到您的 VPS 服务器</h2>
<div class="rp-callout rp-callout--tip"><div class="rp-callout__title">💡 VPS.Town 大盘鸡解决方案</div><div class="rp-callout__content"><ol>
<li>最多可提供高达 <strong>8TB 大容量存储</strong> 的选项，非常适合存放大量项目代码与文档；</li>
<li>同时也提供 <strong>SSD &amp; HDD</strong> 混合方案，读写速度更快、成本更低；</li>
<li>性价比高，适合个人开发者、小团队进行长期托管部署；</li>
<li>抗 DMCA 版权投诉，可用于一些敏感项目；</li>
<li>⚠️ 其中 1TB 存储大盘鸡续费仅需 260/年或 28.5/月，硬盘一次性买断最低仅需 ¥80/TiB</li>
<li>服务器位于香港，距离大陆近，延迟低，速度快</li>
</ol><p>无 AFF 购买链接：<a href="https://vps.town/cart/goodsList.htm?fid=3&amp;gid=1" target="_blank" rel="noopener noreferrer" class="rp-link">点我一键直达</a></p></div></div>
<p>使用 SSH 工具连接到您的 VPS.Town 服务器实例，确保您切换到 root 用户，以便执行后续操作。</p>
<p><img src="/assets/images/fnos/fnos-01.png" alt="SSH 连接界面" decoding="async"/></p>
<h2 class="rp-toc-include" id="第二步下载安装脚本"><a href="#第二步下载安装脚本" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第二步：下载安装脚本</h2>
<p>我们将使用 bin456789 开发的 DD 重装脚本。该脚本简化了系统重装过程，操作更加便捷。</p>
<h3 class="rp-toc-include" id="脚本来源"><a href="#脚本来源" class="rp-header-anchor rp-link" aria-hidden="true">#</a>脚本来源</h3>
<ul>
<li>GitHub 项目地址：<a href="https://github.com/bin456789/reinstall" target="_blank" rel="noopener noreferrer" class="rp-link">https://github.com/bin456789/reinstall</a></li>
<li>如有疑虑，可以先查看项目源代码</li>
</ul>
<h3 class="rp-toc-include" id="下载脚本"><a href="#下载脚本" class="rp-header-anchor rp-link" aria-hidden="true">#</a>下载脚本</h3>
<p>在终端中执行以下命令：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">curl</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh</span><span style="color:var(--shiki-token-keyword)"> ||</span><span style="color:var(--shiki-token-function)"> wget</span><span style="color:var(--shiki-token-string)"> -O</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-foreground)"> $_</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/fnos/fnos-02.png" alt="下载脚本成功" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第三步运行安装脚本并设置参数"><a href="#第三步运行安装脚本并设置参数" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第三步：运行安装脚本并设置参数</h2>
<h3 class="rp-toc-include" id="执行安装命令"><a href="#执行安装命令" class="rp-header-anchor rp-link" aria-hidden="true">#</a>执行安装命令</h3>
<p>下载完成后，运行以下命令启动安装流程：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__title">bash</div><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash" data-title="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">bash</span><span style="color:var(--shiki-token-string)"> reinstall.sh</span><span style="color:var(--shiki-token-string)"> fnos</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<h3 class="rp-toc-include" id="设置关键参数"><a href="#设置关键参数" class="rp-header-anchor rp-link" aria-hidden="true">#</a>设置关键参数</h3>
<p>在提示界面中，您需要设置：</p>
<ul>
<li>登录密码：请设置一个安全性高的密码</li>
<li>系统盘大小：根据您的需求设置，最小默认为 8G</li>
</ul>
<div class="rp-callout rp-callout--info"><div class="rp-callout__title">小贴士</div><div class="rp-callout__content"><p>
请根据您的实际硬盘容量合理分配。例如，在 40G 系统盘的情况下，可以将 FNOS 系统盘设置为 20G。</p></div></div>
<p><img src="/assets/images/fnos/fnos-03.png" alt="设置系统参数" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第四步等待安装完成并重启系统"><a href="#第四步等待安装完成并重启系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第四步：等待安装完成并重启系统</h2>
<p>确认参数后，脚本将自动执行安装流程。安装过程需要一些时间，请耐心等待。</p>
<h3 class="rp-toc-include" id="安装进度监控"><a href="#安装进度监控" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装进度监控</h3>
<p>系统会显示实时安装进度，请勿中断连接。</p>
<h3 class="rp-toc-include" id="重启系统"><a href="#重启系统" class="rp-header-anchor rp-link" aria-hidden="true">#</a>重启系统</h3>
<p>当看到完成提示后，输入以下命令重启系统以完成安装：</p>
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content rp-codeblock__content--line-numbers"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">reboot</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="切换代码换行" aria-label="切换代码换行"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="复制代码"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" d="M20 8v12H8V8zm0-2H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 16H2V4a2 2 0 0 1 2-2h12v2H4Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="m9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"></path></svg></button></div></div></div>
<p><img src="/assets/images/fnos/fnos-04.png" alt="安装进行中" decoding="async" loading="lazy"/></p>
<p>完成安装后的界面：</p>
<p><img src="/assets/images/fnos/fnos-05.png" alt="安装完成界面" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="第五步访问-fnos-管理后台"><a href="#第五步访问-fnos-管理后台" class="rp-header-anchor rp-link" aria-hidden="true">#</a>第五步：访问 FNOS 管理后台</h2>
<h3 class="rp-toc-include" id="登录方式"><a href="#登录方式" class="rp-header-anchor rp-link" aria-hidden="true">#</a>登录方式</h3>
<p>系统重启后，您可以通过浏览器访问 FNOS 管理界面。</p>
<p>访问地址格式：<code>http://您服务器IP:5666</code></p>
<p>例如，如果您的服务器 IP 是 123.123.123.123，则访问地址为：
<code>http://123.123.123.123:5666</code></p>
<p><img src="/assets/images/fnos/fnos-06.png" alt="FNOS 管理后台" decoding="async" loading="lazy"/></p>
<h2 class="rp-toc-include" id="安装完成"><a href="#安装完成" class="rp-header-anchor rp-link" aria-hidden="true">#</a>安装完成！</h2>
<p>恭喜！您已成功安装 FNOS 系统，祝您使用愉快！</p><!--/$-->]]></content>
        <author>
            <name>grys2012</name>
        </author>
        <category label="system-security"/>
    </entry>
</feed>