# SQLite private-lite 部署

本文说明如何使用 SQLite 作为 ClickVisual metadata 数据库启动 private-lite 版本。该模式适合私有化轻量部署、演示环境和只需要 v2 日志查询能力的场景。

# 能力边界

SQLite 只替代 ClickVisual 的 metadata 数据库,用来保存用户、实例、数据库、日志表、查询配置等管理数据。

日志数据仍写入 ClickHouse,日志采集和日志表模板仍依赖 Kafka、ClickHouse 和 ego 初始化流程。也就是说,SQLite 模式可以不依赖 MySQL 启动服务,但不能替代 ClickHouse 存储日志。

private-lite 版本只保留 v2 日志查询相关能力,不启用完整版本中的报表、告警、数据接入发布等模块。

# 配置示例

仓库内提供了示例配置:

config/private-lite-sqlite.toml
1

关键配置如下:

[app]
v2Edition = "private-lite"
rootURL = "http://localhost:19083"
serveFromSubPath = false

[server.http]
host = "127.0.0.1"
port = 19083

[metadata]
driver = "sqlite"
dsn = "data/clickvisual-private-lite.db"
debug = true

[mysql]
dsn = ""

[auth]
mode = "memstore"
name = "clickvisual_session_sqlite"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

如果部署在子路径,例如 /clickvisual,需要同时修改:

[app]
rootURL = "http://localhost:19083/clickvisual"
serveFromSubPath = true
1
2
3

容器内运行时需要把 server.http.hostserver.governor.host 改为 0.0.0.0,否则只能在容器内部访问。

# 启动服务

首次启动前确保 SQLite 文件所在目录存在:

mkdir -p data
1

本机二进制启动:

./bin/clickvisual server --config=config/private-lite-sqlite.toml
1

服务启动时如果检测到:

[metadata]
driver = "sqlite"
1
2

会自动初始化 SQLite metadata schema,不需要提前手动创建 SQLite 表。

默认访问地址:

http://localhost:19083/v2
1

如果启用了子路径:

http://localhost:19083/clickvisual/v2
1

默认登录账号和密码:

username: clickvisual
password: clickvisual
1
2

生产环境请在首次登录后修改默认密码。

# 初始化日志库和日志表

SQLite schema 初始化只负责 ClickVisual metadata 表。要创建 ClickHouse 实例、logger 数据库和 ego 日志表模板,需要执行 ego 初始化命令。

本机执行示例:

./bin/clickvisual ego \
  --config=config/private-lite-sqlite.toml \
  --clickhouse-dsn="tcp://127.0.0.1:9000?database=default&username=root&password=shimo" \
  --brokers="127.0.0.1:9092" \
  --topics-app="app-stdout-logs" \
  --topics-ingress-stdout="ingress-stdout-logs"
1
2
3
4
5
6

Docker 网络内执行示例:

docker exec -it clickvisual sh -c './bin/clickvisual ego \
  --config=/clickvisual/config/private-lite-sqlite.toml \
  --clickhouse-dsn="tcp://clickhouse:9000?database=default&username=root&password=shimo" \
  --brokers="kafka:9092" \
  --topics-app="app-stdout-logs" \
  --topics-ingress-stdout="ingress-stdout-logs"'
1
2
3
4
5
6

如果 Kafka 对容器内部暴露的是 29092,则将 --brokers 改成:

kafka:29092
1

ego 初始化会完成以下操作:

  • 创建 ClickHouse 实例记录;
  • 创建 logger 数据库;
  • 根据 Kafka topic 创建日志表和消费模板;
  • 将日志表 metadata 写入 SQLite。

# 写入 mock 数据

可以使用 Kafka console producer 写入一条应用日志:

printf '%s\n' \
'{"contents":{"_source_":"stdout","_time_":"2026-07-09T16:00:01.000000000+08:00","content":"cv-mock sqlite private-lite app log"},"tags":{"container.name":"app-server","k8s.namespace.name":"default","k8s.pod.name":"demo-app-001"},"time":1783584001}' \
| docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server kafka:9092 \
  --topic app-stdout-logs
1
2
3
4
5

写入后可以在 ClickHouse 中验证:

clickhouse-client --user root --password shimo \
  --query "SELECT count() FROM logger.app_stdout WHERE _raw_log_ LIKE '%cv-mock sqlite private-lite%'"
1
2

前端查询时选择:

database: logger
table: app_stdout
1
2

并添加条件:

_raw_log_ contains cv-mock sqlite private-lite
1

# 常见问题

# 启动后仍然访问 MySQL

确认配置中已经设置:

[metadata]
driver = "sqlite"
dsn = "data/clickvisual-private-lite.db"

[mysql]
dsn = ""
1
2
3
4
5
6

同时确认启动命令使用的是 SQLite 配置文件:

./bin/clickvisual server --config=config/private-lite-sqlite.toml
1

# lookup clickhouse on ... no such host

这是 Docker 网络问题。执行 ego 初始化的 ClickVisual 容器必须和 ClickHouse、Kafka 在同一个 Docker network。

可以把 ClickVisual 容器接入同一个网络:

docker network connect <network-name> clickvisual
1

然后验证 DNS:

docker exec clickvisual getent hosts clickhouse
docker exec clickvisual getent hosts kafka
1
2

# /clickvisual/v2/login 返回 404

如果使用 /clickvisual 子路径访问,需要配置:

[app]
rootURL = "http://localhost:19083/clickvisual"
serveFromSubPath = true
1
2
3

仅前端构建时设置 public path 不会让后端自动挂载 /clickvisual 路径,后端运行时配置也必须开启子路径。

上次更新: 2026-09-08 14:08:07