chore: switch db port to 5433 and use pgvector image

This commit is contained in:
chengkai3
2026-04-12 21:46:31 +08:00
parent 2c854cc6af
commit 0fa6b043c6
6 changed files with 35 additions and 9 deletions
+2 -1
View File
@@ -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
+4 -3
View File
@@ -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
+2 -1
View File
@@ -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` 直接中断发布。
+2 -2
View File
@@ -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`。
+2 -2
View File
@@ -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:
+23
View File
@@ -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`