# 本地 PostgreSQL 开发环境 参考 `atlas-seller-kit/infra` 的 Docker 数据库 + 宿主机应用模式,只运行 PostgreSQL。图片、头像、字体等直接使用七牛,不启动 Redis、MinIO 或本地文件服务器。 ## 启动 从 `doodle-store` 根目录执行: ```bash cp .env.example .env # 编辑 .env,替换 POSTGRES_PASSWORD 为本地密码。 pnpm infra:up pnpm infra:status ``` 已有 `.env` 时保留现有文件,不重复复制。`infra:up` 显式加载根目录 `.env` 并等待健康检查,不依赖 Compose 文件所在目录寻找环境变量。镜像固定为参考项目使用的 `postgres:18.6-alpine`,升级时显式修改标签,不使用 latest。 | 连接项 | 默认值 | | -------------- | ---------------------------------- | | 主机 | 127.0.0.1 | | 宿主机端口 | 5434(避免与参考项目的 5433 冲突) | | 数据库 | doodle_dev | | 用户 | doodle_dev | | 密码 | 根目录 `.env` 中 POSTGRES_PASSWORD | | 编码 / 时区 | UTF-8 / UTC | | Compose 项目名 | doodle-store-dev | 端口只绑定本机回环地址;数据库客户端可用上述配置连接。postgres-data 是此 Compose 项目的独立命名卷,停止容器保留数据,不影响参考项目。 ```bash pnpm infra:logs pnpm infra:psql pnpm infra:down ``` `infra:psql` 在容器内通过本地 socket 打开 SQL 控制台;宿主机数据库客户端通过 TCP 连接并使用密码。`infra:down` 不删除命名卷。没有提供自动删除数据的 reset 命令。 POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD 只在空数据卷首次初始化时创建数据库/角色。修改 `.env` 不会自动修改已有数据库密码,也不会把已有卷迁移到新 PostgreSQL 主版本;已有库应通过 SQL 管理角色,升级先备份并演练恢复。 ## 服务端连接 服务端在宿主机通过 `pnpm dev` 启动,连接串放 `apps/server/.env`。参考该目录 `.env.example`,将用户名、密码、端口和库名与根 `.env` 对齐;密码有特殊字符时先做 URL 编码。 ```text postgresql://doodle_dev:@127.0.0.1:5434/doodle_dev?schema=public ``` 根 `.env` 仅供 Compose;`apps/server/.env` 仅供服务端,当前 NestJS 骨架尚未读取 DATABASE_URL、接入 Prisma 或七牛。doodle_dev 已执行基线 SQL,原创建 10 张表及初始配置,2026-10-14 执行 004/005/006/007/008 后共有 13 张表;后续 Prisma schema/migrations 根据 [v3.5 数据库设计](../docs/v3.5/数据库设计文档.md) 实施。开发角色为此本地集群的初始化管理员,生产运行角色权限在部署时单独设置,不复制本地账号密码到云服务器。 自动测试需要真实数据库时,使用同一**本地** PostgreSQL 实例内独立 `doodle_test` 数据库及连接串,测试初始化流程另行实施。测试不得对 doodle_dev 或生产库执行清空数据操作;目前尚未创建测试库。 云端首期仅常驻生产库,测试联调按需隔离。详细安排与七牛资源隔离见 [开发与部署环境方案](../docs/v3.5/开发与部署环境方案.md)。 建表 SQL 已生成并通过临时库验证,开发库已于 2026-10-12 完成初始化,其他空库执行步骤见 [SQL 执行说明](../apps/server/prisma/sql/README.md)。Docker 启动只创建空数据库,不会自动执行这些业务表脚本。