跳过正文
  1. 系列/
  2. 技术番外/

番外:3X-UI 节点订阅合并与优化

其雁过无痕
作者
其雁过无痕
目录

在使用 3X-UI 搭建代理节点时,很多朋友可能会遇到这样一个痛点: 因为 3X-UI 的 Vision 流控(xtls-rprx-vision)是需要在具体客户端上设置的,这就导致开启了 Vision 和未开启 Vision 的节点,被强制拆分成了不同的订阅链接。 当把它们导入到代理软件(比如 V2rayN)时,软件里会显示出多个不同的订阅分组,不仅观感杂乱,后期维护起来也极其不便。

为了解决这个问题,实现“所有节点汇聚成一个订阅链接,一次导入即可”的完美体验,这里为大家提供一套终极解决方案!无论你使用的是 V2rayN(直连版)还是 Clash(YAML 配置版),都能轻松搞定。

方法一:适用于 V2rayN 等直连版软件
#

V2rayN 等软件可以直接识别一行一个的单节点链接(如 vless://...vmess://...)。我们可以借助 GitHub 的 Gist 功能来做一个属于自己的“云端订阅池”。

🛠️ 操作步骤:
#

  1. 获取所有节点链接:在你的 3X-UI 面板中,把你需要的所有节点(无论有没有 Vision 流控)的单独分享链接全部复制下来。

  2. 创建 GitHub Gist

    • 访问并登录 GitHub Gist
    • 在巨大的文本框中,把你刚刚复制的节点链接全部粘贴进去,保证一行一个链接
    • 给文件随便起个名字(比如 nodes.txt)。
  3. 保存并获取订阅链接

    • 点击右下角的 Create secret gist(千万别点 Public,详见下方避坑指南)。
    • 创建成功后,在文件内容的右上角找到并点击 Raw 按钮。
    • 此时浏览器会跳转到一个纯文本页面,复制当前浏览器地址栏里的网址
  4. 导入软件:打开 V2rayN,选择“订阅分组” -> “添加订阅”,把刚刚复制的 Raw 网址填入 URL 中即可。

方法二:适用于 Clash 等读取 YAML 的软件
#

Clash 系列软件(如 Clash Verge, Clash for Windows)不支持直接导入 vless:// 这类链接,它们需要的是结构化的 .yaml 配置文件。这时候我们就可以请出 AI 来帮我们打工了。

🛠️ 操作步骤:
#

  1. 收集节点链接:同样从 3X-UI 中复制出想要导入到Clash的单节点链接。

  2. 让 AI 写一段YAML代码。 下面是提示词参考:

    “我这里有一些代理节点链接,请帮我把它们转换成完整的 Clash YAML 订阅配置文件格式(包含 proxies, proxy-groups, rules 等基础结构,请确保能作为一份完整的配置文件直接在 Clash 中使用)。以下是我的节点链接: [在这里粘贴你的所有节点链接]”

  3. 使用 GitHub Gist 托管配置

    • 同样前往 GitHub Gist
    • 将 AI 生成的那一大段 YAML 代码粘贴到文本框中。
    • 将文件名命名为 config.yaml
    • 点击 Create secret gist 保存。
    • 点击 Raw 按钮,并复制浏览器地址栏的链接。
  4. 然后就可以当作购买的梯子那般直接导入订阅了。

避坑指南
#

操作时容易遇到各种奇怪的报错,请对照以下几点进行检查:

1. 绝对不要把 Gist 设置为公开 (Public)
#

这是最容易犯的致命错误。 你的节点链接中包含你的服务器 IP 和密码(UUID),如果点击了 Create public gist,全世界的人(包括各种爬虫脚本)都能直接连上你的服务器,你的流量很快就会被耗尽,甚至 IP 被封锁!请务必确保点击的是 Create secret gist(秘密 Gist)。

2. 复制的是错的网址?注意要点击 Raw
#

新手经常直接复制 Gist 创建完成后的那个带有代码高亮界面的网页地址。代理软件是不认识那个网页的!必须点击文件右上角的 Raw 按钮,跳转到全是纯文本(黑白字)的页面,再复制地址栏的 URL。正确的 Raw 链接通常是以 https://gist.githubusercontent.com/... 开头的。

3. GitHub 打不开
#

国内访问 GitHub 是需要代理的。如果正在设置第一个节点,手上又没有现成的梯子,可能会陷入连 Gist 网页都打不开的尴尬局面,这时先导入单个节点用此节点访问就可以了。

4. 订阅更新失败
#

有些地方的网络环境即使挂了代理,代理软件本身更新订阅时也可能连不上 raw.githubusercontent.com。如果软件在更新订阅时一直提示超时,可以在网上搜索“GitHub Raw 加速代理”,在 Raw 链接前面加上加速前缀即可。

相关文章

番外:网络代理使用 3X-UI 面板与 Hysteria2 独立加装教程

🌐 核心架构设计:为什么这么做? # 过去使用一键翻墙脚本,脚本作者通常采用“霰弹枪策略”:在一个黑盒环境里强行塞入 10 多个协议节点,将其全部打包在一个 Sing-box 内核里。这种方式看似全面,但在 1GB 内存的入门级 VPS(虚拟专用服务器)上会产生严重的弊端:大量闲置进程白白吃掉宝贵的系统资源,且黑盒脚本会死锁底层网络逻辑,导致后续更新极易崩溃或丢失配置。

任务 7:部署限制内存的数据库

在服务器部署的进阶之路上,部署限制内存的数据库是一个必经的关卡 。对于这种小内存的 VPS(比如 RackNerd),如果直接裸跑默认配置的 MySQL 8.0,它会一口气吞掉 400MB 甚至更多的内存,极易导致服务器 OOM(内存溢出)死机。

番外:VS Code + Remote-SSH 模式

对于拥有海外小性能 VPS 的开发者来说,高物理延迟往往是绕不开的痛。如果还在使用传统的终端工具(如 FinalShell),忍受着 nano 或 vim 编辑长文本时吞换行、卡顿的折磨,那么 VS Code + Remote-SSH 绝对是救星。

番外:1G 小内存 VPS 部署 Java JSP 项目实战:Docker 本地构建 + 远程运行完美方案

在拥有了一台属于自己的 VPS(如 1核 1G内存,配置了 2G Swap)后,很多新手在尝试部署 Java 项目时,往往会选择直接在服务器上安装 Maven 或运行 docker build。但现实很残酷:Java 编译极其消耗内存,1G 的内存在构建瞬间就会被挤爆,导致系统卡死或触发 OOM (Out Of Memory) 杀掉进程。

番外:Dockerfile 常用指令详解

基础环境设置 # FROM:指定基础镜像 功能:这是每个 Dockerfile 的第一条指令(除注释外)。它决定了你的应用运行在什么环境之上。 示例:FROM ubuntu:24.04 (基于 Ubuntu 24.04 系统)或 FROM nginx:alpine (基于轻量级的 Nginx 镜像)。 WORKDIR:设置工作目录 功能:相当于 Linux 里的 cd 命令。后续的 RUN、CMD、COPY 等指令都会在这个目录下执行。如果目录不存在,Docker 会自动帮你创建。 示例:WORKDIR /app (将后续操作的默认路径设为容器内的 /app 目录)。 2. 文件复制 # COPY:复制文件/目录到容器中 功能:将宿主机(你的电脑或服务器)上的文件或目录,原封不动地拷贝到容器的指定路径下。 示例:COPY . /app (将当前宿主机目录下的所有文件,复制到容器的 /app 目录下)。 ADD:高级复制 功能:和 COPY 类似,但带有额外功能。如果复制的是一个本地的 .tar.gz 压缩包,ADD 会自动解压到目标路径;它也支持填入一个网络 URL 来下载文件。(新手推荐优先使用 COPY,语义更清晰)。 3. 执行命令与配置 # RUN:在构建镜像时执行命令 功能:这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。注意:每次 RUN 都会生成一个新的镜像层,所以通常会把多条命令用 && 连起来写。 示例:RUN apt-get update && apt-get install -y curl。 ENV:设置环境变量 功能:定义环境变量,后续的 RUN 指令可以使用,并且这些变量也会一直保留到容器运行阶段供你的程序读取。 示例:ENV MYSQL_ROOT_PASSWORD=my-secret-pw 或 ENV PORT=8080。 EXPOSE:声明监听端口 功能:这只是一个声明,告诉使用这个镜像的人,该容器内部的程序会使用哪个端口。它不会自动将端口映射到宿主机,映射依然需要在运行 docker run 时加上 -p 参数或在 docker-compose.yml 中配置。 示例:EXPOSE 80 (声明容器内的 Web 服务使用 80 端口)。 4. 容器启动指令 # CMD:容器启动时的默认命令 功能:指定容器跑起来之后要做的第一件事(例如启动 Nginx、运行 Java 后端应用等)。如果用户在 docker run 时手动指定了其他命令,CMD 的内容会被覆盖。 示例:CMD ["nginx", "-g", "daemon off;"]。 ENTRYPOINT:容器启动的主入口 功能:和 CMD 类似,但它不会被轻易覆盖。通常用于让容器表现得像一个独立的可执行程序。如果同时存在 ENTRYPOINT 和 CMD,CMD 的内容会作为参数传递给 ENTRYPOINT。 综合示例 # 为了方便理解,这里提供一个部署简单前端/静态网页的通用 Dockerfile 模板: