Skip to content

部署文档

PNC 通常由一个配置下发服务器、一个或多个核心节点服务器,以及若干客户端或服务发布器组成。第一次部署时,建议按顺序完成控制平面、节点发布和终端接入。

推荐部署顺序

  1. 部署 ConfigServer:负责设备绑定、节点缓存、管理后台和加密配置下发。
  2. 部署 CoreServer:在公网主机上发布 VNT 节点,并向 ConfigServer 上报心跳。
  3. 安装 Client:Windows 用户通过图形客户端接入节点。
  4. 部署 ServicePublisher:Linux 服务机、NAS 或云主机通过无头客户端长期接入节点,并可选提供代理出口。

架构关系

text
Client / ServicePublisher
          |
          | HTTP:绑定机器码、获取节点列表、获取加密配置
          v
ConfigServer
          ^
          | WebSocket:节点配置与心跳
          |
CoreServer

启用代理功能时,ServicePublisher 会在 PNC 虚拟网络内发布代理出口,Client 连接节点后从 CoreServer 服务目录发现该出口。Client 侧代理复用现有 PNC/VNT 连接访问出口,不再创建额外代理虚拟网卡;代理页面提供预设规则多选,当前内置 Steam 非下载和 Epic 非下载域名预设。启动代理时,Client 会临时写入 Windows 系统 PAC 设置,把 Steam 商店、社区、创意工坊、图片、视频、用户内容,以及 Epic 商店、账号登录、启动器服务、好友、库存、订单、静态资源和验证码相关 Web 流量转给本地轻量代理,再由本地代理通过 HTTP CONNECT 或 SOCKS5 CONNECT 转发到 ServicePublisher 出口。多选时规则合并生效,Steam 下载、Depot、内容服务器以及 Epic 游戏/启动器下载 CDN 域名会在 PAC 中优先直连;不读取系统代理/PAC 的应用内网络栈、DoH、硬编码 IP、UDP/QUIC 代理不属于 v1 默认能力。

文档导航

部署前准备

  • 至少准备一台可运行 ConfigServer 的服务器。
  • 至少准备一台有公网 IP 或公网域名的 CoreServer 主机。
  • 如果使用 HTTPS 和域名,反向代理需要支持 WebSocket。
  • 如果使用 ServicePublisher,Linux 主机需要 root 权限和 TUN 能力。
  • 如果使用代理功能,ServicePublisher 代理端口应保持只绑定 PNC 虚拟 IP;Windows Client 需要能够写入当前用户的系统代理/PAC 设置。
  • 生产环境请设置强 ADMIN_PASSWORD 并备份 config_server.db
  • 生产环境请设置并保存 PNC_MACHINE_CODE_SALT。该值必须同时用于 ConfigServer 运行环境,以及 ClientServicePublisher 的生产构建。
  • 同一个 ConfigServer 下,每个逻辑核心节点应使用唯一 SERVER_NAMEserver_id、端口和令牌会随 CoreServer 重启变化,不适合作为长期节点身份。

版本管理

仓库内构建版本以根目录 pnc-version.toml 为唯一人工修改入口。client_version 是 Client 基线版本;ConfigServer、CoreServer、ServicePublisher 会派生为 <client_version>+config.<patch><client_version>+core.<patch><client_version>+sp.<patch>。Client 构建脚本和三个 Rust 组件 Dockerfile 会自动同步版本;宿主机直接执行 Cargo 发布构建时可在仓库根目录运行 node tools/version-sync.mjs --write。最终检查运行 node tools/version-sync.mjs --check

手动执行 docker build 时也要以仓库根目录作为 build context,例如 docker build -f ConfigServer/Dockerfile -t pnc-config-server:local .;Dockerfile 会在镜像构建阶段自动运行当前组件的同步。

下载页版本和 ConfigServer 的 versions.toml 属于发布渠道数据,不跟随该同步工具自动修改。

访问审计

新版 Client 和 ServicePublisher 访问 ConfigServer 时会携带客户端版本和加密机器码 token;ServicePublisher 会额外携带完整组件版本和组件补丁号;访问 CoreServer HTTP API 时还会携带 VNT 内核版本。缺失、不可解析或早于 0.4.6-beta 的客户端基线版本会显示为 <0.4.6-beta>

ConfigServer 管理后台会显示设备最近访问的客户端版本、最后访问时间和公网 IP。访问日志默认写入 logs/config_access.log。CoreServer 的 HTTP 访问日志默认写入 logs/core_access.log

Developed by SleepyCelery & subtlyrabbit. Thanks to VNT & Tauri.