当前位置: 首页 > news >正文

AIri容器化部署:从单机到生产环境的完整指南

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 airi

2.2 基础环境准备

AIri使用pnpm作为包管理器,确保你的系统已安装:

# 安装pnpm(如果未安装) curl -fsSL https://get.pnpm.io/install.sh | sh - # 安装依赖 pnpm install

2.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 -d

3.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 -d

4.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: 5

5.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 10000

6.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),仅供参考

http://www.zskr.cn/news/1501277.html

相关文章:

  • FanControl终极指南:如何在Windows上实现风扇精准控制与智能散热
  • 免费开源项目管理工具GanttProject:让复杂项目变得简单可控
  • GetQzonehistory:你的数字青春档案馆,一键永久保存QQ空间记忆
  • MATLAB版二维多孔介质流场LBM仿真工具包(含数据导出与参数说明)
  • [智能体-354]:有哪些常见的AI Skill
  • 2026年当下,佛山收购茅台如何联系?专业服务商甄选与决策指南 - 品牌鉴赏官2026
  • 戴森球计划终极蓝图库:3000+工厂设计让你的太空帝国建设效率提升3倍
  • 数据的加密与解密(02:38)
  • 用RPR220光电管DIY一个Arduino避障小车,手把手教你从电路到代码(附完整物料清单)
  • 用Python和TensorFlow训练AI玩贪吃蛇:从游戏逻辑到DQN算法实战(附完整代码)
  • 2026年新乡自动送料机厂家推荐榜单:化工厂/医药厂/新能源材料及锂电池行业精准投料设备优选 - 品牌发掘
  • GetQzonehistory:5分钟实现QQ空间历史数据完整备份的终极解决方案
  • 3.1.5 平衡二叉树
  • 用Python+NetworkX模拟社交网络中的‘跟风’行为:一个演化博弈的实战案例
  • 手把手教你用Python复现STARFM时空融合算法:从Github代码到实战避坑
  • Revit2GLTF终极指南:专业级BIM模型到Web3D的高效转换解决方案
  • 13ft Ladder终极指南:3分钟搭建个人付费墙绕过工具
  • AdaCNP:极端天气下电力负荷预测的概率建模方法
  • 深入解析S12MSCANV2:CAN控制器消息存储与传输机制
  • 2026年 金属清洗剂源头厂家推荐榜:工业重油污清洗剂/防锈型清洗剂/环保水基清洗剂实力厂家直供首选 - 品牌发掘
  • STM32CubeIDE项目实战:用AS608光学指纹模块做个智能门锁原型(附完整工程)
  • 给天气预报‘纠偏’:手把手教你用Python实现降雨预报的线性缩放与分位数映射校正
  • MC9S12G汽车MCU选型、硬件设计与软件开发实战指南
  • 3D高斯溅射与零样本全景分割技术解析
  • Audiveris终极指南:3步将纸质乐谱智能转换为数字格式
  • TP6806芯片OSG平台完整开发套件:含Keil工程、全功能固件与底层驱动源码
  • 2026年近期廊坊水利工程如何选择可靠的短纤土工布定制厂家? - 品牌鉴赏官2026
  • Moneta Markets亿汇:“应用软件股遭遇AI再定价”
  • 数据的加密与解密(02:40)
  • 企业级Agent平台的四个硬指标:不只是“能聊天“