From 0fa6b043c6908b4cf6d020f5d26a515e04a19efe Mon Sep 17 00:00:00 2001 From: chengkai3 Date: Sun, 12 Apr 2026 21:46:31 +0800 Subject: [PATCH] chore: switch db port to 5433 and use pgvector image --- .env.example | 3 ++- .github/workflows/main.yml | 7 ++++--- MEMORY.md | 3 ++- README.md | 4 ++-- docker-compose.yml | 4 ++-- memory/2026-04-12.md | 23 +++++++++++++++++++++++ 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/.env.example b/.env.example index e2fc3a1..d4c7d7c 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,8 @@ INITIAL_ADMIN_PASSWORD=change-me-strong-password POSTGRES_DB=fquiz POSTGRES_USER=fquiz POSTGRES_PASSWORD=fquiz -POSTGRES_IMAGE=docker.m.daocloud.io/library/postgres:16-alpine +POSTGRES_PORT=5433 +POSTGRES_IMAGE=docker.m.daocloud.io/pgvector/pgvector:pg16 PYTHON_BASE_IMAGE=docker.m.daocloud.io/library/python:3.11-slim NODE_BASE_IMAGE=docker.m.daocloud.io/library/node:22-alpine PIP_INDEX_URL=https://pypi.org/simple diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6333dd9..64bd744 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -127,14 +127,14 @@ jobs: cat > docker-compose.prod.yml <<'YAML' services: db: - image: ${POSTGRES_IMAGE:-docker.m.daocloud.io/library/postgres:16-alpine} + image: ${POSTGRES_IMAGE:-docker.m.daocloud.io/pgvector/pgvector:pg16} container_name: fquiz-db environment: POSTGRES_DB: ${POSTGRES_DB:-fquiz} POSTGRES_USER: ${POSTGRES_USER:-fquiz} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-fquiz} ports: - - "5432:5432" + - "${POSTGRES_PORT:-5433}:5432" volumes: - fquiz_db_data:/var/lib/postgresql/data healthcheck: @@ -209,7 +209,8 @@ jobs: POSTGRES_DB=fquiz POSTGRES_USER=fquiz POSTGRES_PASSWORD=fquiz - POSTGRES_IMAGE=docker.m.daocloud.io/library/postgres:16-alpine + POSTGRES_PORT=5433 + POSTGRES_IMAGE=docker.m.daocloud.io/pgvector/pgvector:pg16 ENV echo "[warn] .env 不存在,已写入默认模板,请尽快改成生产配置。" fi diff --git a/MEMORY.md b/MEMORY.md index fbfe0e1..86ca19f 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -38,5 +38,6 @@ - SQLAlchemy 关联加载选项(`selectinload/joinedload`)避免在模块导入期以全局常量初始化,优先在函数内惰性构建,防止导入顺序导致 mapper 提前配置失败。 - `app.models` 包初始化需预加载全部模型模块,确保字符串关系(如 `"AuditLog"`)在启动阶段可解析。 -- 部署 compose 中 DB 镜像应通过 `POSTGRES_IMAGE` 可配置,默认使用镜像站(`docker.m.daocloud.io/library/postgres:16-alpine`)以降低 Docker Hub 网络抖动风险。 +- 部署 compose 中 DB 镜像应通过 `POSTGRES_IMAGE` 可配置,默认使用镜像站的 pgvector 镜像(`docker.m.daocloud.io/pgvector/pgvector:pg16`)。 +- 宿主机 DB 暴露端口统一走 `POSTGRES_PORT`(默认 `5433`),用于规避与宿主机已有 PostgreSQL(常见 `5432`)冲突;容器内连接仍保持 `db:5432`。 - GitHub Actions 使用 `appleboy/ssh-action` 部署时,慢网环境需显式设置 `command_timeout`(建议 `45m`)并为 `docker compose pull` 增加重试,避免出现 `Run Command Timeout` 直接中断发布。 diff --git a/README.md b/README.md index 95f9752..07b327a 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ npm run lint:web - 前端:`http://localhost:3000` - 后端:`http://localhost:8000/health` -- PostgreSQL:`localhost:5432` +- PostgreSQL:`localhost:5433`(可通过 `POSTGRES_PORT` 覆盖) 5. 停止并清理: @@ -124,4 +124,4 @@ npm run lint:web 说明: - `NEXT_PUBLIC_API_BASE_URL` 在 Next.js 中是构建期注入;如果修改该值,需要重新执行 `docker compose up --build`。 - 若使用 Docker Compose,默认 `DATABASE_URL` 指向容器内 `db` 服务(PostgreSQL)。 -- 默认镜像源已配置为 `docker.m.daocloud.io`,如你网络环境可直连 Docker Hub,可在 `.env` 中覆盖 `POSTGRES_IMAGE / PYTHON_BASE_IMAGE / NODE_BASE_IMAGE`。 +- 默认镜像源已配置为 `docker.m.daocloud.io`,并默认使用 `pgvector` 镜像;如你网络环境可直连 Docker Hub,可在 `.env` 中覆盖 `POSTGRES_IMAGE / PYTHON_BASE_IMAGE / NODE_BASE_IMAGE`。 diff --git a/docker-compose.yml b/docker-compose.yml index 24d55b1..ec6ab0b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,13 @@ services: db: - image: ${POSTGRES_IMAGE:-docker.m.daocloud.io/library/postgres:16-alpine} + image: ${POSTGRES_IMAGE:-docker.m.daocloud.io/pgvector/pgvector:pg16} container_name: fquiz-db environment: POSTGRES_DB: ${POSTGRES_DB:-fquiz} POSTGRES_USER: ${POSTGRES_USER:-fquiz} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-fquiz} ports: - - "5432:5432" + - "${POSTGRES_PORT:-5433}:5432" volumes: - fquiz_db_data:/var/lib/postgresql/data healthcheck: diff --git a/memory/2026-04-12.md b/memory/2026-04-12.md index 1b8cd79..5254030 100644 --- a/memory/2026-04-12.md +++ b/memory/2026-04-12.md @@ -123,3 +123,26 @@ - 验证建议: - 推送触发 `main` 发布,观察部署日志不再在固定时长点报 `Run Command Timeout`。 - 远端 `docker compose ps` 应显示 `db/api/web` 均为 `Up`(或 `healthy`)。 + +## 追加修复(DB 端口冲突 + pgvector 基线) + +- 触发问题: + - 远端启动 `db` 报错:`listen tcp4 0.0.0.0:5432: bind: address already in use`。 + - 服务器已有旧 PostgreSQL 占用 `5432`,当前容器无法绑定。 +- 处理: + - `docker-compose.yml`: + - DB 端口映射改为 `${POSTGRES_PORT:-5433}:5432`。 + - DB 默认镜像改为 `docker.m.daocloud.io/pgvector/pgvector:pg16`。 + - `.github/workflows/main.yml`: + - 生产 compose 模板同步改为 `${POSTGRES_PORT:-5433}:5432`。 + - `.env` 自动模板新增 `POSTGRES_PORT=5433`。 + - `POSTGRES_IMAGE` 默认改为 `docker.m.daocloud.io/pgvector/pgvector:pg16`。 + - `.env.example`: + - 新增 `POSTGRES_PORT=5433`,并同步默认 `POSTGRES_IMAGE` 为 pgvector 镜像。 + - `README.md`: + - PostgreSQL 默认访问端口更新为 `5433`,并注明可通过 `POSTGRES_PORT` 覆盖。 +- 验证: + - `docker compose config` 通过。 + - 展开结果确认: + - `db.ports.published` 为 `5433`。 + - `db.image` 为 `docker.m.daocloud.io/pgvector/pgvector:pg16`。