feat: build vehicle data platform and production pipeline

This commit is contained in:
lingniu
2026-07-14 12:35:33 +08:00
parent b452be3b94
commit bb59303a4b
270 changed files with 88016 additions and 1975 deletions

View File

@@ -0,0 +1,113 @@
#!/usr/bin/env bash
set -euo pipefail
HOST=""
REMOTE_ROOT="/opt/lingniu-go-native"
usage() {
cat <<'USAGE'
Usage:
scripts/install-identity-writer-service.sh --host root@115.29.187.205 [--remote-root DIR]
Prepares the native identity-writer service and switches Gateway registration
persistence to Kafka delegation. The existing Gateway binary ignores the new
environment switch, so this is safe to run before staging the first release
that contains identity-writer.
USAGE
}
while [[ $# -gt 0 ]]; do
case "$1" in
--host)
HOST="${2:-}"
shift 2
;;
--remote-root)
REMOTE_ROOT="${2:-}"
shift 2
;;
-h|--help)
usage
exit 0
;;
*)
echo "unknown argument: $1" >&2
usage >&2
exit 2
;;
esac
done
if [[ -z "$HOST" ]]; then
echo "--host is required" >&2
exit 2
fi
ssh "$HOST" "REMOTE_ROOT='$REMOTE_ROOT' bash -s" <<'REMOTE'
set -euo pipefail
env_dir="${REMOTE_ROOT}/env"
gateway_env="${env_dir}/gateway.env"
identity_env="${env_dir}/identity-writer.env"
unit="/etc/systemd/system/lingniu-go-identity-writer.service"
mkdir -p "${env_dir}"
cat >"${identity_env}" <<'ENV'
KAFKA_GROUP=go-identity-writer
KAFKA_TOPIC=vehicle.raw.go.jt808.v1
KAFKA_START_OFFSET=last
HEALTH_ADDR=127.0.0.1:20217
MYSQL_ENSURE_SCHEMA=true
MYSQL_MAX_OPEN_CONNS=8
MYSQL_MAX_IDLE_CONNS=4
MYSQL_CONN_MAX_LIFETIME_SECONDS=300
IDENTITY_WRITER_BATCH_SIZE=500
IDENTITY_WRITER_BATCH_WAIT_MS=20
IDENTITY_WRITER_RETRY_DELAY_MS=1000
JT808_REGISTRATION_LOCATION_TOUCH_INTERVAL_SECONDS=600
LOCAL_TZ=Asia/Shanghai
ENV
chmod 0640 "${identity_env}"
touch "${gateway_env}"
if grep -q '^JT808_REGISTRATION_GATEWAY_WRITES_ENABLED=' "${gateway_env}"; then
sed -i 's/^JT808_REGISTRATION_GATEWAY_WRITES_ENABLED=.*/JT808_REGISTRATION_GATEWAY_WRITES_ENABLED=false/' "${gateway_env}"
else
printf '\nJT808_REGISTRATION_GATEWAY_WRITES_ENABLED=false\n' >>"${gateway_env}"
fi
cat >"${unit}" <<UNIT
[Unit]
Description=Lingniu Go JT808 Identity Writer
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=${REMOTE_ROOT}/current
EnvironmentFile=${env_dir}/base.env
EnvironmentFile=${identity_env}
Environment=GOMEMLIMIT=192MiB
ExecStart=${REMOTE_ROOT}/current/identity-writer
Restart=always
RestartSec=3
LimitNOFILE=1048576
MemoryLimit=256M
KillSignal=SIGTERM
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload
systemctl enable lingniu-go-identity-writer.service
if [[ -x "${REMOTE_ROOT}/current/identity-writer" ]]; then
systemd-analyze verify "${unit}"
systemctl restart lingniu-go-identity-writer.service
systemctl is-active lingniu-go-identity-writer.service
else
echo "identity-writer binary is not in current release yet; service prepared for the next deploy"
fi
echo "identity writer service prepared; gateway MySQL registration writes delegated"
REMOTE