# IT0 系统编译与部署指南 IT0 是一个 AI 驱动的服务器集群运维平台,采用 DDD + Clean Architecture + 微服务架构。本文档涵盖系统的编译、部署和运维全流程。 --- ## 目录 - [架构概览](#架构概览) - [前置依赖](#前置依赖) - [项目结构](#项目结构) - [安装依赖](#安装依赖) - [本地开发](#本地开发) - [编译构建](#编译构建) - [Docker 部署](#docker-部署) - [生产部署](#生产部署) - [语音服务(GPU)](#语音服务gpu) - [数据库迁移](#数据库迁移) - [环境变量说明](#环境变量说明) - [服务端口](#服务端口) - [运维命令](#运维命令) - [关键文件索引](#关键文件索引) - [快速上手清单](#快速上手清单) --- ## 架构概览 ``` 客户端 (Web/App/语音) │ ▼ Nginx (SSL/TLS 反向代理) │ ▼ Kong API Gateway (:8000) │ ├── auth-service (:3001) JWT 认证与 RBAC ├── agent-service (:3002) AI 代理编排(Claude CLI/API) ├── ops-service (:3003) 运维任务管理 ├── inventory-service (:3004) 服务器资产管理 ├── monitor-service (:3005) 健康监控与告警 ├── comm-service (:3006) 多渠道消息通知 ├── audit-service (:3007) 审计日志 └── voice-service (:3008) 语音交互(STT/TTS) 基础设施: PostgreSQL 16 ── 主数据库(Schema-per-Tenant 多租户隔离) Redis 7 ── 事件总线(Redis Streams)+ 缓存 + 限流 ``` **技术栈:** | 组件 | 技术 | |------|------| | 后端微服务 | NestJS (TypeScript) | | API 网关 | Kong 3.7 (DB-less 模式) | | Web 管理端 | Next.js (React/TypeScript) | | 移动端 | Flutter (Dart) | | 语音引擎 | FastAPI + Pipecat + Whisper + Kokoro | | 构建工具 | Turbo + pnpm Workspaces | | 容器化 | Docker + Docker Compose | --- ## 前置依赖 | 软件 | 版本要求 | 用途 | |------|----------|------| | Node.js | v18+ | 后端 NestJS 服务运行时 | | pnpm | 最新稳定版 | 包管理器(Workspaces 支持) | | Docker | 最新稳定版 | 容器化运行环境 | | Docker Compose | v2.x+ | 服务编排 | | Python | 3.11 | 语音服务 | | Flutter | 最新稳定版 | 移动端 App 构建 | --- ## 项目结构 ``` IT0/ ├── packages/ │ ├── services/ # 微服务 │ │ ├── auth-service/ # 认证服务 │ │ ├── agent-service/ # AI 代理服务 │ │ ├── ops-service/ # 运维服务 │ │ ├── inventory-service/ # 资产服务 │ │ ├── monitor-service/ # 监控服务 │ │ ├── comm-service/ # 通信服务 │ │ ├── audit-service/ # 审计服务 │ │ └── voice-service/ # 语音服务 (Python) │ ├── shared/ # 共享库 │ │ ├── common/ # @it0/common 通用工具 │ │ ├── database/ # @it0/database 数据层 │ │ ├── events/ # @it0/events 事件总线 │ │ ├── proto/ # @it0/proto gRPC 定义 │ │ └── testing/ # @it0/testing 测试工具 │ └── gateway/ # Kong API 网关配置 ├── it0-web-admin/ # Next.js Web 管理端 ├── it0_app/ # Flutter 移动端 ├── deploy/ │ ├── docker/ # Docker 部署配置 │ │ ├── docker-compose.yml # 主编排文件 │ │ ├── docker-compose.voice.yml # GPU 语音覆盖 │ │ ├── docker-compose.ssl.yml # SSL 代理覆盖 │ │ ├── deploy.sh # 部署脚本 │ │ ├── .env.example # 环境变量模板 │ │ └── nginx/ # Nginx 配置 │ └── k8s/ # Kubernetes 配置 ├── package.json # Monorepo 根配置 ├── turbo.json # Turbo 构建管道 └── pnpm-lock.yaml # 依赖锁定文件 ``` --- ## 安装依赖 ```bash # 在项目根目录执行,安装所有工作区依赖 pnpm install ``` 此命令会自动安装以下工作区的依赖: - `packages/services/*` — 7 个 NestJS 微服务 - `packages/shared/*` — 5 个共享库 - `packages/gateway` — Kong API 网关 - `it0-web-admin` — Next.js 前端 语音服务(Python)需单独安装: ```bash cd packages/services/voice-service pip install -r requirements.txt ``` Flutter 移动端: ```bash cd it0_app flutter pub get ``` --- ## 本地开发 ### 方式 A:Docker Compose(推荐) 最简单的方式,一键启动所有服务和基础设施: ```bash cd deploy/docker # 1. 首次安装(自动生成 .env 及安全密钥) ./deploy.sh install # 2. 编辑 .env,填入必要配置 vi .env # 至少需要设置 ANTHROPIC_API_KEY # 3. 构建所有 Docker 镜像 ./deploy.sh build # 4. 启动所有服务 ./deploy.sh up # 5. 运行数据库迁移 ./deploy.sh migrate ``` 启动完成后: - Web 管理端:`http://localhost:3000` - API 网关:`http://localhost:8000` ### 方式 B:原生开发(热重载) 适合需要频繁修改代码的开发场景: ```bash # 终端 1:启动基础设施(PostgreSQL + Redis) cd deploy/docker docker-compose up postgres redis -d # 终端 2:启动所有后端服务(Watch 模式,自动重载) # 回到项目根目录 pnpm dev # 终端 3:启动 Web 前端(可选,pnpm dev 已包含) cd it0-web-admin npm run dev ``` 本地开发需要在根目录创建 `.env` 文件(参考 `.env.example`): ```env DB_HOST=localhost DB_PORT=5432 DB_USERNAME=it0 DB_PASSWORD=it0_dev DB_DATABASE=it0 REDIS_URL=redis://localhost:6379 JWT_SECRET=your-jwt-secret-change-in-production JWT_REFRESH_SECRET=your-refresh-secret-change-in-production AGENT_ENGINE_TYPE=claude_code_cli ANTHROPIC_API_KEY=sk-ant-xxx ``` --- ## 编译构建 ### 后端服务(NestJS) ```bash # Turbo 并行构建所有服务(自动处理依赖关系) pnpm build # 构建单个服务 pnpm --filter @it0/auth-service build pnpm --filter @it0/agent-service build pnpm --filter @it0/ops-service build # 构建输出目录 # packages/services/{service-name}/dist/ ``` 每个 NestJS 服务使用 `nest build` 编译 TypeScript 到 JavaScript,输出到各自的 `dist/` 目录。 ### Web 管理端(Next.js) ```bash cd it0-web-admin # 开发模式 npm run dev # 生产构建 npm run build # 输出:.next/ 目录 # 启动生产服务 npm run start # 默认端口 3000 ``` ### Flutter 移动端 ```bash cd it0_app # 获取依赖 flutter pub get # 代码生成(如有使用 build_runner) flutter pub run build_runner build --delete-conflicting-outputs # 构建 Android APK flutter build apk # 构建 iOS flutter build ios ``` ### 语音服务(Python) Python 服务无需编译,直接运行: ```bash cd packages/services/voice-service # 开发模式(自动重载) uvicorn src.api.main:app --reload --port 3008 # 生产模式 uvicorn src.api.main:app --host 0.0.0.0 --port 3008 --workers 4 ``` --- ## Docker 部署 ### Docker Compose 文件说明 | 文件 | 用途 | |------|------| | `docker-compose.yml` | 主编排文件,包含所有服务和基础设施 | | `docker-compose.voice.yml` | GPU 覆盖层,为语音服务启用 NVIDIA GPU | | `docker-compose.ssl.yml` | SSL 覆盖层,添加 Nginx 反向代理 + Certbot | ### 构建镜像 ```bash cd deploy/docker # 并行构建所有镜像 ./deploy.sh build # 无缓存构建(完全重建) ./deploy.sh build-no-cache ``` ### Docker 网络与卷 **网络:** - `it0-network` — 所有服务共享的 bridge 网络 **数据卷:** | 卷名 | 用途 | |------|------| | `postgres_data` | PostgreSQL 数据持久化 | | `certbot_webroot` | ACME 证书验证目录 | | `certbot_certs` | SSL 证书存储 | | `models` | 语音模型缓存(可选) | --- ## 生产部署 ### 完整流程 ```bash cd deploy/docker # 1. 首次安装(生成安全密钥和配置) ./deploy.sh install # 自动生成: # - JWT_SECRET(32 位随机字符) # - JWT_REFRESH_SECRET(32 位随机字符) # - VAULT_MASTER_KEY(64 位十六进制) # - POSTGRES_PASSWORD(32 位随机字符) # 2. 编辑 .env 配置生产环境变量 vi .env # 必须手动设置: # - ANTHROPIC_API_KEY # - API_DOMAIN(如 it0api.szaiai.com) # - WEB_DOMAIN(如 it0.szaiai.com) # - CERT_EMAIL(如 admin@szaiai.com) # 3. 构建所有 Docker 镜像 ./deploy.sh build # 4. 获取 SSL 证书(Let's Encrypt) ./deploy.sh ssl-init # 5. 带 SSL 启动所有服务 ./deploy.sh ssl-up # 6. 运行数据库迁移 ./deploy.sh migrate # 7. 验证部署 ./deploy.sh health ``` ### SSL/TLS 配置 Nginx 作为 SSL 反向代理,配置位于 `deploy/docker/nginx/`: | 文件 | 用途 | |------|------| | `nginx.conf` | 主配置(反向代理 + 限流 + 压缩) | | `nginx-init.conf` | 初始配置(仅 HTTP,用于 ACME 验证) | | `ssl-params.conf` | SSL 参数(Mozilla Intermediate 配置) | **SSL 特性:** - TLS 1.2 + 1.3 支持 - ECDHE 密钥交换 - HSTS 预加载头 - OCSP Stapling - API 限流:30 请求/秒 - Web 限流:50 请求/秒 - Gzip 压缩 **生产域名映射:** - `https://it0api.szaiai.com` → Kong Gateway (:8000) - `https://it0.szaiai.com` → Web Admin (:3000) ### 证书管理 ```bash # 获取证书(首次) ./deploy.sh ssl-init # 手动续期 ./deploy.sh ssl-renew # 查看证书状态 ./deploy.sh ssl-status ``` Certbot 容器会自动处理证书续期。 --- ## 语音服务(GPU) 语音服务使用以下模型: - **STT(语音转文字):** faster-whisper (large-v3) - **TTS(文字转语音):** Kokoro-82M - **VAD(语音活动检测):** Silero VAD - **编排框架:** Pipecat ### 启用 GPU 支持 ```bash # 使用 GPU 覆盖层启动 ./deploy.sh voice-up # 重建语音服务 ./deploy.sh voice-rebuild ``` GPU 模式通过 `docker-compose.voice.yml` 添加: - NVIDIA GPU 设备访问 - `DEVICE=cuda` 环境变量 - 模型缓存卷挂载 ### CPU 模式 默认使用 CPU 运行,在 `.env` 中设置: ```env VOICE_DEVICE=cpu WHISPER_MODEL=large-v3 KOKORO_MODEL=kokoro-82m ``` --- ## 数据库迁移 IT0 使用 TypeORM 管理数据库迁移,采用 Schema-per-Tenant 多租户架构: ```sql -- 自动创建的 Schema shared -- 跨租户共享数据 tenant_default -- 默认租户 tenant_{id} -- 各租户独立 Schema ``` ### 迁移命令 ```bash # 运行所有服务的迁移 ./deploy.sh migrate # 生成新迁移 ./deploy.sh migrate-generate auth-service AddUserTable # 回滚上一次迁移 ./deploy.sh migrate-revert auth-service # 强制同步 Schema(仅开发环境) ./deploy.sh schema-sync auth-service ``` --- ## 环境变量说明 ### 必填变量 | 变量 | 说明 | 示例 | |------|------|------| | `POSTGRES_USER` | 数据库用户名 | `it0` | | `POSTGRES_PASSWORD` | 数据库密码 | *自动生成* | | `POSTGRES_DB` | 数据库名 | `it0` | | `JWT_SECRET` | JWT 签名密钥 | *自动生成* | | `JWT_REFRESH_SECRET` | Refresh Token 密钥 | *自动生成* | | `VAULT_MASTER_KEY` | 凭证加密主密钥 | *自动生成* | | `ANTHROPIC_API_KEY` | Claude AI API 密钥 | `sk-ant-xxx` | ### 可选变量 | 变量 | 说明 | 默认值 | |------|------|--------| | `REDIS_PASSWORD` | Redis 密码 | 空(无认证) | | `API_DOMAIN` | API 域名 | `it0api.szaiai.com` | | `WEB_DOMAIN` | Web 域名 | `it0.szaiai.com` | | `CERT_EMAIL` | Let's Encrypt 邮箱 | `admin@szaiai.com` | | `TWILIO_ACCOUNT_SID` | Twilio 账号 SID | 空 | | `TWILIO_AUTH_TOKEN` | Twilio 认证令牌 | 空 | | `TWILIO_PHONE_NUMBER` | Twilio 电话号码 | 空 | | `WHISPER_MODEL` | Whisper 模型版本 | `large-v3` | | `KOKORO_MODEL` | Kokoro TTS 模型 | `kokoro-82m` | | `VOICE_DEVICE` | 语音计算设备 | `cpu` | --- ## 服务端口 ### 内部端口(Docker 网络内) | 服务 | 端口 | 健康检查 | |------|------|----------| | Kong API Gateway | 8000 (代理) / 8001 (管理) | `GET /status` | | Web Admin | 3000 | — | | Auth Service | 3001 | `GET /api/health` | | Agent Service | 3002 | `GET /api/health` | | Ops Service | 3003 | `GET /api/health` | | Inventory Service | 3004 | `GET /api/health` | | Monitor Service | 3005 | `GET /api/health` | | Comm Service | 3006 | `GET /api/health` | | Audit Service | 3007 | `GET /api/health` | | Voice Service | 3008 | `GET /health` | | PostgreSQL | 5432 | — | | Redis | 6379 | — | ### Kong 网关路由 ``` /api/v1/auth → http://auth-service:3001 /api/v1/agent → http://agent-service:3002 /api/v1/ops → http://ops-service:3003 /api/v1/inventory → http://inventory-service:3004 /api/v1/monitor → http://monitor-service:3005 /api/v1/comm → http://comm-service:3006 /api/v1/audit → http://audit-service:3007 # WebSocket 路由 /ws/agent → ws://agent-service:3002 /ws/voice → ws://voice-service:3008 ``` --- ## 运维命令 所有命令通过 `deploy/docker/deploy.sh` 执行: ### 服务管理 ```bash ./deploy.sh up # 启动所有服务 ./deploy.sh down # 停止所有服务 ./deploy.sh restart # 重启所有服务 ./deploy.sh start-svc # 启动指定服务 ./deploy.sh rebuild-svc # 重建并重启指定服务 ``` ### 监控与日志 ```bash ./deploy.sh status # 查看容器运行状态 ./deploy.sh health # 健康检查所有服务 ./deploy.sh logs # 查看所有日志 ./deploy.sh logs # 查看指定服务日志 ``` ### 基础设施 ```bash ./deploy.sh infra-up # 仅启动 PostgreSQL + Redis ./deploy.sh infra-reset # 重置基础设施(会删除数据!) ``` ### SSL 证书 ```bash ./deploy.sh ssl-init # 首次获取证书 ./deploy.sh ssl-up # 带 SSL 启动 ./deploy.sh ssl-renew # 手动续期证书 ./deploy.sh ssl-status # 查看证书状态 ``` ### 数据库 ```bash ./deploy.sh migrate # 运行迁移 ./deploy.sh migrate-generate # 生成迁移 ./deploy.sh migrate-revert # 回滚迁移 ./deploy.sh schema-sync # 同步 Schema(仅开发) ``` --- ## 关键文件索引 | 路径 | 说明 | |------|------| | `package.json` | Monorepo 根配置(pnpm workspaces + Turbo 脚本) | | `turbo.json` | Turbo 构建管道与缓存配置 | | `deploy/docker/deploy.sh` | 生产部署脚本(核心) | | `deploy/docker/docker-compose.yml` | 主 Docker Compose 编排文件 | | `deploy/docker/docker-compose.voice.yml` | GPU 语音服务覆盖层 | | `deploy/docker/docker-compose.ssl.yml` | SSL Nginx 代理覆盖层 | | `deploy/docker/.env.example` | 环境变量模板 | | `deploy/docker/nginx/nginx.conf` | Nginx SSL 反向代理配置 | | `deploy/k8s/base/` | Kubernetes 部署配置 | | `packages/gateway/config/kong.yml` | Kong 网关声明式配置 | | `packages/gateway/Dockerfile` | Kong 网关 Dockerfile | | `packages/services/voice-service/Dockerfile` | 语音服务 Dockerfile | --- ## 快速上手清单 ### 本地开发(Docker) - [ ] 安装 Docker、pnpm、Node.js v18+ - [ ] `pnpm install` — 安装依赖 - [ ] `cd deploy/docker && ./deploy.sh install` — 初始化配置 - [ ] 编辑 `.env`,设置 `ANTHROPIC_API_KEY` - [ ] `./deploy.sh build` — 构建镜像 - [ ] `./deploy.sh up` — 启动服务 - [ ] `./deploy.sh migrate` — 数据库迁移 - [ ] 访问 `http://localhost:3000`(Web)和 `http://localhost:8000`(API) ### 生产部署 - [ ] 准备服务器(Linux,已安装 Docker + Docker Compose) - [ ] 克隆代码仓库 - [ ] `cd deploy/docker && ./deploy.sh install` — 初始化配置 - [ ] 编辑 `.env`,设置所有必要变量(API Key、域名、邮箱) - [ ] `./deploy.sh build` — 构建镜像 - [ ] `./deploy.sh ssl-init` — 获取 SSL 证书 - [ ] `./deploy.sh ssl-up` — 带 SSL 启动 - [ ] `./deploy.sh migrate` — 数据库迁移 - [ ] `./deploy.sh health` — 验证所有服务健康