version: "3.8" # Go sidecar stack for the vehicle ingest redesign. # It is intentionally separate from deploy/portainer/docker-compose.yml so the # current Java production stack can keep running until Go evidence is captured. x-common-env: &common-env TZ: Asia/Shanghai KAFKA_BROKERS: ${KAFKA_BROKERS:-172.17.111.56:9092} KAFKA_TOPIC_GB32960_RAW: ${KAFKA_TOPIC_GB32960_RAW:-vehicle.raw.gb32960.v1} KAFKA_TOPIC_JT808_RAW: ${KAFKA_TOPIC_JT808_RAW:-vehicle.raw.jt808.v1} KAFKA_TOPIC_YUTONG_MQTT_RAW: ${KAFKA_TOPIC_YUTONG_MQTT_RAW:-vehicle.raw.yutong-mqtt.v1} KAFKA_TOPIC_UNIFIED: ${KAFKA_TOPIC_UNIFIED:-vehicle.event.unified.v1} x-restart: &restart-policy restart: unless-stopped networks: - vehicle-ingest logging: driver: json-file options: max-size: "100m" max-file: "5" services: go-vehicle-gateway: <<: *restart-policy image: ${LINGNIU_GO_IMAGE_REGISTRY:-crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com}/${LINGNIU_GO_IMAGE_NAMESPACE:-oneos}/vehicle-gateway-go:${LINGNIU_GO_IMAGE_VERSION:?set LINGNIU_GO_IMAGE_VERSION} container_name: go-vehicle-gateway command: ["/app/gateway"] mem_limit: ${GO_GATEWAY_MEM_LIMIT:-512m} environment: <<: *common-env GB32960_TCP_ADDR: ":32960" JT808_TCP_ADDR: ":808" TCP_READ_BUFFER_BYTES: ${TCP_READ_BUFFER_BYTES:-65536} TCP_IDLE_TIMEOUT_SECONDS: ${TCP_IDLE_TIMEOUT_SECONDS:-180} TCP_MAX_CONNECTIONS: ${TCP_MAX_CONNECTIONS:-20000} YUTONG_MQTT_ENABLED: ${YUTONG_MQTT_ENABLED:-false} YUTONG_MQTT_ENDPOINT: ${YUTONG_MQTT_ENDPOINT:-yutong} YUTONG_MQTT_URI: ${YUTONG_MQTT_URI:-} YUTONG_MQTT_TOPICS: ${YUTONG_MQTT_TOPICS:-/ytforward/shln/+} YUTONG_MQTT_QOS: ${YUTONG_MQTT_QOS:-2} YUTONG_MQTT_CLIENT_ID: ${YUTONG_MQTT_CLIENT_ID:-lingniu-go-yutong-mqtt} YUTONG_MQTT_USERNAME: ${YUTONG_MQTT_USERNAME:-} YUTONG_MQTT_PASSWORD: ${YUTONG_MQTT_PASSWORD:-} YUTONG_MQTT_CLEAN_SESSION: ${YUTONG_MQTT_CLEAN_SESSION:-false} YUTONG_MQTT_KEEP_ALIVE_SECONDS: ${YUTONG_MQTT_KEEP_ALIVE_SECONDS:-20} YUTONG_MQTT_CONNECTION_TIMEOUT_SECONDS: ${YUTONG_MQTT_CONNECTION_TIMEOUT_SECONDS:-10} YUTONG_MQTT_TLS_CA_PEM: ${YUTONG_MQTT_TLS_CA_PEM:-} YUTONG_MQTT_TLS_CLIENT_PEM: ${YUTONG_MQTT_TLS_CLIENT_PEM:-} YUTONG_MQTT_TLS_CLIENT_KEY: ${YUTONG_MQTT_TLS_CLIENT_KEY:-} YUTONG_MQTT_TLS_HOSTNAME_VERIFICATION_ENABLED: ${YUTONG_MQTT_TLS_HOSTNAME_VERIFICATION_ENABLED:-true} IDENTITY_MYSQL_DSN: ${IDENTITY_MYSQL_DSN:-} VEHICLE_IDENTITY_TABLE: ${VEHICLE_IDENTITY_TABLE:-vehicle_identity_binding} ports: - "${GO_GB32960_TCP_PORT:-32960}:32960" - "${GO_JT808_TCP_PORT:-808}:808" volumes: - "${KAFKA_SPOOL_HOST_DIR:-/opt/lingniu-go/spool/gateway}:${KAFKA_SPOOL_DIR:-/data/spool/gateway}" - "${YUTONG_MQTT_CERT_HOST_DIR:-/opt/lingniuServices/certificate/yutong/vehicledatareception}:${YUTONG_MQTT_CERT_CONTAINER_DIR:-/opt/lingniuServices/certificate/yutong/vehicledatareception}:ro" go-history-writer: <<: *restart-policy image: ${LINGNIU_GO_IMAGE_REGISTRY:-crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com}/${LINGNIU_GO_IMAGE_NAMESPACE:-oneos}/vehicle-gateway-go:${LINGNIU_GO_IMAGE_VERSION:?set LINGNIU_GO_IMAGE_VERSION} container_name: go-history-writer command: ["/app/history-writer"] mem_limit: ${GO_HISTORY_WRITER_MEM_LIMIT:-768m} environment: <<: *common-env KAFKA_GROUP: ${KAFKA_GROUP_GO_HISTORY:-go-history-writer} KAFKA_TOPICS: ${KAFKA_TOPICS_GO_HISTORY:-vehicle.raw.gb32960.v1,vehicle.raw.jt808.v1,vehicle.raw.yutong-mqtt.v1} TDENGINE_DRIVER: ${TDENGINE_DRIVER:-taosWS} TDENGINE_DSN: ${TDENGINE_DSN:?set TDENGINE_DSN, example root:password@ws(172.17.111.57:6041)/lingniu_vehicle_ts} TDENGINE_DATABASE: ${TDENGINE_DATABASE:-lingniu_vehicle_ts} TDENGINE_ENSURE_SCHEMA: ${TDENGINE_ENSURE_SCHEMA:-true} go-stat-writer: <<: *restart-policy image: ${LINGNIU_GO_IMAGE_REGISTRY:-crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com}/${LINGNIU_GO_IMAGE_NAMESPACE:-oneos}/vehicle-gateway-go:${LINGNIU_GO_IMAGE_VERSION:?set LINGNIU_GO_IMAGE_VERSION} container_name: go-stat-writer command: ["/app/stat-writer"] mem_limit: ${GO_STAT_WRITER_MEM_LIMIT:-512m} environment: <<: *common-env KAFKA_GROUP: ${KAFKA_GROUP_GO_STAT:-go-stat-writer} KAFKA_TOPICS: ${KAFKA_TOPICS_GO_STAT:-vehicle.raw.gb32960.v1,vehicle.raw.jt808.v1} MYSQL_DSN: ${MYSQL_DSN:?set MYSQL_DSN} MYSQL_ENSURE_SCHEMA: ${MYSQL_ENSURE_SCHEMA:-true} LOCAL_TZ: ${LOCAL_TZ:-Asia/Shanghai} go-realtime-api: <<: *restart-policy image: ${LINGNIU_GO_IMAGE_REGISTRY:-crpi-85r4m0ackrm3qpje.cn-shanghai.personal.cr.aliyuncs.com}/${LINGNIU_GO_IMAGE_NAMESPACE:-oneos}/vehicle-gateway-go:${LINGNIU_GO_IMAGE_VERSION:?set LINGNIU_GO_IMAGE_VERSION} container_name: go-realtime-api command: ["/app/realtime-api"] mem_limit: ${GO_REALTIME_API_MEM_LIMIT:-512m} environment: <<: *common-env HTTP_ADDR: ":20210" KAFKA_GROUP: ${KAFKA_GROUP_GO_REALTIME:-go-realtime-api} KAFKA_TOPICS: ${KAFKA_TOPICS_GO_REALTIME:-vehicle.event.unified.v1} REDIS_ADDR: ${REDIS_ADDR:-r-bp1u741kij7e51i481.redis.rds.aliyuncs.com:6379} REDIS_USERNAME: ${REDIS_USERNAME:-} REDIS_PASSWORD: ${REDIS_PASSWORD:?set REDIS_PASSWORD} REDIS_DB: ${REDIS_DB:-50} ONLINE_TTL_SECONDS: ${ONLINE_TTL_SECONDS:-600} MYSQL_DSN: ${MYSQL_DSN:-} TDENGINE_DRIVER: ${TDENGINE_DRIVER:-taosWS} TDENGINE_DSN: ${TDENGINE_DSN:-} TDENGINE_DATABASE: ${TDENGINE_DATABASE:-lingniu_vehicle_ts} ports: - "${GO_REALTIME_HTTP_PORT:-20210}:20210" networks: vehicle-ingest: name: vehicle-ingest