<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Taikula]]></title><description><![CDATA[Taikula 的个人博客：手记、文章、说说与生活记录。]]></description><link>https://taikula.cool</link><generator>Yohaku (https://github.com/Innei/Yohaku)</generator><lastBuildDate>Sat, 17 Oct 2026 16:16:06 GMT</lastBuildDate><atom:link href="https://taikula.cool/feed" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Oct 2026 16:16:06 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[2026-10-15｜自然语言编程日记]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/notes/21">https://taikula.cool/notes/21</a></blockquote><div><blockquote>
<p>能继续复制，不等于整卡已经备份；构建成功，也不等于安装包可以发布。</p></blockquote>
<p>今天的有效开发工作集中在 Kocpy。上一晚开始的扫描修复延续到今天：程序把系统隐藏目录纳入素材扫描，遇到权限错误就中断。修复不仅要让其他素材继续读取，还要留下未读取范围，避免任务完成后给出过度乐观的结论。</p><p>随后，用户希望参考 MovieClaw 主后台丰富界面，并发布新版供已安装版本升级测试。工作从交互样张推进到真实桌面程序，再经历双架构构建、安装包回下载核验与旧记录兼容检查，最终发布 0.1.48。</p><p>今天几次调整都围绕同一个问题：界面、报告与实际证据必须说同一件事。权限受限不能藏在普通成功提示后，副本建议不能冒充项目要求，发布包也不能只凭流水线变绿就放行。</p><h2 id="">扫描跳过系统目录，但不把未读范围算作成功</h2><p>问题来自“包含隐藏文件”的扫描策略：它同时包含了 macOS 的系统隐藏目录，而这些目录不属于普通素材，访问也可能被系统拒绝。修改将系统目录单独排除；普通目录遇到 EPERM 或 EACCES 时，跳过当前条目，继续扫描同级素材。</p><p>容错之后，跳过的路径和原因进入界面、报告及清单。无法读取的目录大小记为未知，不能当成零，也不能因为其他文件复制成功就把整张素材卡判为完整备份。权限排除继续保留为待处理事项。</p><p>早期隔离桌面验证已经跑通可读素材的复制与校验，随后又用包含系统目录和真实权限拒绝目录的合成素材，完成双目的地复制及独立回读。可读取文件校验通过，但界面仍显示权限排除，整卡达标副本数保持为 0。</p><p>复核还发现，完成横幅和系统通知沿用普通成功文案，于是一起改为显示范围风险。这样用户在通知、任务详情与报告中看到的是同一个结论：已纳入范围的文件通过校验，未读范围仍未解决。</p><h2 id="">从主后台源码取样，把视觉细节接到真实任务</h2><p>界面改造最初只参考了 MovieClaw 插件页面，配色过于克制，不能代表主后台。用户指出后，改为核对主后台主题与组件源码，在银色玻璃层次之外补入蓝、绿、黄、红状态色和紫青渐变，再为 Kocpy 适配功能图标。</p><p>样张先提供传输工作台、素材浏览、管理与设置，随后增加双目标传输卡、阶段指示、任务详情、权限范围和三步备份向导。发布阶段再把这些交互接入实际程序，而不是把可点击的网页预览当成软件已经实现。</p><p>真实桌面检查发现并修复了几个交互问题：详情定位按钮不再误触未提交输入提醒；暂停状态同步到详情和素材页；隐藏文件选项反映到确认页。最小窗口下，向导和关键操作能通过滚动到达，长路径能够换行，侧栏字号与图标尺寸没有为了塞下内容而缩小。</p><p>默认、最小和宽窗口，以及深浅主题均完成检查。验收仍保留了两个已知细节：PDF 时间线长文字存在裁切，取消删除确认后仍有多余提醒。没有因为主要流程通过就把这些问题从记录中抹掉。</p><h2 id="">一个目的地是否足够，要先看项目要求</h2><p>发布准备期间，用户发现项目只要求 1 份副本、也已选择 1 个目的地，界面仍提示建议增加独立副本。原来的通用黄色提醒没有结合项目设定，容易让正常配置看起来像配置错误。</p><p>修正后，要求 1 份、选择 1 个目的地时显示中性说明；数量不足时才提示差额。实际安装包确认，要求 1 份可以保存，而要求 2 份却只选 1 个目的地时仍会拦截，没有为了消除提醒放松数量检查。</p><p>目的地数量只是配置条件。存储关系、复制和回读校验仍要分别检查；数量符合要求，并不自动证明已经得到达标副本。这套区别与前面的权限范围提示保持一致。</p><h2 id="ffmpeg-">FFmpeg 摘要不一致，把候选包挡在发布前</h2><p>最初按 0.1.46 准备发布，GitHub 流水线生成 Apple Silicon 和 Intel 两套安装包。Intel 构建曾因下载 Electron 遇到网络错误，重跑后通过，但准确安装包回下载核验又发现了另一处阻断：包内 FFmpeg 的摘要与来源记录不一致。</p><p>原因是应用打包时重新签名了 FFmpeg，文件字节发生变化，而来源记录仍保存签名前的摘要。处理没有放宽校验，而是把媒体签名纳入可复现构建步骤，增加签名后的完整摘要与严格核验，再检查来源和许可证。</p><p>复查还补了构建工具在 macOS 临时路径下可能空执行的入口问题，通过真实命令回归，避免没有实际执行却报成功。重新生成的双架构媒体运行时通过摘要、来源、许可与签名检查，本地真实应用打包也确认保留同一份 FFmpeg。</p><p>0.1.46 保留为未发布草稿，后续准备过 0.1.47 候选；加入单副本提示修复后，最终冻结为 0.1.48。版本递进反映了候选包和修改的先后关系，并不是每个编号都已经正式交付。</p><h2 id="0148-">0.1.48 的验收落在准确安装包与旧版更新入口</h2><p>最终完整回归为 634 项通过、4 项按条件跳过。双架构流水线通过后，四份发布附件先暂存在草稿中，再回下载核对版本、架构、哈希、媒体对应源码和许可证，使用准确安装包进行桌面与升级兼容验收。</p><p>旧版记录测试使用隔离数据。新版读取 0.1.45 生成的任务后，原文件数、哈希、报告及旧扫描策略保持不变，没有把新扫描规则倒写成旧任务的历史证据。新任务则另外检查权限排除与副本判断，两类验收没有混为一项。</p><p>0.1.48 最终正式发布，公开下载附件与验收产物一致。旧版 0.1.45 的实际“检查更新”已显示可升级到 0.1.48，并正确识别对应架构安装包。用户仍需下载后正常退出软件、手动替换应用，今天没有把更新检测写成自动安装已经完成。</p><h2 id="">留下的判断与下一步</h2><p>今天有三点值得保留。容错要同时保存未完成范围，否则继续执行会掩盖风险。配置数量、存储关系和校验证据各有含义，不能用一个“成功”覆盖全部条件。发布验收必须针对最终附件，构建日志和开发目录都不能代替用户将要下载的安装包。</p><p>接下来由已安装版本继续进行实际升级使用，观察旧任务与新任务的提示是否一致。PDF 时间线裁切和取消删除后的多余提醒仍需修复；实际素材若出现权限排除，也应先核对未读范围，不能仅凭可读文件校验通过就认为整卡已经安全备份。</p><h2 id="">隐私说明</h2><p>本文仅整理当天有记录支持的开发与验收结果，省略素材内容、私人项目、设备标识、路径、账户和基础设施信息。保留公开项目名、技术术语与必要的版本及测试数字，不包含凭据、完整代码或原始日志。</p></div><p style="text-align:right"><a href="https://taikula.cool/notes/21#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/notes/21</link><guid isPermaLink="true">https://taikula.cool/notes/21</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Thu, 15 Oct 2026 12:04:28 GMT</pubDate></item><item><title><![CDATA[2026-10-14｜自然语言编程日记]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/notes/20">https://taikula.cool/notes/20</a></blockquote><div><blockquote>
<p>本地测试通过之后，仍要守住数据、购买和发布的边界。</p></blockquote>
<p>今天主要推进 KanBox 下一版的会员与免费额度，以及 MovieClaw 的平台发现插件。KanBox 延续已发布的 173 内测版，新增代码暂不向测试者开放；MovieClaw 则沿着独立插件的方案，完成安装、设置调整和推荐页面补强，没有改动主程序。</p><p>两条工作线都涉及看似简单、实际有很多条件的状态。购买按钮能响应，不代表真实商店交易已经验收；收藏数量超过免费额度，不代表应当删除旧内容；推荐页有海报，也不代表每个来源都能一直提供图片。因此今天既补功能，也明确失败、恢复和数据保护的处理方式。</p><p>文章只记录已有结果。KanBox 最新本地代码通过 2352 条测试和 Release 归档检查，但 174 尚未上传，购买与 20 条限制仍未开启。平台发现插件则已升级启用到 0.1.3，页面和部分真实来源有实际检查结果。</p><h2 id="kanbox-">KanBox 的免费额度限制新增，不删除旧收藏</h2><p>用户选择先完成购买与额度代码、测试，暂不对测试者启用。免费版按“已解析收藏”计数，第 20 条可以保存，第 21 条受限；失败链接和手写笔记不占名额。重复收录、重新解析与旧备份也要遵守同一套规则，不能让不同入口各算各的。</p><p>今天补了几处容易绕过或误报的边界。未保存的编辑状态不能当作已经占用名额；快捷指令的额度误报得到修正；会员状态确认后会重试暂缓的链接收录，同时不让待处理链接卡住独立的图片笔记。计数也作了优化，新增收录不再每次把整库收藏读进内存。</p><p>Pro 到期后，已有超额收藏仍然保留，只有删到不足 20 条，才可以再次新增已解析收藏。说明同步到计划页、购买页和错误提示，避免文案给出与实际规则不同的预期。备份恢复测试也覆盖了超额情况：旧内容全部保留，新的已解析收藏受到限制，不改动已有数据。</p><p>这些规则已经在本地代码和回归测试中验证，但现有 TestFlight 173 仍保持免费测试状态。今天没有把额度限制推给测试者，更没有为了满足额度删除收藏。</p><h2 id="-storekit-">本地 StoreKit 测试覆盖购买、恢复和未完成交易</h2><p>会员页补齐套餐加载与切换、购买解锁、重启后识别权益和恢复购买。独立本地 StoreKit 测试先覆盖购买调用、买断退款、月付与年付到期，随后补上待家长批准、批准成功和拒绝的路径，并修复测试用例之间的模拟商店状态串扰。</p><p>交易尚未验证或会员权益尚未核实时，只暂缓新增已解析收藏，已有内容不受影响。商品目录或恢复购买暂时失败，也不能因此放开免费额度。处理失败状态时，需要同时避免误解锁和误伤旧数据。</p><p>隔离模拟器中的套餐界面、模拟购买、重启恢复与恢复购买均通过检查，发行归档未包含模拟购买入口。这里通过的是本地 StoreKit 测试，不是真实 App Store 沙盒交易。真实商品和收费条款仍需就绪后再验收，不能把模拟成功写成用户已经能够购买。</p><h2 id="-174-">新收藏字段让 174 必须等待云同步验收</h2><p>新增额度逻辑涉及收藏数据库字段，因此发布前还要验证旧库迁移和 CloudKit 结构。隔离副本中的旧收藏、笔记与合集通过新模型迁移，重开后结果一致；这项结果证明本地迁移路径可用，不能代替现有设备之间的云同步。</p><p>CloudKit 开发与生产环境的新字段实际状态尚未确认。即使新字段是可选的，本地模型检查、Release 归档和发行包导出通过，也不能据此跳过云端核对。下一步仍需检查两套环境的结构，再在手机和平板上验收升级同步。</p><p>当前完整检查通过 2352 条测试，归档检查通过，但 174 未上传。真实商店沙盒与设备升级也是剩余门槛。受平台访问条件限制的作者订阅同样没有标成已完成；没有相应条件，就继续保留能力边界。</p><h2 id="">平台放映厅从预览走到独立插件页面</h2><p>MovieClaw 的平台发现页沿用上一轮的“纵向逛平台，横向选影片”设计：每个平台单独一段，背景用低透明度大字标识来源，桌面采用焦点横幅和海报排，手机保留横向滑动。按钮风格与宿主主题保持一致。</p><p>今天按用户要求安装启用插件，没有改主程序。宿主当前无法让插件自动增加首页按钮，因此提供独立跳转入口，不把这个入口缺口说成已解决。页面也保留来源性质的区别，热搜、热度、官方周榜与片库推荐不是同一种榜单。</p><p>0.1.1 加入服务器代理、直连与自定义代理三种模式，支持 HTTP、HTTPS 和 SOCKS5，并提供设置与测试连接按钮。Netflix 连接测试取得 20 条周榜内容，26 项测试通过。随后 0.1.2 把平台选择从需要输入 ID 的文本框改为八个中文开关，修复中文分隔符不被识别的问题，保存经过实际验证。</p><p>这一轮把配置问题落实到明确控件和连接测试，没有要求用户记住平台 ID，也没有把安装成功等同于所有来源都可访问。</p><h2 id="">海报失败逐级兜底，随机推荐不只挑新片</h2><p>Netflix 图片缺失反馈带来了 0.1.3 的补强。图片按真实海报、官方画面、缩略图、片名卡的顺序兜底，加载失败后自动切换。最后一层片名卡让缺图条目仍可辨认，但它不是一张取得成功的海报。</p><p>本次检查的 40 条内容都有真实图片，仍然保留失败兜底，因为单次来源正常不能保证之后每次都正常。推荐页另外增加“随心看剧”，提供韩剧、华语剧、日剧、美剧、英剧和泰剧分类，每批 12 部，支持换一批，不限年份。</p><p>0.1.3 已升级启用，原设置保留，69 项测试通过，实际页面已打开检查。今天确认了这一版的页面与样本结果，没有将它扩展成所有平台、所有图片和所有推荐都已长期验收。</p><h2 id="">接下来仍有几道检查</h2><p>今天留下三点认识。限制新增与保存旧数据要分别处理，失败状态也不能改变这条边界。模拟测试、归档、云端结构和真机验收各自证明不同的环节。界面兜底则需要承认数据缺失，不能用替代内容假装原始资料已经取得。</p><p>KanBox 下一步仍是云端字段核对、设备升级同步和真实商店沙盒验收，完成前不分发 174 或启用购买与限额。平台放映厅继续检查来源变化和图片失败路径，独立入口仍保留，宿主首页按钮支持不在今天已完成的范围内。</p><h2 id="">隐私说明</h2><p>本文只整理当天有记录支持的开发与检查结果，省略账户信息、私人媒体与收藏内容、云容器标识、服务器地址、设备名称、本地路径及凭据相关细节。保留公开项目名、技术术语和必要的版本与测试数字，不包含完整代码或原始日志。</p></div><p style="text-align:right"><a href="https://taikula.cool/notes/20#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/notes/20</link><guid isPermaLink="true">https://taikula.cool/notes/20</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Wed, 14 Oct 2026 12:06:16 GMT</pubDate></item><item><title><![CDATA[2026-10-12｜自然语言编程日记]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/notes/19">https://taikula.cool/notes/19</a></blockquote><div><blockquote>
<p>同一个账号、同一个版本号，都不一定代表同一份状态。</p></blockquote>
<p>今天有明确结果的开发工作主要在 MovieClaw Windows 客户端。昨天已经发布 1.0.0，今天继续处理实际使用中的观看状态、HDR 播放与更新问题，客户端推进到 1.0.3，最终发布的构建为 1.0.3(64.1)。</p><p>这几件事都需要更准确地辨认对象。同一个账号可以在不同设备上同时播放，当前状态不能挤成一项；同一个版本号也可能重新打包，更新检查不能只比较版本文字。播放则需要区分画质切换失败、原画解码和显示模式，不能把所有报错都归为 HDR 不支持。</p><p>今天的记录里，有代码修改、安装包发布和真机播放证据，也有尚未覆盖的服务端场景。下面把这些边界一起留下，避免把客户端完成误写成整条链路都已验收。</p><h2 id="">当前观看按设备拆开，历史记录按内容合并</h2><p>观看状态的入口原来不够明显，用户也担心功能默认关闭时，客户端看不到其他用户或同账号其他设备的播放情况。这轮先补上首页“正在观看”入口，再调整状态的组织方式：同账号当前播放按设备拆分，历史则按影片或单集合并。</p><p>两类信息回答的是不同问题。当前状态要说明有哪些播放正在发生；历史记录要归纳一个账号看过什么。把设备维度用于当前播放，不意味着历史也要为每台设备重复建立一份。</p><p>随后又处理了离线用户的历史入口。“正在观看”改为胶囊按钮，已授权的离线好友及自己的账号可以进入最近观看记录。查看历史仍受授权条件约束，不是只要用户离线就能查看其记录。账号窗口的视觉对齐和开关颜色也作了修改，让入口和开启状态更容易辨认。</p><p>客户端 1.0.3 与插件 1.0.0 的更新包已经发布，测试中的 Windows 客户端也已更新。但服务端旧插件仍需按说明更换，真实多设备场景还要在对应服务端版本下验证。客户端界面通过检查，不能代替这一项联调结果。</p><h2 id="hdr-">HDR 播放恢复与显示模式要分别确认</h2><p>实际使用中出现了 HDR10 内容无法播放的反馈。这轮修复后，样本在 Windows 上完成真实播放，快进、跳转和暂停正常；后续又增加“原画播放”恢复按钮，降低画质失败时，可以保留进度切回本机解码，避免一次切换失败就失去继续观看的路径。</p><p>这部分同时通过了 289 项测试和软件内更新检查。但截图里另一条 HDR 报错的触发原因尚未确认，不能因为样本恢复播放，就宣布所有 HDR 错误已经解决。原画能播、切换画质能播、报错原因已定位，是三个不同的结论。</p><p>之后的播放截图显示，4K HEVC 使用 d3d11va 硬件解码，掉帧为 0，缓冲为 15.6 秒，mpv IPC 已连接且正在播放。这是当时播放状态正常的证据，不是长时间稳定性或所有片源兼容性的结论。</p><p>界面显示的“HDR 转 SDR”也作了说明：在当前 SDR 显示模式下进行色调映射，属于正常处理，不代表正在进行原生 HDR 输出。判断播放状态时，要把解码、显示模式与错误提示分开看，才不会把正常的色调映射误认为故障。</p><h2 id="103-">1.0.3 加上构建号，更新检查才能辨认重新打包</h2><p>今天多次修复都保持 1.0.3 版本号。如果安装包名称只有版本号，用户很难判断手里的文件包含哪一轮修改。用户因此要求，同版本重新打包时用括号标出构建号，并同步处理软件内更新与下载。</p><p>先确认的播放包对应构建 61.1，之后把当前安装包整理为 1.0.3(64.1)。ZIP 内的安装程序也保留括号构建号，便于下载后辨认，校验文件与更新流程同时保持兼容。</p><p>最终构建已经发布到 Windows 客户端仓库，本地源码同步，测试中的客户端完成更新。自动更新通知、下载和 SHA-256 校验经过实际检查，安装后显示“已是最新版本”。这里的完成依据包括发布产物与客户端更新结果，不只是仓库里出现一个新文件。</p><p>最后还提交了 MovieClaw 上游 PR #815。记录结束时，检查全部通过，等待作者合并。提交和检查通过已经完成，但上游接纳尚未发生，不能把这份修改写成已进入官方版本。</p><h2 id="">下一步仍要沿着真实使用检查</h2><p>今天留下三点认识。账号与设备是不同维度，当前会话和历史记录需要分别组织；版本号与构建号也有不同用途，重复打包要能追溯具体产物；播放截图能证明一个时刻的状态，却不能替代故障复现和长期测试。</p><p>后续需要在服务端更新对应插件后验证多设备观看与授权历史，继续追查尚未确认触发条件的 HDR 报错，并观察画质失败后保留进度恢复原画的行为。构建发布还要等待上游 PR 的审阅与合并结果。今天已发布的是客户端构建，不能把这些待办一起算作完成。</p><h2 id="">隐私说明</h2><p>本文只整理当天可核实的开发与验证结果，省略私人媒体名称、观看记录、账号信息、服务器地址、设备标识、本地路径和凭据相关细节。保留公开项目名、技术术语及必要的版本与测试数字，不包含完整代码或原始日志。</p></div><p style="text-align:right"><a href="https://taikula.cool/notes/19#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/notes/19</link><guid isPermaLink="true">https://taikula.cool/notes/19</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Mon, 12 Oct 2026 12:06:20 GMT</pubDate></item><item><title><![CDATA[代理节点使用指南：申请账号、连接网络和日常使用]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/14f3m2y0t75qv45e1d.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ctf1pfwfhk0aveshca.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/proxy-node-usage-guide">https://taikula.cool/posts/tricks-and-techniques/proxy-node-usage-guide</a></blockquote><div><p>有实际 AI 使用需求的同事，可以申请免费的代理节点。这里提供的是网络连接，ChatGPT、Claude 等平台的账号和付费会员仍需自己管理。</p><h2 id="">一、先向管理员申请账号</h2><p>目前由管理员协助开通，不需要自己注册。申请时准备好：</p><ul><li>希望使用的用户名；</li><li>能正常收邮件的邮箱；</li><li>一张能显示 AI 平台名称和当前付费套餐状态的截图。</li></ul><p>截图只需证明你已经订阅了 AI 服务，不必提供完整账单。发送前请遮挡付款信息和其他敏感内容。</p><p>通过指定的私聊或申请渠道提交，不要把完整账号信息发到大群。按下面的格式填写即可：</p><blockquote><p>姓名／部门：<br/>希望使用的用户名：<br/>邮箱：<br/>主要使用设备：<br/>附件：已遮挡敏感信息的订阅截图。</p></blockquote>
<p>这里申请的是代理面板账号，用户名和邮箱不必与 AI 账号完全相同。是否必须使用公司邮箱，以管理员要求为准。</p><p><strong>管理员只需要订阅证明，不需要你的 AI 密码，也不需要登录你的 AI 账号。</strong></p><p>提交后，等待开通通知。如果用户名重复或邮箱有误，管理员会与你确认；没有收到通知前，不必反复尝试登录。</p><h2 id="">二、登录面板，修改密码并获取订阅链接</h2><p>账号开通后，通过管理员在群内发送的面板入口登录。账号和初始密码以开通通知为准，本文不提供面板地址。</p><p><strong>首次登录后就修改初始密码，不要一直使用临时密码。</strong> 在账号设置或个人资料中寻找修改入口，找不到时联系管理员。</p><p>新密码建议至少 12 位，不与邮箱、AI 账号或其他网站共用。可以用密码管理器生成并保存，避免使用姓名、生日或简单数字组合。</p><p>登录后，找到“订阅链接”“生成订阅”或类似入口，复制自己的完整链接。</p><p><img alt="订阅格式选择菜单（敏感信息已遮挡）" height="1204" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/14f3m2y0t75qv45e1d.png" width="2692"/></p><p>图中展开的是“复制”按钮旁的订阅格式菜单。Shadowrocket 选择同名格式；Nextin 可使用兼容的 Clash 格式。账号、订阅地址、二维码及套餐识别信息已遮挡。</p><p>面板入口用于登录管理，个人订阅链接用于导入客户端，不能混用。客户端需要的是后者，不是面板首页地址。</p><p>面板中的剩余流量和套餐有效期也可以顺手看一下，之后遇到连接问题时，这两项是最先要检查的内容。</p><h2 id="">三、安装客户端，导入订阅并连接</h2><p>面板负责管理账号，真正建立连接的是客户端。只登录面板、复制链接，还没有开启代理。</p><p>按自己的设备选择兼容客户端，并从可信渠道安装。节点服务免费，不代表所有客户端都免费。</p><h3 id="-shadowrocket">使用 Shadowrocket</h3><p>已经安装 Shadowrocket 的，可以直接导入：</p><ol start="1"><li>打开应用，找到添加入口，通常是右上角的“＋”。</li><li>选择订阅类型，例如 <code>Subscribe</code>。</li><li>将个人订阅链接粘贴到 URL 栏，备注填写一个容易辨认的名字。</li><li>保存并更新订阅，等待节点列表出现。</li><li>选择管理员推荐的可用节点，打开连接开关。</li></ol><p>按钮名称可能随版本变化，以实际界面为准。</p><p>首次连接时，系统可能要求添加 VPN 配置。确认请求来自正在使用的可信客户端，再按提示授权。连接后，实际打开需要使用的网站或应用，确认能正常访问。</p><h3 id="-nextin">使用 Nextin</h3><p><a href="https://wiki.nextinnet.com/app-user-guide">Nextin</a> 是一款 Clash/Mihomo 类代理客户端，可以导入订阅、选择节点，并按规则分流。它本身不提供节点，需要使用前面取得的个人订阅链接。</p><p>测试入口：<a href="https://testflight.apple.com/join/5ZKZXJK9">Nextin TestFlight 邀请</a>。</p><p>先安装 TestFlight，再打开邀请链接。有适合自己设备的版本时，接受邀请并安装 Nextin。装好 TestFlight 本身，还不算装好了代理客户端。</p><p>安装前注意：</p><ul><li>当前邀请页的说明写着“tvOS 测试版本”，是否有适合自己设备的版本，以 TestFlight 中实际显示为准。</li><li>按现有安装说明，这个测试方案需要非中国大陆区 Apple 账号，并不是所有 TestFlight 测试都有这个要求。</li><li>测试构建从开发者上传时起，最多可用 90 天。到期后需要新的可用版本；没有兼容版本、名额已满或测试不可用时，联系管理员确认替代方案。</li></ul><p>安装好 Nextin 后：</p><ol start="1"><li>打开应用，在首页“输入站点识别码或订阅链接”的输入框中，粘贴个人订阅链接。</li><li>点击“下一步”，等待下载并解析。</li><li>导入成功后，打开当前订阅的节点列表。</li><li>选择可用节点，打开连接开关。</li><li>按系统提示允许添加 VPN 配置，再打开目标网站测试。</li></ol><p>具体入口可参考 <a href="https://wiki.nextinnet.com/guide/quick-start">Nextin 快速开始</a>。</p><p>如果提示格式不支持，先向管理员确认适配 Nextin 的 Clash/Mihomo 订阅。不要把完整链接交给陌生转换网站。</p><p>Windows 或其他设备，先向管理员确认兼容客户端和订阅格式，不必照搬苹果设备的安装步骤。</p><h2 id="">四、节点和分流怎么选？</h2><h3 id="">节点：先选能正常使用的线路</h3><p>节点就是一条可使用的网络线路。第一次先用管理员推荐的节点，不需要把列表里的每条线路都试一遍。</p><p>如果界面提供延迟测试，可以先测一次。显示“超时”的线路先跳过；延迟数字较小，通常表示测试请求响应较快，但不能据此判断下载速度或某个服务是否可用。最终还是要实际打开目标服务确认。</p><p>在 Clash/Mihomo 配置中，手动选择和自动选择是两种不同的分组方式：</p><ul><li><strong>手动选择</strong>：自己决定使用哪条线路，便于控制当前出口。</li><li><strong>自动选择</strong>：软件按测试结果选择线路，之后可能发生变化。</li></ul><p>不是选了“自动”就一定更适合 AI 使用。<a href="https://wiki.metacubex.one/config/proxy-groups/select/">手动选择说明</a>、<a href="https://wiki.metacubex.one/config/proxy-groups/url-test/">自动选择说明</a></p><h3 id="">分流：不同请求可以走不同的连接方式</h3><p>分流就是按照配置，决定哪些请求直连、哪些走代理，以及使用哪个代理分组。</p><p>它不是软件自动判断“国内网站全部直连、国外网站全部代理”。实际怎么走，取决于导入的规则。</p><p>常见模式可以这样理解：</p><table><thead><tr><th> 模式 </th><th> 作用 </th></tr></thead><tbody><tr><td> <strong>规则／Rule</strong> </td><td> 按配置分配流量，可以直连，也可以使用不同代理分组 </td></tr><tr><td> <strong>全局／Global</strong> </td><td> 客户端接管的流量统一使用 GLOBAL 分组选择的出口 </td></tr><tr><td> <strong>直连／Direct</strong> </td><td> 不使用代理节点，直接走原本的网络 </td></tr></tbody></table><p>模式入口和名称以客户端实际界面为准。Clash/Mihomo 的全局模式还需要在 GLOBAL 分组中选择出口，不是只切换模式就完成了设置。<a href="https://wiki.metacubex.one/config/general/#运行模式">模式说明</a></p><p><strong>日常优先使用管理员提供并确认适合 AI 服务的规则配置。</strong> 全局模式主要用于短时排查，具体方法见后面的故障处理。</p><h3 id="nextin-">Nextin 里有多个分组，该改哪一个？</h3><p>导入配置后，你可能看到“代理选择”“AI”“OpenAI”“Claude”等分组。这些名字由订阅配置决定，不是每份配置都有。</p><p>规则会先把请求交给对应分组，再由分组决定使用哪个节点。因此，选了主代理节点，不一定就改变了所有服务的线路：</p><ul><li>如果 AI 分组选择的是“代理选择”，它会跟随主代理分组。</li><li>如果 AI 分组单独选了某条节点，只改主代理分组，不会影响它。</li><li>如果相关请求被规则设为直连，就不会使用你选的代理节点。</li></ul><p>使用 AI 时，如果配置里有对应分组，就打开它，确认选择的是管理员推荐的节点或代理分组。没有对应分组时，先沿用现有配置，向管理员确认，不必自己从头写规则。<a href="https://wiki.metacubex.one/config/rules/">路由规则说明</a></p><p>第一次使用，也不用急着修改“自定义规则”“订阅文件覆写”或“订阅模板覆写”。这些功能会改变分流方式，先把现有配置用明白，再考虑调整。<a href="https://wiki.nextinnet.com/guide/rules">Nextin 规则说明</a></p><h3 id="-claude-">使用 Claude 时，尽量保持连接稳定</h3><p>现有使用建议是：不要让同一个 Claude 账号同时通过两个不同节点持续对话，尤其是手机、电脑使用地区差异很大的线路，还频繁切换。</p><p>找到正常可用的线路后，先保持使用。故障需要换节点时，停止当前请求，再重新连接；出现验证或异常提示时，不要连续更换大量节点反复重试。</p><p>这是稳定连接、方便排错的建议。<strong>“两个节点同时用就一定封号”没有依据，“固定一个节点就绝对安全”也不成立。</strong></p><h2 id="">五、流量和订阅链接怎么管理？</h2><h3 id="-100gb">每人每月 100GB，留意后台消耗</h3><p><img alt="面板流量信息（敏感信息已遮挡）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ctf1pfwfhk0aveshca.png"/></p><p>上方四个卡片依次显示总配额、已用流量、剩余流量和使用率。图中数值只是界面示例，你自己的剩余流量以面板为准。</p><p>流量统计的是传输的数据量，不是使用时长。文字聊天通常消耗较少，上传文件、语音、图片、视频和大文件下载会消耗更多，实际以面板为准。</p><p>尽量用于工作和 AI 使用需求，避免长时间高清视频、大型游戏下载、持续测速、批量下载，以及后台相册或云备份同步。不要转借账号，或让大量设备同时使用。</p><p>套餐有效期和每月流量重置是两回事。套餐还有效，不代表本月额度没有用完；具体重置日期以面板或管理员说明为准。</p><p>流量突然掉得很快时，先检查是否开启了全局模式，以及后台是否有下载、更新或同步任务。找不到原因时，也要考虑订阅链接是否泄露。</p><p>确实有工作需要补充额度，可以向管理员说明用途、当前剩余流量、消耗原因和所需额度。管理员可视情况协助重置，但总资源有限，<strong>不是无限使用，也不保证随时恢复额度</strong>。</p><h3 id="">订阅链接按密码保管</h3><p>很多订阅链接拿到后就能获取节点配置，不会再要求输入面板密码。别人可能因此使用你的服务、消耗你的流量。</p><p>不要把完整链接或二维码放进公开群、论坛和公开文档，也不要上传给 AI 工具分析。截图时记得遮挡。</p><p>怀疑泄露后，联系管理员撤销或更换。只修改面板密码，不一定能让旧订阅链接失效。</p><h2 id="-ai-">六、保护 AI 账号和工作资料</h2><p>邮箱往往是接收登录邮件和找回账号的入口。邮箱与 AI 账号使用不同密码，平台支持时开启多因素认证，并保存好恢复码。通过 Google、Apple 登录的，也要保护对应账号。</p><p>不要交出验证码、登录邮件链接、Cookie 或 API Key。Cookie 是登录凭证，泄露后别人可能直接使用你的账号。在公共设备上使用后，记得退出登录。</p><p>不要为了安装客户端交出 Apple 账号密码，也不要随便安装“防封”“解锁”插件。要求读取所有网页、导出登录状态或上传凭证的工具，尤其要谨慎。</p><p>AI 平台有各自的服务地区和使用规则。在支持地区之外访问，可能面临账号限制；代理连接不能替代这些要求，也不能保证账号安全。具体以 <a href="https://help.openai.com/en/articles/7947663-chatgpt-plus">OpenAI</a> 和 <a href="https://support.claude.com/en/articles/8114491-get-started-with-claude">Claude</a> 的官方说明为准。</p><p>上传工作资料前，仍需确认是否允许上传，并按信息管理要求脱敏，例如去掉客户联系方式、合同敏感条款、内部凭证和代码中的密钥。能连接 AI，不代表获得了上传内部机密资料的权限。</p><h2 id="">七、不能用时，按问题排查</h2><h3 id="">面板登录失败</h3><p>确认账号是否已经开通，入口是否来自管理员，以及登录标识和密码是否正确。不要反复猜密码，联系管理员核实。</p><h3 id="">导入后没有节点</h3><p>检查是否复制了完整的个人订阅链接，有没有误用面板首页地址，是否更新了订阅，以及客户端是否支持该格式。套餐状态和原网络也要一起检查。</p><h3 id="-ai-">显示已连接，但 AI 打不开</h3><p>先确认设备本身能正常上网，再检查剩余流量、套餐有效期、当前节点和对应代理分组，同时确认没有运行其他 VPN 或代理软件。</p><p>必要时，可以短暂切到全局模式，并确认全局出口使用可用节点：</p><ul><li><strong>全局能用，规则模式不能用</strong>：优先检查分流规则和对应分组。</li><li><strong>两种模式都不能用</strong>：继续检查节点、套餐状态和平台的具体报错。</li></ul><p>每次只改一项，再测试。不要同时换节点、改规则和更新订阅，否则即使恢复了，也很难知道是哪一步解决的。</p><p>排查结束后切回规则模式，避免视频、下载和后台同步持续经过代理。</p><h3 id="">手机能用，电脑不能用</h3><p>电脑通常需要单独安装和配置客户端。即使电脑连接手机热点，也不能默认手机的代理会共享给电脑。</p><h3 id="nextin-">Nextin 测试版打不开</h3><p>先到 TestFlight 查看测试版本是否到期、是否有更新。这类问题不一定与节点有关。</p><h3 id="ai-">AI 提示异常活动或账号暂停</h3><p>停止反复登录和频繁切换，保存错误提示，检查平台发来的安全邮件，通过官方支持处理。</p><p>“连接失败”“登录失败”“额度用完”“地区不支持”是不同问题，不能都靠换节点解决。管理员可以协助检查网络，但 AI 账号是否恢复由平台决定。</p><h3 id="">找不到原因时，怎样求助？</h3><p>按下面的格式提供信息：</p><blockquote><p>设备／系统：<br/>客户端名称：<br/>问题发生时间：<br/>当前节点名称：<br/>无法使用的服务及具体报错：<br/>剩余流量：<br/>已尝试的操作：<br/>附件：已遮挡敏感信息的截图。</p></blockquote>
<p>具体报错比一句“不能用”更容易解决。确需核查订阅时，通过管理员指定的私密渠道处理。</p><p><em>面板操作按已有截图整理，具体菜单、客户端版本及测试入口可能调整，以实际页面和管理员最新说明为准。</em></p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/proxy-node-usage-guide#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/proxy-node-usage-guide</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/proxy-node-usage-guide</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Mon, 12 Oct 2026 06:07:26 GMT</pubDate></item><item><title><![CDATA[自用Docker项目部署分享]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/z35p77umjw1qj6q9zv.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/y09enecx7wmff7s01g.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/d4j2d199dwf1fbhda7.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/gg906jltyqghvy2n84.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/zi-yong-dockerxiang-mu-bu-shu-fen-xiang">https://taikula.cool/posts/tricks-and-techniques/zi-yong-dockerxiang-mu-bu-shu-fen-xiang</a></blockquote><div><p>这里整理了一份自用 Docker 项目清单，部分配置参考 <a href="https://docs.nnk.im/guide/NAS/Docker-Project-Deployment">部署汇总</a>。不同项目的维护状态和版本差异很大，不能保证所有示例在 2026 年都能直接运行。</p><p>清单区分两类配置：标为“文档核对”的条目参考当前项目说明；其他条目是历史配置，明确标为待复测。镜像、凭据、端口和初始化方式都需要在部署前确认。没有拉起这些容器，也没有迁移任何数据库。</p><p>不同项目的同名宿主机端口会冲突。下面各段是独立项目，不要把整篇拼成一个 Compose 文件。<code>latest</code> 只是示例选择；实际落地应核对发行与架构，固定已验证版本，保留备份与回退条件。</p>
<h2 id="">常用参数</h2><p>Compose V2 使用 <code>docker compose</code>。顶层 <code>version</code> 已过时，本文配置不再添加它。<code>restart: &quot;no&quot;</code> 不自动重启；<code>on-failure</code> 仅失败时重启；<code>always</code> 与 <code>unless-stopped</code> 对手动停止后重启守护进程的行为不同。重启策略不等于健康检查，也不保证应用已经可以对外服务。</p><p>端口左边是宿主机入口，右边是容器监听端口。默认不加地址的发布通常会绑定所有接口；本文普通 Web 服务示例改为 <code>127.0.0.1</code>，从别的机器访问需另行配置可信 LAN、SSH 转发或有认证的反向代理。DNS、硬件与 host 网络类服务不能生搬这一规则。</p><p><img alt="说明图：Docker 端口与卷：左边、右边不要看反" height="720" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/z35p77umjw1qj6q9zv.png" width="1400"/></p><p>数据库、配置和上传文件要持久化；挂载目录、用户权限和数据备份是部署的一部分。<code>.env</code> 只是避免把值硬编码到文章，不是加密保险箱，不能提交到公开仓库。</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">docker compose config --quiet
docker compose up -d
docker compose logs --tail=100
</code></pre>
<p>语法检查通过不等于镜像存在、应用配置正确或数据能迁移。这里没有实际执行这些部署命令。</p>
<h2 id="cloudflareflaresolverr">cloudflare穿透工具flaresolverr</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
    - LOG_LEVEL=info
    - TZ=Asia/Shanghai
    ports:
    - 127.0.0.1:8191:8191
    restart: unless-stopped
