使用 PostgreSQL 新装 DIAN115

准备 PostgreSQL 数据库,在容器中填写数据库类型和连接串。首次启动自动建表;配置目录继续保存密钥、图片和其他本地文件。

适用镜像:v5.0.42 或更新

请先取得包含 PostgreSQL 支持的对应镜像,并在 DIAN115_IMAGE 中填写完整镜像名。latest 指向仓库当前已发布镜像,不等于本教程的最低版本;旧版镜像不适用本节迁移命令。

1. 准备镜像、目录和数据库

使用包含 PostgreSQL 支持的 DIAN115 v5.0.42 或更新镜像。下面示例将 PostgreSQL 18 与 DIAN115 部署在同一台 Linux / NAS,数据库只映射到本机 15432 端口。已有 PostgreSQL 服务的用户直接使用现有库地址、库名、用户名和密码,跳到“填写连接串”。/mnt/user/media 与 /mnt/cache/CloudNAS 替换为自己的媒体和挂载目录。

配置 / 命令
mkdir -p config dian115AI postgres-data

2. 保存 compose.yml

将以下内容保存为 compose.yml。DIAN115 使用 Host 网络;PostgreSQL 使用普通容器网络,通过宿主机 127.0.0.1:15432 连接。PostgreSQL 18 的持久化目录为 /var/lib/postgresql。已有数据库时仅保留 dian115 服务,保留原来的所有目录挂载。

配置 / 命令
services:
  postgres:
    image: postgres:18
    container_name: dian115-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: dian115
      POSTGRES_USER: dian115
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 填写数据库密码}
    ports:
      - "127.0.0.1:15432:5432"
    volumes:
      - ./postgres-data:/var/lib/postgresql

  dian115:
    image: ${DIAN115_IMAGE:?请填写支持 PostgreSQL 的镜像}
    container_name: dian115
    restart: unless-stopped
    network_mode: host
    environment:
      PORT: "8095"
      TZ: Asia/Shanghai
      DIAN115_DB_DRIVER: pgsql
      DIAN115_PG_DSN: ${DIAN115_PG_DSN:?请在 .env 填写数据库连接串}
    volumes:
      - ./config:/config
      - ./dian115AI:/dian115AI
      - /mnt/user/media:/媒体库
      - /mnt/cache/CloudNAS:/CloudNAS:rslave

3. 填写 .env 连接配置

在 compose.yml 同目录新建 .env,替换密码。POSTGRES_PASSWORD 用于首次创建 PostgreSQL 账号;DIAN115_PG_DSN 用于应用连接。两处密码必须一致。DSN 中的用户名、密码若含 @、:、/、?、#、% 等特殊字符,应先做 URL 百分号编码。例子中的 sslmode=disable 用于同机连接;远程 TLS 数据库按服务提供方要求填写 sslmode。

配置 / 命令
# 两处密码必须相同。示例密码请自行替换;使用字母和数字可直接放入连接串。
POSTGRES_PASSWORD=ChangeThisPassword2026
DIAN115_PG_DSN=postgres://dian115:ChangeThisPassword2026@127.0.0.1:15432/dian115?sslmode=disable
# 已有指定镜像时,可填写完整镜像名;要求 v5.0.42 或更新且包含 PostgreSQL 支持。
DIAN115_IMAGE=madbrolab/dian115:5.0.42

4. 填写已有数据库的连接串

DIAN115 的数据库配置只需 DIAN115_DB_DRIVER=pgsql 和 DIAN115_PG_DSN。连接串的格式为 postgres://用户名:密码@地址:端口/库名。Host 网络填写宿主机或数据库服务器地址;桥接模式下,只有同一 Docker 网络才能用 postgres 这样的服务名。下面是已有数据库的填写格式。

配置 / 命令
DIAN115_DB_DRIVER=pgsql
DIAN115_PG_DSN=postgres://dian115:YourPassword@192.168.1.10:5432/dian115?sslmode=require

5. 启动并完成首次设置

在 compose.yml 所在目录启动。打开 http://服务器IP:8095,设置管理员密码并按页面完成授权。应用连接 PostgreSQL 后自动创建当前业务表。首次使用 PostgreSQL 不需要先创建 SQLite 数据或运行迁移命令。

配置 / 命令
docker compose up -d postgres
docker compose up -d dian115
docker compose ps

6. 确认当前数据库

打开“系统设置 → 基础设置 → 数据库维护”。“当前数据库”应显示 PostgreSQL、已连接,并显示实际库名和版本。继续配置网盘服务、账号与媒体目录。/config 必须继续持久化,不能因使用 PostgreSQL 而删除。

字段说明

字段填写方法
DIAN115_DB_DRIVERpgsql 使用 PostgreSQL;不配置时默认 SQLite。
DIAN115_PG_DSNPostgreSQL 的直接连接串,包含用户名、密码、服务器地址、端口和库名。
POSTGRES_PASSWORD示例 PostgreSQL 容器首次初始化账号的密码;不是 DIAN115 额外的数据库开关。

常见问题

connection refused 或连接失败

核对 PostgreSQL 是否已启动,以及连接串的地址、端口和容器网络。同机 Host 示例使用 127.0.0.1:15432;远程库使用远程主机的实际端口。

密码认证失败

核对 DSN 密码与数据库账号密码。POSTGRES_PASSWORD 仅在数据库目录为空时初始化账号,修改 .env 不会改写已有账号密码。