Lattice Hub Docs
Guides

Server installation

Install the Control Plane from pole-control-plane, initialize MySQL, and verify Console and protocol listeners.

This guide covers local binary / go run and local Kubernetes paths. Commands and ports come from AGENTS.md, deploy/conf/*, and deploy/kubernetes/README.md. There is no Helm chart for the control plane in that repository.

deployment architecture

What you get

  • Console: http://127.0.0.1:8080
  • HTTP API: 8090
  • Discovery gRPC: 8091
  • Config gRPC: 8093
  • xDS v3: 15010
  • Compatible listeners when enabled: Eureka 8761, Nacos 8848, Apollo 8890

Prerequisites

DependencyNeed
Gomake build / go run
Node.js + npmBuild Console assets into console/web/dist
MySQLDatabases pole_server and pole_observability
Docker / kubectlOptional for local Kubernetes and observability
export MYSQL_USER=root
export MYSQL_PWD='your-password'
export MYSQL_HOST=127.0.0.1:3306
export POLE_CONSOLE_JWT_SECRET='replace-with-console-jwt-secret'
export POLE_AUTH_SALT='1234567890123456'   # length 16 / 24 / 32
export POLE_SYSTEM_SECRET_MASTER_KEY='replace-with-32-byte-master-key'

1. Prepare MySQL

mysql -h127.0.0.1 -uroot -p < plugin/store/mysql/scripts/pole_server.sql

This creates pole_server and seed namespaces pole-system and default. It does not create an admin user.

CREATE DATABASE IF NOT EXISTS pole_observability
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_bin;

Business DSN shape:

${MYSQL_USER}:${MYSQL_PWD}@tcp(${MYSQL_HOST})/pole_server?loc=Local

2. Build and start locally

make build

MYSQL_USER=root MYSQL_PWD='your-password' MYSQL_HOST=127.0.0.1:3306 \
  ./scripts/rebuild-start-all.sh

# or
MYSQL_USER=root MYSQL_PWD='your-password' MYSQL_HOST=127.0.0.1:3306 \
  go run . start -c ./deploy/conf/pole-server.yaml --mode all
ModePurpose
allControl Plane + embedded Console
serverAPIs and protocol servers only
consoleConsole gateway only

3. Key configuration

Primary file: deploy/conf/pole-server.yaml
API ports: deploy/conf/pole-apiserver.yaml

Confirm bootstrap.mode, Console JWT/salt/master key, MySQL DSN, webPath, and poleServer.address. Pole Agent requires a non-empty LLM gateway URL and API key; otherwise the rest of the control plane still works.

4. Initialize the main user

There is no hardcoded default admin password. Open the Console, use /init-admin when prompted, then sign in.

curl -fsS http://127.0.0.1:8080/admin/v1/server/functions
curl -fsS http://127.0.0.1:8090/admin/v1/server/functions

Kubernetes probes use the same admin functions path; there is no dedicated /health endpoint in-tree.

5. Local Kubernetes

./deploy/kubernetes/build-image.sh

MYSQL_USER=root MYSQL_PWD='your-password' \
POLE_CONSOLE_JWT_SECRET='replace-with-local-console-secret' \
POLE_AUTH_SALT='1234567890123456' \
  ./deploy/kubernetes/deploy-local.sh

Optional observability stack: deploy/observability/docker-compose.yaml (GreptimeDB + Collector only).

Checklist

CheckExpectation
MySQLBoth databases readable/writable
ConsolePage loads; main user created
HTTP / gRPC8090 / 8091 / 8093 reachable
CacheWarm-up and incremental refresh in logs
SecretsJWT/salt/master key replaced for the environment

Troubleshooting order

observability ops map

  1. Confirm listeners on 8080/8090/8091/8093.
  2. Confirm MySQL databases and CacheManager warm-up.
  3. Confirm resources are published active (clients do not read drafts).
  4. Confirm caller identity/policy allows the operation.
  5. Confirm observability stack and client addresses only after the main path works.

Common misses: SDK pointed at Console 8080 instead of gRPC 8091/8093; auth salt length not 16/24/32; platform metrics empty because GreptimeDB/Collector were never deployed.

Next steps

On this page