告别 NPM Token:迁移到 Trusted Publishing 全记录

<h2 id="发生了什么">发生了什么?</h2> <p>2025 年 12 月 9 日,npm 正式<strong>永久撤销了所有 Classic Token</strong>。与此同时,npm 引入了基于会话的认证(2 小时有效期)和新的 CLI Token 管理方式。这意味着:</p> <ul> <li>所有 Classic Token 立即失效,无法恢复</li> <li><code>npm login</code> 现在只发放 2 小时的短期会话令牌</li> <li>CI/CD 场景推荐使用 <strong>Granular Access Token</strong> 或 <strong>OIDC Trusted Publishing</strong></li> </ul> <p>我的 GitHub 项目 CI 工作流自然也挂了 —— 因为 Secrets 里存的还是那个已被吊销的 Classic Token。</p>

2026/2/15
阅读更多

Sing-box:IPv6 优先出站与 Netflix 强制 IPv6 分流

<p>很多 VPS 的 IPv4 出口因为被滥用、共享 NAT 或者 IP 段&quot;脏&quot;,导致访问某些服务时体验不佳。相比之下,<strong>IPv6 出口往往更干净</strong>——毕竟 IPv6 地址段大、用的人少、很多服务商对 IPv6 的风控也没那么严格。</p> <p>本文记录如何在 sing-box 上实现:</p>

2026/1/16
阅读更多

[All In One] HomeLab 虚拟化 iKuai + Mihomo - IPv6 支持

<p>本文是 <a href="https://wayjam.me/posts/allinone-2025-transparent-gateway">All In One HomeLab 虚拟化 iKuai + Mihomo</a> 的 IPv6 扩展配置,介绍如何在现有的透明网关(Debian/LXC 作为 Clash/Mihomo 透明网关)架构中启用 IPv6 支持。</p> <p>本文默认目标:<strong>只让透明网关本机具备 IPv6 出口能力</strong>,内网终端不强制获取公网 IPv6;如果希望终端也能拿到公网 IPv6,通常还需要额外处理 <strong>NDP</strong> 或 <strong>前缀下发(DHCPv6-PD)</strong> 等问题,正文相关步骤会顺带提示。</p>

2026/1/15
阅读更多

[All In One] HomeLab 虚拟化 iKuai + Mihomo

<p>本文思路基本遵循 <a href="https://www.jackiewu.top/article/best-alternative-solution-for-transparent-gateway">iKuai与Openwrt的有机结合:传统旁路由方案的完美替代</a>,主要差异点如下:</p> <ul> <li><strong>虚拟化平台</strong>: unRaid 替换为 Proxmox VE (PVE)</li> <li><strong>透明网关</strong>: OpenWRT 替换为 Debian + Mihomo</li> <li><strong>DNS 服务</strong>: paopaodns 替换为 AdGuard Home + Mihomo DNS + SmartDNS 组合</li> </ul> <h3 id="网络拓扑">网络拓扑</h3> <p>为方便描述,下文统一将处理出站流量的虚拟机称为<strong>透明网关 (gateway)</strong>。</p> <blockquote> <p><strong>架构核心思想</strong></p> <p>本方案采用“主路由 + 透明网关”的模式。iKuai 作为主路由,以其出色的稳定性、多线负载和流控能力负责整体网络的 DHCP、NAT 和流量调度。透明网关则是一个专职处理特定流量(如国际流量)的“处理器”。iKuai 通过策略路由(PBR)将特定流量“扔”给透明网关处理,处理完毕后再由透明网关“扔”回给 iKuai,由 iKuai 统一出口。这种架构实现了功能解耦,稳定性和灵活性兼得。</p>

2025/8/23
阅读更多

LiteLLM 多模型 API 中转

