数据库
添加服务 → 数据库 列出了 PostgreSQL、MySQL、MariaDB、MongoDB、Redis 和 Valkey。在对应行选择版本后点击(或按 Enter),数据库就会被添加并部署。
| 数据库 | 版本 | 数据卷 |
|---|---|---|
| PostgreSQL | 18、17、16、15、14 | /var/lib/postgresql(18 及以上)或 /var/lib/postgresql/data |
| MySQL | 8.4 LTS、9、8.0 | /var/lib/mysql |
| MariaDB | 11.8 LTS、11.4 LTS、10.11 LTS | /var/lib/mysql |
| MongoDB | 8.0、7.0、6.0 | /data/db |
| Redis | 8、7.4、7.2 | /data |
| Valkey | 8、7.2 | /data |
每个数据库都有一个存放数据的数据卷、一个自动生成的密码和一个健康检查。主版本是固定的:以后要升级,需要导出再恢复。
从应用连接
项目中的其他服务通过 <hostname>.zenavo.internal 访问数据库,并会收到以下变量,变量名取自添加数据库时它的内网主机名(postgresql → POSTGRESQL_…,postgresql-2 → POSTGRESQL_2_…)。其中的主机部分是 ${CONTAINER_HOSTNAME},所以之后修改主机名时会自动跟着变:
| 变量 | 示例 |
|---|---|
<NAME>_CONNECTION_STRING | postgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo |
<NAME>_HOST | postgresql.zenavo.internal |
<NAME>_PORT | 5432 |
<NAME>_DB_PASSWORD | 自动生成的密码 |
数据库只在项目内部可访问。要从你的电脑连接,在 网络 中发布一个 TCP 端口(TCP 与 UDP 端口),或者使用服务的 命令 面板。
数据库视图
数据库服务的 数据库 标签页展示数据,并在数据库容器内用数据库自己的客户端执行请求:通过容器的本地 socket 或 127.0.0.1 连接,使用服务变量中的凭据。这不需要开放数据库端口,凭据不会发送到浏览器,你输入的内容也不会经过 shell。
| 谁可以查看数据 | 团队的成员、管理员和所有者。观察者不能查看数据。 |
| 谁可以修改数据 | 团队的管理员和所有者。 |
| 限制 | 每个数据库 15 秒、2 MB 输出,同时最多两个请求。更长的结果会被截断并标注。 |
| 审计日志 | 每次列表、翻页、查询和命令都会记录在团队的审计日志中,包括服务和请求类型,但不会记录 SQL、键、值、筛选条件或文档,因为其中可能包含机密。 |
客户端以数据库的管理用户运行,而团队成员本来就可以在 命令 面板中打开容器的 shell,所以视图的只读模式是为了防止误操作,并不是沙箱。需要更严格隔离的场景,请使用权限更少的数据库用户。
PostgreSQL、MySQL 和 MariaDB
标签页列出表和视图,以及估算的行数和列(主键会被标出)。点击一个表可以分页浏览它的行,每页 100 行;切换到 SQL 可以执行语句并以表格查看结果。按 ⌘ Enter(Ctrl Enter)执行;选中了文本时,只执行选中的部分。查询使用 psql,或 mysql / mariadb。
| 默认只读 | 语句在只读事务中执行,只接受 SELECT、WITH、SHOW、EXPLAIN 和 DESCRIBE。 |
| 写入 | 团队管理员或所有者开启 允许写入 后,可以执行 INSERT、UPDATE、DELETE 和表结构变更。它们会立即生效;请先做备份。 |
| 一次一条语句 | 包含多条语句的脚本、客户端命令(\!、source、system 等)和 MySQL 可执行注释(/*! … */)会被拒绝。 |
| 限制 | 语句超时 15 秒,每次查询最多 1,000 行。 |
Redis 和 Valkey
键 列出键及其类型、过期时间和内存大小。选择数据库(db0、db1 等,列表中会显示每个库有多少键),输入匹配模式,例如 user:*。键用 SCAN 列出,每次 100 个,从不使用 KEYS(它在大库上会阻塞服务器);继续扫描 会接着列出。点击一个键查看它的值:
| 类型 | 显示方式 |
|---|---|
| string | 值,最多 256 KB |
| hash | 字段和值,每次 100 个(HSCAN) |
| list | 元素及其索引,每次 100 个 |
| set | 成员,每次 100 个(SSCAN) |
| sorted set | 按顺序显示成员和分数,每次 100 个 |
| stream | 条目及其字段,每次 100 个 |
元素超过 4 KB 会被截断。非文本字节显示为 \xHH。模块类型(JSON、时间序列等)只显示类型和大小;请用它们自己的命令读取。
命令 执行一条命令,引号规则与 redis-cli 相同:SET "my key" "a value"。按 Enter 执行。命令使用 redis-cli 或 valkey-cli,密码取自 REDIS_PASSWORD 或 VALKEY_PASSWORD。
| 默认只读 | 只接受读取类命令:GET、HGETALL、LRANGE、SCAN、TTL、INFO 等 |
| 写入 | 团队管理员或所有者开启 允许写入 后,可以执行修改键和值的命令:SET、DEL、EXPIRE、HSET、LPUSH、ZADD、XADD 等。它们会立即生效。 |
| 始终拒绝 | 影响整个服务器或其他客户端的命令:FLUSHALL、FLUSHDB、SWAPDB、CONFIG、SHUTDOWN、DEBUG、MODULE、ACL、CLIENT、MONITOR、SLOWLOG、REPLICAOF / SLAVEOF、MIGRATE、SAVE、BGSAVE、CLUSTER、FAILOVER;KEYS;脚本(EVAL、EVALSHA、SCRIPT、FUNCTION、FCALL);阻塞命令(BLPOP、XREAD … BLOCK、WAIT 等);发布/订阅、事务(MULTI、WATCH)和 SELECT。视图不认识的命令也会被拒绝。 |
其他操作请在 命令 面板中运行 redis-cli 或 valkey-cli。
MongoDB
标签页列出数据库及其集合,以及估算的文档数(admin、config 和 local 显示在 系统数据库 下)。点击一个集合,以 JSON 输入筛选、排序和投影,例如 {"status": "active"}、{"created": -1} 和 {"name": 1};按 Enter 查询。文档每次显示 50 个,格式为宽松模式的 Extended JSON:对象 ID 是 {"$oid": "…"},日期是 {"$date": "…"},JavaScript 数字无法精确表示的 64 位整数是 {"$numberLong": "…"}。筛选条件中也使用同样的形式。请求使用 mongosh,以 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 登录。
| 查询 | 筛选、排序和投影各最多 64 KB;每页最多 500 个文档。超过 256 KB 的文档只显示 _id;用投影查看其中一部分。 |
| 修改 | 团队管理员和所有者可以 插入 文档,并按 _id 一次更新或删除一个文档。更新使用操作符($set、$unset、$inc 等);不支持替换整个文档。系统集合不能修改。 |
| 拒绝 | 在服务器上运行 JavaScript 的操作符($where、$function、$accumulator)。不支持聚合和 runCommand;这些操作请在 命令 面板中使用 mongosh。 |