GoWindGoWind
Home
Framework
GoWind Toolkit
  • Open Source

    • GoWind Admin (Admin Platform)
    • GoWind CMS (Content Management)
    • GoWind UBA (Behavior Analytics)
    • GoWind Shop (E-commerce)
    • GoWind Kanban (Kanban Boards)
    • GoWind Ledger (Personal Finance)
    • GoWind ShortPlay (Short Drama)
    • GoWind Ops (Operations Platform)
    • RushWind (Rust Ecosystem)
  • Open Core (Community + Enterprise)

    • GoWind OA (Office Collaboration)
    • GoWind ERP (Procure-to-Pay)
    • GoWind WMS (Warehousing)
  • Commercial

    • GoWind IM (Instant Messaging)
    • GoWind IoT (IoT Platform)
    • GoWind Edu (AI Education)
    • GoWind MES (Manufacturing Execution)
    • GoWind CDC (Data Pipeline)
    • GoWind SDP (Zero-Trust Gateway)
    • GoWind Quant (Quant Research)
    • GoWind Trade Radar (Export Sourcing)
    • GoWind Game Radar (Game Greenlight)
  • 简体中文
  • English
GitHub
Home
Framework
GoWind Toolkit
  • Open Source

    • GoWind Admin (Admin Platform)
    • GoWind CMS (Content Management)
    • GoWind UBA (Behavior Analytics)
    • GoWind Shop (E-commerce)
    • GoWind Kanban (Kanban Boards)
    • GoWind Ledger (Personal Finance)
    • GoWind ShortPlay (Short Drama)
    • GoWind Ops (Operations Platform)
    • RushWind (Rust Ecosystem)
  • Open Core (Community + Enterprise)

    • GoWind OA (Office Collaboration)
    • GoWind ERP (Procure-to-Pay)
    • GoWind WMS (Warehousing)
  • Commercial

    • GoWind IM (Instant Messaging)
    • GoWind IoT (IoT Platform)
    • GoWind Edu (AI Education)
    • GoWind MES (Manufacturing Execution)
    • GoWind CDC (Data Pipeline)
    • GoWind SDP (Zero-Trust Gateway)
    • GoWind Quant (Quant Research)
    • GoWind Trade Radar (Export Sourcing)
    • GoWind Game Radar (Game Greenlight)
  • 简体中文
  • English
GitHub
  • Introduction

    • GoWind UBA Product Introduction
  • Architecture Reference

    • UBA System Architecture
    • UBA Backend Module Overview
    • UBA Backend API Contract
    • UBA Frontend Architecture
  • Developer Guide

    • UBA Installation Guide
    • UBA Code Generation Pipeline Tutorial
    • Adding an External Service Tutorial
    • Adding a Business Entity Tutorial
    • Adding a Frontend Page Tutorial
  • Operations Guide

    • UBA Docker Deployment Guide
    • UBA Configuration Reference & Security Checklist
    • UBA PM2 Deployment Guide
    • UBA Superset BI Deployment Guide
  • Analyst Guide

    • Data Analyst Getting Started Guide
    • Basic Aggregation

      • Event Trend Analysis
      • Active Users Analysis
      • Group By Aggregation
    • Conversion & Paths

      • Funnel Analysis
      • Retention Analysis
      • Top Conversion Paths
      • Behavior Sequence Analysis
    • User Depth

      • Attribution Analysis
      • Distribution Analysis
      • User Segmentation
      • Click Heatmap
      • Interval Analysis
    • Lifecycle

      • User Lifecycle
      • Churn & Reactivation Analysis
      • New vs Returning Users
      • Matrix Quadrant Analysis
    • Revenue & Value

      • Revenue Analysis
      • Whale Tier (Payer Segmentation)
      • Historical LTV Analysis
    • Sessions & Anomalies

      • Session Analysis
      • Period-over-Period Comparison and Anomaly Detection
    • Gaming

      • Level Analysis (Game)
      • Server Retention (Game)
      • Online Stats Analysis (Game)
      • Economy Analysis (Game)
    • OLAP Cookbook
  • SDK Integration

    • Web SDK Integration Guide
    • C# SDK Integration Guide (Unity / Godot / .NET)
  • Appendix

    • UBA Appendix: Ports, Glossary, Known Limitations & FAQ

UBA Docker Deployment Guide

This document is aimed at operations engineers, covering GoWind UBA's two Docker deployment modes, the full-stack compose service inventory, the shared Dockerfile, and the build process.

Read System Architecture and the Configuration Reference first. Default passwords/secrets must be rotated; see the security checklist in the Configuration Reference.


1. Two Deployment Modes

ModeScript (Linux/macOS)Script (Windows)Compose fileFor
libs_only (dependency mode)scripts/docker/libs_only.shscripts/docker/libs_only.ps1docker-compose.libs.yamlStarts only the middleware; the backend is debugged locally with go run
full_deploy (full mode)scripts/docker/full_deploy.shscripts/docker/full_deploy.ps1docker-compose.yamlMiddleware + three services, one-click demo/production

The scripts automatically detect docker compose (v2 plugin) or fall back to docker-compose, and pre-create the dependency data directories (postgres/redis/etcd/minio/jaeger).


2. Quick Start

Linux / macOS

cd backend
chmod +x scripts/**/*.sh