</code></pre>
<h2 id="mind-map">思维导图mind-map</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  mindmap:
    container_name: mindmap
    image: shuiche/mind-map
    ports:
    - 127.0.0.1:6679:8080
    environment:
      TZ: Asia/Shanghai
    restart: always
</code></pre>
<h2 id="">小雅阿里资源</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  xiaoya:
    container_name: xiaoya
    image: xiaoyaliu/alist
    ports:
    - 127.0.0.1:3579:80
    volumes:
    - /home/zsg/docker/xiaoya:/data
    - /home/zsg/docker/xiaoya/alist:/opt/alist/data
    environment:
      TZ: Asia/Shanghai
    restart: always
</code></pre>
<h2 id="snapdrop">Snapdrop网页文件传输</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  snapdrop:
    image: lscr.io/linuxserver/snapdrop:latest
    container_name: snapdrop
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - /home/zsg/docker/snapdrop:/config
    ports:
    - 127.0.0.1:7635:80
    restart: unless-stopped
</code></pre>
<h2 id="web-check">web-check网站测试</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  webcheck:
    container_name: webcheck
    restart: unless-stopped
    image: lissy93/web-check
    ports:
    - 127.0.0.1:3084:3000
    environment:
    - TZ=Asia/Shanghai
</code></pre>
<h2 id="">迅雷</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  xunlei:
    image: cnk3x/xunlei:latest
    privileged: true
    container_name: xunlei
    hostname: nas
    network_mode: host
    environment:
    - XL_WEB_PORT=4321
    - XL_BA_USER=user
    - XL_BA_PASSWORD=${XL_BA_PASSWORD:?set XL_BA_PASSWORD in a private .env file}
    volumes:
    - /home/zsg/docker/xunlei/data:/xunlei/data
    - /home/zsg/docker/xunlei/downloads:/xunlei/downloads
    restart: unless-stopped
