From 96742de07bf680b28f7718e74753bc8fbee5bcb9 Mon Sep 17 00:00:00 2001 From: Nelson <1475262689@qq.com> Date: Mon, 6 Jul 2026 17:45:24 +0800 Subject: [PATCH] Add V2 local dev compose --- ai_knowledge_base_v2/README.md | 17 ++++++ .../apps/backend/.dockerignore | 7 +++ ai_knowledge_base_v2/apps/backend/Dockerfile | 15 ++++++ ai_knowledge_base_v2/apps/backend/README.md | 11 +++- .../apps/user-client/.dockerignore | 5 ++ .../apps/user-client/Dockerfile | 12 +++++ .../apps/user-client/README.md | 9 ++++ .../2026-07-06-phase2-dev-compose.md | 48 +++++++++++++++++ .../development_records/README.md | 1 + ai_knowledge_base_v2/docker-compose.dev.yml | 54 +++++++++++++++++++ 10 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 ai_knowledge_base_v2/apps/backend/.dockerignore create mode 100644 ai_knowledge_base_v2/apps/backend/Dockerfile create mode 100644 ai_knowledge_base_v2/apps/user-client/.dockerignore create mode 100644 ai_knowledge_base_v2/apps/user-client/Dockerfile create mode 100644 ai_knowledge_base_v2/development_records/2026-07-06-phase2-dev-compose.md create mode 100644 ai_knowledge_base_v2/docker-compose.dev.yml diff --git a/ai_knowledge_base_v2/README.md b/ai_knowledge_base_v2/README.md index 55e4f38..b312d7c 100644 --- a/ai_knowledge_base_v2/README.md +++ b/ai_knowledge_base_v2/README.md @@ -27,3 +27,20 @@ - 给用户、团队、交接和评审看的文档统一使用中文。 - `extracted/` 里的机器抽取文档可以保留原始语言或工程化表达,优先服务开发检索。 - 旧代码只在领域边界匹配时复用,不把旧的“答疑资产审核模型”硬套到新的“知识库权限问答模型”上。 + +## 本地开发启动 + +阶段二已经提供本地开发编排: + +```bash +cd ai_knowledge_base_v2 +docker compose -f docker-compose.dev.yml up --build +``` + +默认访问地址: + +- 用户端 H5:`http://127.0.0.1:5173/` +- 后端 API:`http://127.0.0.1:8100/api/health` +- MySQL:`127.0.0.1:3307` + +开发阶段 mock 短信验证码为 `123456`。 diff --git a/ai_knowledge_base_v2/apps/backend/.dockerignore b/ai_knowledge_base_v2/apps/backend/.dockerignore new file mode 100644 index 0000000..cfa92cf --- /dev/null +++ b/ai_knowledge_base_v2/apps/backend/.dockerignore @@ -0,0 +1,7 @@ +.env +.venv/ +__pycache__/ +*.py[cod] +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ diff --git a/ai_knowledge_base_v2/apps/backend/Dockerfile b/ai_knowledge_base_v2/apps/backend/Dockerfile new file mode 100644 index 0000000..1eb680f --- /dev/null +++ b/ai_knowledge_base_v2/apps/backend/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.12-slim + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8100 + +CMD ["sh", "-c", "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8100"] diff --git a/ai_knowledge_base_v2/apps/backend/README.md b/ai_knowledge_base_v2/apps/backend/README.md index 96b5960..dd20289 100644 --- a/ai_knowledge_base_v2/apps/backend/README.md +++ b/ai_knowledge_base_v2/apps/backend/README.md @@ -26,6 +26,15 @@ ## 本地启动 +方式一:使用 V2 统一编排。 + +```bash +cd ai_knowledge_base_v2 +docker compose -f docker-compose.dev.yml up --build +``` + +方式二:本地 Python 直接启动。 + ```bash cd ai_knowledge_base_v2/apps/backend python -m venv .venv @@ -39,7 +48,5 @@ uvicorn app.main:app --reload --host 127.0.0.1 --port 8100 ## 下一步 -- 补 Alembic 初始迁移脚本。 -- 补聊天会话和消息接口。 - 补管理员登录接口。 - 接入 Redis 替换内存短信验证码和 Token 黑名单。 diff --git a/ai_knowledge_base_v2/apps/user-client/.dockerignore b/ai_knowledge_base_v2/apps/user-client/.dockerignore new file mode 100644 index 0000000..3aab5df --- /dev/null +++ b/ai_knowledge_base_v2/apps/user-client/.dockerignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +.env +.env.local +*.tsbuildinfo diff --git a/ai_knowledge_base_v2/apps/user-client/Dockerfile b/ai_knowledge_base_v2/apps/user-client/Dockerfile new file mode 100644 index 0000000..4c55e51 --- /dev/null +++ b/ai_knowledge_base_v2/apps/user-client/Dockerfile @@ -0,0 +1,12 @@ +FROM node:22-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . + +EXPOSE 5173 + +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"] diff --git a/ai_knowledge_base_v2/apps/user-client/README.md b/ai_knowledge_base_v2/apps/user-client/README.md index 66cf89d..d0483b2 100644 --- a/ai_knowledge_base_v2/apps/user-client/README.md +++ b/ai_knowledge_base_v2/apps/user-client/README.md @@ -15,6 +15,15 @@ ## 本地启动 +方式一:使用 V2 统一编排。 + +```bash +cd ai_knowledge_base_v2 +docker compose -f docker-compose.dev.yml up --build +``` + +方式二:本地 Node 直接启动。 + ```bash cd ai_knowledge_base_v2/apps/user-client npm install diff --git a/ai_knowledge_base_v2/development_records/2026-07-06-phase2-dev-compose.md b/ai_knowledge_base_v2/development_records/2026-07-06-phase2-dev-compose.md new file mode 100644 index 0000000..d08f854 --- /dev/null +++ b/ai_knowledge_base_v2/development_records/2026-07-06-phase2-dev-compose.md @@ -0,0 +1,48 @@ +# 阶段二记录:本地开发编排 + +日期:2026-07-06 + +## 本次目标 + +补齐 V2 本地开发编排,让 MySQL、后端和用户端 H5 可以一起启动,降低后续开发和测试的环境成本。 + +## 已完成 + +- 新增 `ai_knowledge_base_v2/docker-compose.dev.yml`。 +- 新增 MySQL 8.4 服务: + - 容器名:`ai_kb_v2_mysql` + - 数据库:`ai_knowledge_base_v2` + - 用户:`ai_kb` + - 本机端口:`3307` +- 新增后端 Dockerfile: + - 启动前执行 `alembic upgrade head` + - 后端端口:`8100` +- 新增用户端 Dockerfile: + - Vue H5 dev server 端口:`5173` +- 更新 V2 根目录、后端、用户端 README。 + +## 默认访问地址 + +- 用户端 H5:`http://127.0.0.1:5173/` +- 后端健康检查:`http://127.0.0.1:8100/api/health` +- MySQL:`127.0.0.1:3307` + +## 使用方式 + +```bash +cd ai_knowledge_base_v2 +docker compose -f docker-compose.dev.yml up --build +``` + +## 当前边界 + +- 当前编排面向本地开发,不是生产部署方案。 +- MySQL root 密码和业务密码都是本地开发默认值,生产环境必须更换。 +- 后端仍使用 mock 短信验证码 `123456`。 +- 真实飞书和真实大模型尚未接入。 + +## 验证记录 + +- `docker compose -f docker-compose.dev.yml config --quiet` 已通过。 +- `git diff --check` 已通过。 +- 尝试执行 `docker compose -f docker-compose.dev.yml build backend user-client`,Dockerfile 和构建上下文已正常进入构建流程;由于当前环境拉取 Docker Hub 基础镜像速度过慢,等待数分钟后人工中断,未判定为代码构建失败。 diff --git a/ai_knowledge_base_v2/development_records/README.md b/ai_knowledge_base_v2/development_records/README.md index 480ddb0..863deb5 100644 --- a/ai_knowledge_base_v2/development_records/README.md +++ b/ai_knowledge_base_v2/development_records/README.md @@ -27,3 +27,4 @@ | `2026-07-06-decision-register.md` | 开发决策登记表,集中记录用户明确决策和默认工程决策。 | | `2026-07-06-phase2-backend-foundation.md` | 阶段二后端基础工程第一批记录。 | | `2026-07-06-phase2-user-client.md` | 阶段二用户端 Vue 3 H5 第一批记录。 | +| `2026-07-06-phase2-dev-compose.md` | 阶段二本地开发编排记录。 | diff --git a/ai_knowledge_base_v2/docker-compose.dev.yml b/ai_knowledge_base_v2/docker-compose.dev.yml new file mode 100644 index 0000000..fec8be9 --- /dev/null +++ b/ai_knowledge_base_v2/docker-compose.dev.yml @@ -0,0 +1,54 @@ +services: + mysql: + image: mysql:8.4 + container_name: ai_kb_v2_mysql + environment: + MYSQL_ROOT_PASSWORD: rootpass + MYSQL_DATABASE: ai_knowledge_base_v2 + MYSQL_USER: ai_kb + MYSQL_PASSWORD: ai_kb + TZ: Asia/Shanghai + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + ports: + - "3307:3306" + volumes: + - ai_kb_v2_mysql_data:/var/lib/mysql + healthcheck: + test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uai_kb -pai_kb --silent"] + interval: 5s + timeout: 5s + retries: 20 + + backend: + build: + context: ./apps/backend + container_name: ai_kb_v2_backend + environment: + APP_ENV: docker + DEBUG: "true" + DATABASE_URL: mysql+pymysql://ai_kb:ai_kb@mysql:3306/ai_knowledge_base_v2?charset=utf8mb4 + JWT_SECRET_KEY: local-dev-secret-change-before-production + MOCK_SMS_ENABLED: "true" + MOCK_SMS_CODE: "123456" + AUTO_CREATE_TABLES: "false" + ports: + - "8100:8100" + depends_on: + mysql: + condition: service_healthy + + user-client: + build: + context: ./apps/user-client + container_name: ai_kb_v2_user_client + environment: + VITE_API_BASE_URL: http://127.0.0.1:8100/api + ports: + - "5173:5173" + depends_on: + - backend + +volumes: + ai_kb_v2_mysql_data: