Appearance
部署文档
PNC 通常由一个配置下发服务器、一个或多个核心节点服务器,以及若干客户端或服务发布器组成。第一次部署时,建议按顺序完成控制平面、节点发布和终端接入。
推荐部署顺序
- 部署
ConfigServer:负责设备绑定、节点缓存、管理后台和加密配置下发。 - 部署
CoreServer:在公网主机上发布 VNT 节点,并向ConfigServer上报心跳。 - 安装
Client:Windows 用户通过图形客户端接入节点。 - 部署
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运行环境,以及Client、ServicePublisher的生产构建。 - 同一个
ConfigServer下,每个逻辑核心节点应使用唯一SERVER_NAME;server_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。