3. 环境准备
POC 部署手册章节。按 2026.10 主线代码核对;命令输出以当次交付的安装器为准。
本章内容:安装器在确认安装之前会做一轮主机检查,但有几类问题只有到写盘之后才会暴露,到那时再找客户的主机、安全、数据库和网络管理员,往往要等很久。本章把这些准备工作提前到安装日之前:先用只读命令自查主机,再分别与主机安全管理员、数据库管理员、存储管理员、网络管理员确认各自负责的事项,最后把物料传上去并核对。读者是实施工程师和客户方的各类管理员。
3.1 主机检查项与安装前自查
适用场景:拿到安装主机的登录权限后、正式安装前一天或更早。
安装器的主机检查项如下。「何时检查」一栏说明这一项在哪个环节暴露,用来判断第 4 章的预检(--check-only)能不能替你提前发现它。
| 检查项 | 要求 | 不满足时 | 何时检查 |
|---|---|---|---|
| 系统与服务托管 | Linux,以 systemd 托管服务 | 阻断,提示「本机没有 systemd,无法托管服务」 | 主机检查(预检包含) |
| CPU 架构 | x86_64 或 aarch64,与离线包平台一致 | 阻断(HOST_ARCH_MISMATCH),需换用本机平台的离线包 | 主机检查(预检包含) |
| 内存 | 不少于 8 GiB | 阻断,提示「内存不足:需要 8 GB,本机 N GB」 | 主机检查(预检包含) |
| 磁盘空间 | 按本次部署的组件累加,见下表 | 未传 --install-dir 时阻断(HOST_DISK_LOW);显式传了 --install-dir(含显式写 /opt/zenova)时只告警 | 主机检查(预检包含) |
| 系统时间 | 建议与时间源同步,并自行确保时间准确 | 未同步或无法确认时仅告警(HOST_CLOCK_UNSYNCED);测得偏差超过 30 秒时阻断(HOST_CLOCK_SKEW),见 3.2 节 | 主机检查(预检包含) |
| CPU 指令集 | 本机部署 ClickHouse 时需要 AVX、AVX2、BMI1、BMI2、FMA、F16C、MOVBE、LZCNT | 阻断(HOST_CPU_FEATURES),可改为使用现有 ClickHouse | 主机检查(预检包含) |
| 容器运行时 | 仅托管智能体、文档解析、多机部署高可用数据层时需要 | 阻断(HOST_CONTAINER_RUNTIME),见 3.4 节 | 主机检查(预检包含) |
| 本机网络地址 | 本机至少有一块已启用、配置了有效 IP 的非回环网卡 | 阻断(HOST_RUNTIME_HOST) | 主机检查(预检包含) |
| 安装目录上级可遍历 | 服务用户 zenova 能进入 /opt 等上级目录 | 阻断(HOST_ROOT_TRAVERSE),见 3.3 节 | 主机检查(预检包含) |
| 安装目录允许执行 | 安装目录所在挂载点没有 noexec | 阻断(HOST_NOEXEC_MOUNT),见 3.3 节 | 主机检查(预检包含) |
| 服务用户属性 | 已有同名用户 zenova 时,主组必须是同名组 zenova | 阻断(HOST_SERVICE_USER),见 3.3 节 | 主机检查(预检包含) |
| 权限 | 以 root 执行 | 阻断,提示加 sudo | 启动时 |
| 业务入口端口 | 访问地址对应的本机监听端口空闲,且不与平台内部端口相同 | 阻断(HOST_ENTRY_PORT_BUSY / HOST_ENTRY_PORT_RESERVED),不会自动更换 | 主机检查之后、录入凭据之前;预检不包含 |
| 程序执行权限 | SELinux、fapolicyd、麒麟 KYSEC 等不拦截服务用户执行 /opt/zenova 下的程序 | 阻断(HOST_SELINUX_DENIED / HOST_FAPOLICYD / HOST_KYSEC_DENIED / HOST_EXEC_DENIED) | 确认安装、解包之后;预检不包含 |
磁盘需求按本次部署的组件累加(GiB):
| 组件 | 需要空间 |
|---|---|
| 基础 | 20 |
| 本机部署 PostgreSQL | +30 |
| 本机部署 ClickHouse | +50 |
| 自带对象存储 | +10 |
| 托管智能体 | +20 |
| 知识库 | +5 |
| 文档解析 | +5 |
典型组合:
| 组合 | 合计 |
|---|---|
| Zentrix 网关(核心,三项依赖都由安装器部署,自带对象存储) | 110 GiB |
| 完整版全部能力(不含数据高可用) | 140 GiB |
| 只装核心,三项依赖都使用现有服务 | 20 GiB |
操作步骤
- 以 root 登录安装主机,逐条执行下面的只读命令,把输出记入交付记录。
# 安装主机 · root · 只读(系统、架构、内存、磁盘)
uname -m
free -g
df -h /opt# 安装主机 · root · 只读(安装目录的挂载选项与上级目录权限)
findmnt -T /opt -o TARGET,OPTIONS
ls -ld / /opt# 安装主机 · root · 只读(是否已有同名服务用户)
id zenova# 安装主机 · root · 只读(CPU 指令集,仅 x86_64 且本机部署 ClickHouse 时需要)
grep -o -w -E 'avx|avx2|bmi1|bmi2|fma|f16c|movbe|abm' /proc/cpuinfo | sort -u# 安装主机 · root · 只读(是否以 systemd 启动、是否有非回环地址)
ps -p 1 -o comm=
ip -br addr- 对照下面的预期逐项判断;不符合的项,按对应小节处理后再执行一次。
你会看到
uname -m输出x86_64或aarch64,且与下载站选的平台一致(linux-amd64对应x86_64,linux-arm64对应aarch64)。free -g的Mem:一行total不小于 8。注意free -g向下取整,物理内存恰为 8 GiB 的主机可能显示 7,以free -m的数值(不小于 8192)为准。df -h /opt的Avail不小于上表算出的合计。不够时,选一个空间更大、可执行的持久数据盘,安装时用--install-dir <目录>指定(第 4 章)。findmnt的OPTIONS一列里没有noexec。ls -ld / /opt两行权限的最后一位都是x(例如drwxr-xr-x)。id zenova输出no such user表示不存在,安装器会自己创建,这是最常见的情况;如果已存在,输出里gid=后面括号中的组名必须是zenova。- 指令集命令输出 8 行:
abm、avx、avx2、bmi1、bmi2、f16c、fma、movbe(abm即 LZCNT)。少任何一项,本机都不能部署 ClickHouse。 ps -p 1 -o comm=输出systemd。ip -br addr至少有一行不是lo且带 IP 地址。
注意:以下两类问题,预检(--check-only)发现不了,必须在安装日之前单独确认:
- 执行权限:SELinux、fapolicyd、麒麟 KYSEC 对程序的拦截,只有在确认安装、离线包解开之后,安装器以服务用户身份实际执行一次随包程序时才能发现。启用了这类强制访问控制的主机,提前按 3.3 节与主机安全管理员约定放行方式。
- 业务入口端口:访问地址依赖的本机监听端口是否被占用,在主机检查之后才检查,预检不包含。提前用 3.7 节的
ss命令确认端口空闲。
注意:虚拟机上指令集不全,多半是虚拟化平台给虚拟机配的 CPU 型号偏低。处理办法是把 CPU 型号改为 host 直通,或 Haswell 及以上型号;做不到时,把分析数据库改为「使用现有的」ClickHouse(3.5 节)。
3.2 时间同步
适用场景:所有安装。未同步或无法确认同步状态时,安装器只告警,允许继续安装;不会把它显示为时间已同步。
建议:安装主机使用客户内网的 NTP 服务器或客户指定的时间源。没有可用时间源时,请自行核对主机时间;安装告警不会关闭登录、二次验证、令牌或证书的时间校验。
安装器按以下情况提示或阻断:
| 情况 | 屏幕上的代码 | 安装行为 |
|---|---|---|
| 已取得时间源,测得偏差超过 30 秒 | HOST_CLOCK_SKEW | 阻断,校准后重试 |
| chrony 报告未同步或只把本地时钟作为时间源 | HOST_CLOCK_UNSYNCED | 仅告警,继续安装 |
| 时间源层级(Stratum)不在 1~15 | HOST_CLOCK_UNSYNCED | 仅告警,继续安装 |
chronyc 与 timedatectl 都给不出结果 | HOST_CLOCK_UNSYNCED | 仅告警,继续安装 |
操作步骤
- 先看当前状态。
# 安装主机 · root · 只读
chronyc tracking
chronyc sources -v
timedatectl- 如果没有配置时间源,或只配了本地时钟,编辑 chrony 配置文件(RHEL、麒麟、openEuler 一般为
/etc/chrony.conf,Ubuntu、Debian 为/etc/chrony/chrony.conf),写入客户提供的 NTP 服务器,删除或注释掉local stratum一类以本地时钟为源的配置行。
server <NTP服务器地址> iburst- 重启时间服务并等待同步。
# 安装主机 · root · 写入(重启时间服务)
systemctl restart chronyd # Ubuntu 上服务名为 chrony
chronyc waitsync 30
chronyc tracking- 偏差已经很大时(例如几分钟),可以让 chrony 立即跳变校准,再执行一次
chronyc tracking。
# 安装主机 · root · 写入(立即校准系统时间)
chronyc makestep- 主机没有 chrony、使用 systemd-timesyncd 时:在
/etc/systemd/timesyncd.conf的[Time]段写入NTP=<NTP服务器地址>,然后执行:
# 安装主机 · root · 写入(启用 systemd-timesyncd 同步)
timedatectl set-ntp true
systemctl restart systemd-timesyncd
timedatectl show -p NTPSynchronized你会看到
chronyc tracking中Leap status为Normal,System time的偏差远小于 30 秒,Stratum在 1~15 之间。chronyc sources -v中至少有一个源行首为^*(当前选用的源)。- 使用 systemd-timesyncd 时,最后一条命令输出
NTPSynchronized=yes。 - 安装时主机检查的「系统时间」一项显示
✓,下面一行写明「已同步,时间偏差 N 秒(安装前上限 30 秒)」。
注意:仅未同步或无法确认状态时,安装器不会等待校时完成。若已测得偏差超限,可另开终端校时,再回到安装器重新检查;此时会等待校时服务收敛。
注意:准确时间仍是正常使用的条件。登录的两步验证码、证书校验、调用记录的时间顺序都依赖准确的时间,安装后也应保持校时机制可用。
3.3 目录权限与安全模块
适用场景:/opt 权限被收紧、/opt 挂在带 noexec 的分区、主机上已有 zenova 用户,或主机启用了 SELinux(Enforcing)、fapolicyd、麒麟 KYSEC。
平台服务以系统用户 zenova 身份运行(安装器创建,不可登录)。它需要能进入安装目录的每一级上级目录,并能执行安装目录下的程序。
| 情况 | 屏幕上的代码 | 处理 |
|---|---|---|
/opt 或更上级目录权限为 0700 等,服务用户进不去 | HOST_ROOT_TRAVERSE | setfacl -m u:zenova:--x /opt,或把 /opt 设为 0755 |
/opt 所在挂载点带 noexec | HOST_NOEXEC_MOUNT | 调整挂载选项,或为 /opt/zenova 单独挂一块允许执行的数据盘 |
已有同名用户 zenova,但主组不是 zenova | HOST_SERVICE_USER | usermod -g zenova zenova 修正主组,或确认该用户无其他用途后删除 |
| SELinux 拦截执行 | HOST_SELINUX_DENIED | 由主机安全管理员放行 |
| fapolicyd 拦截执行 | HOST_FAPOLICYD | 由主机安全管理员放行 |
| 麒麟 KYSEC 拦截执行 | HOST_KYSEC_DENIED | 由主机安全管理员放行 |
| 执行被拒绝,原因无法自动判定 | HOST_EXEC_DENIED / HOST_EXEC_DENIED_UNKNOWN | 按屏幕给出的命令处理;仍不行时查看 dmesg 与审计日志,执行 sudo zenova doctor 后联系技术支持 |
操作步骤
- 上级目录不可遍历时,二选一执行:
# 安装主机 · root · 写入(只给服务用户增加进入权限)
setfacl -m u:zenova:--x /opt# 安装主机 · root · 写入(把 /opt 设为常规权限)
chmod 0755 /optsetfacl 要求服务用户已经存在。用户还没创建时(首次安装前的常见情况),用 chmod,或先与主机管理员约定在安装器报出 HOST_ROOT_TRAVERSE 后再执行 setfacl。
- 挂载点带
noexec时,由主机管理员去掉该挂载选项并同步修改/etc/fstab;或另挂一块允许执行的数据盘,安装时用--install-dir指向它。
# 安装主机 · root · 写入(重新挂载为允许执行,需同步修改 /etc/fstab)
mount -o remount,exec <挂载点>- 已有同名用户但主组不对时:
# 安装主机 · root · 写入(把 zenova 用户的主组改为同名组)
usermod -g zenova zenova- 启用了强制访问控制的主机,安装前与主机安全管理员确认放行方式。安装器报出拦截时,屏幕会直接给出针对本机路径的处理命令,形式如下(
<安装根>默认为/opt/zenova),由安全管理员审核后执行:
| 机制 | 屏幕给出的处理命令 |
|---|---|
| SELinux | sudo chcon -R -t bin_t <安装根>/releases/ |
| fapolicyd | sudo fapolicyd-cli --file add <安装根>/releases/ --trust-file zenova && sudo fapolicyd-cli --update |
| 麒麟 KYSEC | sudo kysec_set -rn exectl -v verified <安装根>/releases/(或 sudo setstatus softmode -p) |
- 放行后,重新执行同一条安装命令。
你会看到
- 目录与挂载问题在主机检查页以
✗标出,处理后按回车重新检查即可变为✓。 - 执行权限问题出现在确认安装之后,屏幕逐条列出
✗ [<代码>] <原因> <处理办法>,安装停止。此时安装器已写入部分内容,按第 4.8 节续装,不要手工清理。
注意:安全模块的拦截在解包之后才能发现,预检通过不代表不会被拦截。启用了强制访问控制的主机,最稳妥的做法是安装前就把放行方式与主机安全管理员谈定,并约好安装当天的联系人。
注意:chcon 设置的标签在系统执行全盘重新标记后可能丢失;需要长期保留时,由主机安全管理员按客户自己的 SELinux 策略管理规范处理。升级会在 releases/ 下新增版本目录,放行策略要覆盖整个 releases/ 目录而不是某一个版本目录。
3.4 容器运行时
适用场景:本次要启用「托管智能体」「文档解析」,或多机方案中由安装器部署高可用 PostgreSQL。Zentrix 网关不包含以容器运行的能力,单机安装 Zentrix 网关不需要容器运行时,可以跳过本节。
前提:主机已安装 Docker 并处于运行状态。
操作步骤
- 确认 Docker 可用。
# 安装主机 · root · 只读
docker info --format '{{.ServerVersion}}'- Docker 未启动时:
# 安装主机 · root · 写入(启动 Docker 并设为开机自启)
systemctl enable --now docker- 启用托管智能体时,取得客户安全负责人的书面同意,见下方「注意」。
- 正式安装时,只有启用托管智能体才把服务用户
zenova加入docker组并验证其访问。只启用文档解析时,服务单元由 root 管理,平台经 HTTP 访问,安装器只核对 root 能使用 Docker。
你会看到
- 第 1 步输出一个版本号。输出报错表示 Docker 未安装或未运行。
- 安装器主机检查页的「容器运行时」一项显示
✓;不可用时为✗并提示「所选能力需要容器运行时,但本机 Docker 不可用」。
注意:加入 docker 组等同于授予宿主机 root 权限。 启用托管智能体前,取得客户安全负责人的书面同意,并把同意记录归入交付材料。仅文档解析不会改变服务用户的 Docker 权限。
注意:安装时没选这类能力、装完后在控制台「系统更新」页再启用时,控制台会重新检查容器运行时。检查失败时提示「所选能力需要容器运行时,但平台服务用户无法访问本机的 Docker」,按本节准备好 Docker 后重试。
3.5 准备现有数据库与对象存储
适用场景:平台数据库(PostgreSQL)、分析数据库(ClickHouse)或对象存储中有任何一项要「使用现有的」。三项都由安装器部署时跳过本节。
三项依赖在安装时逐项选择:
| 依赖 | 由安装器部署 | 使用现有服务 |
|---|---|---|
| 平台数据库(PostgreSQL) | 本机初始化,只监听回环地址 | 见下文「PostgreSQL」 |
| 分析数据库(ClickHouse,必装) | 本机初始化,只监听回环地址 | 见下文「ClickHouse」 |
| 对象存储 | 「自带对象存储(推荐,生产)」或「使用本机目录(单机试用)」 | 见下文「S3 兼容对象存储」 |
注意:选择「使用现有的」会改变后续运维边界,事先与客户讲清楚:
zenova backup不备份现有 PostgreSQL 与现有 S3,这两部分由客户数据库管理员、存储管理员按其备份机制保护。ClickHouse 无论自建还是现有,都经 HTTP 接口纳入平台备份。- 三项依赖都由安装器部署时才能使用清空重装(
--fresh);只要有一项使用现有服务,就不能清空重装。 - 对象存储方式安装后不能在线更换。
PostgreSQL
要求
| 项目 | 要求 |
|---|---|
| 版本 | PostgreSQL 16 |
| 账号 | 超级用户(rolsuper 为真)。安装器用它创建平台所需的角色、库与扩展,数据库管理员不需要另外执行脚本;该账号的密码只在安装过程中使用,不写入任何文件与日志 |
| 扩展 | 服务器上可用:vector(0.7 及以上)、pg_trgm、uuid-ossp、pgcrypto、btree_gist |
| 连接数 | max_connections 不低于 400 |
| 库名 | 不需要提供。平台的库由安装器创建,库名固定 |
| 网络 | 安装主机能访问数据库的地址与端口 |
操作步骤(由客户数据库管理员执行)
- 用准备交给安装器的那个管理员账号登录。下面的命令可以在任何装有
psql且能访问数据库的主机上执行。
# 数据库管理员主机 · 数据库管理员 · 只读
psql "host=<数据库地址> port=<端口> user=<管理员账号> dbname=postgres"- 在
psql中逐条执行:
-- 只读:版本应为 16
SHOW server_version;
-- 只读:当前账号是否超级用户,应返回 t
SELECT rolsuper FROM pg_roles WHERE rolname = current_user;
-- 只读:所需扩展是否可用,应返回 5 行,vector 的版本不低于 0.7
SELECT name, default_version
FROM pg_available_extensions
WHERE name IN ('vector', 'pg_trgm', 'uuid-ossp', 'pgcrypto', 'btree_gist')
ORDER BY name;
-- 只读:连接数上限,应不低于 400
SHOW max_connections;- 把以下信息交给实施工程师:访问地址(主机:端口)、管理员账号、加密方式(见下文「加密方式与 CA」)、CA 证书文件(如需要)。密码在安装现场由数据库管理员本人录入,或经凭据文件提供(第 5 章),不经即时通讯或邮件传递。
你会看到
- 四条查询分别返回
16.x、t、5 行扩展、不小于 400 的数字。
注意:云数据库提供的「高权限账号」通常不是超级用户,rolsuper 返回 f,安装器的依赖检测会拒绝。此时需要客户换用自建 PostgreSQL,或请云厂商开通超级用户;做不到时改为由安装器部署。
注意:扩展少一项时,由数据库管理员在数据库服务器上安装对应的扩展包(vector 即 pgvector)。pg_available_extensions 里能查到即可,不需要预先 CREATE EXTENSION,安装器会自己创建。
ClickHouse
要求
| 项目 | 要求 |
|---|---|
| 版本 | 26.7 及以上 |
| 接口 | HTTP 或 HTTPS 接口端口(常见 8123 / 8443),不是原生协议端口 9000 |
| 账号 | default 账号,并设置了密码 |
| 宏 | 已配置 cluster、shard、replica 三个宏 |
| 建库权限 | default 账号可以建库 |
| 库类型 | 单机库(普通 MergeTree)或复制库(库引擎 Replicated)。安装时要选择,安装器会核对选择与库的实际引擎是否一致 |
操作步骤(由客户数据库管理员执行)
- 在能访问 ClickHouse HTTP 接口的主机上执行。用 HTTPS 接口时把
http://换成https://、端口换成对应端口。
# 数据库管理员主机 · 数据库管理员 · 只读(版本与宏)
CH='http://<ClickHouse地址>:8123/'
curl -sS -u 'default:<密码>' "$CH" --data-binary 'SELECT version()'
curl -sS -u 'default:<密码>' "$CH" --data-binary 'SELECT macro, substitution FROM system.macros'# 数据库管理员主机 · 数据库管理员 · 写入(建一个临时库再删除,验证建库权限)
curl -sS -u 'default:<密码>' "$CH" --data-binary 'CREATE DATABASE zenova_selfcheck'
curl -sS -u 'default:<密码>' "$CH" --data-binary 'DROP DATABASE zenova_selfcheck'- 告诉实施工程师本次使用单机库还是复制库,以及访问地址、端口、加密方式与 CA 证书(如需要)。
你会看到
- 第一条返回不低于
26.7的版本号。 - 第二条至少返回
cluster、shard、replica三行。 - 建库、删库两条无输出、无报错。
注意:用 9000 端口填写访问地址,依赖检测无法通过。ClickHouse 是所有部署形态的必装组件,调用明细、用量统计与策略命中都存放在这里;不能跳过,只能在「由我们部署」与「使用现有的」之间选。
S3 兼容对象存储
要求
| 项目 | 要求 |
|---|---|
| 协议 | S3 兼容 |
| 存储桶 | 预先建好 |
| 访问密钥 | 对该存储桶有读、写、删权限 |
| 需要提供的四项 | 访问地址(http://… 或 https://…)、区域、存储桶、寻址方式(路径寻址或虚拟主机寻址) |
操作步骤(由客户存储管理员执行)
- 建好存储桶,生成访问密钥并授予读、写、删权限。
- 用存储管理员熟悉的 S3 客户端验证三种权限。以 AWS CLI 为例:
# 存储管理员主机 · 存储管理员 · 写入(上传、读取、删除一个临时对象)
export AWS_ACCESS_KEY_ID='<访问密钥 ID>'
export AWS_SECRET_ACCESS_KEY='<访问密钥>'
echo selfcheck > /tmp/zenova-selfcheck.txt
aws --endpoint-url <访问地址> --region <区域> s3 cp /tmp/zenova-selfcheck.txt s3://<存储桶>/zenova-selfcheck.txt
aws --endpoint-url <访问地址> --region <区域> s3 cp s3://<存储桶>/zenova-selfcheck.txt -
aws --endpoint-url <访问地址> --region <区域> s3 rm s3://<存储桶>/zenova-selfcheck.txt- 把访问地址、区域、存储桶、寻址方式交给实施工程师。访问密钥 ID 与访问密钥在安装现场录入或经凭据文件提供。
你会看到
- 三条命令依次显示上传成功、打印
selfcheck、显示删除成功。
注意:对象存储没有单独的加密选项。访问地址以 https:// 开头即为加密连接,此时证书须能被安装主机的系统信任库校验。
加密方式与 CA
使用现有 PostgreSQL 或 ClickHouse 时,安装器询问加密方式,三选一,缺省为明文:
| 选项 | 含义 | 需要准备 |
|---|---|---|
| 「明文(不加密)」 | 不加密 | 无 |
| 「加密(校验交给系统信任库)」 | 加密,并校验服务器证书与主机名,CA 取自安装主机的系统信任库 | 数据库证书由系统信任库中的 CA 签发;访问地址里的主机名与证书一致 |
| 「加密并用指定 CA 证书校验」 | 加密,并校验服务器证书与主机名,CA 取自指定文件 | 把 CA 证书文件提前放到安装主机上,记下绝对路径,安装时要填 |
注意:后两种都会校验证书与主机名,区别只在 CA 从哪里来。用 IP 访问而证书里只有域名时,校验会失败,要么改用证书里的域名作为访问地址,要么由数据库管理员重签证书。生产环境建议加密。
注意:安装器的依赖检测会创建并删除临时库(zenova_probe_<随机串>)或临时对象(zenova-probe/<随机串>),不写入业务数据。如果客户的数据库审计会对建库操作告警,提前告知数据库管理员。
3.6 上传物料与校验
前提:已按第 2 章取得安装器归档与离线包,并在联网机器上核对过。
暂存目录的选择规则:
| 规则 | 说明 |
|---|---|
| 不放在安装根里 | 不要放在 /opt/zenova 或 --install-dir 指定的目录下;清空重装时安装器会拒绝处理位于待清理目录内的安装输入 |
| 空间足够 | 至少容纳安装器归档与离线包两个文件。离线包在安装时解开到安装根,不占暂存目录的额外空间 |
| 仅 root 可读 | 暂存目录之后还会放凭据文件 secrets.toml,权限设为 0700 |
| 保留到交付验收结束 | 安装器与离线包在续装、清空重装、远端节点安装时还要用 |
本手册统一使用 /root/zenova-install 作为暂存目录。
操作步骤
- 在安装主机上建暂存目录。
# 安装主机 · root · 写入(创建暂存目录)
install -d -m 0700 /root/zenova-install- 在存放物料的机器上,把两个文件传到安装主机的暂存目录。登录账号无权写
/root时,先传到该账号的家目录,再在安装主机上以 root 移入。
# 物料所在机器 · 普通用户 · 写入(上传到安装主机)
scp zenova-<版本>-linux-amd64.tar.gz <离线包>.zpkg <账号>@<安装主机地址>:/root/zenova-install/- 在安装主机上核对安装器摘要。
<安装器摘要>取自下载站「安装器摘要(SHA-256)」一栏,两个空格分隔摘要与文件名。
# 安装主机 · root · 只读(核对安装器摘要)
cd /root/zenova-install
echo '<安装器摘要> zenova-<版本>-linux-amd64.tar.gz' | sha256sum -c -- 核对离线包大小与下载站显示的「离线包大小」一致。
# 安装主机 · root · 只读
ls -l /root/zenova-install- 解开安装器,查看安装器版本与产品。
# 安装主机 · root · 写入(在暂存目录解出 zenova 程序)
cd /root/zenova-install
tar -xzf zenova-<版本>-linux-amd64.tar.gz
./zenova --version- 查看离线包的产品、版本与通道。
# 安装主机 · root · 只读
tar -xOf <离线包>.zpkg release.json | grep -oE '"(edition|version|channel)": ?"[^"]*"'- 为后面的命令设置离线包变量。
# 安装主机 · root · 只读(仅设置当前会话的变量)
ZPKG=/root/zenova-install/<离线包>.zpkg你会看到
- 第 3 步输出
zenova-<版本>-linux-amd64.tar.gz: OK。输出FAILED表示文件损坏或拿错,重新下载。 - 第 5 步输出一行,以版本号开头,后跟产品名(应为
Zentrix 网关)与括号内的构建提交。 - 第 6 步输出三行:产品(
zentrix_gateway或zenova)、版本号、通道(stable或test)。
注意:以下三处必须一致,任何一处不符就不要继续,换用正确的文件:
./zenova --version的版本号与产品名;release.json中的version与edition;- 下载站上选择的版本与产品。
安装器与离线包版本不一致时,安装器会直接拒绝(「安装器版本 … 与离线包版本 … 不一致」);产品不一致时提示「安装包与安装程序不属于同一版本」。提前核对可以省下一次失败。
注意:离线包没有单独的校验文件。安装器启动后会按 release.json 记录的摘要逐个校验组件,摘要校验只用于发现下载损坏,不是签名校验。
3.7 网络与防火墙准备
适用场景:所有安装。与客户网络管理员一起完成,网络策略变更通常需要提前走审批。
入站放行项
| 端口 | 用途 | 放行范围 | 安装器在 Linux 上是否自动放行 |
|---|---|---|---|
| 业务入口端口(访问地址对应的本机监听端口,缺省 80) | 浏览器访问控制台、调用方访问模型接口 | 用户与调用方所在网段,或前置代理/负载均衡 | 是 |
| 443 | 网关域名站点的 TLS 监听 | 按需 | 是 |
管理入口端口(仅在用 --admin-entry-port 分离时存在) | 控制台单独入口 | 管理员所在网段 | 否,需手工放行 |
| SSH | 运维登录 | 运维堡垒机或运维网段 | 不涉及 |
不得对外开放的端口
以下端口监听在全部网卡上,供本机智能体容器回连宿主服务使用,不得在主机防火墙、云安全组或网络边界上对外放行:
| 端口 | 用途 |
|---|---|
| 3010 | 内部服务 |
| 3080 | 中心网关节点数据面 |
| 3300 | 内部服务 |
| 3320 | 入口代理内部入口 |
| 3325 | 入口代理内部入口 |
其余内部服务只监听回环地址,不需要也不应从主机外访问。
出站需要放行的目标
安装过程本身不需要外网,安装所需内容都在安装器与离线包里。出站需求来自安装后要连接的对象,按交付范围逐项列出并请网络管理员放行:
| 目标 | 何时需要 |
|---|---|
| 现有 PostgreSQL、ClickHouse、S3 兼容存储的地址与端口 | 选择「使用现有的」时,安装前就必须通 |
| 运维通知渠道(钉钉、飞书、企业微信或 Webhook 地址) | 安装时配置了运维通知;安装器会发送测试消息,装后验收会检查真实出网 |
| 模型供应商的接口地址 | 配置模型时 |
| MCP、API 服务、外部智能体等工具地址 | 交付范围含工具调用时 |
| SSO、目录同步、SMTP | 交付范围含这些集成时 |
| 证书颁发机构与 DNS 服务商接口 | 使用入口证书自动签发时;不允许出网时改为手动上传证书 |
远端网关节点主机还需要能访问控制面回连地址;该地址以 https:// 开头,放行的端口以回连地址中的端口为准。
操作步骤
- 确认业务入口端口在安装主机上空闲(以 80 为例,换成你的本机监听端口)。
# 安装主机 · root · 只读
ss -lntp | grep -w ':80'- 确认主机使用哪种防火墙。
# 安装主机 · root · 只读
systemctl is-active firewalld
systemctl is-active ufw
systemctl is-active nftables- 主机使用 ufw 或 nftables 时,安装器不会处理,由主机管理员在安装后手工放行业务入口端口(及 443、分离后的管理入口端口)。
- 把上面的出站清单交给网络管理员,确认现有依赖的地址在安装前已经可达。
# 安装主机 · root · 只读(检查到现有依赖的 TCP 连通性,以 PostgreSQL 为例)
timeout 5 bash -c '</dev/tcp/<数据库地址>/<端口>' && echo reachable- 安装完成后,核对防火墙与监听情况(第 4.6 节的「监听边界」验收也会检查本产品进程的监听范围)。
# 安装主机 · root · 只读
firewall-cmd --list-ports
ss -lntp你会看到
- 第 1 步无输出,表示端口空闲;有输出时,最后一列是占用的进程,安装前先与客户确认能否停止它,或改用其他端口。
- 第 2 步中处于
active的那一项就是本机使用的防火墙。 - 第 4 步输出
reachable。 - 安装完成后,
firewall-cmd --list-ports中出现业务入口端口与 443。
注意:安装器只在 Linux 首次安装时,把业务入口端口与 443 写入 firewalld 或 iptables。它不放行分离后的管理入口端口,不放行安装后在控制台修改过的入口端口,不处理 ufw 与 nftables。云主机还要另外在云安全组中放行。
注意:业务入口端口被占用时,安装会停在端口检查,不会自动更换;平台内部服务的端口被占用时,安装器自动顺延到下一个空闲端口并逐条说明,不需要处理。
能力说明
| 不提供的能力 | 替代做法 |
|---|---|
| 在预检中发现安全模块拦截与业务入口端口占用 | 安装前按 3.3 节与主机安全管理员约定放行方式,按 3.7 节用 ss 确认端口空闲 |
| 自动安装或配置时间服务、Docker、数据库扩展 | 由客户主机管理员、数据库管理员按 3.2、3.4、3.5 节准备 |
| 使用非超级用户的 PostgreSQL 账号 | 换用自建 PostgreSQL 或开通超级用户;做不到时改为由安装器部署 |
| 自动放行 ufw、nftables、云安全组和分离后的管理入口端口 | 由主机管理员、网络管理员按 3.7 节手工放行 |
| 备份现有 PostgreSQL 与现有 S3 | 纳入客户数据库管理员与存储管理员的备份体系 |
| 安装后在线更换对象存储方式 | 安装前定好;需要更换时备份后按新选择重新安装,再恢复数据 |