Skip to content

Linux(服务端)

manager 以 Docker 镜像(ongrid:<version>)发,通过 docker compose 运维。两样都来自 make package 出的 release tarball —— 没有 apt install ongrid, 没有主机侧守护进程。

支持的发行版

我们每天在以下主机上跑 manager。任何能跑 Docker Engine 24+ 的应该都行;下 表是每 release 显式测试的那些。

发行版测过
Ubuntu22.04 LTS、24.04 LTS
Debian12(bookworm)
RHEL9
Rocky Linux9
AlmaLinux9

CentOS 7 不支持 —— 它的 glibc 和 systemd 对内置 Compose 栈来说太老,并且 已经上游 EOL。

必需软件

  • Docker Engine 24.0 或更新。更老的版本缺 make docker-build 依赖的 --platform 接线、并且会破 extra_hosts: host-gateway
  • Docker Compose v2docker compose CLI 插件,不是遗留的 docker-compose 二进制)。deploy/docker-compose.yml 里的 compose 文件 故意省去顶层 version: key,v1 拒它。
  • systemd(主机的)。manager 自己不注册 systemd unit —— install 脚本 deploy/install/server-install.sh 只依赖 systemd 启 Docker —— 但重启自 动恢复需要 docker.service 开机启动。
  • iptables / nftables 都行;两种后端都能用。

除 Docker 自己要的(overlayfs、namespaces、cgroups v1 或 v2)之外不需要别 的内核模块。

资源下限

资源下限舒适为什么
CPU2 vCPU4 vCPUmanager Go 进程、Prometheus、Loki、Tempo、Grafana、MySQL 都住同一台机。
内存4 GB8 GBPrometheus + Loki 一起空闲就能吃 1.5 GB。留头让 OOM killer 不打 MySQL。
磁盘20 GB100 GBPrometheus 保留期默认 90 天 / 20 GB(见 compose 文件里的 --storage.tsdb.retention.*)。Loki + Tempo 分剩下的。
网络10 Mbps100 Mbps遥测是数据面 —— 多个 edge 发日志能把细管早早打满,远在 manager 自己之前。

20 GB 下限假设你只用几台 edge 测试。一旦跨过 ~25 host 发指标 + 日志 + 链路, 规划 200 GB 才存得下 30 天 Loki。

端口

端口方向协议是什么
443入站HTTPSnginx —— SPA、REST API、日志/链路摄入
80入站HTTPnginx 跳到 443
40012入站TCP(geminio)Frontier broker —— 每个 edge 拨这个
3306仅本机暴露TCPMySQL —— 生产绑 127.0.0.1
9090仅本机暴露HTTPPrometheus —— 生产绑 127.0.0.1
9100入站(可选)HTTPmanager /metrics —— 给外部 Prometheus 抓

只有 443、80、40012 需要从公网(或你的 edge 队网络)可达。其他生产里 都绑 localhost —— nginx 顶在 API 前,Grafana / Prometheus / Loki / Tempo 通过 docker 网络访问。

compose 栈跑什么

来自 deploy/docker-compose.yml

服务镜像角色
mysqlmysql:8.0manager 主存(用户、edge、设备、告警规则、会话)。
ongridongrid:<version>manager —— 用 cmd/ongrid 构出的 Go 二进制。
nginxongrid-web:<version>TLS 终止、SPA、/api/* 反代、/edge/* 静态给 install bundle。
frontiersingchia/frontier:1.2.5Geminio broker;edge tunnel 端点(ADR-007)。
prometheusprom/prometheus:v2.54.0指标存 + remote_write 接收器(ADR-009)。
lokigrafana/loki:3.4.0日志存(ADR-012)。
tempografana/tempo:2.5.0链路存(ADR-013)。
searxngsearxng/searxng:latestweb_search 技能用的自托管搜索后端。
grafanagrafana/grafana-oss:11.1.4Monitor 页的 dashboard 嵌入。

compose 文件是生产形状 —— 没有第二个 "prod" 文件。在 env 块里调旋钮 (ONGRID_* —— 见 环境变量),别 fork YAML。

TLS

nginx 用从 deploy/certs/(cert.pem、key.pem)bind-mount 的证书终止 TLS。 首次启动 install 脚本生成自签证书;任何时候换成真证书并 docker compose restart nginxdeploy/README.md 里记录了通过 sidecar 模 式支持 Let's Encrypt。

SELinux + AppArmor

开箱都能用。compose 文件不读写挂敏感主机路径;bind mount(./edge./nginx./certs./grafana/provisioning)都是 :ro。如果你的 SELinux 策略对 bind mount 强制严格 label,在 docker-compose.override.yml 里给挂载串后面追加 :Z

升级

sh
make package           # produces dist/out/ongrid-vX.Y.Z-linux-amd64.tar.xz
scp dist/out/ongrid-vX.Y.Z-linux-amd64.tar.xz host:/tmp/
ssh host /tmp/upgrade.sh

upgrade.sh 跟 tarball 放一起,做幂等动作:加载新镜像、写一个临时 docker-compose.override.yml 钉新 tag、docker compose up -d、健康一分钟 后 prune 上一个镜像。见 升级

什么

  • Podman + podman-compose:compose 文件用 Docker 专属简写 (extra_hosts: host-gateway:Z SELinux 语义),podman 要么解析不 兼容要么忽略。我们不测试。
  • K3s host-mode 网络:manager 能用,但 edge 安装器围绕裸 systemd 建 —— daemonset 模式见 Kubernetes
  • OpenRC / runit / s6:manager 容器不关心,但主机 Docker 守护进程得 开机起来。你 init 系统能干这事就行。