数据库配置
sh0 以托管容器(称为数据库服务器)运行 PostgreSQL、MySQL、MariaDB、MongoDB 和 Redis:每个容器一个引擎,配有持久卷、自动生成的凭据和稳定的内部主机名。
支持的数据库
共有五种引擎可用。控制面板提供下列版本并预选默认版本;sh0 会拉取所选版本的官方镜像。
| 引擎 | 可选版本 | 默认 | Docker 镜像 | 端口 |
|---|---|---|---|---|
| PostgreSQL | 17, 16, 15, 14 | 16 | postgres:<version>-alpine | 5432 |
| MySQL | 8.4, 8.0 | 8.4 | mysql:<version> | 3306 |
| MariaDB | 11.4, 11.2, 10.11 | 11.4 | mariadb:<version> | 3306 |
| MongoDB | 8.0, 7.0, 6.0 | 7.0 | mongo:<version> | 27017 |
| Redis | 7.4, 7.2 | 7.4 | redis:<version>-alpine | 6379 |
--version)会把版本字符串直接作为镜像标签交给 Docker,不会与此列表核对。列表之外的版本未经 sh0 测试;若标签不存在,拉取镜像时创建会失败。创建数据库
数据库服务器可通过控制面板、CLI 或 API 创建。只有 owner 和 admin 角色可以创建。
- 在侧边栏打开 Services,然后打开 Database Servers。
- 点击 Create Server 并选择引擎。
- 填写 Server name:3 到 63 个字符,仅限小写字母、数字和连字符,且不能以连字符开头或结尾。
- 选择 Version,然后点击 Create Server 确认。
sh0 会按需拉取镜像、启动容器,并最多等待 60 秒直到引擎可以接受连接,然后打开服务器页面。同时还会生成:
- 管理员凭据:用户名为
postgres(PostgreSQL)、root(MySQL、MariaDB)、admin(MongoDB)或default(Redis),密码为 32 位随机字符,并以实例主密钥加密存储。 - 内部主机名
<name>.internal,位于每个应用都会加入的sh0-net网络上。 - 数据卷
sh0-dbsrv-<name>-data,挂载到引擎的数据目录。容器本身名为sh0-dbsrv-<name>。
也可以通过 CLI 完成(sh0 db 是 sh0 database-servers 的别名)。引擎取值为 postgres、mysql、mariadb、mongodb 和 redis:
$ sh0 db create --name my-db --engine postgres
Database server 'my-db' created (id: 3afde175-12d6-4614-94ca-e504737a7cc4, engine: postgres 16)
$ sh0 db info 3afde175-12d6-4614-94ca-e504737a7cc4
Database Server: my-db
ID: 3afde175-12d6-4614-94ca-e504737a7cc4
Engine: postgres 16
Status: running
Host: my-db.internal
Port: 32965
Databases: 0
Users: 0
$ sh0 db create-database 3afde175-12d6-4614-94ca-e504737a7cc4 --name appdb
Database 'appdb' created (id: 90083652-6e9c-44fe-afb8-a173284847ad).新服务器是空的。可在其 Databases 和 Users 标签页中添加数据库和用户,或使用 sh0 db create-database、sh0 db create-user 和 sh0 db grant。Redis 没有数据库标签页。
资源限制
每个数据库服务器从创建起就带有 CPU 和内存限制。没有磁盘配额:数据卷随数据增长,直到占满主机的可用空间。
| 设置 | 默认值 | 允许范围 |
|---|---|---|
| CPU | 0.5 核(所有引擎) | 0.1 核至主机核数 |
| 内存 | 1 GB;Redis 为 256 MB | 64 至 16384 MB |
| 磁盘 | 无配额 | 不可配置 |
在新建的 PostgreSQL 服务器上读取到的 Docker 实际限制(先是字节,然后是 nano-CPU):
$ docker inspect sh0-dbsrv-my-db --format '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}'
1073741824 500000000如需修改,请打开服务器的 Scaling 标签页,设置 Memory Limit(MB)和 CPU Limit(核)并保存。保存的值不会作用于正在运行的容器:点击 Apply & Restart 以新限制重建容器。数据卷会保留;重启期间连接会中断。
数据库状态与健康
数据库服务器的状态为 running(运行中)或 stopped(已停止)。其 Overview 标签页实时显示 CPU、内存和网络用量、内部主机名以及连接信息。
管理数据库
- 启动 / 停止:在服务器页面操作,或使用
sh0 db start和sh0 db stop。主机重启后容器会自动重新启动(Docker 策略unless-stopped)。 - 重建:
sh0 db recreate根据已保存的设置(版本、限制、挂载)重建容器,并保留数据卷。 - 更改版本:
sh0 db update <id> --version <v>会记录新版本,下次重建时生效。控制面板不提供此操作。数据库引擎不支持降级,部分大版本升级需要先导出再恢复:请先做备份。 - 备份:参见备份与恢复。
要删除服务器及其数据,请打开其 Settings 标签页,在 Danger Zone 中勾选 Delete volumes,然后删除。对应的 API 为 DELETE /api/v1/database-servers/:id?delete_volumes=true。
sh0 db delete 删除时,只会移除容器,数据卷 sh0-dbsrv-<name>-data 仍保留在磁盘上,尽管列表中的确认消息声称数据会被删除。删除数据卷不可撤销:请先备份。