</code></pre>
<h2 id="fail2ban">Fail2ban</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  fail2ban:
    container_name: fail2ban
    restart: &#x27;no&#x27;
    network_mode: host
    volumes:
    - /home/zsg/docker/fail2ban/data:/data
    - /var/log:/var/log:ro
    image: crazymax/fail2ban:latest
    environment:
    - TZ=Asia/Shanghai
    - F2B_LOG_TARGET=STDOUT
    - F2B_LOG_LEVEL=INFO
    - F2B_DB_PURGE_AGE=1d
    cap_add:
    - NET_ADMIN
    - NET_RAW
</code></pre>
<h2 id="dsm">群晖DSM</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-text lang-text"><code class="language-text lang-text">docker network create -d macvlan \
     --subnet=10.0.0.0/24 \
     --gateway=10.0.0.1 \
     --ip-range=10.0.0.160/28 \
     -o parent=eth0 vdsm
 # 先建立macvlan网络，eth0要改成你的网卡地址
 # 以上按照你的局域网ip改
</code></pre>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  synology-dsm:
    container_name: dsm
    restart: always
    environment:
      TZ: Asia/Shanghai
      CPU_CORES: &#x27;2&#x27;
      RAM_SIZE: 1024M
      DISK_SIZE: 16G
      ALLOCATE: N
      DHCP: Y
    devices:
    - /dev/kvm
    - /dev/vhost-net
    device_cgroup_rules:
    - c *:* rwm
    cap_add:
    - NET_ADMIN
    ports:
    - 127.0.0.1:5000:5000
    volumes:
    - /home/zsg/docker/dsm:/storage
    stop_grace_period: 1m
    image: kroese/virtual-dsm:latest
    networks:
      vdsm:
        ipv4_address: 10.0.0.160
