# Go Vehicle Gateway Native Deployment 本目录用于 ECS 原生部署。当前 goal 后续不再使用 Docker/Portainer 作为 Go 接入链路的部署方式。 ## Runtime Layout ```text /opt/lingniu-go-native/ current -> /opt/lingniu-go-native/releases/ releases// gateway history-writer stat-writer realtime-api env/ gateway.env history-writer.env stat-writer.env realtime-api.env spool/gateway/ ``` ## Services | systemd unit | Binary | Purpose | |---|---|---| | `lingniu-go-gateway.service` | `gateway` | GB32960 TCP `32960`、JT808 TCP `808`、宇通 MQTT 接入,写 Kafka RAW/unified | | `lingniu-go-history-writer.service` | `history-writer` | 消费 RAW topic,写 TDengine `raw_frames` 和核心时序表 | | `lingniu-go-stat-writer.service` | `stat-writer` | 消费 RAW topic,写 MySQL `vehicle_daily_metric` | | `lingniu-go-realtime-api.service` | `realtime-api` | 消费 unified topic,写 Redis,并提供 realtime/raw/stat 查询 API | ## Build 在开发机或 CI 上构建 Linux amd64 二进制: ```bash cd go/vehicle-gateway CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /tmp/lingniu-go-native/gateway ./cmd/gateway CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /tmp/lingniu-go-native/history-writer ./cmd/history-writer CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /tmp/lingniu-go-native/stat-writer ./cmd/stat-writer CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /tmp/lingniu-go-native/realtime-api ./cmd/realtime-api ``` ## Cutover Notes 1. 先上传二进制到新 release 目录并更新 `current` symlink。 2. 从现有生产 env 生成四个 systemd 专用 env 文件;不要把密钥写入仓库。 3. 停止旧 Docker Go 容器或 Java 容器,释放 `808`、`32960`、`20210`。 4. 执行: ```bash systemctl daemon-reload systemctl enable lingniu-go-gateway lingniu-go-history-writer lingniu-go-stat-writer lingniu-go-realtime-api systemctl restart lingniu-go-gateway lingniu-go-history-writer lingniu-go-stat-writer lingniu-go-realtime-api ``` ## Verification ```bash systemctl is-active lingniu-go-gateway lingniu-go-history-writer lingniu-go-stat-writer lingniu-go-realtime-api ss -lntp | egrep ':(808|32960|20210)\b' journalctl -u lingniu-go-gateway --since '5 minutes ago' --no-pager curl -sS 'http://127.0.0.1:20210/api/history/raw-frames?protocol=JT808&limit=1' curl -sS 'http://127.0.0.1:20210/api/history/raw-frames?protocol=GB32960&limit=1' curl -sS 'http://127.0.0.1:20210/api/history/raw-frames?protocol=YUTONG_MQTT&limit=1' ```