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-samas 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 --frombuild-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_PASSWORDexample-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_URLpostgresql://postgres:your_passworddb:5432/postgres # Redis配置 REDIS_URLredis://redis:6379 # API密钥用于外部服务调用 OPENAI_API_KEYyour_openai_key AZURE_SPEECH_KEYyour_azure_key # 功能开关 ENABLE_VOICE_CHATtrue ENABLE_MINECRAFT_INTEGRATIONfalse生产环境安全提示使用强密码生成器创建数据库密码定期轮换API密钥敏感信息使用Secret管理第四步生产级监控部署4.1 OpenTelemetry监控堆栈AIri内置了完整的监控方案位于apps/server/docker-compose.otel.ymlservices: 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.time7d # 数据保留7天 - --enable-featurenative-histograms # 原生直方图支持 grafana: image: grafana/grafana:11.5.2 environment: - GF_SECURITY_ADMIN_PASSWORDadmin # 生产环境务必修改 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问题3API响应缓慢# 启用详细日志 docker-compose logs --tail100 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: true8.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-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考