# Docker 混合模式开发指南 ## 概述 采用 **Docker 运行基础设施 + 本地热重载开发** 的混合模式,解决传统 Docker Compose 全量构建慢、调试不便的问题。 | 服务 | 运行方式 | 说明 | |------|---------|------| | es (Elasticsearch) | Docker | 基础服务,稳定不动 | | tika (文档解析) | Docker | 基础服务,稳定不动 | | libreoffice (文档转换) | Docker | 基础服务,稳定不动 | | server (NestJS后端) | 本地 `npm run start:dev` | 代码改动秒级热重载 | | web (React前端) | 本地 `npm run dev` | 代码改动秒级热重载 | --- ## 先决条件 - Docker Desktop 已安装并运行 - Node.js >= 20 - 项目代码已克隆到本地 `D:\AuraK` --- ## 启动步骤 ### Step 1: 启动基础设施 (Docker) ```bash # 进入项目目录 cd D:\AuraK # 只启动基础设施服务 (es, tika, libreoffice) docker compose up es tika libreoffice -d # 确认所有服务正常运行 docker compose ps ``` 预期输出: ``` NAME IMAGE STATUS aurak-es elasticsearch:9.2.1 Up (healthy) aurak-tika apache/tika:latest Up aurak-libreoffice aurak-libreoffice Up ``` ### Step 2: 启动后端 (本地) ```bash # 打开新终端 cd D:\AuraK\server # 确认 .env 中 Docker 服务地址为 127.0.0.1 # ELASTICSEARCH_HOST=http://127.0.0.1:9200 # TIKA_HOST=http://127.0.0.1:9998 # LIBREOFFICE_URL=http://127.0.0.1:8100 # 安装依赖(首次或依赖变更时) npm install # 启动开发模式(热重载) npm run start:dev ``` 后端启动成功标志:`Nest application successfully started`,监听 `http://localhost:3001` ### Step 3: 启动前端 (本地) ```bash # 打开新终端 cd D:\AuraK\web # 确认 .env 配置 # VITE_PORT=13001 # VITE_BACKEND_URL=http://localhost:3001 # 安装依赖(首次或依赖变更时) npm install # 启动开发模式(热重载) npm run dev ``` 前端启动成功标志:`Local: http://localhost:13001/` ### Step 4: 访问系统 打开浏览器访问 `http://localhost:13001` --- ## 重启场景 ### 只需重启后端 ```bash # 在 server/ 终端按 Ctrl+C,然后重新运行 npm run start:dev ``` ### 只需重启前端 ```bash # 在 web/ 终端按 Ctrl+C,然后重新运行 npm run dev ``` ### 只需重启某个 Docker 服务 ```bash # 重启单个服务 docker compose restart es # 重启所有 Docker 服务(不重建) docker compose restart ``` ### 完全重建 Docker 服务 ```bash # 停止并移除所有 Docker 容器 docker compose down # 重新构建并启动 docker compose up es tika libreoffice -d ``` --- ## 停止 ```bash # 停止 Docker 基础设施 cd D:\AuraK docker compose down # 分别停止本地进程 (Ctrl+C) # server 终端: Ctrl+C # web 终端: Ctrl+C ``` --- ## 环境配置参考 ### server/.env (后端) ``` PORT=3001 DATABASE_PATH=./data/metadata.db ELASTICSEARCH_HOST=http://127.0.0.1:9200 TIKA_HOST=http://127.0.0.1:9998 LIBREOFFICE_URL=http://127.0.0.1:8100 JWT_SECRET=123456789 UPLOAD_FILE_PATH=./uploads MAX_FILE_SIZE=104857600 TEMP_DIR=./temp DEFAULT_VECTOR_DIMENSIONS=2048 MAX_CHUNK_SIZE=8191 MAX_OVERLAP_SIZE=200 MAX_MEMORY_USAGE_MB=1024 CHUNK_BATCH_SIZE=100 GC_THRESHOLD_MB=800 ``` ### web/.env (前端) ``` VITE_API_BASE_URL=/api VITE_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0 VITE_PORT=13001 VITE_HOST=0.0.0.0 VITE_BACKEND_URL=http://localhost:3001 VITE_DEFAULT_LANGUAGE=zh ``` --- ## 常见问题 ### Elasticsearch 内存不足 ``` ES_JAVA_OPTS 已在 docker-compose.yml 中限制为 512MB 若仍不足,可修改 docker-compose.yml: - ES_JAVA_OPTS=-Xms256m -Xmx256m ``` ### 端口冲突 ``` es:9200 → 本地映射 9200 tika:9998 → 本地映射 9998 libreoffice:8100 → 本地映射 8100 server:3001 → 本地直接启动 web:13001 → 本地直接启动 ``` ### Docker Desktop 未运行 ```bash # 如果 docker 命令报错,请先启动 Docker Desktop # 或确认 Docker Desktop 已开启 WSL2 集成 ``` --- ## 生产部署 需要全量 Docker 构建时: ```bash # 完整构建所有服务 docker compose build # 完整启动所有服务(包含 server/web) docker compose up -d ``` --- **最后更新**: 2026-05-14