2.7 KiB
2.7 KiB
数据库配置
goodBaby 默认使用 SQLite,零配置开箱即用;也可以切换到 PostgreSQL。
SQLite(默认)
{
"database_driver": "sqlite",
"database_path": "data.db"
}
用的是纯 Go 的 glebarez/sqlite,不需要 CGO,编译出来就是一个静态二进制。
已开启 WAL 与 10 秒 busy timeout;因为 SQLite 是单写模型,连接池被限制为 1 条连接,避免并发执行规则时出现 database is locked。
PostgreSQL
{
"database_driver": "postgres",
"database_dsn": "postgres://user:password@localhost:5432/goodbaby?sslmode=disable"
}
切换到 postgres 后 database_path 会被忽略。连接池为最大 20 条连接、5 条空闲、连接最长存活 1 小时。
启动时会先 Ping 一次,配置写错会在启动阶段直接报错退出,而不是等到第一次查询才失败。
环境变量
配置文件之外也可以用环境变量覆盖,适合容器部署:
| 变量 | 说明 |
|---|---|
GOODBABY_DB_DRIVER |
sqlite 或 postgres |
GOODBABY_DB_DSN |
postgres 连接串 |
GOODBABY_DB_PATH |
sqlite 文件路径 |
只设置了 GOODBABY_DB_DSN 而没设置 GOODBABY_DB_DRIVER 时,会自动按 postgres 处理。
docker compose 示例
services:
goodbaby:
image: mei232/goodbaby:v2.1.0
ports:
- "8088:8088"
environment:
- TZ=Asia/Shanghai
- GIN_MODE=release
- GOODBABY_DB_DSN=postgres://goodbaby:goodbaby@postgres:5432/goodbaby?sslmode=disable
volumes:
- ./data:/app/data
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:17-alpine
environment:
- POSTGRES_USER=goodbaby
- POSTGRES_PASSWORD=goodbaby
- POSTGRES_DB=goodbaby
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U goodbaby"]
interval: 5s
timeout: 5s
retries: 10
restart: unless-stopped
volumes:
pgdata:
切换数据库
两种数据库之间没有自动数据迁移。切换驱动后是一个全新的空库,需要重新注册账号并配置规则。
如果要搬运已有数据,得自己从 SQLite 导出再导入 PostgreSQL(表结构一致:users / timers / rules / gateway_rules / message_gateways / accounts / execution_logs)。
建表
首次启动会自动执行 AutoMigrate 建表并补齐新增字段,不需要手动执行 SQL。
升级到 v2.2.0 时,如果 rules 表里还有靠 gateway_id 标识的历史消息网关规则,
启动阶段会自动把它们搬到 gateway_rules 表,不需要手工处理。