networks:
  vdsm:
    external: true
</code></pre>
<h2 id="authelia">单点登录Authelia</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>Compose 只是容器结构，不包含完整认证、TLS、路由或业务配置。初始化和访问控制完成前，不要把入口开放给不可信网络。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  authelia:
    container_name: authelia
    image: authelia/authelia:latest
    restart: unless-stopped
    ports:
    - 127.0.0.1:19091:9091
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - /home/zsg/docker/authelia/config:/config
</code></pre>
<h2 id="frp">内网穿透FRP</h2><p>frps 在公网，frpc 在内网。不要混用第三方镜像、旧 INI 与不同版本的路径。匹配版本、端口、鉴权和 TLS 的完整配置见本站的《Frp搭建以及配置》。参考：<a href="https://github.com/fatedier/frp">官方项目</a>。不要直接开放路由器管理入口。</p>
<h2 id="rustdesk">RustDesk远程桌面</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>远程桌面客户端需要到达对应 TCP/UDP 端口，不能用普通 HTTP 反代替代；本条保留历史端口结构，部署前还要按上游核对服务端密钥、数据共享与网络限制。不要向不可信网络暴露未配置好的远控入口。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  hbbs:
    container_name: rustdesk-hbbs
    ports:
    - 21115:21115
    - 21116:21116
    - 21116:21116/udp
    - 21118:21118
    image: rustdesk/rustdesk-server
    command: hbbs
    volumes:
    - /home/zsg/docker/rustdesk/hbbs:/root
    restart: always
  hbbr:
    container_name: rustdesk-hbbr
    ports:
    - 21117:21117
    - 21119:21119
    image: rustdesk/rustdesk-server
    command: hbbr
    volumes:
    - /home/zsg/docker/rustdesk/hbbr:/root
    restart: always
</code></pre>
<h2 id="stirling-pdf">Stirling PDF工具箱</h2><p>当前官方文档使用下面的镜像和数据路径。旧 <code>frooodle/s-pdf</code> 配置不再作为新部署示例：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  stirling-pdf:
    image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:8080:8080&quot;
    volumes:
      - ./stirling-data:/configs
</code></pre>
<p>先在受控入口完成初始化与账户设置，不要关闭登录后直接开放公网。OCR、存储和附加能力按当前版本继续配置；不沿用旧环境变量来承诺全部功能。参考：<a href="https://docs.stirlingpdf.com/Installation/Docker%20Install/">官方 Docker 安装</a>。未实机部署。</p>
<h2 id="alist">Alist</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  alist:
    restart: always
    volumes:
    - ./docker/alist:/opt/alist/data
    - /home:/home/alist
    ports:
    - 127.0.0.1:5244:5244
    environment:
    - TZ=Asia/Shanghai
    container_name: alist
    image: xhofe/alist:latest
</code></pre>
<h2 id="wiseapp">思维导图wiseapp</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-text lang-text"><code class="language-text lang-text">mkdir ./wiseapp
 docker run --name wiseapp -d --mount type=bind,source=./wiseapp,target=/var/lib/wise-db wisemapping/wisemapping:latest
 docker run --name wiseapp -d -v ./wiseapp:/var/lib/wise-db wisemapping/wisemapping:latest
 docker cp wiseapp:/var/lib/wisemapping/db ./wiseapp
 docker stop wiseapp;docker rm wiseapp
 docker run --mount type=bind,source=./wiseapp/db,target=/var/lib/wisemapping/db -it --rm -p 6080:8080 wisemapping/wisemapping:latest
 docker run --name wiseapp -v ./wiseapp/db:/var/lib/wisemapping/db -d -p 6080:8080 wisemapping/wisemapping:latest
 
 默认账号：test@wisemapping.org密码test
 默认账号：admin@wisemapping.org密码test
</code></pre>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  wisemapping:
    container_name: wiseapp
    restart: always
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./wiseapp/db:/var/lib/wisemapping/db
    ports:
    - 127.0.0.1:6080:8080
    image: wisemapping/wisemapping:latest
</code></pre>
<h2 id="nginx-php">静态站点nginx-php</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  nginx:
    container_name: nginx
    ports:
    - 127.0.0.1:3387:80
    environment:
    - TZ=Asia/Shanghai
    restart: always
    volumes:
    - ./zdj:/usr/share/nginx/html
    image: gindex/nginx-php
</code></pre>
<h2 id="umami">网站访问统计Umami</h2><p>以当前官方 Compose 为基准，应用通过内部网络访问 PostgreSQL，不把数据库端口发布到宿主机。下面是新空实例的结构示例，不是旧数据库的升级命令：</p><p><img alt="说明图：应用与数据库：数据库不用公开端口" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/y09enecx7wmff7s01g.png"/></p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:3000:3000&quot;
    environment:
      DATABASE_URL: &quot;postgresql://umami:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}@db:5432/umami&quot;
      APP_SECRET: &quot;${UMAMI_APP_SECRET:?set UMAMI_APP_SECRET}&quot;
      TWO_FACTOR_ENCRYPTION_KEY: &quot;${UMAMI_2FA_KEY:?set UMAMI_2FA_KEY}&quot;
    depends_on:
      db:
        condition: service_healthy
    init: true
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: &quot;${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}&quot;
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}&quot;]
      interval: 5s
      timeout: 5s
      retries: 5
volumes:
  umami-db-data:
</code></pre>
<p>密码如果用于连接 URI，选用 URI 安全的高强度随机字符，或正确编码特殊字符。2FA 加密密钥按项目要求生成 64 位十六进制值，保存好后不要随意轮换。初始化方式以当前项目为准，不要手工导入来源或版本不匹配的固定 SQL 文件。PostgreSQL 主版本变更必须做独立迁移，不能直接让新版本打开旧数据目录。</p><p>参考：<a href="https://github.com/umami-software/umami/blob/master/docker-compose.yml">官方 Compose</a>。未实机部署。</p>
<h2 id="webssh">WebSSH</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  webssh:
    container_name: webssh
    restart: &#x27;no&#x27;
    ports:
    - 127.0.0.1:5032:5032
    environment:
    - PUID=0
    - PGID=0
    - TZ=Asia/Shanghai
    image: jrohy/webssh
</code></pre>
<h2 id="memos">备忘录memos</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  memos:
    container_name: memos
    restart: always
    environment:
    - TZ=Asia/Shanghai
    ports:
    - 127.0.0.1:5230:5230
    volumes:
    - ./memos/:/var/opt/memos
    image: neosmemo/memos:latest
</code></pre>
<h2 id="chatgpt-web">Chatgpt-web</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  chatgpt-web:
    container_name: chatgpt
    restart: always
    image: yidadaa/chatgpt-next-web
    ports:
    - 127.0.0.1:3355:3000
    environment:
    - TZ=Asia/Shanghai
    - OPENAI_API_KEY=${OPENAI_API_KEY:?set OPENAI_API_KEY in a private .env file}
    - CODE=${CODE:?set CODE in a private .env file}
    - BASE_URL=https://api.openai.com
</code></pre>
<h2 id="traccar">Traccar位置追踪</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<p>导出traccar.xml默认文件</p><pre class="language-text lang-text"><code class="language-text lang-text">docker run \
 --rm \
 --entrypoint cat \
 traccar/traccar:latest \
 /opt/traccar/conf/traccar.xml &gt; ./traccar/traccar.xml
</code></pre>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  traccar:
    container_name: traccar
    restart: always
    environment:
    - TZ=Asia/Shanghai
    ports:
    - 127.0.0.1:3697:8082
    - 5000-5150:5000-5150
    - 5000-5150:5000-5150/udp
    volumes:
    - ./traccar/data:/opt/traccar/data:rw
    - ./traccar/logs:/opt/traccar/logs:rw
    - ./traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro
    image: traccar/traccar:latest
</code></pre>
<h2 id="traefik">反代服务器Traefik</h2><p>原段落除了 YAML 引号缺失，还只有容器配置，没有入口点、路由、证书与访问控制配置，不能作为完整的 HTTPS 反代教程。它也直接挂载了 Docker socket，权限需要单独评估。</p><p>当前部署请从 <a href="https://doc.traefik.io/traefik/">Traefik 官方指南</a> 选择匹配版本与配置方式，先在测试环境核对 entryPoints、providers、TLS 与路由，再接入真实域名。DNS 服务商 API 密钥只放在自己的私有配置里，不粘贴到公开文章。本文不再保留不完整且误导性的旧堆栈。</p>
<h2 id="reader">Reader阅读</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  reader:
    restart: always
    container_name: reader
    environment:
    - SPRING_PROFILES_ACTIVE=prod
    - READER_APP_SECURE=true
    - READER_APP_SECUREKEY=282828
    - READER_APP_INVITECODE=33655
    - TZ=Asia/Shanghai
    volumes:
    - ./reader/log:/log
    - ./reader/storage:/storage
    ports:
    - 127.0.0.1:8769:8080
    image: hectorqin/reader
</code></pre>
<h2 id="draw">绘图Draw</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  drawio:
    container_name: draw
    ports:
    - 127.0.0.1:8322:8080
    environment:
    - TZ=Asia/Shanghai
    restart: always
    image: jgraph/drawio
</code></pre>
<h2 id="rssfreshrss">RSS订阅FreshRSS</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  freshrss:
    container_name: freshrss
    environment:
    - CRON_MIN=*/45
    - TZ=Asia/Shanghai
    ports:
    - 127.0.0.1:5655:80
    volumes:
    - ./freshrss:/var/www/html/data
    image: freshrss/freshrss
</code></pre>
<h2 id="esp32home">ESP32HOME</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  esphome:
    container_name: esphome
    ports:
    - 127.0.0.1:6052:6052
    environment:
    - http_proxy=http://10.0.0.5:7890
    - https_proxy=http://10.0.0.5:7890
    - no_proxy=localhost,10.0.0.5,10.0.0.1,192.168.1.1,127.0.0.1,.local,localhost
    image: esphome/esphome