# Start middleware dependencies only (recommended for development)
./scripts/docker/libs_only.sh

# One-click full deployment (middleware + three backend services)
./scripts/docker/full_deploy.sh

Windows (PowerShell as Administrator)

cd backend
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser   # first-time allowance

.\scripts\docker\libs_only.ps1
# or
.\scripts\docker\full_deploy.ps1

Equivalent Make Commands

cd backend
make docker-libs   # OS-aware: automatically calls the platform's libs_only script
make docker-up     # OS-aware: automatically calls full_deploy
make docker-down   # docker compose down

3. Full-Stack Service Inventory (docker-compose.yaml)

All services join the app-tier bridge network, with timezone TZ=Asia/Shanghai.

Middleware

ServiceImageHost port → container portNotes
etcdquay.io/coreos/etcd:v3.6.82379, 2380Service discovery (all three services depend on it)
jaegerjaegertracing/all-in-one:latest6831/udp, 5778, 4317, 4318, 16686, 14250/68/69Distributed tracing, OTLP enabled, UI at http://localhost:16686
redisbitnami/redis:latest6379Password *Abcd123456; FLUSHDB/FLUSHALL/CONFIG disabled
kafkabitnami/kafka:latest9092, 9093KRaft mode, single-node controller+broker
miniominio/minio:latest9001→9000, 9002→9001root / *Abcd123456, default bucket images, UI at http://localhost:9002
postgresbitnami/postgresql:latest5432user postgres / password *Abcd123456
doris-feapache/doris:fe-4.0.48030, 9030, 9010Doris Frontend, static IP 172.20.80.2:9010, FE_ID=1
doris-beapache/doris:be-4.0.48040, 9050Doris Backend, BE_ADDR=172.20.80.3:9050
supersetapache/superset:latest8088Runs as root, automatically installs pymysql+pydoris and initializes (admin/admin)

The compose file also has commented-out blocks for consul, mysql/mariadb, and clickhouse; uncomment as needed.

Application Services

The three services share the same Dockerfile, selecting which binary to compile via the build argument SERVICE_NAME:

ServiceImageHost portSERVICE_NAMEdepends_on
admin-servicego-wind-uba/admin-service:1.0.05600, 5601adminpostgres, redis, minio, etcd, jaeger
collector-servicego-wind-uba/collector-service:1.0.05700collectorpostgres, redis, minio, etcd, jaeger
core-servicego-wind-uba/core-service:1.0.0(no host port mapped)corepostgres, redis, minio, etcd, jaeger

The port mappings match the services' server.yaml listening ports (admin 5600/5601, collector 5700); access them from the host directly via the corresponding ports. See Configuration Reference · Port Reference for details.

libs Mode

docker-compose.libs.yaml is exactly the same as the full version in its middleware section, but excludes the three application services admin/collector/core — this is the libs_only mode, where the backend is started locally with go run for debugging.


4. Building the Application Images

cd backend

# Method 1: recursively build an image for each service
make docker

# Method 2: build in a single service directory
cd app/admin/service
make docker   # docker build -t $PROJECT_NAME/$APP_NAME --build-arg SERVICE_NAME=admin ...

The Dockerfile (backend/Dockerfile) controls the artifacts via --build-arg SERVICE_NAME={admin|collector|core} and --build-arg APP_VERSION=..., producing minimal images through multi-stage builds.


5. Network & Dependency Details

  • Application network: all three services are on app-tier and communicate via service names (admin calls core's gRPC, discovered via etcd; core's gRPC uses a dynamic port, not fixed at 5600).
  • Doris static IPs: FE/BE use 172.20.80.x static addresses (required by Doris cluster configuration); do not change the network segment arbitrarily.
  • Kafka advertised listener: inside compose, Kafka advertises kafka:9092 to containers, while the collector's data.yaml defaults to 127.0.0.1:9092. For containerized deployment, change the collector's kafka address to kafka:9092.
  • Postgres database name: compose has unified POSTGRES_DB=gw_uba, consistent with dbname=gw_uba in the services' data.yaml, so no extra alignment is needed.

6. Health Checks & Troubleshooting

SymptomTroubleshooting direction
The three services fail to startdocker logs <svc>; usually a failure to connect to PG/Redis/etcd — confirm depends_on services are up and the network segment is correct
admin cannot dial coreWhether etcd registration succeeded (docker exec etcd etcdctl get --prefix /); whether core's gRPC has started
Kafka receives no dataWhether the collector's kafka address points to kafka:9092 (inside containers) instead of 127.0.0.1
Doris queries slow/timing outWhether FE/BE are ready (http://localhost:8030); whether BE_ADDR is correct
Data cannot be queriedConfirm the OLAP engine's Kafka consumption job is working (Doris: SHOW ROUTINE LOAD; ClickHouse: check Kafka engine tables/materialized views); see System Architecture · Kafka Consumption Mechanism

Use the Jaeger UI (http://localhost:16686) to inspect cross-service calls for distributed tracing.


7. Related Documentation

  • System Architecture
  • Configuration Reference (security checklist)
  • PM2 Deployment
  • Superset Deployment
  • Appendix · Port Reference
Edit this page
Last Updated:: 11/3/26, 2:14 PM
Contributors: Bobo
Next
UBA Configuration Reference & Security Checklist