<h2 id="前言">前言</h2> <p>随着大语言模型(LLM)应用场景的不断扩展,管理和统一调用多个 AI 模型接口的需求日益突出。目前市面上有多种解决方案,每个都有其独特的优势和适用场景:</p> <ul> <li><strong><a href="https://github.com/songquanpeng/one-api">one-api</a>/<a href="https://github.com/Calcium-Ion/new-api">new-api</a></strong>: 这类项目提供完整的 Web UI 界面,支持多用户管理、使用量统计等功能,适合团队或小型组织使用。</li> <li><strong><a href="https://github.com/yym68686/uni-api">uni-api</a></strong>: 采用 Provider-First 的配置思路,通过简单的配置文件启动,特别适合个人用户快速配置多个模型服务。</li> <li><strong><a href="https://openrouter.ai">openrouter</a></strong>: 作为一个集中式的 AI 模型网关,支持多个主流服务商,但对某些区域性服务(如国内的 siliconflow)支持有限,且无法配置同一服务商的多个账号。</li> <li><strong><a href="https://docs.litellm.ai/">LiteLLM</a></strong>: 既可作为 SDK 使用,也可作为独立的 LLM Gateway 部署。采用 Model-First 的配置方式,虽然在多模型配置上略显繁琐,但提供了更细粒度的模型控制能力,而且代码质量也比 uni-api 更好。</li> </ul> <p>所以我使用了一段时间的 new-api 和 uni-api 之后,现在切换到 LiteLLM。本文将介绍 LiteLLM 的部署方案和一些实用的配置技巧。</p>

2025/2/3
阅读更多

MacOS Bootstrp with Nix

<p>最近更换了 M4 Pro 的 MacBook Pro,面临着重新配置开发环境的挑战。虽然我之前已经在 dotfiles 项目中维护了 tmux、alacritty 和 neovim 等工具的配置,但实际上还有许多其他组件需要重新设置。起初我考虑编写一个 setup 脚本来自动化这个过程,但在研究过程中接触到了 Nix 这个声明式的包管理器,它的设计理念让我眼前一亮。</p>

2025/1/29
阅读更多

Fluency Support Full Rss

<p>最近 Follow 这个内容浏览器十分热门, 我把自己博客添加进去后发现 Hugo 的 RSS 默认并没有全文输出.</p> <p>所以给当前在用的 <a href="https://github.com/wayjam/hugo-theme-fluency">Fluency</a> 主题增加了一个可选配置,可以开启全文 RSS 输出.</p> <p>又水一篇.</p> <p>This message is used to verify that this feed (feedId:55671961817022580) belongs to me (userId:67409085208279040). Join me in enjoying the next generation information browser <a href="https://follow.is">https://follow.is</a>.</p>

2024/10/27
阅读更多

[All In One] PVE 中 OpenWrt LXC 重启问题

<p>从去年开始,我的 OpenWrt 是安装在 PVE 中的 LXC 容器中,但一直以来都有一个问题,OpenWrt 关机后就无法再次启动了。</p> <p>我是将 enp6s0(有线网卡)、wlp2s0(无线网卡)硬件直通给 LXC 容器:</p> <pre tabindex="0"><code class="language-conf" data-lang="conf">lxc.net.0.type: phys lxc.net.0.link: enp6s0 lxc.net.0.flags: up lxc.net.1.type: phys lxc.net.1.link: wlp2s0 lxc.net.1.flags: up </code></pre><p>查看 LXC 的启动日志发现网卡重命名失败:</p>

2024/8/18
阅读更多

Tabby 终端配置以及配置全平台同步

<p>自从有了 Windows 的个人电脑之后,经常在不同平台的环境中切换。每个平台都有一个终端软件,SSH 配置成了一个大难题。</p> <p>一开始用的是全平台的 Termius,基础功能基本满足需求,并且也有 iOS 客户端,后来发现它的多端同步需要 Pro 订阅,价格十分昂贵。我在 macOS 上用的其实是 Alacritty,基础配置也通过了 Github 同步,但是 SSH 配置的同步则无能为力。</p>

2024/3/11
阅读更多

Cloudflare Tunnel + Nginx Proxy Manager:服务穿透

<h3 id="nginx-proxy-manager">Nginx Proxy Manager</h3> <p>Nginx Proxy Manager 是一个 Nginx 的可视化代理管理器,自带面板,操作极其简单,非常适合配合 Docker 搭建的应用使用。</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;3.8&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">proxy</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nginx</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;jc21/nginx-proxy-manager:latest&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">&#39;80:80&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">&#39;81:81&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">&#39;443:443&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/data/docker/nginx:/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/data/docker/letsencrypt:/etc/letsencrypt</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">appnet</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span></code></pre></div><p>其他需要被 Nginx 反代的服务理论上不需要配置 <code>ports</code> 暴露端口,只需要都加入同一个 docker 网络,在 Nginx 配置的使用域名指向即可。</p>

2024/3/10
阅读更多

推荐订阅

Recent content on forecho's Blog

Provides a better reading experience (full articles) over the official ones.