Coolify logoCoolify

内部 PostgreSQL 升级

Coolify 自托管实例使用一个名为 coolify-db 的内部 PostgreSQL 数据库容器。 普通的 Coolify 更新不会自动将 PostgreSQL 升级到新的主版本。

PostgreSQL 主版本升级(例如从 1518)需要数据迁移。仅更改 Docker 镜像是不够的,因为 PostgreSQL 会拒绝由不同主版本创建的数据目录。

请先备份

在升级内部 PostgreSQL 数据库之前,请创建或验证最近的 Coolify 备份。 升级脚本会保留之前的 Docker 卷以便回滚,但在更改数据库版本之前,您仍应拥有外部备份。

何时使用此功能

仅在需要将 内部 Coolify 数据库 升级到更新的 PostgreSQL 主版本时使用此功能。

不要将其用于您在 Coolify 中作为项目资源创建的 PostgreSQL 数据库。这些数据库拥有自己的生命周期和备份/恢复流程。

升级 PostgreSQL

在您的 Coolify 服务器上运行脚本:

/data/coolify/source/upgrade-postgres.sh 18

18 替换为目标 PostgreSQL 主版本。

脚本将执行以下操作:

  1. 检测当前的 coolify-db PostgreSQL 版本。
  2. 停止 coolify 应用程序容器以防止写入。
  3. /data/coolify/backups/internal-postgres/ 中创建压缩的 pg_dumpall 备份。
  4. 创建一个新的 Docker 卷,例如 coolify-db-pg18
  5. 使用目标版本将转储恢复到临时 PostgreSQL 容器中。
  6. 对恢复的数据库进行冒烟测试。
  7. 写入 /data/coolify/source/docker-compose.postgres-upgrade.yml
  8. 使用新的 PostgreSQL 镜像和卷重启 Coolify 堆栈。
  9. /data/coolify/source/postgres-upgrade-rollback.env 中保存回滚元数据。

PostgreSQL 18 卷路径

PostgreSQL 18 及更高版本使用 /var/lib/postgresql 作为容器挂载路径。 较旧版本使用 /var/lib/postgresql/data。 脚本会自动选择正确的路径。

Docker Compose 中的变更

脚本不会修改 docker-compose.ymldocker-compose.prod.yml。 相反,它会创建此覆盖文件:

/data/coolify/source/docker-compose.postgres-upgrade.yml

对于 PostgreSQL 18,其内容类似于:

services:
  postgres:
    image: "postgres:18-alpine"
    volumes:
      - coolify-db:/var/lib/postgresql
volumes:
  coolify-db:
    name: "coolify-db-pg18"
    external: true

未来的 Coolify 更新会自动包含此覆盖文件,因此在正常升级后,升级后的镜像和卷将保持活动状态。

如果您还有 /data/coolify/source/docker-compose.custom.yml,PostgreSQL 升级覆盖文件将在自定义 compose 文件之后加载。对于冲突的 postgres 服务设置,PostgreSQL 升级覆盖文件优先。

回滚

如果升级后的数据库无法正常工作,请运行:

/data/coolify/source/upgrade-postgres.sh rollback

回滚使用上次成功升级期间保存的元数据。 它会恢复之前活跃的 PostgreSQL 镜像、Docker 卷和挂载路径。

例如:

15 → 18 → rollback = 15
15 → 18 → 19 → rollback = 18

回滚仅支持单步操作。每次成功升级都会用之前活跃的版本替换回滚元数据。

回滚期间不会删除升级后的 Docker 卷。在确认回滚有效后,您可以手动检查或删除它。

脚本创建的文件

文件用途
/data/coolify/source/docker-compose.postgres-upgrade.yml指向升级后的 PostgreSQL 镜像和 Docker 卷的 Compose 覆盖文件。
/data/coolify/source/postgres-upgrade-rollback.envupgrade-postgres.sh rollback 使用的元数据。
/data/coolify/source/postgres-upgrade-*.log升级或回滚日志。
/data/coolify/backups/internal-postgres/postgres-upgrade-*.sql.gz迁移前创建的压缩数据库转储。

验证活动的 Compose 配置

要检查 Coolify 将使用的最终 Compose 配置,请运行:

docker compose \
  --env-file /data/coolify/source/.env \
  -f /data/coolify/source/docker-compose.yml \
  -f /data/coolify/source/docker-compose.prod.yml \
  -f /data/coolify/source/docker-compose.custom.yml \
  -f /data/coolify/source/docker-compose.postgres-upgrade.yml \
  config

如果您没有 docker-compose.custom.yml,请从命令中删除该行。

On this page