🐧 Linux 服务器部署

一句话结论:主流发行版全都兼容,一个脚本自适应发行版、架构、init 系统与防火墙。

为什么不用按发行版准备不同文件?

本程序是 CGO_ENABLED=0 编译的纯静态链接 Go 二进制。实测校验:

program headers: LOAD / NOTE / PHDR / GNU_STACK   <- 没有 PT_INTERP、没有 DYNAMIC
PT_INTERP 存在? False
引用 ld-linux? 0    引用 libc.so? 0    引用 ld-musl? 0

即不依赖 glibc 版本、不依赖任何系统库。唯一因发行版而异的,是「怎么注册成开机自启服务」「怎么放行端口」,这两件事脚本已自动适配。

发行版兼容矩阵

发行版版本架构支持
Debian10 / 11 / 12+amd64 / arm64✅
Ubuntu18.04 / 20.04 / 22.04 / 24.04amd64 / arm64✅
CentOS7 / 8 / Streamamd64 / arm64✅(CentOS 7 的 glibc 2.17 也没问题)
RHEL / Rocky / AlmaLinux7 / 8 / 9amd64 / arm64✅
Fedora最新amd64 / arm64✅
openEuler 欧拉20.03 / 22.03amd64 / aarch64✅
麒麟 Kylin / 统信 UOSV10 / 20amd64 / arm64✅
Alpine3.xamd64 / arm64✅(musl 也不依赖)
SUSE / openSUSE15+amd64 / arm64✅

脚本对「服务注册 / 端口放行」的适配

发行版init 系统端口放行脚本行为
Debian / Ubuntu / UOS / Kylinsystemdufw装 systemd 单元 + ufw allow
CentOS / RHEL / Rocky / Alma / openEulersystemdfirewalld装 systemd 单元 + firewall-cmd;SELinux Enforcing 会 restorecon
AlpineOpenRC无生成 /etc/init.d/opsmonitor + rc-update
极小化容器镜像都没有无回退 nohup 常驻(提示重启不自启)

快速开始

把二进制和 deploy/linux 目录一起传到服务器,然后执行安装脚本:

# 1) 上传(在本地执行)
scp -r deploy/linux opsmonitor-server-linux-amd64 root@10.0.0.5:/root/

# 2) 在服务器上执行
cd /root && chmod +x linux/install.sh
sudo ./linux/install.sh

脚本会自动完成:探测发行版/架构 → 取出对应二进制 → 建低权限用户 opsmonitor → 装到 /opt/opsmonitor/opsmonitor-server → 生成 /etc/opsmonitor/opsmonitor.env → 注册开机自启 → 放行端口 → 打印只显示一次的控制台账号与通信密钥。

记下账号密码

控制台账号与通信密钥只在安装结束时打印一次。没记下也没关系:账号密码在 /etc/opsmonitor/opsmonitor.env,通信密钥可用 --token 重设。

常用参数

sudo ./install.sh --addr :8000                    # 换监听端口
sudo ./install.sh --token '你的通信密钥'            # 指定采集端要用的密钥
sudo ./install.sh --admin-pass '你的控制台密码'      # 指定控制台密码(否则随机生成)
sudo ./install.sh --public-url http://10.0.0.5:9999
sudo ./install.sh --no-firewall                   # 不动防火墙(自己管理)
sudo ./install.sh -f /tmp/opsmonitor-server-linux-arm64     # 指定二进制
sudo ./install.sh -u https://example.com/opsmonitor-server-linux-amd64   # 在线拉取
sudo ./install.sh --uninstall                     # 卸载(保留数据与配置)

参数也可用环境变量:OPSM_VERSION / OPSM_PREFIX。

目录规划

路径用途
/opt/opsmonitor/opsmonitor-server主程序(自动更新会替换它,旧版存为 .bak)
/opt/opsmonitor/data/opsmonitor.dbSQLite 数据库(WAL 模式,备份拷这个目录即可)
/opt/opsmonitor/releases/采集端发布物缓存(内网主机从这里升级)
/etc/opsmonitor/opsmonitor.env配置(权限 600,密码/密钥都在这里)
/etc/systemd/system/opsmonitor.servicesystemd 单元

日常运维

systemctl status opsmonitor --no-pager         # 状态
systemctl restart opsmonitor                   # 重启
systemctl disable --now opsmonitor             # 停止并取消开机自启
journalctl -u opsmonitor -f --no-pager         # 跟随日志
curl -s http://127.0.0.1:9999/api/health       # 健康检查

手工部署(不想用脚本时)

sudo useradd -r -s /sbin/nologin opsmonitor
sudo mkdir -p /opt/opsmonitor/{data,releases} /etc/opsmonitor
sudo install -m0755 opsmonitor-server-linux-amd64 /opt/opsmonitor/opsmonitor-server

sudo cp opsmonitor.env.example /etc/opsmonitor/opsmonitor.env
sudo vi /etc/opsmonitor/opsmonitor.env      # 至少改 OPSM_TOKEN 与 OPSM_ADMIN_PASS
sudo chmod 600 /etc/opsmonitor/opsmonitor.env

sudo cp opsmonitor.service /etc/systemd/system/
sudo chown -R opsmonitor:opsmonitor /opt/opsmonitor
sudo systemctl daemon-reload && sudo systemctl enable --now opsmonitor
sudo systemctl status opsmonitor --no-pager

常见排障

现象原因与处理
journalctl 里 avc: deniedSELinux:semanage fcontext -a -t bin_t '/opt/opsmonitor(/.*)?' && restorecon -R /opt/opsmonitor 后重启
permission denied 启动失败属主不对:chown -R opsmonitor:opsmonitor /opt/opsmonitor
本机能开、外面打不开firewalld/ufw 未放行,或云服务器安全组未放行 9999
address already in usess -tlnp | grep 9999 找占用进程,或换 --addr :8000
日志报「打开数据库失败」OPSM_DB 指向的目录不存在或无写权限
CentOS 7 systemd 报 Unknown lvalue LimitNOFILE老 systemd 语法差异,删掉该行即可(非必需)
想完全离线ExecStart 加 -hub=。不能用 OPSM_HUB=(空串会回落默认地址)
下一步

监控端跑起来后,去控制台「监控 → 添加主机」复制一键安装命令,到目标主机执行即可接入采集端。 详见 接入采集端。