</code></pre>
<h2 id="">手绘白板</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  excalidraw:
    container_name: excalidraw
    ports:
    - 127.0.0.1:8099:80
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./excalidraw:/app/web
    restart: always
    image: excalidraw/excalidraw
</code></pre>
<h2 id="nginxphp">Nginx+PHP</h2><p>PHP 5.6、7.3、8.0 曾被用于并排运行不同站点，这些分支已不在当前支持范围内。保留“不同站点可以使用不同 PHP-FPM”的思路，但不再提供这些旧版本的新部署清单。</p><p>新应用先选仍受支持、且依赖兼容的 PHP 版本，再配置 Nginx 的 FastCGI 上游、站点目录与权限。迁移旧站点需要在测试环境检查扩展、语法与数据库兼容，不是换镜像标签就完成升级。参考：<a href="https://www.php.net/supported-versions.php">PHP 支持周期</a>。</p>
<h2 id="phpmyadmin">phpmyadmin</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-text lang-text"><code class="language-text lang-text"># 任意服务器
 docker run --name phpmyadmin -d -e PMA_ARBITRARY=1 -p 18080:80 phpmyadmin
 # 指定服务器及端口
 docker run --name phpmyadmin -d -e PMA_HOST=127.0.0.1 -e PMA_PORT=3306 -p 18080:80 phpmyadmin
</code></pre>
<h2 id="mysql">MySQL</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  mysql:
    container_name: mysql
    restart: always
    ports:
    - 127.0.0.1:3306:3306
    volumes:
    - ./mysql/data:/var/lib/mysql
    environment:
    - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:?set MYSQL_ROOT_PASSWORD in a private .env file}
    - TZ=Asia/Shanghai
    image: mysql
</code></pre>
<h2 id="linux">Linux命令查询</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  web:
    image: stilleshan/linux-command
    container_name: linux-command
    ports:
    - 127.0.0.1:7326:80
    restart: always
</code></pre>
<h2 id="docker-proxy">docker-proxy</h2><p>旧配置发布无认证的 2375，并允许大量写操作，风险过高，不再保留为可照抄的部署方法。Docker API 与 socket 可以带来宿主机级权限，给 socket 挂载加 <code>:ro</code> 不会把 API 变成只读。</p><p><img alt="说明图：Docker socket：不是普通的只读文件" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/d4j2d199dwf1fbhda7.png"/></p><p>确需读取容器状态时，可以评估受限 socket proxy：只接入专用内部网络、不发布 2375、默认关闭 POST，逐项开放确实需要的读接口。这仍是敏感接口，不是安全隔离的万能边界。参考：<a href="https://github.com/Tecnativa/docker-socket-proxy">docker-socket-proxy 项目</a>。具体集成需按调用方复核，本文不提供全权限配置。</p>
<h2 id="">文件快递柜</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  filecodebox:
    container_name: filecodebox
    restart: always
    ports:
    - 127.0.0.1:12345:12345
    volumes:
    - ./FileCodeBox/:/app/data
    image: lanol/filecodebox:latest
</code></pre>
<h2 id="mqtt">MQTT</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>Compose 只是容器结构，不包含完整认证、TLS、路由或业务配置。初始化和访问控制完成前，不要把入口开放给不可信网络。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  eclipse-mosquitto:
    container_name: MQTT
    restart: always
    ports:
    - 127.0.0.1:1883:1883
    - 127.0.0.1:9001:9001
    volumes:
    - ./mqtt/conf:/mosquitto/config
    - ./mqtt/data:/mosquitto/data
    - ./mqtt/log:/mosquitto/log
    image: eclipse-mosquitto
</code></pre>
<h2 id="speedtest">测速speedtest</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  speedtest:
    container_name: speedtest
    restart: always
    ports:
    - 127.0.0.1:12345:80
    image: adolfintel/speedtest
</code></pre>
<h2 id="">订阅转换</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  subweb:
    container_name: subweb
    restart: always
    ports:
    - 127.0.0.1:58080:80
    image: careywong/subweb:latest
  subconverter:
    container_name: sub
    restart: always
    ports:
    - 127.0.0.1:25500:25500
    image: tindy2013/subconverter:latest
</code></pre>
<h2 id="docker">Docker命令转堆栈</h2><p>带特殊字符的挂载路径应加引号；下面的镜像和页面功能仍属于未实机复测的历史配置。转换工具生成的 Compose 也要自己复核权限、卷、端口和凭据，不能转换后就当作安全部署方案。</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  composerize:
    image: alcapone1933/composerize
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:9080:80&quot;
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./composerize:/var/www
</code></pre>
<h2 id="docker">Docker更新通知</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  diun:
    container_name: diun
    restart: always
    environment:
    - TZ=Asia/Shanghai
    - LOG_LEVEL=info
    - LOG_JSON=false
    - DIUN_PROVIDERS_DOCKER=true
    - DIUN_PROVIDERS_FILE_FILENAME=/custom-images.yml
    volumes:
    - ./diun:/data
    - ./diun/custom-images.yml:/custom-images.yml:ro
    - ./diun/diun.yml:/diun.yml:ro
    - /var/run/docker.sock:/var/run/docker.sock
    image: crazymax/diun:latest
</code></pre>
<h2 id="homepage">看板homepage</h2><p>Homepage 与 Diun 是不同的项目，部署时应使用 Homepage 自己的镜像，并配置允许的访问 Host：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:3000:3000&quot;
    environment:
      HOMEPAGE_ALLOWED_HOSTS: &quot;localhost:3000,127.0.0.1:3000&quot;
    volumes:
      - ./config:/app/config
</code></pre>
<p>域名访问时把允许列表改成实际域名。这个最小示例没有接入 Docker socket；需要容器状态集成时，另外评估访问权限。参考：<a href="https://gethomepage.dev/installation/docker/">官方 Docker 说明</a>。配置按文档修正，未实机运行。</p>
<h2 id="trilium">trilium笔记</h2><p><code>nriver/trilium-cn</code> 是第三方中文镜像。当前项目由 TriliumNext/Trilium 维护，不能把旧镜像与现在的官方发行混为一谈。</p><p>新部署按 <a href="https://docs.triliumnotes.org/user-guide/setup/server/installation/docker">官方 Docker 指南</a> 选择 <code>triliumnext/trilium</code> 的已核对版本，持久化 <code>/home/node/trilium-data</code>。先核对服务端与客户端同步版本再升级，不要直接换成 latest 去打开已有笔记库。旧库迁移需要单独备份和验证，本文不把它改写成已经完成的操作。</p>
<h2 id="filebrowser">FileBrowser文件管理</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  filebrowser:
    container_name: filebrowser
    ports:
    - 127.0.0.1:9696:80
    environment:
    - TZ=Asia/Shanghai
    - PUID=0
    - PGID=0
    volumes:
    - .:/Disk
    - ./filebrowser/database.db:/database.db
    - ./filebrowser/filebrowser.json:/.filebrowser.json
    - ./filebrowser/cache:/cache
    image: filebrowser/filebrowser
</code></pre>
<p><a href="https://nanako-1253183981.cos.ap-guangzhou.myqcloud.com/vitepress/file/%E8%87%AA%E7%94%A8docker%E5%88%86%E4%BA%AB/filebrowser.json">filebrowser.json</a></p>
<h2 id="vscode">VSCode</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  code-server:
    container_name: vscode
    environment:
    - TZ=Asia/Shanghai
    - PUID=0
    - PGID=0
    - PASSWORD=${PASSWORD:?set PASSWORD in a private .env file}
    - DEFAULT_WORKSPACE=/000
    ports:
    - 127.0.0.1:5797:8443
    volumes:
    - ./vscode:/config
    - .:/000
    restart: always
    image: linuxserver/code-server
</code></pre>
<h2 id="">百度脑图</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  kityminder:
    container_name: mind
    restart: always
    ports:
    - 127.0.0.1:2333:80
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./mind:/data
    image: xinyewdz/kityminder
</code></pre>
<h2 id="rsspush">RSSPush</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  rsspush:
    container_name: rsspush
    ports:
    - 127.0.0.1:6863:8000
    volumes:
    - ./rsspush:/rsspush/api/data
    environment:
    - TZ=Asia/Shanghai
    - RSS_BASE=http://10.0.0.9:8556
    - ADMIN_KEY=123456
    image: easychen/rsspush
</code></pre>
<p>‍</p>
<h2 id="ocr">OCR文字识别</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  trwebocr:
    ports:
    - 127.0.0.1:18089:8089
    restart: always
    container_name: trwebocr
    image: mmmz/trwebocr
</code></pre>
<h2 id="mt-photo">相册（MT Photo）</h2><p>旧镜像名 <code>mtphotos/mt-photos/photosync</code> 写错了；当前项目发布的是 <code>mtphotos/mt-photos</code>。下面只说明容器结构，授权和相册导入按项目要求处理：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  mt-photos:
    image: mtphotos/mt-photos:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:8063:8063&quot;
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./mt_photos/config:/config
      - ./mt_photos/upload:/upload
</code></pre>
<p>不要添加服务未使用的 CIFS 卷，也不要把共享账户密码写入公开配置。已有照片目录与上传目录要分清，挂载外部相册前先看当前文档。参考：<a href="https://hub.docker.com/r/mtphotos/mt-photos">项目发布镜像</a>。未实机部署。</p>
<h2 id="adguard-home">ADGuard Home</h2><p>旧配置里的 <code>image: run</code> 不是有效的项目镜像，应该是 <code>adguard/adguardhome</code>。DNS 服务需要让指定局域网设备可达，所以不能把 53 端口只绑定回环地址后宣称整个 LAN 都能用。</p><p>新部署按 <a href="https://github.com/AdguardTeam/AdGuardHome/wiki/Docker">官方 Docker 指南</a> 设置 work、conf 两个持久化目录和所需端口，先检查宿主机 53 是否被现有 DNS 服务占用。3000 通常用于首次设置，设置后的管理端口以实际选择为准。不要不看现有网络就停掉系统 DNS，也不要把 DNS 和管理面板无保护开放到公网。本文暂不提供一组声称适用于所有网络的端口映射。</p>
<h2 id="smartdns">SmartDNS</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  smartdns:
    network_mode: host
    hostname: smartdns
    container_name: smartdns
    restart: always
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./smartdns:/smartdns
    image: ghostry/smartdns
</code></pre>
<h2 id="xteve">xTeVe</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  xteve:
    container_name: xteve
    restart: always
    hostname: xteve
    ports:
    - 127.0.0.1:34400:34400
    logging:
      options: max-size=10m,max-file=3
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./xteve/xteve:/root/.xteve:rw
    - ./xteve/config:/config:rw
    - ./xteve/tmp:/tmp/xteve:rw
    - ./xteve/tvheadend/data:/TVH
    image: alturismo/xteve
</code></pre>
<h2 id="siyuan">思源笔记（siyuan）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  siyuan:
    container_name: siyuan
    restart: always
    volumes:
    - ./siyuan:/siyuan
    ports:
    - 127.0.0.1:6806:6806
    image: b3log/siyuan
</code></pre>
<h2 id="uptime-kuma">网页监控（uptime-kuma）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  uptime-kuma:
    restart: always
    environment:
    - TZ=Asia/Shanghai
    ports:
    - 127.0.0.1:3001:3001
    volumes:
    - ./uptime-kuma/data:/app/data
    container_name: uptime-kuma
    image: louislam/uptime-kuma:latest
</code></pre>
<h2 id="movierobot">影音机器人（movierobot）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  movie-robot:
    restart: always
    container_name: movie-robot
    ports:
    - 127.0.0.1:1329:1329
    volumes:
    - ./movie-robot:/data
    - /path/to/media:/media
    environment:
    - LICENSE_KEY=xxxxxxxxxx
    image: yipengfei/movie-robot
</code></pre>
<h2 id="overseerr">overseerr</h2><p>第三方 Overseerr 镜像与当前官方发行要分开核对。当前相关项目已转向 Seerr，官方镜像发布为 <code>ghcr.io/seerr-team/seerr</code> 或 <code>seerr/seerr</code>，不能把旧容器名和新项目无条件互换。</p><p>新部署参考 <a href="https://docs.seerr.dev/getting-started/">Seerr 入门文档</a>；旧 Overseerr 实例先看对应迁移说明、备份配置与数据库，再决定是否迁移。这里只介绍部署入口，没有实际执行媒体服务迁移。</p>
<h2 id="dockerportainer">docker可视化管理（portainer）</h2><p>当前 Portainer CE 的主要管理入口是 HTTPS 9443。以下入口仅监听本机，远程使用需配合安全转发或经过验证的反向代理：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  portainer:
    image: portainer/portainer-ce:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:9443:9443&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
volumes:
  portainer_data:
</code></pre>
<p>Portainer 通过 Docker socket 管理宿主机容器，具有高权限；先完成管理员初始化，不要公开无人管理的入口。证书也要按实际访问域名与信任方式配置，不是要求读者忽略所有证书错误。参考：<a href="https://docs.portainer.io/start/install-ce/server/docker/linux">官方 CE 安装</a>。未实机部署。</p>
<h2 id="rssrsshub">RSS生成（rsshub）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  rsshub:
    restart: always
    container_name: rsshub
    ports:
    - 127.0.0.1:8556:1200
    image: diygod/rsshub
