Halo网站迁移附件存储到本地过程记录-网站建设服务中心-电脑网络-本牛千智丨专注WorkFine开发

Halo网站迁移附件存储到本地过程记录

我的网站什么的是Docker部署,数据库为PostgreSQL

添加数据库管理工具Adminer

根据你提供的 docker-compose 配置文件,你的 Halo 博客使用的是 PostgreSQL 15.4 数据库,且配置非常规范:

  • 数据库服务名: halodb
  • 数据库名: halo
  • 用户名: halo
  • 密码: openpostgresql
  • 网络: baota_net (外部网络)
  • 端口情况: 未映射到宿主机halodb 部分没有 ports 字段),这意味着出于安全考虑,该数据库只能在 Docker 内部网络访问,无法直接从宝塔面板的“数据库”模块或本地客户端连接。

针对这种情况,最推荐的方法是部署一个轻量级的图形化管理容器(Adminer),并将其加入到你现有的 baota_net 网络中。

以下是具体操作步骤:

方案一:部署 Adminer 管理界面(推荐,图形化操作)

Adminer 是一个单文件的数据库管理工具,支持 PostgreSQL,非常轻量。

1. 修改 docker-compose.yml

在你的 docker-compose.yml 文件中(与 halo_ytmyhalodb 同级),添加以下 adminer 服务代码:

  # 新增 Adminer 服务
  adminer:
    image: adminer:latest
    container_name: halo_adminer
    restart: always
    ports:
      - "8088:8080"  # 映射到宿主机的 8088 端口,你可以根据需要修改
    environment:
      - ADMINER_DEFAULT_SERVER=halodb # 默认连接的数据库主机名
    networks:
      - baota_net # 必须加入同一个网络才能访问 halodb
    depends_on:
      - halodb
    labels:
      createdBy: "bt_apps"

注意

  • 确保缩进与上面的 halo_ytmy 对齐。
  • ports 中的 8088 是宿主机端口,如果已被占用,请改为其他端口(如 8089)。
  • networks 必须包含 baota_net,否则 Adminer 找不到 halodb

2. 重启服务

在宝塔面板的 “终端” 或通过 SSH 进入 docker-compose.yml 所在的目录,执行:

docker-compose up -d

系统会自动拉取 Adminer 镜像并启动新容器,不会干扰现有的 Halo 和数据库。

3. 访问管理界面

  1. 打开浏览器,访问 http://你的服务器IP:8088
  2. 登录信息如下:
    • 系统 (System): 选择 PostgreSQL
    • 服务器 (Server): 输入 halodb (因为我们在同一网络内,直接用服务名)
    • 用户名 (Username): halo
    • 密码 (Password): openpostgresql
    • 数据库 (Database): halo
  3. 点击“登录”,即可进行可视化的增删改查、导入导出操作。

在原有部署语句下方添加

adminer:
    image: adminer:latest
    container_name: halo_adminer
    restart: always
    ports:
      - "8088:8080"  # 映射到宿主机的 8088 端口,你可以根据需要修改
    environment:
      - ADMINER_DEFAULT_SERVER=halodb # 默认连接的数据库主机名
    networks:
      - baota_net # 必须加入同一个网络才能访问 halodb
    depends_on:
      - halodb
    labels:
      createdBy: "bt_apps"

完整部署代码

隐藏内容,输入密码后查看

替换原有域名SQL语句

从对象存储迁移到本地需要修改附件链接,

-- 开启事务,方便回滚

UPDATE extensions
SET data = convert_to(
    REPLACE(
        convert_from(data, 'UTF8'),
        'https://halo-i.obs.cn-north-4.myhuaweicloud.com/',  -- 旧前缀(必须与实际数据完全一致)
        'https://i.bn1000.com/upload/s3/'                    -- 新前缀
    ),
    'UTF8'
)
WHERE convert_from(data, 'UTF8') LIKE '%https://halo-i.obs.cn-north-4.myhuaweicloud.com/%'
请登录后发表评论

    请登录后查看回复内容