> 如果你必须在CentOS 7.x上部署,建议用 `elrepo` 升级内核到5.x。命令我写过无数次:
>
### 依赖库安装
说实话,依赖库这一块往往是新手最容易翻车的地方。DSPM的核心依赖分成三层:
1. **基础运行时** — Python 3.8+ / Go 1.18+ / Node.js 16+
2. **数据通道** — Redis 6.2+ / Kafka 3.0+ / RabbitMQ 3.8+
3. **采集工具链** — clang 12+ / llvm 12+ / libbpf-dev
我建议你用一个脚本一次性装完。下面这个脚本我在三个项目里验证过,直接复制就能用:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml
grub2-set-default 0
reboot
> #!/bin/bash
# DSPM 环境依赖一键安装(Ubuntu 20.04/22.04)
set -e
echo ">>> 更新系统包"
apt update && apt upgrade -y
echo ">>> 安装基础依赖"
apt install -y \
python3.10 python3.10-dev python3-pip \
golang-go \
nodejs npm \
redis-server \
rabbitmq-server \
clang-12 llvm-12 libbpf-dev \
git curl wget jq
echo ">>> 安装 Python 包"
pip3 install --upgrade pip
pip3 install \
dspm-sdk==2.1.0 \
pydantic==1.10.0 \
requests==2.28.0 \
flask==2.2.0
echo ">>> 验证安装"
python3 --version
go version
node --version
redis-cli --version
clang-12 --version | head -n1
echo ">>> 安装完成"
我记得第一次跑这个脚本时,`libbpf-dev` 在Ubuntu 22.04里包名变成了 `libbpf-dev`(少了个字母),结果编译报错。嗯,这里要注意:**不同Ubuntu版本,包名可能有细微差异。** 装之前先 `apt search libbpf` 确认一下。
>
> **千万别不管依赖版本就开装。** 我曾经在CentOS 7上装了Python 3.11,结果dspm-sdk里的某些c扩展不兼容,直接Segmentation Fault。后来老老实实退回到3.8才解决。建议严格按照官方文档的版本范围来。
>
### 网络配置要点
网络配置是我认为最容易“埋雷”的环节。DSPM对接涉及多个组件之间的通信,端口开不对,后面全白干。
| 组件 | 默认端口 | 协议 | 说明 |
|------|----------|------|------|
| DSPM Agent → Collector | 7843 | HTTPS/gRPC | 数据上报通道 |
| Collector → Broker | 9092 / 5672 | TCP | Kafka / RabbitMQ |
| DSPM Web UI | 8443 | HTTPS | 管理控制台 |
| API Gateway | 9443 | HTTPS | REST API 入口 |
**我给你的配置清单:**
1. **防火墙放通** — 不要偷懒只开SSH。上面表格里的端口必须全开。我见过一个线上事故,Agent上报数据总是超时,查了一下午,发现是Collector到Broker的9092端口被iptables DROP了。
2. **DNS/主机名** — DSPM内部依赖主机名解析。我建议所有节点都用静态IP,并在 `/etc/hosts` 里写死映射关系。为什么?你在云环境里重启一下,IP变了,DNS缓存还没刷新,整个集群就裂开了。
3. **MTU 调优** — 如果你的环境走的是VXLAN或overlay网络(比如K8s、Docker),建议把MTU从1500改成1450。我之前部署到阿里云,Agent上报大包时频繁丢包,改完MTU立马稳如狗。
4. **证书/SSL** — 生产环境必须用HTTPS。内部可以用自签名证书,但要注意把所有节点的CA证书都同步一份。我用过一个偷懒办法:统一部署一个Nginx反代,证书只配在Nginx上,后端全走HTTP。这样证书管理简单,安全等级也够。
>
> 网络配置一条至理:
> 先通,再优,最后加固。
> 先保证端口能通,再考虑性能调优,最后才上安全策略。不要一上来就开防火墙、iptables、selinux全上,自己把自己堵死了。 >
### 一张图看懂环境准备
下面这张SVG流程图,帮你把整个环境准备的逻辑串起来。画的是我脑子里最稳定的部署流程。
### 实战:一个完整的安装验证流程
好了,理论说完了,我带你走一遍完整的安装验证。假设你手上有台干净的Ubuntu 20.04服务器。
**第一步:确认系统版本**
> 先通,再优,最后加固。
> 先保证端口能通,再考虑性能调优,最后才上安全策略。不要一上来就开防火墙、iptables、selinux全上,自己把自己堵死了。 >
$ cat /etc/os-release | grep -E '^VERSION_ID|^NAME'
NAME="Ubuntu"
VERSION_ID="20.04"
**第二步:执行安装脚本**
把前面那一段 `install.sh` 拷贝到服务器上,加上执行权限:
$ chmod +x install.sh
$ sudo ./install.sh
不出意外的话,5-10分钟后所有依赖装完。中间如果报 `apt lock` 错误,等一会儿重试就行。
**第三步:验证网络连通性**
我一般用这个脚本来验收:
# 测试 Agent 到 Collector
curl -k https://collector.internal:7843/health
# 测试 Collector 到 Broker
echo "test" | kcat -P -b broker.internal:9092 -t dspm-test
# 测试 Web UI 可访问
curl -k https://webui.internal:8443/
# 确认所有端口都在监听
sudo ss -tulpn | grep -E '7843|8443|9092|5672'
>
> **一条硬性验证标准:** 所有 curl 返回 200,所有端口 LISTEN。少一个都不行。我在现场交付时,哪怕只少一个服务,都绝不往下走。为什么?因为后面的问题会指数级放大,排查起来比现在修麻烦十倍。
>
**第四步:用DSPM自带的诊断工具**
如果你装的是官方版本,里面一般带一个 `dspm-diagnostics` 工具:
$ dspm-diagnostics check
[PASS] OS: Ubuntu 20.04.6 LTS
[PASS] Kernel: 5.4.0-150-generic
[PASS] Python: 3.8.10
[PASS] Redis: 6.2.7
[PASS] Clang: 12.0.1
[PASS] Network: Collector reachable in 2ms
[PASS] SSL: Certificate valid until 2026-01-01
Result: ALL PASS
我习惯把 `ALL PASS` 截图保存,作为环境交付物的一部分。
写到这里,我想强调一个我在多个项目里总结出的原则:**环境准备不是一次性的,而是持续要做的事。** 每次机器重启、内核更新、网络割接,最好都重新跑一遍诊断。我个人被坑最惨的一次就是忘了这个,结果机器重启后iptables规则丢了,Agent断连三天才发现。嗯,从那以后我就把这个写进了SOP里。