</code></pre>
<h2 id="flexget">flexget</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  flexget:
    image: madwind/flexget
    container_name: flexget
    environment:
      FG_WEBUI_PASSWD: ${FG_WEBUI_PASSWD:?set FG_WEBUI_PASSWD in a private .env file}
      FG_LOG_LEVEL: INFO
      TZ: Asia/Shanghai
      PUID: 1000
      PGID: 1000
    volumes:
    - ./flexget/config:/config
    - ./flexget/downloads:/downloads
    ports:
    - 127.0.0.1:8385:3539
    restart: always
</code></pre>
<h2 id="bark">bark</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  bark-server:
    restart: always
    environment:
    - TZ=Asia/Shanghai
    container_name: bark
    ports:
    - 127.0.0.1:8383:8080
    volumes:
    - ./bark/data:/data
    image: finab/bark-server
</code></pre>
<h2 id="vaultwardenbitwarden">密码管理（vaultwarden/Bitwarden）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>Compose 只是容器结构，不包含完整认证、TLS、路由或业务配置。初始化和访问控制完成前，不要把入口开放给不可信网络。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  server:
    restart: always
    container_name: vaultwarden
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./Bitwarden/data/:/data/
    ports:
    - 127.0.0.1:12256:80
    image: vaultwarden/server
</code></pre>
<h2 id="dockerwatchtower">docker容器自动更新（watchtower）</h2><p>Watchtower 可以自动替换运行中的镜像。截至本次核对，原项目仓库已归档，不再作为新部署的默认推荐。尤其是数据库、笔记、密码管理与核心服务，不适合不看发布说明就自动更新。</p><p><img alt="说明图：容器更新：通知之后，先备份再动手" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/gg906jltyqghvy2n84.png"/></p><p>更稳妥的流程是收到更新通知后，核对变更，备份并测试恢复，再在维护窗口手动更新、检查服务与数据，保留可用的回退条件。回退镜像不一定能回退已经迁移的数据格式。Diun 可以用作更新通知，但通知本身不等于完成更新。</p><p>参考：<a href="https://github.com/containrrr/watchtower">Watchtower 仓库状态</a>、<a href="https://github.com/crazy-max/diun">Diun</a>。删除的是文章中的自动更新建议，没有改动任何运行中的容器。</p>
<h2 id="shaarli">网址收藏夹（shaarli）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  shaarli:
    container_name: Shaarli
    restart: always
    ports:
    - 127.0.0.1:8561:80
    volumes:
    - ./shaarli:/var/www/shaarli/data
    image: shaarli/shaarli
</code></pre>
<h2 id="hass">智能家居（HASS）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>本条涉及宿主机网络、设备或高权限挂载。只在确有必要且可信的环境评估，不把容器视为绝对隔离；Docker socket 权限尤其敏感。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  home-assistant:
    restart: always
    container_name: hass
    privileged: true
    network_mode: host
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./hass:/config
    - /run/dbus:/run/dbus
    - /var/run/dbus:/var/run/dbus
    - /dev:/dev
    - /var/run/docker.sock:/var/run/docker.sock
    - /dev/bus/usb:/dev/bus/usb
    image: homeassistant/home-assistant:latest
</code></pre>
<h2 id="wiz">为知笔记（wiz）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  wizserver:
    container_name: wiz
    volumes:
    - ./wiz/data:/wiz/storage
    - /etc/localtime:/etc/localtime
    ports:
    - 127.0.0.1:8357:80
    - 127.0.0.1:9269:9269/udp
    image: wiznote/wizserver
</code></pre>
<p>默认管理员账号：<a href="mailto:admin@wiz.cn">admin@wiz.cn</a>，密码：123456</p>
<h2 id="next-terminal">堡垒机（next-terminal）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote><blockquote>
<p>Compose 只是容器结构，不包含完整认证、TLS、路由或业务配置。初始化和访问控制完成前，不要把入口开放给不可信网络。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  guacd:
    container_name: guacd
    image: dushixiang/guacd:latest
    volumes:
    - ./next-terminal/data:/usr/local/next-terminal/data
    restart: always
  next-terminal:
    container_name: next-terminal
    image: dushixiang/next-terminal:latest
    environment:
      DB: sqlite
      GUACD_HOSTNAME: guacd
      GUACD_PORT: 4822
    ports:
    - 127.0.0.1:8068:8088
    volumes:
    - /etc/localtime:/etc/localtime
    - ./next-terminal/data:/usr/local/next-terminal/data
    restart: always
</code></pre>
<h2 id="photoprism">相册（photoprism）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  photoprism:
    container_name: photoprism
    ports:
    - 127.0.0.1:8568:2342
    environment:
    - PHOTOPRISM_UPLOAD_NSFW=false
    - PHOTOPRISM_ADMIN_PASSWORD=${PHOTOPRISM_ADMIN_PASSWORD:?set PHOTOPRISM_ADMIN_PASSWORD in a private .env file}
    volumes:
    - ./photoprism:/photoprism/storage
    - ./Pictures/Pictures:/photoprism/originals
    - ./Pictures/Example:/photoprism/originals/Example
    image: photoprism/photoprism
</code></pre>
<h2 id="node-red">node-red</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  node-red:
    container_name: nodered
    restart: always
    ports:
    - 127.0.0.1:1880:1880
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./nodered/data:/data
    image: nodered/node-red
</code></pre>
<h2 id="plextautulli">PLEX监视器（Tautulli）</h2><p>Tautulli 应使用官方项目提供的镜像，不是 <code>argparse</code>：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  tautulli:
    image: tautulli/tautulli:latest
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:8181:8181&quot;
    volumes:
      - ./tautulli/config:/config
    environment:
      TZ: Asia/Shanghai
</code></pre>
<p>初始化时连接自己的 Plex，并妥善保护相应凭据。统计服务不需要因为能读播放数据就直接暴露在公网。参考：<a href="https://github.com/Tautulli/Tautulli">官方项目</a>。未实机部署。</p>
<h2 id="onenav">个人导航（onenav）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  onenav:
    container_name: onenav
    ports:
    - 127.0.0.1:8252:80
    environment:
    - USER=zsg
    - PASSWORD=${PASSWORD:?set PASSWORD in a private .env file}
    volumes:
    - ./onenav:/data/wwwroot/default/data
    image: helloz/onenav
</code></pre>
<h2 id="wallabag">网页剪切（wallabag）</h2><blockquote><p>历史配置，尚未按当前镜像实机复测。镜像标签、应用配置、卷路径与首次初始化请以维护者当前说明为准；下面不能当成已验证的新部署方案。</p></blockquote>
<pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  wallabag:
    container_name: wallabag
    restart: always
    volumes:
    - ./wallabag/data:/var/www/wallabag/data
    - ./wallabag/images:/var/www/wallabag/web/assets/images
    ports:
    - 127.0.0.1:5631:80
    environment:
    - SYMFONY__ENV__DOMAIN_NAME=https://wb.abc.com:8080
    image: wallabag/wallabag
</code></pre>
<h2 id="ttrss">TTRSS</h2><p>wangqiru/ttrss 曾使用多容器方案和 PostgreSQL 13。它是特定项目的历史配置，不是官方上游的通用 Compose；PostgreSQL 13 已不适合继续作为新部署默认数据库。</p><p>新部署先核对 <a href="https://tt-rss.org/">Tiny Tiny RSS 上游</a> 与所选镜像维护者的当前安装说明。已有 PostgreSQL 数据需要按支持的导出恢复或升级流程迁移，不能直接把 13 的数据目录挂到任意新主版本镜像。数据库密码应自行生成，初始化清单必须与所用版本匹配。</p>
<h2 id="">维护与备份</h2><p>配置文件、数据库备份和上传目录分别保存，测试恢复后再更新服务。不要运行整盘清理、删除数据卷或重置数据库命令来“修复”启动失败。参考：<a href="https://docs.docker.com/engine/network/port-publishing/">Docker 端口发布</a>、<a href="https://docs.docker.com/engine/containers/start-containers-automatically/">重启策略</a>、<a href="https://docs.docker.com/reference/compose-file/version-and-name/">Compose version 字段</a>。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/zi-yong-dockerxiang-mu-bu-shu-fen-xiang#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/zi-yong-dockerxiang-mu-bu-shu-fen-xiang</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/zi-yong-dockerxiang-mu-bu-shu-fen-xiang</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:20 GMT</pubDate></item><item><title><![CDATA[Cloudflare Tunnels无法建立隧道的问题]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/5893x06hztyx5ahly3.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/d0d3cp95x2wuxgkcv2.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/cloudflare-tunnelswu-fa-jian-li-sui-dao-de-wen-ti">https://taikula.cool/posts/tricks-and-techniques/cloudflare-tunnelswu-fa-jian-li-sui-dao-de-wen-ti</a></blockquote><div><p>2023 年那次故障里，cloudflared 容器一直报 QUIC 连接超时，网站随之掉线。指定 HTTP/2 后恢复了连接。这个处理可以作为诊断办法，但不能据此认定运营商屏蔽 UDP，也不能认为当前版本不会自动回退。</p><h2 id="">日志说明了什么</h2><p>当时的关键报错是：</p><pre class="language-text lang-text"><code class="language-text lang-text">Failed to create new quic connection
failed to dial to edge with quic: timeout: no recent network activity
</code></pre>
<p>它说明这次 QUIC 连接没有成功，不能单凭这两行断言一定是运营商屏蔽 UDP。主机防火墙、路由器、网络策略和当时的链路情况都可能需要排查。</p><p>QUIC 基于 UDP，cloudflared 使用 QUIC 时需要出站 UDP 7844；HTTP/2 使用出站 TCP 7844。当前 <code>--protocol auto</code> 是默认值，会尝试 QUIC，并在无法建立时回退到 HTTP/2。不要把持续的 QUIC 超时理解为软件不支持自动切换。</p><p><img alt="说明图：cloudflared：auto 是当前默认协议选择" height="720" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/5893x06hztyx5ahly3.png" width="1400"/></p><h2 id="-http2">临时指定 HTTP/2</h2><p>如果日志持续是 QUIC 超时，可以显式指定 <code>--protocol http2</code>，观察是否恢复。下面使用 token 文件，避免把 tunnel token 直接写在 Compose 命令里：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel --no-autoupdate --protocol http2 run --token-file /run/secrets/tunnel_token
    volumes:
      - ./tunnel-token:/run/secrets/tunnel_token:ro
