
实用AIri容器化部署指南解决复杂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/airiAIri是一个自托管的AI角色伴侣项目支持实时语音聊天、游戏互动和跨平台部署。对于开发者和运维团队而言如何高效、稳定地部署这样一个包含多组件、依赖复杂的AI系统是一个重要挑战。本文将通过对比不同部署方案提供从基础到高级的完整容器化部署指南。部署挑战分析与方案对比在部署AIri系统时开发团队通常面临以下几个核心挑战环境一致性AIri依赖Node.js、PostgreSQL、Redis等多个组件手动配置容易出现环境差异资源管理AI角色服务需要稳定的计算资源特别是在语音处理和游戏交互场景可观测性分布式系统的监控、日志和追踪需求复杂扩展性用户量增长时需要灵活的横向扩展能力针对这些挑战我们提供三种部署方案对比部署方式适用场景复杂度维护成本扩展性Docker单容器开发测试、个人使用低低有限Docker Compose中小型团队、预生产环境中中中等Kubernetes生产环境、企业级部署高高优秀Docker基础部署流程环境准备与镜像构建AIri项目提供了预配置的Dockerfile位于apps/stage-web/Dockerfile和apps/server/Dockerfile。前端应用采用多阶段构建后端服务则专注于依赖管理和构建优化。构建前端应用镜像# 克隆项目仓库 git clone https://gitcode.com/GitHub_Trending/ai/airi cd airi # 构建前端Docker镜像 docker build -t airi-web -f apps/stage-web/Dockerfile .构建后端服务镜像# 构建后端服务镜像 docker build -t airi-server -f apps/server/Dockerfile .注意事项确保Docker daemon正在运行且具有足够资源多阶段构建会缓存依赖层加速后续构建构建过程中会下载Node.js依赖建议配置镜像加速单容器运行测试对于快速验证和开发环境可以直接运行单容器# 运行前端应用 docker run -d -p 3000:80 --name airi-web-container airi-web # 运行后端服务需要环境变量配置 docker run -d -p 6112:3000 \ -e DATABASE_URLpostgresql://user:passhost/db \ -e REDIS_URLredis://redis:6379 \ --name airi-server-container \ airi-serverDocker Compose完整环境部署一体化服务编排AIri项目提供了完整的docker-compose.yml配置位于apps/server/docker-compose.yml支持一键启动所有依赖服务# 进入server目录 cd apps/server # 启动完整服务栈 docker compose up -d该配置包含以下核心服务PostgreSQL数据库使用TensorChord优化的PostgreSQL 18镜像Redis缓存提供会话和状态管理API服务基于Node.js的AIri后端服务关键配置解析查看apps/server/docker-compose.yml的核心配置services: db: image: ghcr.io/tensorchord/vchord-postgres:pg18-v1.0.0 environment: - POSTGRES_DBpostgres - POSTGRES_USERpostgres - POSTGRES_PASSWORDexample-PAssw0rd-xHjDYR.b7N ports: - 5435:5432 volumes: - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql - db_data:/var/lib/postgresql healthcheck: test: [CMD-SHELL, pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB] interval: 5s timeout: 5s retries: 10最佳实践生产环境务必修改默认密码根据负载调整数据库连接池配置定期备份数据卷中的持久化数据环境变量管理创建.env文件管理敏感配置# 创建环境变量文件 cat .env EOF DATABASE_URLpostgresql://postgres:your_secure_passworddb:5432/postgres REDIS_URLredis://redis:6379 OPENAI_API_KEYyour_openai_api_key ENABLE_VOICE_CHATtrue EOF可观测性栈部署OpenTelemetry监控方案AIri提供了完整的可观测性栈配置位于apps/server/docker-compose.otel.yml包含OpenTelemetry Collector统一收集指标、日志和追踪Prometheus指标存储和查询Loki日志聚合Tempo分布式追踪Grafana可视化仪表板启动监控栈# 启动可观测性服务 docker compose -f docker-compose.otel.yml up -d监控栈启动后可以通过以下端口访问Grafana仪表板http://localhost:3001Prometheus指标http://localhost:9090应用健康检查http://localhost:6112/livez监控配置优化查看apps/server/otel/collector/otel-collector.yaml的配置片段receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: prometheus: endpoint: 0.0.0.0:8889 namespace: airi const_labels: service: airi-server监控最佳实践为关键业务指标设置告警规则配置日志轮转策略避免磁盘空间耗尽定期审查追踪数据优化性能瓶颈Kubernetes生产部署实战部署资源配置创建Kubernetes Deployment配置文件apiVersion: apps/v1 kind: Deployment metadata: name: airi-deployment labels: app: airi spec: replicas: 3 selector: matchLabels: app: airi template: metadata: labels: app: airi spec: containers: - name: airi-web image: airi-web:latest ports: - containerPort: 80 resources: requests: memory: 256Mi cpu: 100m limits: memory: 512Mi cpu: 200m livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 5服务发现与负载均衡配置Service和Ingress资源apiVersion: v1 kind: Service metadata: name: airi-service spec: selector: app: airi ports: - port: 80 targetPort: 80 type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: airi-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: airi.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: airi-service port: number: 80自动扩缩容配置根据CPU和内存使用率自动调整副本数apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: airi-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: airi-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80性能调优实战资源配额管理根据AIri组件的资源需求建议以下资源配置前端Web服务请求内存256MiCPU 100m限制内存512MiCPU 200m后端API服务请求内存512MiCPU 250m限制内存1GiCPU 500m数据库服务请求内存1GiCPU 500m限制内存2GiCPU 1000m缓存策略优化配置Redis缓存层提升性能# Redis配置示例 apiVersion: v1 kind: ConfigMap metadata: name: redis-config data: redis.conf: | maxmemory 1gb maxmemory-policy allkeys-lru save 900 1 save 300 10 save 60 10000数据库连接池配置优化PostgreSQL连接管理// 在AIri后端配置中 const dbConfig { max: 20, // 最大连接数 min: 5, // 最小连接数 idleTimeoutMillis: 30000, connectionTimeoutMillis: 2000, };故障排除指南常见问题诊断问题1容器启动失败端口冲突docker: Error response from daemon: driver failed programming external connectivity on endpoint...解决方案# 检查端口占用 sudo lsof -i :3000 # 或修改映射端口 docker run -d -p 3001:80 --name airi-web airi-web问题2数据库连接超时Error: connect ECONNREFUSED 127.0.0.1:5435解决方案# 检查数据库服务状态 docker ps | grep postgres # 查看数据库日志 docker logs db_container_id # 确认网络连接 docker network ls docker network inspect network_name问题3内存不足导致容器重启Killed process 12345 (node) total-vm:1024000kB, anon-rss:512000kB...解决方案# 增加资源限制 resources: limits: memory: 2Gi cpu: 1000m requests: memory: 1Gi cpu: 500m日志分析与监控查看容器日志# 查看实时日志 docker logs -f airi-web-container # 查看特定时间段的日志 docker logs --since 1h airi-server-container # 导出日志到文件 docker logs airi-web-container web.log使用Grafana进行性能分析访问 http://localhost:3001使用admin/admin登录导入预配置的仪表板监控关键指标响应时间、错误率、资源使用率安全配置最佳实践容器安全加固# 安全上下文配置 securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: true seccompProfile: type: RuntimeDefault网络策略配置限制不必要的网络访问apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: airi-network-policy spec: podSelector: matchLabels: app: airi policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 80 egress: - to: - podSelector: matchLabels: component: database ports: - protocol: TCP port: 5432密钥管理使用Kubernetes Secrets管理敏感信息# 创建Secret kubectl create secret generic airi-secrets \ --from-literaldatabase-passwordyour-secure-password \ --from-literalapi-keyyour-api-key \ --from-literalredis-passwordyour-redis-password持续集成与部署GitHub Actions自动化流水线创建.github/workflows/deploy.ymlname: Deploy AIRI on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Setup Node.js uses: actions/setup-nodev4 with: node-version: 20 - name: Install dependencies run: npm ci - name: Run tests run: npm test build-and-push: needs: test runs-on: ubuntu-latest if: github.ref refs/heads/main steps: - uses: actions/checkoutv4 - name: Set up Docker Buildx uses: docker/setup-buildx-actionv3 - name: Login to DockerHub uses: docker/login-actionv3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-actionv5 with: context: . file: ./apps/stage-web/Dockerfile push: true tags: | ${{ secrets.DOCKER_USERNAME }}/airi-web:latest ${{ secrets.DOCKER_USERNAME }}/airi-web:${{ github.sha }} deploy: needs: build-and-push runs-on: ubuntu-latest steps: - name: Deploy to Kubernetes uses: azure/k8s-deployv4 with: manifests: | k8s/deployment.yaml k8s/service.yaml k8s/ingress.yaml images: | ${{ secrets.DOCKER_USERNAME }}/airi-web:${{ github.sha }}扩展与高级配置多环境部署策略为不同环境创建独立的配置# k8s/overlays/development/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patches: - target: kind: Deployment name: airi-deployment patch: | - op: replace path: /spec/replicas value: 1 - target: kind: Deployment name: airi-deployment patch: | - op: replace path: /spec/template/spec/containers/0/resources value: requests: memory: 128Mi cpu: 50m limits: memory: 256Mi cpu: 100m蓝绿部署策略实现零停机更新apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: airi-ingress annotations: nginx.ingress.kubernetes.io/canary: true nginx.ingress.kubernetes.io/canary-weight: 10 spec: rules: - host: airi.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: airi-canary port: number: 80总结与建议AIri的容器化部署提供了从开发到生产的完整解决方案。通过Docker Compose可以快速搭建开发环境而Kubernetes则为生产部署提供了企业级的可靠性保障。关键建议开发环境使用Docker Compose快速启动预生产环境部署完整的可观测性栈生产环境采用Kubernetes并配置自动扩缩容定期进行安全审计和性能优化建立完善的监控告警机制通过本文提供的部署方案您可以构建一个稳定、可扩展的AIri部署架构为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),仅供参考