跳到主要内容
版本:3.10.x

使用离线 RPM 包部署

本文介绍如何在 Red Hat 系 Linux 系统(RHEL、Rocky Linux、AlmaLinux、CentOS 8/9)中,使用离线 RPM 包部署 API7 企业版。下载安装包后,安装过程不再依赖外网,只需要 tarsystemctl、文本编辑器和浏览器即可完成部署。

架构

API7 企业版由控制面(CP)和数据面(DP)组成:

层级职责说明
控制面管理与控制配置网关、签发数据面证书、下发配置、汇聚可观测性数据,并将配置、用户和审计日志等持久化到 PostgreSQL
数据面流量处理运行 APISIX/OpenResty,执行路由和插件;数据面本身无状态,配置由控制面同步

评估环境可以将控制面和数据面部署在同一台主机上;生产环境建议将二者部署在不同主机上。本文用“CP 主机”表示控制面主机,用“DP 主机”表示数据面主机;在单机部署中二者指同一台机器。

控制台(Dashboard)必需组件

组件来源是否必需用途
api7ee-dashboardapi7ee-dashboard RPM,内置 Node.js控制面后端,通过 7443 提供 UI/API
api7ee-console同一个 api7ee-dashboard RPM,通过内置 Node.js 运行Web 控制台 UI,由 Dashboard 反向代理(3000 -> 7443
api7ee-dp-managerapi7ee-dp-manager RPM向网关下发配置、签发数据面 mTLS 证书、处理心跳(7943
PostgreSQL外部依赖;单机 RPM 快速试用 会安装本地 PostgreSQL,生产环境建议自行提供持久化配置、用户、审计日志等数据
Prometheus外部依赖,不包含在安装包中指标场景必需接收 dp-manager remote-write 的网关指标,用于 Dashboard 分析视图,见安装 Prometheus
Jaeger外部依赖,不包含在安装包中链路追踪场景必需保存请求 Trace,用于 Dashboard 在线调试和追踪视图
api7-gatewayapi7-gateway RPM数据面必需处理 API 流量;Dashboard 本身不依赖它启动,但需要它才能管理实际流量,见接入数据面网关

系统要求

项目要求
操作系统RHEL / Rocky / AlmaLinux / CentOS 8 或 9,x86_64
初始化系统systemd,所有组件都以 systemd 服务运行。容器化评估时也必须让 systemd 作为 PID 1 运行,见方法 A
权限rootsudo
PostgreSQL13+,推荐 15;可部署在本机、独立主机或云托管数据库中
控制面端口7443(控制台/API,对外访问)、7943(数据面 mTLS 接入,需对 DP 主机开放)、7900/7901/7080/7081(本地/内部)
数据面端口9080/9443,用于业务流量入口
网络可完全离线;如控制面和数据面分离,DP 主机必须能访问 CP 主机的 7943,控制面必须能访问 PostgreSQL 的 5432

获取安装包

先确认目标主机的 CPU 架构和 Red Hat 系发行版主版本:

uname -m              # CPU architecture -> <arch>,例如 x86_64
cat /etc/os-release # 查看 PLATFORM_ID,例如 "platform:el9" -> <dist>,例如 el9

安装包文件名格式为 api7-ee-rpm-<version>-<dist>.<arch>.tar.gz,例如 api7-ee-rpm-3.10.1-el9.x86_64.tar.gz

字段来源示例
<version>要安装的 API7 企业版版本3.10.1
<dist>/etc/os-releasePLATFORM_ID 对应的 Red Hat 系主版本el8el9
<arch>uname -m 输出的 CPU 架构,目前安装包为 x86_64x86_64

替换以下变量后下载匹配的安装包:

export API7EE_VERSION="3.10.1"   # 要安装的版本
export API7EE_DIST="el9" # 来自 /etc/os-release 的 PLATFORM_ID
export API7EE_ARCH="x86_64" # 来自 uname -m
curl -fSLO "https://run.api7.ai/api7-ee/api7-ee-rpm-${API7EE_VERSION}-${API7EE_DIST}.${API7EE_ARCH}.tar.gz"

如果目标主机处于隔离网络,请在可访问互联网的机器上下载 .tar.gz,再复制到目标主机。只有下载步骤需要联网,解压和安装可以完全离线完成。

安装包内容

文件类别内容
api7ee-dp-manager-*.rpm控制面数据面管理、配置下发和证书签发服务
api7ee-dashboard-*.rpm控制面控制面后端和 Web 控制台,默认 TLS 7443,内置 Node.js;一个包提供 api7ee-dashboardapi7ee-console 两个 systemd 服务
api7-gateway-*.rpm数据面网关运行时,包含 APISIX 和内置 OpenResty
which-*.rpmlibxslt-*.rpm系统依赖网关运行所需的少量系统库,已随包提供
install.sh安装脚本一次性离线安装上述 RPM
quickstart.sh评估辅助脚本单机评估一键启动脚本,见方法 A

每个软件包都自带运行时(Node.js / OpenResty),不依赖主机预装的 nodejsopenresty,因此离线安装不会影响主机上已有软件。

安装包不包含 PostgreSQL、许可证和数据面证书。PostgreSQL 需要自行准备;许可证在安装完成后通过控制台上传;数据面证书由控制台按网关组自动签发。

部署流程概览

标准部署路径按以下顺序执行:

  1. 准备 PostgreSQL。
  2. 安装 RPM 包。
  3. 配置并启动控制面。
  4. 初始化控制台(Dashboard):修改默认密码并上传许可证。
  5. 接入数据面网关:使用控制台签发的证书和连接参数配置 DP 主机上的网关。
  6. 在控制台确认实例状态为 Healthy

根据场景选择一种部署路径:

路径适用场景特点
方法 A:单机 RPM 快速试用单机评估 / 概念验证(PoC)一条命令完成安装,自动安装并初始化本地 PostgreSQL,几分钟内可用
方法 B:标准生产部署生产环境手动逐步配置,支持外部/高可用数据库、CP/DP 分离和安全加固

方法 A:快速评估

在单机评估或概念验证(PoC)场景中,安装包内置的 quickstart.sh 可以在几分钟内拉起控制面。它会安装 RPM,安装并初始化本地 PostgreSQL,配置并启动控制面,然后打印访问地址。

完整流程请参考单机 RPM 快速试用,其中也包含容器化评估方式。

方法 B:生产标准部署

准备 PostgreSQL

控制面需要 PostgreSQL 13+,推荐使用 15。控制面启动时会自动迁移 schema,无需手动建表。如果你已经有可用数据库,请直接跳到创建数据库和角色

安装

联网主机:

sudo dnf -y module enable postgresql:15   # RHEL/Rocky 8 必需,9 可选
sudo dnf -y install postgresql-server

离线主机:在同版本联网机器上下载 RPM,复制到目标主机后安装:

# online machine
sudo dnf -y module enable postgresql:15 # RHEL/Rocky 8 必需,否则默认 PG 10(低于 13)
sudo dnf install -y --downloadonly --downloaddir=./pg-rpms postgresql-server
# target machine (after copying in pg-rpms/)
sudo dnf -y localinstall ./pg-rpms/*.rpm --disablerepo='*'

初始化并启动 PostgreSQL

sudo /usr/bin/postgresql-setup --initdb
sudo systemctl enable --now postgresql

创建数据库和角色

sudo -u postgres psql <<'SQL'
CREATE USER api7ee WITH PASSWORD 'YourStrongPassword';
CREATE DATABASE api7ee OWNER api7ee;
SQL

启用密码认证

控制面会通过“用户名 + 密码 + TCP”连接 PostgreSQL,而 RHEL 默认本地 TCP 可能使用 ident,会导致连接失败。编辑 /var/lib/pgsql/data/pg_hba.conf,在通用规则之前加入:

host    api7ee    api7ee    127.0.0.1/32    scram-sha-256
host api7ee api7ee ::1/128 scram-sha-256

如果数据库和控制面不在同一台主机,还需要在 postgresql.conf 中设置 listen_addresses = '*',在 pg_hba.conf 中加入控制面网段,例如 host api7ee api7ee 10.0.0.0/24 scram-sha-256,并开放防火墙 5432 端口。

修改后重载 PostgreSQL:

sudo systemctl reload postgresql

验证并记录连接串

PGPASSWORD='YourStrongPassword' psql -h 127.0.0.1 -U api7ee -d api7ee -c '\conninfo'

下一步会用到连接串:postgres://api7ee:YourStrongPassword@<PG_HOST>:5432/api7ee。如果密码包含 @、冒号(:)、斜杠(/)或问号(?)等特殊字符,请做 URL 编码,例如 @ 编码为 %40

安装软件包

在 CP 主机和 DP 主机各执行一次:

tar -xzf api7-ee-rpm-<version>-<dist>.<arch>.tar.gz
cd api7-ee-rpm-<version>-<dist>.<arch>/
sudo ./install.sh # 等价于 dnf -y localinstall ./*.rpm --disablerepo='*'

如果控制面和数据面分离,CP 主机只需要两个控制面包(api7ee-dp-managerapi7ee-dashboard),DP 主机只需要 api7-gateway。安装完整包也受支持,但不要启动不需要的服务。

配置控制面

/usr/local/api7/dp-manager/conf/dp-manager.yaml/usr/local/api7/dashboard/conf/dashboard.yaml 中写入相同的数据库连接串,其余配置可先保持默认:

database:
dsn: "postgres://api7ee:YourStrongPassword@<PG_HOST>:5432/api7ee"

控制台默认通过 7443 以 TLS 方式监听。如需使用自有证书,请在 dashboard.yaml 中设置 server.tls.cert_fileserver.tls.key_file;留空则使用内置自签名证书。

通常不需要修改 console.env。请保持 PORT=3000,因为控制台(Dashboard)会反向代理到 127.0.0.1:3000;修改该端口会导致 502。

启动控制面

sudo systemctl enable --now api7ee-dp-manager
sudo systemctl enable --now api7ee-dashboard # 同时拉起 api7ee-console
systemctl is-active api7ee-dp-manager api7ee-dashboard api7ee-console # 预期均为 active

开放浏览器访问端口 7443,以及分离部署时 DP -> CP 需要访问的 7943

sudo firewall-cmd --add-port=7443/tcp --add-port=7943/tcp --permanent && sudo firewall-cmd --reload

如果 SELinux 为 Enforcing 且服务异常,可先查看 sudo ausearch -m avc -ts recent。必要时可临时执行 sudo setenforce 0 验证是否与策略相关,再补充正确策略;不建议无理由全局禁用 SELinux。

初始化控制台(Dashboard)

  1. 在浏览器打开 https://<CP_HOST>:7443,接受自签名证书。
  2. 首次使用 admin / admin 登录,并按提示修改密码。
  3. 进入 Settings -> License 上传许可证,并确认状态正常。

接入数据面网关

控制台会统一签发数据面的连接参数和 mTLS 证书,不要手动拼接或复制不同环境的参数。

如果 Add Instance 弹窗要求填写 DP Manager(控制面)端点,请填写 https://<CP_HOST>:7943<CP_HOST> 是 DP 主机可访问的控制面 IP 或域名,7943 是数据面 mTLS 端口。

  1. 在控制台进入 Gateway Groups,选择或创建网关组,点击 Add Instance
  2. 控制台会生成包含网关组证书和控制面地址的部署脚本。

当前 Add Instance 会生成 Docker、Docker Compose 和 Helm 脚本,还不会直接生成原生 RPM 脚本。对于通过 RPM 安装的网关,请参考从 Docker 脚本接入 RPM 数据面,将相同连接参数写入 /usr/local/apisix/conf/config.yaml,然后重启网关服务:

systemctl restart api7-gateway

验证部署

# DP host
systemctl is-active api7-gateway # active
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9080/ # 404 = 已提供服务(尚无路由)

在控制台打开网关组的 Instances 页面。实例状态变为 Healthy(心跳和配置同步均成功)后,部署完成。此后在控制台发布服务和路由,数据面会自动同步配置。

安装 Prometheus

控制台(Dashboard)的指标和分析数据不存储在 dp-manager 中。网关会将指标块推送到 dp-manager,再由 dp-manager remote-write 到 Prometheus。Prometheus 是外部服务,不包含在 RPM 包中;需要安装并配置后,Dashboard 才能展示流量指标。

  1. 在 CP 主机或可达主机上安装 Prometheus,并启用 remote-write receiver:

    prometheus --web.enable-remote-write-receiver   # Prometheus v2.54+
    # older builds: --enable-feature=remote-write-receiver
  2. 配置 dp-manager 指向 Prometheus:

    prometheus:
    addr: "http://127.0.0.1:9090" # Prometheus 地址
    remote_write_path: "/api/v1/write"

    保存后重启 dp-manager:

    systemctl restart api7ee-dp-manager

在 Prometheus 安装和配置完成前,控制台(Dashboard)不会显示流量指标,网关日志可能出现 agent.lua:544: upload metrics block failed, status: 500。这是未配置 Prometheus 时的预期现象,不影响代理流量和实例健康状态。

运维参考

安装后的文件布局

/usr/local/api7/              # control plane
├── dp-manager/ # binaries and configuration
└── dashboard/ # dashboard, console, config, Node.js runtime

/usr/local/apisix/ # data plane gateway
├── conf/ # config.yaml and onboarding certs/params
└── logs/ # gateway logs

/usr/local/openresty/ # bundled OpenResty runtime
/usr/bin/apisix # gateway CLI
/usr/lib/systemd/system/ # systemd unit files
/var/log/api7/ # control-plane logs
/var/lib/api7/ # control-plane runtime data

常用文件:

用途路径
dp-manager 配置/usr/local/api7/dp-manager/conf/dp-manager.yaml
Dashboard 配置/usr/local/api7/dashboard/conf/dashboard.yaml
Console 配置/usr/local/api7/dashboard/conf/console.env
网关配置/usr/local/apisix/conf/config.yaml
控制面日志/var/log/api7/*.log
网关日志/usr/local/apisix/logs/error.log

服务和端口

层级systemd 服务默认端口主配置文件
控制面api7ee-dp-manager7900 / 7943 (mTLS) / 7901/usr/local/api7/dp-manager/conf/dp-manager.yaml
控制面api7ee-dashboard7443 (UI/API) / 7080 / 7081/usr/local/api7/dashboard/conf/dashboard.yaml
控制面api7ee-console3000 internal,由 Dashboard 反向代理/usr/local/api7/dashboard/conf/console.env
数据面api7-gateway9080 / 9443/usr/local/apisix/conf/config.yaml

api7-gateway 兼容 apisix.service 别名,因此 systemctl ... apisix 也可使用。

软件包行为

dnf upgrade 会安装新的 RPM;%config(noreplace) 会保留现有配置,新默认配置会保存为 *.rpmnew。升级后请重启受影响服务。服务运行在安装时自动创建的专用账号下:控制面为 api7,数据面为 apisix

故障排查

现象排查方向
Console UI 502console.env 中的 PORT 必须为 3000;修正后执行 systemctl restart api7ee-console
控制面启动失败通常是数据库不可达:检查数据库连接串、PostgreSQL 可达性、api7ee 数据库和角色是否存在,以及 pg_hba.conf 是否启用密码认证
数据面实例 OutOfSync 或无法连接控制面通常是 DP -> CP 的 7943 不可达,或证书与连接参数来自不同环境;重新运行控制台生成的接入脚本
离线安装提示 nothing provides which/libxslt使用的是缺少依赖的精简包;请使用官方完整包
System has not been booted with systemd as init system主机或容器未以 systemd 作为 PID 1 运行;API7 企业版以 systemd 服务运行,见系统要求方法 A

卸载

停止服务并移除 RPM:

sudo systemctl disable --now api7-gateway api7ee-console api7ee-dashboard api7ee-dp-manager
# console 由 dashboard 包安装,没有独立 RPM,因此下方不单独列出
sudo dnf -y remove api7-gateway api7ee-dashboard api7ee-dp-manager
# 配置和数据仍保留在 /usr/local/api7、/usr/local/apisix、/var/log/api7、/var/lib/api7;如需清理请手动删除