</code></pre>
<p><code>--token-file</code> 需要 cloudflared 2025.4.0 或更新版本。先准备包含自己 token 的真实文件，并设置仅必要账户可读的权限；还要确认容器运行用户能读取它，不能只对 root 可读却让非 root 容器来打开。不要把该文件提交到 Git 或同步到公开目录。</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">docker compose up -d
docker compose logs --tail=100 cloudflared
</code></pre>
<p>重建容器前确认自己有可用的管理入口。成功日志应能看到 <code>Registered tunnel connection</code> 以及所用协议；这是观察方法，不是本文新执行过的结果截图。</p><p>HTTP/2 也需要相应 TCP 出站连接。如果 TCP 7844 同样被阻断，换参数不能解决。Tunnel 不要求给家中路由器添加入站 7844 端口映射。</p><h2 id="">隧道在线，网站却仍打不开</h2><p>cloudflared 到 Cloudflare 边缘的连接正常，只说明第一跳正常。还要检查 cloudflared 能否访问自己配置的源站。</p><p><img alt="说明图：隧道在线后，还要检查源站这一跳" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/d0d3cp95x2wuxgkcv2.png"/></p><p>如果 cloudflared 在 Docker 里，源站写 <code>localhost</code> 指向的是它自己的容器，不是 NAS。源站是另一容器时，放在合适的同一 Docker 网络并使用服务名；源站在局域网机器上时，使用从容器实际可达的地址与端口。再检查源站协议和证书，而不是直接关掉所有证书校验。</p><p>本文结合当年的故障经过说明当前默认协议行为、端口与凭据处理。配置示例经文档核对，未在真实 Tunnel 上实机测试。</p><p>参考：<a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters/">运行参数</a>、<a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall/">防火墙要求</a>。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/cloudflare-tunnelswu-fa-jian-li-sui-dao-de-wen-ti#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/cloudflare-tunnelswu-fa-jian-li-sui-dao-de-wen-ti</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/cloudflare-tunnelswu-fa-jian-li-sui-dao-de-wen-ti</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:20 GMT</pubDate></item><item><title><![CDATA[装上这些才是我的完全体 macOS]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/uk2ldlnlrix4w9h7r1.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/9xmvt66ndvb9zl362i.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/33zfbim3blvjzs361o.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/alolpk36fnxgw9504z.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/61zqyrvq322uciekc6.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/bp4h4hh0z036m80qlu.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/alufv0r15ramuot7s8.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/rjhp47tglcxkle29s6.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/pffffzdgf3srojn1yc.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/bklgru1cyxw0synwpn.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/2srfwl5mat68cvqm8q.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/qdwbo9nna4wowevgmm.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ehvn6vz0ti1v0vvq9j.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/aqu50yxglu7pj8xouo.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/tv8ao1nyol8g13cg4k.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ftf4tsn4er8i8u0tow.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/pbgas2pnhvfsx92m5u.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/imsui9v234w1254yqc.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/1d3kgq8btz94yz4s1n.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ds58fjjg50aqwzfp31.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/u5mb1oke7m4rcqpkti.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/fc3zyep5io7eurntxm.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/learning-materials/zhuang-shang-zhe-xie-cai-shi-wo-de-wan-quan-ti-macos">https://taikula.cool/posts/learning-materials/zhuang-shang-zhe-xie-cai-shi-wo-de-wan-quan-ti-macos</a></blockquote><div><p>这是我 2024 年整理的 macOS 工具清单。当时这些软件都在用，同类型里，我觉得它们最顺手。下面按用途整理这份个人选择，功能与收费以当前官方说明为准；这不是我今天仍在使用全部软件的承诺。</p><p>配图使用应用图标，不是新版软件界面截图。免费、试用与付费按这次核对的官方说明区分，实际购买还要看当前版本、渠道和套餐。</p><h3 id="">基础工具</h3><p><img alt="Raycast：应用图标（不是新版界面截图）" height="1024" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/uk2ldlnlrix4w9h7r1.png" width="1024"/></p><p><strong>Raycast</strong> · 基础功能免费，另有付费方案 · <a href="https://www.raycast.com/">官网</a></p><p>用快捷键打开启动器，搜索应用、文件或命令，再通过扩展接入其他工具。<a href="https://github.com/raycast/extensions">扩展仓库</a> 提供了许多可选插件，可以按自己的习惯配置。启动器的免费核心功能与 Pro、AI 等付费服务是不同部分，不能笼统说整套 Raycast 都免费。</p><hr/><p><img alt="Mos：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/9xmvt66ndvb9zl362i.png"/></p><p><strong>Mos</strong> · 免费、开源 · <a href="https://github.com/Caldis/Mos">项目</a></p><p>主要用来调整鼠标的平滑滚动与方向。水平、垂直滚动方向、速度和加速度可以按习惯调整，也可以用快捷操作控制滚动行为。它改善的是滚轮操作，不是替换触控板的所有手势。</p><hr/><p><img alt="SoundSource：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/33zfbim3blvjzs361o.png"/></p><p><strong>SoundSource</strong> · 付费，有试用 · <a href="https://rogueamoeba.com/soundsource/">官网</a></p><p>在菜单栏管理输入输出设备、系统音量与各个应用的音量。一个应用太响时可以单独调低，也能为应用选择输出设备，使用均衡器等音频效果。安装前核对当前 macOS 与硬件支持范围，不把“支持 Mac”理解为支持所有系统版本。</p><hr/><p><img alt="赤友 NTFS 助手：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/alolpk36fnxgw9504z.png"/></p><p><strong>赤友 NTFS 助手</strong> · 付费，有试用 · <a href="https://aibotech.cn/ntfs-for-mac/">官网</a></p><p>macOS 通常能读取 NTFS 磁盘，但默认不提供完整写入能力。这类驱动补上的是 NTFS 读写，用来和 Windows 交换硬盘或 U 盘里的文件。当前系统版本、芯片架构与磁盘状态要单独核对，不保证任何版本、任何磁盘都能无条件使用。</p><hr/><p><img alt="Keka：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/61zqyrvq322uciekc6.png"/></p><p><strong>Keka</strong> · 官网可免费下载，App Store 有付费支持渠道 · <a href="https://www.keka.io/en/">官网</a></p><p>拖放文件即可压缩或解压，支持压缩级别、加密和分卷等选项。ZIP、7z 等支持创建，RAR 支持解压，不能把“支持 RAR”误写成也能创建 RAR。支持的压缩与解压格式要分别看。</p><hr/><p><img alt="CleanShot X：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/bp4h4hh0z036m80qlu.png"/></p><p><strong>CleanShot X</strong> · 付费 · <a href="https://cleanshot.com/">官网</a></p><p>全屏、区域、滚动截图，屏幕录制、标注和云端分享放在同一个工具里，也可以设置自己的快捷键。云端容量、链接与更新权益随方案不同，不是所有功能无限制包含。旧清单的试用标记不作为现在一定有免费试用的保证。</p><h3 id="">系统增强</h3><p><img alt="AutoCode：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/alufv0r15ramuot7s8.png"/></p><p><strong>AutoCode</strong> · 当前商店页面标为免费 · <a href="https://apps.apple.com/us/app/autocode-%E7%9F%AD%E4%BF%A1%E9%AA%8C%E8%AF%81%E7%A0%81%E8%BD%AC%E5%8F%91%E5%B7%A5%E5%85%B7/id6472872202?mt=12">App Store</a></p><p>用来处理短信验证码在设备间的使用问题。它并不适用于所有身份验证方式；邮件验证链接、第三方验证器与短信验证码不能都视为同一功能。具体支持的来源、系统条件与权限以当前应用说明为准，验证码工具的隐私权限也值得先看。</p><hr/><p><img alt="Bartender：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/rjhp47tglcxkle29s6.png"/></p><p><strong>Bartender</strong> · 付费，有试用 · <a href="https://www.macbartender.com/">官网</a></p><p>整理菜单栏图标，隐藏不常用的项目，调整显示顺序，再用快捷键找回来。它管理的是菜单栏项目，不是 macOS 的通知中心，不能把它当成系统通知的优先级管理工具。</p><hr/><p><img alt="AltTab：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/pffffzdgf3srojn1yc.png"/></p><p><strong>AltTab</strong> · 免费、开源 · <a href="https://alt-tab-macos.netlify.app/">官网</a></p><p>把类似 Windows Alt-Tab 的窗口切换带到 Mac，可以看窗口缩略预览，再跳到目标窗口。快捷键、筛选范围和切换方式都能调整，适合经常开多个窗口的工作方式。</p><hr/><p><img alt="Maccy：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/bklgru1cyxw0synwpn.png"/></p><p><strong>Maccy</strong> · 开源，下载渠道收费方式不同 · <a href="https://maccy.app/">官网</a></p><p>记录剪贴板历史，搜索曾经复制过的内容，再快速粘贴。支持调整历史容量、快捷键与忽略范围。密码、token 和敏感文本不适合长期留在剪贴板历史里，需要配置排除或及时清理；网站版本与 App Store 渠道也不要混成同一个价格结论。</p><hr/><p><img alt="PopClip：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/2srfwl5mat68cvqm8q.png"/></p><p><strong>PopClip</strong> · 付费，有试用 · <a href="https://www.popclip.app/">官网</a></p><p>选中文本时弹出操作条，可以复制、搜索、翻译，或通过扩展执行其他动作。触发点是选中文本，不是“复制之后才出现”。旧清单把它标为免费，这里更正。</p><hr/><p><img alt="AppCleaner：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/qdwbo9nna4wowevgmm.png"/></p><p><strong>AppCleaner</strong> · 免费 · <a href="https://freemacsoft.net/appcleaner/">官网</a></p><p>把应用拖进去，查看它找到的关联文件，再决定删除哪些。预览列表比盲目删除更重要；它不能保证找出所有残留，也不能把删除预览当成独立备份。重要资料还是要另外备份。</p><hr/><p><img alt="Tiles：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ehvn6vz0ti1v0vvq9j.png"/></p><p><strong>Tiles</strong> · 免费 · <a href="https://freemacsoft.net/tiles/">官网</a></p><p>通过拖动窗口或快捷键，把窗口放到预设的位置和尺寸。它解决的是快速排布窗口，不是保存和恢复所有应用状态；是否需要额外工具，取决于自己的窗口使用习惯。</p><hr/><p><img alt="Stats：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/aqu50yxglu7pj8xouo.png"/></p><p><strong>Stats</strong> · 免费、开源 · <a href="https://github.com/exelban/stats">项目</a></p><p>在菜单栏查看 CPU、内存、磁盘和网络等指标，也有温度、风扇等硬件数据。能读到哪些传感器取决于机型、系统和权限。这些指标用于观察负载，不代表装上它就能自动优化性能或诊断所有硬件问题。</p><h3 id="">浏览娱乐</h3><p><img alt="Chrome：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/tv8ao1nyol8g13cg4k.png"/></p><p><strong>Chrome</strong> · 免费 · <a href="https://www.google.com/chrome/">官网</a></p><p>跨平台浏览器，提供扩展、主题、书签和安全浏览等功能。登录并启用相应同步设置后，可以在设备间同步所选数据。扩展本身也有权限与安全边界，不要因为来自扩展商店就忽略它能读取哪些网页内容。</p><hr/><p><img alt="IINA：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ftf4tsn4er8i8u0tow.png"/></p><p><strong>IINA</strong> · 免费、开源 · <a href="https://iina.io/">官网</a></p><p>macOS 视频播放器，支持许多常见媒体格式、字幕、画中画和播放参数调整，也能处理部分流媒体输入。是否流畅仍取决于文件编码、硬件与解码条件，不能承诺所有大文件都一定流畅。</p><hr/><p><img alt="Downie 4：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/pbgas2pnhvfsx92m5u.png"/></p><p><strong>Downie 4</strong> · 付费，有试用 · <a href="https://software.charliemonroe.net/downie/">官网</a></p><p>从受支持的视频网站保存媒体，支持批量任务与相关输出选项。网站支持情况会变，下载能力也不等于取得转载或分发授权；只处理自己有权保存的内容。</p><hr/><p><img alt="Permute 3：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/imsui9v234w1254yqc.png"/></p><p><strong>Permute 3</strong> · 付费，有试用 · <a href="https://software.charliemonroe.net/permute/">官网</a></p><p>用于媒体格式转换和批量处理，也提供裁剪、旋转、尺寸调整等简单操作。具体输入输出格式按当前版本查看，别把它当成完整的视频剪辑软件。</p><hr/><p><img alt="HandBrake：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/1d3kgq8btz94yz4s1n.png"/></p><p><strong>HandBrake</strong> · 免费、开源 · <a href="https://handbrake.fr/">官网</a></p><p>用于视频转码、压缩和参数调整，支持预设，也能手动控制编码器、质量和其他选项。输出容器是 MP4、MKV、WebM，不要把 AVI 算进输出格式。输入能读取和输出能生成是两回事。</p><h3 id="">阅读写作</h3><p><img alt="Typora：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/ds58fjjg50aqwzfp31.png"/></p><p><strong>Typora</strong> · 付费，有试用 · <a href="https://typora.io/">官网</a></p><p>Markdown 编辑器，写作时直接显示排版效果，支持标题、列表、代码、表格与主题。macOS、Windows 和 Linux 都有版本；跨设备同步由文件所在的同步服务负责，不是安装 Typora 就自动同步文档。</p><hr/><p><img alt="UPDF：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/u5mb1oke7m4rcqpkti.png"/></p><p><strong>UPDF</strong> · 付费，试用有限制 · <a href="https://www.updf.cn/">官网</a></p><p>用于 PDF 编辑、注释、页面管理、转换和保护，OCR、AI 等能力及使用额度还要按版本和许可分别核对。不要假定基础购买包含所有附加服务。</p><hr/><p><img alt="图压：应用图标（不是新版界面截图）" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/fc3zyep5io7eurntxm.png"/></p><p><strong>图压</strong> · 保留原清单中的历史工具 · <a href="https://tuya.xinxiao.tech/">原项目站</a></p><p>原清单里，它是免费的本地图片压缩软件，包含按目标文件大小压缩的功能，适合遇到上传限制时使用。本次未能访问原项目站，因此没有确认现在的维护状态、下载可用性和系统兼容范围；不把历史介绍当作当前服务仍可用的保证。</p><p>压缩后仍要检查画面与文字，不能承诺所有图片都能大幅变小且完全没有视觉损失。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/learning-materials/zhuang-shang-zhe-xie-cai-shi-wo-de-wan-quan-ti-macos#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/learning-materials/zhuang-shang-zhe-xie-cai-shi-wo-de-wan-quan-ti-macos</link><guid isPermaLink="true">https://taikula.cool/posts/learning-materials/zhuang-shang-zhe-xie-cai-shi-wo-de-wan-quan-ti-macos</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:18 GMT</pubDate></item><item><title><![CDATA[Frp搭建以及配置]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/it2j7d0zit39kp654l.png"/><link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/71znm1rb6h8mwex8pp.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/frpda-jian-yi-ji-pei-zhi">https://taikula.cool/posts/tricks-and-techniques/frpda-jian-yi-ji-pei-zhi</a></blockquote><div><p>frp 用一台可从公网访问的服务器，把内网服务转发出来。<code>frps</code> 在公网服务器上运行，<code>frpc</code> 在内网机器上运行，两端配置不能写反。</p><p>这篇使用官方当前支持的 TOML 配置方式，以官方发行作为安装入口，不混用第三方一键脚本与旧 Docker 镜像。</p><p><img alt="说明图：frp：内网主动连公网，外部访问指定业务端口" height="720" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/it2j7d0zit39kp654l.png" width="1400"/></p><h2 id="">下载与目录</h2><p>从 <a href="https://github.com/fatedier/frp/releases">frp 官方 Releases</a> 选择与系统、CPU 架构匹配的包，两端尽量使用匹配版本。解压后保留需要的二进制和配置文件，不必在教程里固定一个很快过时的下载版本号。</p><p>先在前台运行，确认端口与鉴权正常，再按官方指南或当前系统的服务管理方式配置开机运行。服务目录、运行用户和配置文件权限也要一起规划，不要把配置中的 token 留给所有本机用户读取。</p><h2 id="-frpstoml">服务端 frps.toml</h2><p>下面开放 7000 作为控制连接端口，只允许代理使用远端 8443。token 和面板密码都是必须替换的占位符。</p><pre class="language-toml lang-toml"><code class="language-toml lang-toml">bindPort = 7000
allowPorts = [{ single = 8443 }]

