(legacy) H/W 完整安装 — native tools/setup.sh
本页面是维护 2026.05 以下 native 部署机箱 时参考的 legacy 流程。
新 H/W、量产出货、新建现场安装请使用 快速安装 (install.sh)。
tools/setup.sh 以 native plantpulse.service 与 host 直接运行结构为前提。
2026.05+ 的容器标准由 plantpulse-edge.service 单独管理运行时。
在同一台机箱上混用两种模式会导致端口/数据路径冲突。
仅在需要对已以 native 方式运行的旧机箱进行重装/恢复,或需要比对以往现场验收文档时使用。 如果是新机箱,请返回 安装 — 一览。
1. 前置要求 (legacy native)
| 项目 | 值 |
|---|---|
| OS | Fedora 38 (当时的验证基准 — 其他 RHEL 系可能可用,需另行验证) |
| 权限 | root (sudo -i 或直接 root 登录) |
| 网络 | 互联网连接 (dnf 软件包 + legacy native bundle 下载) |
| 磁盘 | /opt 约 3GB,/data1 (建议单独分区) 数据用 100GB+ |
| 内存 | 最低 8GB (Cassandra 4GB heap + Tomcat 4GB) |
| NIC 数量 | 2 个 (1号 = WAN/外部,2号 = PLC/内部) — 工业设备标准 |
| 时间 | 可访问互联网 NTP (已安装 chrony) |
1.1 推荐 H/W 规格
| 等级 | CPU | RAM | SSD | NIC | 价格区间 |
|---|---|---|---|---|---|
| 小 (≤ 1k 标签) | 4 核 / 2.0GHz+ | 8GB | 256GB | 2x 1Gbps | 工业迷你 PC |
| 中 (1k–10k 标签) | 8 核 / 2.5GHz+ | 16GB | 512GB SSD + 1TB HDD | 2x 1Gbps | 工业设备 |
| 大 (10k+ 标签) | 16 核 / 3.0GHz+ | 32GB+ | 1TB NVMe | 2x 10Gbps | 1U 服务器 |
2. 位置
/opt/kopens/tools/setup.sh ← 메인 setup 스크립트
/opt/kopens/tools/net/ ← 네트워크 set-1.sh / set-2.sh / status.sh / ping.sh
/opt/kopens/tools/firewall/open.sh ← firewalld 포트 오픈
/opt/kopens/tools/file/run.sh ← TCP / file limit / sysctl 튜닝
/opt/kopens/tools/file/sysctl.conf ← 커널 튜닝
/opt/kopens/tools/file/limits.conf ← 프로세스 리소스 한도
/opt/kopens/tools/file/chrony.conf ← NTP
/opt/kopens/tools/docker/setup.sh ← Docker CE 설치
/opt/kopens/tools/java/setup.sh ← Amazon Corretto 17
/opt/kopens/tools/python/setup.sh ← Python 3 + pip
/opt/kopens/tools/nodejs/setup.sh ← Node.js + npm
/opt/kopens/tools/ssl/gen.sh ← 자체 서명 인증서 발급 (CA + 서버)
/opt/kopens/tools/vpn/setup.sh ← VPN 클라이언트
/opt/kopens/tools/service/plantpulse.service ← systemd unit
/opt/kopens/tools/service/service-start.sh ← systemd ExecStart → bin/start.sh
/opt/kopens/tools/service/service-stop.sh ← systemd ExecStop → bin/stop.sh
3. 执行 — legacy native 单行命令
# 1) root 권한
sudo -i
# 2) 작업 디렉토리
cd /opt/kopens/tools
# 3) 실행 (대화형 — 호스트명 + 네트워크 설정을 묻습니다)
./setup.sh
总耗时:15–30 分钟 (取决于网速 + dnf 软件包下载 + tuned 启动)。
完成后 10 秒后自动 reboot — 重启后 legacy plantpulse.service 会自动启动。
4. 分步输入指南 (交互式 prompt)
安装过程中会依次出现以下输入项。
4.1 主机名
[?] INPUT THIS EDGE GATEAY HOSTNAME :
=> EDGE_00303
用于标识网关。按 EDGE_<4-digits> 或站点命名规范输入。例如:EDGE_00303。
4.2 1号 NIC (WAN / 外部网) — enp1s0
[?] ETHERNET [enp1s0] MODE [DHCP|STATIC] :
| 模式 | 输入 | 之后 |
|---|---|---|
DHCP | 自动获取 IP | 无需额外输入 |
STATIC | 使用固定 IP | 需追加输入 IP/掩码、网关、DNS |
选择 STATIC 时的追加 prompt:
[?] ETHERNET [enp1s0] IP/SUBNETMASK : 192.168.0.50/24
[?] ETHERNET [enp1s0] GATEWAY : 192.168.0.1
[?] ETHERNET [enp1s0] DNS : 8.8.8.8
该 NIC 用于 默认网关 (外部互联网 / 云 / Platform API) 的访问。DNS 使用企业内部 DNS 或公共 DNS。
4.3 2号 NIC (PLC / 内部网) — enp2s0
以相同格式再配置一次。由于是 PLC 网专用,通常设为 STATIC 以清晰隔离:
[?] ETHERNET [enp2s0] MODE [DHCP|STATIC] : STATIC
[?] ETHERNET [enp2s0] IP/SUBNETMASK : 192.168.100.10/24
[?] ETHERNET [enp2s0] GATEWAY : 192.168.100.1
[?] ETHERNET [enp2s0] DNS : 192.168.100.1
该 NIC 不作为默认网关使用 (
ipv4.never-default yes) — 仅用于与 PLC 的专用网通信,与 WAN 路由隔离。
4.4 网络验证 + 时间同步
setup.sh 会自动执行 nmcli con up 后,用 ping 验证外部可达性,并用 chronyc makestep 进行 NTP 同步。输出中出现 OK 或 IP / RTT 即为正常。
5. setup.sh 全部 22 个步骤 — 详解
| # | 步骤 | 动作 | 预期输出 |
|---|---|---|---|
| 1 | KOPENS_HOME 环境变量注册 | 追加到 /etc/bashrc | (无输出) |
| 2 | 主机名设置 | hostnamectl set-hostname | (无输出) |
| 3 | ${PE_HOME}/conf/env.sh 生成 | PE_HOME / PE_DATA_DIR / JAVA_HOME / CLEAN_ON_STARTUP | env.sh 输出 |
| 4 | ${PE_DATA_DIR} (/data1) 目录创建 | mkdir -p | /data1 |
| 5 | 网络设置 | net/set-1.sh (1号 WAN)、net/set-2.sh (2号 PLC)、重启 NetworkManager | nmcli 输出 |
| 6 | net/status.sh + net/ping.sh 验证 | 接口状态 + 外部 ping | RTT 输出 |
| 7 | 区域设置 / 时区 | ko_KR.utf8 + Asia/Seoul | date |
| 8 | OS 更新 | dnf -y update | dnf 进度显示 |
| 9 | 必需软件包安装 | tar / htop / fping / pv / firefox / java-17-openjdk-devel / jna / jemalloc / zstd / curl-devel / chrony / tuned / net-tools / numactl / nodejs / npm / python3 / fail2ban / gcc / glibc-devel / NetworkManager-tui | dnf 进度 |
| 10 | 调优 | tuned-adm profile throughput-performance + 禁用 GNOME 节能 | Active profile: throughput-performance |
| 11 | 防火墙 | tools/firewall/open.sh (见下方 5.1 表) | firewall-cmd --list-all |
| 12 | NTP (chrony) | 应用 chrony.conf + 服务 enable + hwclock -w 同步 | chronyc ntpdata |
| 13 | TCP / file limit / sysctl | tools/file/run.sh (见下方 5.2 表) | (无输出) |
| 14 | CPU governor | 所有 CPU 设为 performance 模式 | (无输出) |
| 15 | NUMA + Hugepages | vm.zone_reclaim_mode=0 + 禁用 transparent hugepage + 预留 9216 hugepage | numactl --show |
| 16 | Docker | tools/docker/setup.sh (Docker CE) | docker version |
| 17 | Java 17 | Amazon Corretto | java -version |
| 18 | Python 3 / NodeJS | dnf install | python3 --version |
| 19 | SSL 证书签发 | tools/ssl/gen.sh — 自签名 CA + 服务器 cert (/var/security/plantpulse/) | openssl 输出 |
| 20 | VPN | tools/vpn/setup.sh | VPN 客户端安装 |
| 21 | dnf clean all | 清理缓存 | (无输出) |
| 22 | systemd 注册 | 复制 /etc/systemd/system/plantpulse.service + systemctl enable plantpulse | service 注册 |
| 23 | 自动 reboot | 10 秒倒计时后 | *** NOW REBOOT AFTER 10 SEC! *** |
由于启用了 set -e,任一步骤失败都会立即中断。
5.1 防火墙 — 自动开放的端口列表
tools/firewall/open.sh 会将以下 TCP 端口永久添加到 public zone:
| 端口 | 用途 |
|---|---|
| 22 (TCP/UDP) | SSH |
| 80, 443 (TCP) | Web UI (/ui/main) |
| 123 (TCP/UDP) | NTP |
| 1880 (TCP) | Node-RED (/ui/flow 的后端) |
| 3000 (TCP) | Grafana (时序仪表板) |
| 4000 (TCP) | APM / 监控 |
| 7000, 7001, 9042 (TCP) | Cassandra (gossip / SSL gossip / 客户端) |
| 7799 (TCP) | JMX (Tomcat 监控) |
| 7800, 7801 (TCP) | timeseries-engine |
| 9090 (TCP) | Cockpit (服务器管理) |
| 12000, 12443 (TCP) | OPC-UA (TCP / TLS) |
| 19999 (TCP) | NetData |
此外会启用 --add-masquerade,使 Docker 容器 NAT 到主机网络。
5.2 sysctl 调优 (/etc/sysctl.conf 部分)
net.ipv4.tcp_keepalive_time = 60 # PLC TCP keepalive 빠르게
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
net.core.rmem_max = 16777216 # 16MB 수신 버퍼
net.core.wmem_max = 16777216 # 16MB 송신 버퍼
net.core.somaxconn = 1024
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.max_map_count = 1048575 # Cassandra mmap
vm.overcommit_memory = 1 # Cassandra hint
vm.swappiness = 1 # 최소 스왑
6. 重启后 — native 正常运行确认 (1 分钟)
# 1) systemd 서비스 살아있는지
systemctl status plantpulse
# 예: active (running) since ...
# 2) 모든 컴포넌트 프로세스
/opt/kopens/plantpulse-edge/bin/ps.sh
# 3) 시스템 헬스 (200 OK 면 게이트웨이 정상)
curl -s http://127.0.0.1/api/v1/system/health | jq
# 4) OPC-UA 트리 (등록된 OPC 가 0 이어도 OK — 빈 배열)
curl -s http://127.0.0.1/ui/opcua/tree | jq '.data.tree | length'
# 5) 웹 UI
# 브라우저 → https://<gateway>/ui/main
# 좌상단 로고 + 30개 카드가 보이면 정상
7. systemd 集成运维 (legacy native)
安装后由 systemd 自动管理网关:
sudo systemctl start plantpulse # 시작 (start.sh 호출)
sudo systemctl stop plantpulse # 정지 (stop.sh 호출)
sudo systemctl status plantpulse # 상태
sudo systemctl restart plantpulse # 풀스택 재시작 (60초+ 다운타임)
sudo journalctl -u plantpulse -n 100 # systemd 로그 마지막 100줄
仅重启 Tomcat (应用代码 /
app.properties变更) 请使用bin/restart.sh(约 6 秒)。systemdrestart为全栈重启 (stop.sh→start.sh)。
内部 wiring:
plantpulse.service→ExecStart=service-start.sh→bin/start.shplantpulse.service→ExecStop=service-stop.sh→bin/stop.sh
8. 常见陷阱
| 步骤 | 症状 | 原因 / 解决 |
|---|---|---|
| 5 (网络) | set-1.sh 之后 SSH 断开 | 网络接口 / 网关配置错误。通过控制台 (KVM/IPMI) 进入并用 nmcli con modify enp1s0 ipv4.address ... 手动恢复 |
| 5 (网络) | NIC 名称不是 enp1s0 (例如 eth0、eno1) | 确认 OS 的 NIC 名称 (nmcli dev)。将 tools/net/set-1.sh 中的 IF=enp1s0 行改为实际名称后重新执行 setup.sh |
| 8 (dnf) | dnf 更新卡住 | 检查线路 / 企业内网 dnf mirror。内网环境请在 /etc/yum.repos.d/ 中添加内部 mirror |
| 9 (软件包) | 部分软件包缺失 (例如无 firefox) | minimal 安装 ISO 所致。缺少该包对网关本身无影响 — 忽略并继续 |
| 10 (tuned) | tuned-adm not found | 缺少 dnf install tuned。手动安装后从 setup.sh 的第 11 步继续 |
| 11 (防火墙) | firewall-cmd --reload 失败 | firewalld 未运行。手动执行 systemctl start firewalld。同时检查 SELinux enforcing |
| 15 (hugepages) | 重启后 hugepage 失效 | 在 /etc/sysctl.d/99-plantpulse.conf 中永久添加 vm.nr_hugepages = 9216 |
| 22 (systemd) | 重启后网关未启动 | 用 journalctl -u plantpulse --no-pager 确认 unit 失败原因。直接执行 bin/start.sh 观察卡在何处 |
set -e | 中途 abort | 查看消息正文中的 上一步骤。仅手动执行该步骤后,从 setup.sh 的 下一步骤 继续 |
| 一般 | 脚本执行权限 | chmod +x /opt/kopens/tools/setup.sh (极少数情况下需要) |
9. 安装后建议的首批操作
- 访问 Web UI + 修改密码 —
/ui/main→ 右上角用户菜单 → 修改密码 - 确认站点 / 边缘 ID — 环境设置 的
site.id、edge.id - Sparkplug B 对接 — Sparkplug B (如有需要)
- 添加第一个 PLC 连接 — 添加新 PLC 连接
- 注册 定期备份 cron — 备份 (
backup.sh)
10. 了解更多
- 快速 / 单行安装 (OS 已就绪时):快速安装 (单行)
- 运维脚本目录:运维 — 一览
- 升级流程:升级 (
upgrade.sh) - 环境变量 / 配置:环境设置 (
app.properties) - 从备份恢复:备份 (
backup.sh)