AIri容器化部署:从单机到生产环境的完整指南
【免费下载链接】airi💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi
你是否曾想过拥有一个属于自己的AI虚拟伙伴,能够实时语音聊天、陪你玩游戏,还能像Neuro-sama那样智能互动?AIri正是这样一个开源项目,它让你能够自托管一个功能丰富的AI角色容器。但面对复杂的部署环境,你是否感到无从下手?别担心,本文将带你一步步构建稳定可靠的AIri部署方案。
为什么选择容器化部署?
在开始之前,我们先思考几个问题:你的AI伙伴需要多少资源?如何确保它在不同环境中表现一致?当用户量增长时如何扩展?容器化技术正是这些问题的答案。
容器化的核心优势:
- 环境一致性:开发、测试、生产环境完全一致
- 资源隔离:避免依赖冲突,提高稳定性
- 快速部署:一键启动,减少配置时间
- 弹性伸缩:根据负载动态调整资源
第一步:理解AIri的架构
AIri项目采用微服务架构,主要包含以下几个核心组件:
| 组件 | 功能 | 关键特性 |
|---|---|---|
| Web前端 | 用户界面交互 | Vue.js构建,支持实时语音 |
| 后端API | 业务逻辑处理 | Hono框架,支持WebSocket |
| 数据库 | 数据持久化 | PostgreSQL,用户数据存储 |
| Redis | 缓存与会话 | 实时消息传递 |
| OpenTelemetry | 监控与追踪 | 生产环境必备 |
第二步:单机部署快速上手
2.1 获取项目代码
# 克隆项目仓库 git clone https://gitcode.com/GitHub_Trending/ai/airi cd airi2.2 基础环境准备
AIri使用pnpm作为包管理器,确保你的系统已安装:
# 安装pnpm(如果未安装) curl -fsSL https://get.pnpm.io/install.sh | sh - # 安装依赖 pnpm install2.3 Docker单服务部署
对于快速体验,我们可以从最简单的Web前端开始:
# apps/stage-web/Dockerfile 关键配置解读 FROM node:24-trixie AS build-stage # 使用Node.js 24作为构建环境,确保依赖兼容性 WORKDIR /app COPY . . RUN pnpm install --frozen-lockfile # 锁定依赖版本,确保一致性 # 构建前端应用和文档 RUN pnpm -F @proj-airi/stage-web run build && \ pnpm -F @proj-airi/docs run build:base && \ mv ./docs/.vitepress/dist ./apps/stage-web/dist/docs FROM nginx:stable-alpine AS production-stage # 使用轻量级nginx作为生产环境 COPY --from=build-stage /app/apps/stage-web/dist /usr/share/nginx/html EXPOSE 80构建并运行:
# 构建镜像 docker build -t airi-web -f apps/stage-web/Dockerfile . # 运行容器 docker run -d -p 8080:80 --name airi-web-container airi-web访问http://localhost:8080即可看到AIri的Web界面。
第三步:完整服务堆栈部署
3.1 使用Docker Compose编排
AIri提供了完整的docker-compose配置,位于apps/server/docker-compose.yml:
# 核心服务配置解析 services: db: image: ghcr.io/tensorchord/vchord-postgres:pg18-v1.0.0 # 使用PostgreSQL 18,支持最新的数据库特性 environment: - POSTGRES_PASSWORD=example-PAssw0rd-xHjDYR.b7N ports: - '5435:5432' # 避免与本地PostgreSQL端口冲突 healthcheck: test: ['CMD-SHELL', 'pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB'] # 健康检查确保数据库就绪后才启动其他服务 api: build: context: ../.. dockerfile: apps/server/Dockerfile command: ['pnpm', '-F', '@proj-airi/server', 'run', 'server', 'api'] depends_on: db: condition: service_healthy # 依赖健康检查 redis: condition: service_healthy ports: - '6112:3000' # API服务端口启动完整服务:
cd apps/server docker-compose up -d3.2 环境变量配置
创建.env文件配置关键参数:
# 数据库配置 DATABASE_URL=postgresql://postgres:your_password@db:5432/postgres # Redis配置 REDIS_URL=redis://redis:6379 # API密钥(用于外部服务调用) OPENAI_API_KEY=your_openai_key AZURE_SPEECH_KEY=your_azure_key # 功能开关 ENABLE_VOICE_CHAT=true ENABLE_MINECRAFT_INTEGRATION=false生产环境安全提示:
- 使用强密码生成器创建数据库密码
- 定期轮换API密钥
- 敏感信息使用Secret管理
第四步:生产级监控部署
4.1 OpenTelemetry监控堆栈
AIri内置了完整的监控方案,位于apps/server/docker-compose.otel.yml:
services: otel-collector: image: otel/opentelemetry-collector-contrib:0.120.0 # 收集应用指标、日志和追踪数据 ports: - '4317:4317' # OTLP gRPC协议 - '4318:4318' # OTLP HTTP协议 prometheus: image: prom/prometheus:v3.2.1 command: - --storage.tsdb.retention.time=7d # 数据保留7天 - --enable-feature=native-histograms # 原生直方图支持 grafana: image: grafana/grafana:11.5.2 environment: - GF_SECURITY_ADMIN_PASSWORD=admin # 生产环境务必修改 ports: - '3001:3000' # Grafana监控面板启动监控堆栈:
docker-compose -f docker-compose.yml -f docker-compose.otel.yml up -d4.2 关键监控指标
AIri暴露了以下核心指标:
| 指标类型 | 监控内容 | 告警阈值建议 |
|---|---|---|
| 活跃会话数 | 实时在线用户 | >100时扩容 |
| API响应时间 | 接口性能 | P95 > 500ms |
| 错误率 | 服务稳定性 | >1%时告警 |
| 内存使用率 | 资源消耗 | >80%时告警 |
第五步:Kubernetes生产部署
5.1 Deployment配置优化
apiVersion: apps/v1 kind: Deployment metadata: name: airi-api spec: replicas: 3 # 至少3个副本确保高可用 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 # 零停机更新 template: spec: containers: - name: api image: airi-server:latest resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" # 内存限制防止OOM cpu: "500m" livenessProbe: httpGet: path: /livez port: 3000 initialDelaySeconds: 30 # 给应用启动时间 periodSeconds: 10 readinessProbe: httpGet: path: /readyz port: 3000 initialDelaySeconds: 5 periodSeconds: 55.2 水平自动伸缩配置
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: airi-api-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: airi-api minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 # CPU使用率70%时扩容 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 # 内存使用率80%时扩容5.3 网络策略与安全
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: airi-network-policy spec: podSelector: matchLabels: app: airi policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: component: web ports: - protocol: TCP port: 3000 egress: - to: - podSelector: matchLabels: component: db ports: - protocol: TCP port: 5432 - to: - podSelector: matchLabels: component: redis ports: - protocol: TCP port: 6379第六步:性能优化实战
6.1 数据库连接池配置
// 在AIri后端配置中优化数据库连接 export const db = drizzle(postgres(process.env.DATABASE_URL!, { max: 20, // 最大连接数 idle_timeout: 30, // 空闲超时(秒) connection_timeout: 10, // 连接超时(秒) }));6.2 Redis缓存策略
# Redis配置优化 redis: image: redis:7-alpine command: - redis-server - --maxmemory 256mb # 限制内存使用 - --maxmemory-policy allkeys-lru # LRU淘汰策略 - --save 900 1 # 持久化配置 - --save 300 10 - --save 60 100006.3 文件系统优化
对于AIri的语音和模型文件,建议使用持久化存储:
# 持久化卷配置 volumes: - name: model-storage persistentVolumeClaim: claimName: airi-models-pvc - name: voice-cache emptyDir: sizeLimit: 1Gi # 限制临时存储大小第七步:故障排除与维护
7.1 常见问题解决方案
问题1:数据库连接失败
# 检查数据库状态 docker-compose logs db # 验证连接 docker-compose exec db psql -U postgres -d postgres -c "SELECT 1;"问题2:内存泄漏排查
# 查看容器内存使用 docker stats airi-api-1 # 进入容器分析 docker exec -it airi-api-1 sh apk add --no-cache curl curl localhost:3000/metrics | grep process_resident_memory_bytes问题3:API响应缓慢
# 启用详细日志 docker-compose logs --tail=100 api # 检查慢查询 docker-compose exec db psql -U postgres -d postgres -c "SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;"7.2 健康检查配置
AIri内置了健康检查端点,确保配置正确:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/livez"] interval: 30s timeout: 10s retries: 3 start_period: 40s # 给应用启动时间7.3 备份与恢复策略
# 数据库备份 docker-compose exec db pg_dump -U postgres postgres > backup_$(date +%Y%m%d).sql # Redis备份 docker-compose exec redis redis-cli SAVE docker cp airi-redis-1:/data/dump.rdb ./redis_backup_$(date +%Y%m%d).rdb第八步:进阶部署场景
8.1 多区域部署
对于全球用户访问,考虑多区域部署:
# 使用云厂商的区域标签 nodeSelector: topology.kubernetes.io/region: us-west-2 # 配置CDN加速静态资源 annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"8.2 混合云部署
AIri支持混合云架构,关键组件部署建议:
| 组件 | 部署位置 | 理由 |
|---|---|---|
| Web前端 | 边缘CDN | 降低延迟,提高访问速度 |
| API服务 | 公有云 | 弹性伸缩,按需付费 |
| 数据库 | 私有云/本地 | 数据主权,合规要求 |
| Redis缓存 | 公有云 | 低延迟,高可用 |
8.3 成本优化策略
# 使用Spot实例降低成本 spec: nodeSelector: eks.amazonaws.com/capacityType: SPOT # 自动启停非高峰时段 apiVersion: k8s-cost-optimization/v1 kind: ScheduledScaler metadata: name: airi-nightly-scaler spec: schedule: - start: "0 22 * * *" # 22:00 replicas: 1 - start: "0 8 * * *" # 08:00 replicas: 3总结:你的AI伙伴部署清单
完成AIri部署后,请检查以下关键点:
✅基础检查
- 所有服务健康状态正常
- 数据库连接稳定
- Redis缓存工作正常
- API响应时间<200ms
✅安全配置
- 使用强密码和Secret管理
- 网络策略限制访问
- 定期更新容器镜像
- 启用HTTPS传输加密
✅监控告警
- 指标收集正常
- 日志聚合配置
- 告警规则设置
- 仪表板可视化
✅性能优化
- 连接池大小合适
- 缓存策略生效
- 资源限制合理
- 自动伸缩配置
✅备份恢复
- 定期备份策略
- 恢复流程测试
- 灾难恢复计划
- 数据一致性验证
记住,部署只是开始。AIri的真正魅力在于它的可扩展性——你可以根据需求添加新的AI能力、集成更多游戏,甚至训练专属的AI角色。现在,启动你的AI伙伴,开始这段奇妙的旅程吧!
最后的小贴士:部署过程中遇到问题?查看AIri项目的 docs/ 目录获取详细文档,或者在社区中寻找帮助。每一次挑战都是学习的机会,你的AI伙伴正在等待你的召唤。
【免费下载链接】airi💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考