[auth]
method = &quot;token&quot;
token = &quot;REPLACE_WITH_THE_SAME_LONG_RANDOM_TOKEN&quot;

[transport.tls]
force = true

[webServer]
addr = &quot;127.0.0.1&quot;
port = 7500
user = &quot;frp-admin&quot;
password = &quot;REPLACE_WITH_ANOTHER_LONG_RANDOM_PASSWORD&quot;
</code></pre>
<p>填写 <code>allowPorts</code> 时注意数组括号完整闭合。控制端口、业务端口和管理面板各做一件事，不要把整个端口范围都开放出来。</p><p><img alt="说明图：三个端口，三种用途" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/71znm1rb6h8mwex8pp.png"/></p><h2 id="-frpctoml">客户端 frpc.toml</h2><p>假设你确实需要把内网 <code>192.168.100.20:443</code> 的 HTTPS 服务暴露到服务器 8443：</p><pre class="language-toml lang-toml"><code class="language-toml lang-toml">serverAddr = &quot;YOUR_PUBLIC_SERVER_IP&quot;
serverPort = 7000

[auth]
method = &quot;token&quot;
token = &quot;REPLACE_WITH_THE_SAME_LONG_RANDOM_TOKEN&quot;

[transport.tls]
enable = true

[[proxies]]
name = &quot;home-https&quot;
type = &quot;tcp&quot;
localIP = &quot;192.168.100.20&quot;
localPort = 443
remotePort = 8443
</code></pre>
<p>把服务端地址、内网 IP 和 token 替换成真实值，并确认 frpc 所在机器可以直接访问这个内网服务。目标服务自己应有合适的 HTTPS 证书和认证；不要直接把路由器或 NAS 的无保护管理界面开放到公网。</p><p>frp 传输层的 TLS 加密的是两端之间的连接。它不会把目标服务的 HTTP 自动改成 HTTPS，也不替代业务账户认证。HTTPS 域名与证书仍需匹配实际使用方式。</p><h2 id="">启动与检查</h2><p>服务端从对应目录启动：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">./frps -c ./frps.toml
</code></pre>
<p>客户端先核对配置，再启动：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">./frpc verify -c ./frpc.toml
./frpc -c ./frpc.toml
</code></pre>
<p>在服务端安全组和防火墙放行需要的 TCP 7000 与 8443，限制控制连接来源更好。7500 面板只监听回环地址，需要查看时用 SSH 转发，不要为了方便直接改成全网监听。</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">ssh -L 7500:127.0.0.1:7500 your-user@your-server
</code></pre>
<h2 id="">故障先分层</h2><p>frpc 连不上，先查服务端地址、7000、防火墙与 token；登录成功但代理注册失败，查远端端口冲突和 allowPorts；代理正常但页面打不开，查内网服务本身、8443 与 HTTPS 域名/证书。每一层都看对应日志，不要同时乱改所有参数。</p><p>配置已做 TOML 语法检查，尚未在你的两台机器上建立隧道。参考：<a href="https://github.com/fatedier/frp">官方项目</a>、<a href="https://gofrp.org/en/docs/reference/server-configures/">服务端配置</a>、<a href="https://gofrp.org/en/docs/examples/ssh/">示例与说明</a>。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/frpda-jian-yi-ji-pei-zhi#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/frpda-jian-yi-ji-pei-zhi</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/frpda-jian-yi-ji-pei-zhi</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:17 GMT</pubDate></item><item><title><![CDATA[使用caddy搭建企微消息转发代理]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/nmvs5zpyqzrrjbbzvy.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/shi-yong-caddyda-jian-qi-wei-xiao-xi-zhuan-fa-dai-li">https://taikula.cool/posts/tricks-and-techniques/shi-yong-caddyda-jian-qi-wei-xiao-xi-zhuan-fa-dai-li</a></blockquote><div><p>这篇的用途是给自己的企业微信应用提供一个固定的 API 转发入口。调用方请求自己的域名，由 Caddy 转发到 <code>qyapi.weixin.qq.com</code>。这不是登录企业微信的替代办法，也不会绕过应用权限或企业后台的访问限制。</p><p><img alt="说明图：企业微信 API 转发：固定上游，限制调用方" height="720" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/nmvs5zpyqzrrjbbzvy.png" width="1400"/></p><h2 id="">准备域名与服务器</h2><p>准备能访问企业微信 API 的服务器，把自己的域名解析到它。本文以 <code>wecom.example.com</code> 为占位符，部署时必须替换成真实域名。服务器的实际出口 IP 也要和企业后台的相关限制一起核对；并不是只能使用境外服务器。</p><p>公网入口使用 HTTPS。Caddy 自动申请证书还需要域名解析与相应验证端口正常，不应为了省事让包含 access_token 的调用经过明文 HTTP。</p><h2 id="caddyfile">Caddyfile</h2><p>下面只允许一个固定的调用方公网 IP。<code>198.51.100.10</code> 是文档示例地址，必须替换，不能原样使用。</p><pre class="language-caddyfile lang-caddyfile"><code class="language-caddyfile lang-caddyfile">wecom.example.com {
    @allowed remote_ip 198.51.100.10
    handle @allowed {
        reverse_proxy https://qyapi.weixin.qq.com {
            header_up Host {upstream_hostport}
        }
    }
    handle {
        respond &quot;Forbidden&quot; 403
    }
}
</code></pre>
<p>这个配置固定了上游，不是允许客户端任意指定目标的开放代理。允许列表按 Caddy 实际看到的来源 IP 匹配；如果入口前还有 CDN 或其他代理，不能直接照抄为真实客户端地址，需要另外规划可信代理链。</p><p><code>header_up Host {upstream_hostport}</code> 不是所有版本都必需的固定写法。当前 Caddy 2.11 起对 HTTPS 上游有自动 Host 处理；这里显式写出是为了说明请求关系和兼容配置，不要把显式 Host 配置当成所有版本的要求。</p><h2 id="-caddy-">用官方 Caddy 镜像运行</h2><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - &quot;80:80&quot;
      - &quot;443:443&quot;
      - &quot;443:443/udp&quot;
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
volumes:
  caddy_data:
  caddy_config:
</code></pre>
<p>先准备真实的 Caddyfile 文件，再检查配置：</p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">docker compose run --rm caddy caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
docker compose up -d
docker compose logs --tail=100 caddy
</code></pre>
<p><code>htnanako/wxproxy</code> 是另一种第三方代理容器，不是官方 Caddy 镜像。两者是不同的部署方案，不要混写成同一个服务。</p><h2 id="-api-">接入应用时只替换 API 基地址</h2><p>应用原本请求 <code>https://qyapi.weixin.qq.com/cgi-bin/...</code>，在它支持自定义企业微信 API 地址的前提下，改为自己的 <code>https://wecom.example.com/cgi-bin/...</code>。路径和业务参数仍按企业微信接口要求填写。</p><p>不要把企业微信 secret、access_token 或消息正文写进公开示例。开启请求日志前先考虑查询字符串中的 token，排错截图也要遮掉它。先用不含真实凭据的请求确认来源限制，再在自己的环境里完成有权限的接口测试。</p><p>Discord 的邀请链接不是 Webhook。两者接入方式不同，不能拿邀请地址当消息 API。</p><p>参考：<a href="https://caddyserver.com/docs/install">Caddy 安装</a>、<a href="https://caddyserver.com/docs/caddyfile/directives/reverse_proxy">reverse_proxy</a>、<a href="https://developer.work.weixin.qq.com/document/">企业微信开发者文档</a>。本文完成文档与配置结构核对，未在你的服务器上实际部署或发送消息。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/shi-yong-caddyda-jian-qi-wei-xiao-xi-zhuan-fa-dai-li#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/shi-yong-caddyda-jian-qi-wei-xiao-xi-zhuan-fa-dai-li</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/shi-yong-caddyda-jian-qi-wei-xiao-xi-zhuan-fa-dai-li</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:09 GMT</pubDate></item><item><title><![CDATA[Plex开启代理后无法远程访问的解决方案]]></title><description><![CDATA[<link rel="preload" as="image" href="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/vuyzfg2fgjxe3ckjlb.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://taikula.cool/posts/tricks-and-techniques/plexkai-qi-dai-li-hou-wu-fa-yuan-cheng-fang-wen-de-jie-jue-fang-an">https://taikula.cool/posts/tricks-and-techniques/plexkai-qi-dai-li-hou-wu-fa-yuan-cheng-fang-wen-de-jie-jue-fang-an</a></blockquote><div><p>Plex 开启代理后，如果元数据访问改善了，远程访问却出了问题，可以先检查分流策略。但“所有远程故障都是代理导致的”不成立。</p><h2 id="">先分清三条连接</h2><p>Plex 服务器向外请求海报和元数据，是出站访问；服务器向 Plex 服务注册连接信息，也是出站访问；远程客户端连接到家里的 Plex 服务，则依赖实际可达的入站路径。</p><p><img alt="说明图：Plex：出站请求与远程入站，不是同一条路" height="720" src="https://sexyfeifan-hk-standard.oss-cn-hongkong.aliyuncs.com/Taikula/Image/vuyzfg2fgjxe3ckjlb.png" width="1400"/></p><p>代理可能改变外部看到的出口地址，也可能让注册或探测使用不同路径。这是排查方向之一，不等于已经证明故障原因。</p><h2 id="">按顺序检查</h2><p>先确认局域网客户端能直接访问 Plex。然后检查路由器的公网地址是否真的是可从外部连接的公网地址；双重 NAT 和 CGNAT 不能只靠改分流规则解决。</p><p>手动映射端口时，要把路由器的指定外部 TCP 端口转到 Plex 主机的 TCP 32400，并在 Plex 远程访问设置中填入相应的外部端口。不要把“外部端口也一定是 32400”当成要求。再检查主机防火墙与目标地址有没有改变。</p><p>用手机移动网络等真正的外部网络测试，避免只在局域网里测试回环访问。只看面板短暂显示绿色，也不足以说明所有客户端路径都正常。</p><h2 id="-dns">再检查代理与 DNS</h2><p>保留当前策略备份，查看 Plex 注册、探测相关请求实际走了哪条路径。需要调整时只改已确认相关的域名或设备策略，再对比开启和关闭代理的表现。</p><p>把 <code>*.amazonaws.com</code> 整段划为直连，范围太大，不适合作为默认规则。也不建议把所有 Plex 元数据域名强制走同一个出口，然后宣称可以修复所有远程问题。</p><p>安全连接还可能受 DNS 重绑定保护影响。<a href="https://support.plex.tv/articles/206225077-how-to-use-secure-server-connections/">Plex 官方安全连接说明</a> 给出了 <code>plex.direct</code> 的处理方式。按所用 DNS 服务配置针对该域名的例外，而不是关掉整套重绑定保护。</p><h2 id="">端口可达与播放权限是两回事</h2><p>网络连接正常，不一定代表账户可以按当前产品规则远程播放视频。还要核对当前 Plex Pass、Remote Watch Pass 等适用条件。先分清是连接失败、走了 Relay，还是播放权限提示，再找对应解决办法。</p><p>排查资料中如果涉及 Plex Token，不要把包含 token 的完整地址贴在评论、截图或公开日志里。排查时应遮蔽 URL 中的凭据。</p><p>参考：<a href="https://support.plex.tv/articles/200931138-troubleshooting-remote-access/">远程访问排查</a>、<a href="https://support.plex.tv/articles/206225077-how-to-use-secure-server-connections/">安全连接与 DNS</a>。本文按官方说明修正，未修改你的路由器、代理或 Plex 服务。</p></div><p style="text-align:right"><a href="https://taikula.cool/posts/tricks-and-techniques/plexkai-qi-dai-li-hou-wu-fa-yuan-cheng-fang-wen-de-jie-jue-fang-an#comments">览毕，何不一言？</a></p></div>]]></description><link>https://taikula.cool/posts/tricks-and-techniques/plexkai-qi-dai-li-hou-wu-fa-yuan-cheng-fang-wen-de-jie-jue-fang-an</link><guid isPermaLink="true">https://taikula.cool/posts/tricks-and-techniques/plexkai-qi-dai-li-hou-wu-fa-yuan-cheng-fang-wen-de-jie-jue-fang-an</guid><dc:creator><![CDATA[sexyfeifan]]></dc:creator><pubDate>Sun, 11 Oct 2026 17:26:00 GMT</pubDate></item></channel></rss>