如果你正在寻找一个开源的、功能全面的AI客户关系管理系统,并且希望用最简单的方式在自己的服务器上快速部署,那么悟空AICRM很可能就是你要找的解决方案。它集成了AI能力来辅助销售流程,但很多开发者和团队在第一步——部署上就遇到了麻烦:依赖复杂、环境配置繁琐、文档不清晰,导致从“想用”到“能用”之间隔着一道鸿沟。
这篇文章要解决的,就是如何通过Docker,将这道鸿沟变成一条清晰、可重复的平坦大道。我将提供一个从零开始的完整部署指南,这不仅仅是把几条docker run命令扔给你,而是会深入解释每个步骤背后的逻辑、可能遇到的坑,以及部署完成后如何验证和进行基础配置。无论你是个人开发者想体验AI+CRM的潜力,还是小团队需要一个可私有化部署的客户管理工具,这篇教程都能让你在30分钟内看到一个运行起来的、功能完整的悟空AICRM系统。
1. 悟空AICRM是什么?为什么选择Docker部署?
在深入部署细节之前,我们有必要先搞清楚两个核心问题:悟空AICRM究竟提供了什么价值?以及为什么Docker是部署它的最佳实践?
悟空AICRM是一个基于AI技术的开源客户关系管理系统。它的核心价值在于,将传统的CRM(客户信息管理、销售流程跟踪)与AI能力相结合,例如:
- 智能客户洞察:自动分析客户沟通记录,提炼需求点和关注点。
- 销售话术辅助:根据客户画像和对话上下文,生成或推荐合适的回复建议。
- 自动化流程:利用AI判断销售阶段,自动触发后续任务或提醒。
- 数据智能分析:对销售漏斗、客户成单率等进行趋势预测和归因分析。
它不是一个简单的信息记录工具,而是一个旨在提升销售团队效率和转化率的“智能助手”。
那么,为什么强烈推荐使用Docker部署?原因在于它的技术栈和依赖复杂性。一个完整的悟空AICRM通常包含以下组件:
- 前端:基于Vue.js/React的Web界面。
- 后端API服务:基于Python(Django/Flask)或Node.js的应用程序。
- AI模型服务:可能需要连接OpenAI API、本地部署的大语言模型(如Ollama)或文心一言等国内API。
- 数据库:PostgreSQL或MySQL,用于存储结构化数据。
- 缓存:Redis,用于会话存储和提速。
- 消息队列:Celery + RabbitMQ/Redis,用于处理异步任务(如AI模型调用、邮件发送)。
手动在服务器上安装并配置这6个组件,确保它们版本兼容、网络互通、配置正确,是一个极其耗时且容易出错的过程。任何一个环节的依赖版本冲突或配置错误都可能导致整个系统无法启动。
Docker部署的核心优势:
- 环境隔离:每个服务运行在独立的容器中,互不干扰,避免了“在我的机器上好好的”这类问题。
- 一键部署:通过
docker-compose.yml文件,可以定义和启动所有相关服务,实现真正的一键启动。 - 版本固化:使用特定的镜像版本,确保部署环境的一致性,便于回滚和升级。
- 资源清晰:所有服务依赖、端口映射、数据卷挂载都声明在配置文件中,架构一目了然。
因此,使用Docker部署悟空AICRM,你实际上是在用一套标准化的、可版本控制的“蓝图”来构建你的生产环境,极大地降低了运维门槛。
2. 部署前准备:环境与资源检查
在运行任何Docker命令之前,请确保你的服务器或本地开发机满足以下条件。跳过准备步骤是部署失败最常见的原因。
2.1 系统环境要求
- 操作系统:Linux(Ubuntu 20.04/22.04 LTS, CentOS 7/8, Debian 10/11推荐)、macOS或Windows 10/11(需WSL2)。本文以Ubuntu 22.04 LTS为例进行说明。
- Docker Engine:版本20.10.0或更高。这是运行容器的核心。
- Docker Compose:版本v2.0.0或更高。用于编排多容器应用。
- 硬件资源:
- CPU:至少2核,建议4核以上以流畅运行AI服务。
- 内存:至少4GB,建议8GB或更高。内存不足是AI服务启动失败或运行缓慢的主因。
- 磁盘空间:至少20GB可用空间,用于存放Docker镜像、应用数据和日志。
2.2 安装Docker与Docker Compose
如果你的系统还没有安装Docker,请执行以下步骤。注意:生产环境请务必参考官方文档进行安全配置。
# 1. 卸载旧版本(如有) sudo apt-get remove docker docker-engine docker.io containerd runc # 2. 更新apt包索引并安装依赖 sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release # 3. 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 4. 设置Docker稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 5. 安装Docker Engine sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 6. 验证Docker安装 sudo docker --version sudo docker compose version # 注意是 `docker compose`,不是 `docker-compose` # 7. (可选但推荐)将当前用户加入docker组,避免每次使用sudo sudo usermod -aG docker $USER # 执行此命令后,需要**退出当前终端并重新登录**,或者新开一个终端窗口,才能使组权限生效。2.3 获取悟空AICRM的Docker部署文件
通常,开源项目的Docker部署文件会放在项目根目录的docker或deploy文件夹下,或者有一个独立的docker-compose.yml文件。你需要找到它。
# 假设项目仓库在GitHub上,我们可以直接克隆(或下载ZIP包) git clone https://github.com/wukong-ai/wukong-aicrm.git cd wukong-aicrm # 查看目录结构,寻找docker-compose.yml或相关部署文件夹 ls -la常见的部署文件结构可能是:
wukong-aicrm/ ├── docker-compose.yml # 主编排文件 ├── .env.example # 环境变量示例文件 ├── frontend/ # 前端代码 ├── backend/ # 后端代码 ├── ai-service/ # AI服务代码 └── config/ # 配置文件目录如果项目没有提供现成的docker-compose.yml,你可能需要根据其文档手动编写,这超出了本文基础教程的范围。请优先寻找官方或社区维护的Docker部署方案。
3. 核心配置详解:理解docker-compose.yml与环境变量
找到docker-compose.yml文件后,不要急着运行。花10分钟理解它的结构,能帮你解决80%的后续配置问题。下面是一个典型的悟空AICRM的docker-compose.yml示例:
# docker-compose.yml version: '3.8' services: # 1. 数据库服务 postgres: image: postgres:15-alpine container_name: wukong-postgres restart: unless-stopped environment: POSTGRES_DB: wukong_aicrm POSTGRES_USER: wukong_user POSTGRES_PASSWORD: ${DB_PASSWORD:-YourStrongPassword123} # 从环境变量读取 volumes: - postgres_data:/var/lib/postgresql/data networks: - wukong-network healthcheck: # 健康检查,确保数据库就绪后再启动应用 test: ["CMD-SHELL", "pg_isready -U wukong_user"] interval: 10s timeout: 5s retries: 5 # 2. 缓存服务 redis: image: redis:7-alpine container_name: wukong-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis_data:/data networks: - wukong-network # 3. 后端API服务 backend: build: ./backend # 指向后端Dockerfile所在目录 # image: wukong-aicrm/backend:latest # 或者使用预构建的镜像 container_name: wukong-backend restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_started environment: - DATABASE_URL=postgresql://wukong_user:${DB_PASSWORD}@postgres:5432/wukong_aicrm - REDIS_URL=redis://redis:6379/0 - AI_SERVICE_URL=http://ai-service:8001 - SECRET_KEY=${BACKEND_SECRET_KEY} volumes: - ./backend/logs:/app/logs ports: - "8000:8000" # 将容器内的8000端口映射到主机的8000端口 networks: - wukong-network # 4. AI模型服务(示例:连接Ollama) ai-service: image: ollama/ollama:latest container_name: wukong-ai-service restart: unless-stopped volumes: - ollama_data:/root/.ollama ports: - "11434:11434" networks: - wukong-network # 5. 前端Web服务 frontend: build: ./frontend container_name: wukong-frontend restart: unless-stopped depends_on: - backend environment: - VITE_API_BASE_URL=http://localhost:8000/api # 注意:这里指向后端服务地址 ports: - "3000:80" # 前端通常运行在80端口,映射到主机3000 networks: - wukong-network # 6. 定义数据卷,实现数据持久化 volumes: postgres_data: redis_data: ollama_data: # 7. 定义自定义网络,方便服务间通信 networks: wukong-network: driver: bridge关键配置解析:
- 环境变量 (
environment):这是配置的核心。敏感信息(如密码、密钥)绝对不应该硬编码在YAML文件中。我们使用${VARIABLE_NAME}语法从外部环境变量文件(.env)读取。 - 数据卷 (
volumes):将容器内的数据(如数据库文件、模型文件)挂载到主机目录,确保容器重建后数据不丢失。postgres_data、redis_data是命名的Docker卷,由Docker管理。 - 网络 (
networks):所有服务加入同一个自定义网络wukong-network,这样它们可以通过服务名(如postgres、backend)直接通信,无需知道IP地址。 - 依赖与健康检查 (
depends_on,healthcheck):确保服务启动顺序。backend等待postgres健康状态为healthy后才启动,避免了数据库未就绪导致的连接失败。 - 端口映射 (
ports):格式为主机端口:容器端口。例如"8000:8000"表示访问主机的8000端口就等于访问容器的8000端口。
4. 配置关键环境变量与启动应用
现在我们来创建和配置环境变量文件,这是安全部署的关键一步。
4.1 创建并配置.env文件
在docker-compose.yml同级目录下,创建一个名为.env的文件。你可以复制项目提供的.env.example(如果有的话)并修改。
# 假设有 .env.example cp .env.example .env # 编辑 .env 文件 nano .env以下是.env文件需要配置的关键项示例:
# .env 配置文件 # 数据库配置 DB_PASSWORD=YourVeryStrongPassword!@#2024 # 后端服务密钥(用于加密会话等,务必使用强随机字符串) BACKEND_SECRET_KEY=your-super-secret-key-change-this-in-production # AI服务配置(示例:使用OpenAI API) # AI_SERVICE_TYPE=openai # OPENAI_API_KEY=sk-your-openai-api-key-here # OPENAI_BASE_URL=https://api.openai.com/v1 # AI服务配置(示例:使用本地Ollama) AI_SERVICE_TYPE=ollama OLLAMA_MODEL=llama3.2:latest OLLAMA_BASE_URL=http://ai-service:11434 # 前端API地址(根据你的部署环境调整) # 如果是本地访问,且前端映射到3000端口,后端映射到8000端口,可以这样配置: VITE_API_BASE_URL=http://localhost:8000/api # 如果是服务器部署,且配置了域名,则应配置为: # VITE_API_BASE_URL=https://your-domain.com/api重要提醒:
DB_PASSWORD和BACKEND_SECRET_KEY必须修改,且必须是强密码。BACKEND_SECRET_KEY可以使用以下命令快速生成一个:openssl rand -base64 32- AI服务配置是悟空AICRM的“灵魂”。你需要根据实际情况选择:
- 使用云端API(如OpenAI):配置方便,但需要API密钥,且网络请求可能有延迟或费用。
- 使用本地模型(如Ollama):数据隐私性好,无网络延迟,但对服务器硬件(尤其是GPU)要求高。上例中配置了使用Ollama服务。
4.2 启动所有服务
配置好.env文件后,就可以一键启动了。
# 在 docker-compose.yml 所在目录执行 # -d 参数表示在后台运行(守护进程模式) docker compose up -d这个命令会执行以下操作:
- 根据
docker-compose.yml和.env文件构建或拉取所需的Docker镜像。 - 按依赖顺序创建并启动所有定义的服务容器。
- 将容器连接到定义的网络。
4.3 查看服务状态与日志
启动后,如何确认一切正常?
# 查看所有容器的运行状态 docker compose ps # 预期输出应类似: # NAME COMMAND SERVICE STATUS PORTS # wukong-postgres "docker-entrypoint.s…" postgres running (healthy) 5432/tcp # wukong-redis "docker-entrypoint.s…" redis running 6379/tcp # wukong-backend "/bin/sh -c 'python …" backend running 0.0.0.0:8000->8000/tcp # wukong-ai-service "/bin/ollama serve" ai-service running 0.0.0.0:11434->11434/tcp # wukong-frontend "nginx -g 'daemon of…" frontend running 0.0.0.0:3000->80/tcp # 如果某个服务状态不是 `running`,查看其日志以排查问题 # 查看后端服务的日志 docker compose logs backend # 持续查看并跟踪日志(类似 tail -f) docker compose logs -f backend # 查看所有服务的汇总日志 docker compose logs5. 初始化应用与验证部署
容器全部运行起来,并不代表应用就完全可用了。通常还需要进行数据库迁移和初始化。
5.1 执行数据库迁移
大多数Web应用(尤其是Django、Laravel等框架)在首次启动时,需要执行数据库迁移(Migration)来创建数据表结构。
# 进入后端容器执行迁移命令(具体命令需参考悟空AICRM的文档) # 常见命令是 `python manage.py migrate` (Django) 或 `npm run db:migrate` 等。 # 方法一:使用 docker compose exec docker compose exec backend python manage.py migrate # 方法二:如果后端服务提供了初始化脚本,也可能在Dockerfile的启动命令中包含了迁移。 # 请查看项目README,确认初始化步骤。5.2 创建超级管理员账户
为了登录后台管理系统,你需要创建一个管理员账户。
# 同样,具体命令参考项目文档。Django的常见命令是: docker compose exec backend python manage.py createsuperuser # 执行后,会交互式地提示你输入用户名、邮箱和密码。5.3 验证服务可访问性
现在,通过浏览器或命令行验证各个服务是否正常工作。
- 验证前端:打开浏览器,访问
http://你的服务器IP:3000。你应该能看到悟空AICRM的登录界面。 - 验证后端API:访问
http://你的服务器IP:8000/api/health或http://你的服务器IP:8000/admin(如果存在)。API应返回JSON健康状态信息,后台登录页应能打开。 - 验证AI服务(如果使用Ollama):
# 在服务器上curl测试Ollama服务 curl http://localhost:11434/api/tags # 应该返回已拉取的模型列表JSON - 使用管理员账户登录:在前端登录界面,使用刚刚创建的超级管理员账户登录。如果成功进入仪表盘,恭喜你,核心部署已经完成!
6. 常见问题与排查思路
部署过程很少一帆风顺。下表列出了常见问题及其解决方法:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
docker compose up失败,提示build错误 | 1. Dockerfile 语法错误。 2. 构建上下文缺少依赖文件。 3. 网络问题无法拉取基础镜像。 | 1. 查看具体的错误信息,通常会有行号提示。 2. 检查 backend/或frontend/目录下是否有正确的Dockerfile和所需文件(如requirements.txt)。3. 运行 docker pull测试镜像拉取。 | 1. 根据错误信息修正 Dockerfile。 2. 确保项目文件完整。 3. 配置 Docker 镜像加速器。 |
容器启动后立即退出 (Exited) | 1. 应用启动命令错误。 2. 环境变量配置缺失或错误。 3. 依赖服务(如数据库)连接失败。 | docker compose logs <service_name>查看退出前的日志。日志通常会明确报错,如“无法连接到数据库”。 | 1. 检查docker-compose.yml中该服务的command或 Dockerfile 中的CMD。2. 核对 .env文件,确保所有必要变量已设置且值正确。3. 检查依赖服务的健康状态和网络连通性。 |
| 前端能打开,但登录失败或页面空白 | 1. 前端配置的API地址 (VITE_API_BASE_URL) 错误。2. 后端服务未正常运行。 3. 跨域问题 (CORS)。 | 1. 浏览器按F12打开开发者工具,查看“网络(Network)”选项卡,请求API时是否返回404或500错误。 2. 查看后端容器日志 docker compose logs backend。3. 检查后端CORS配置。 | 1. 修正.env中的VITE_API_BASE_URL,确保其指向正确的后端地址和端口。2. 根据后端日志修复后端问题。 3. 在后端配置中允许前端的源地址。 |
| 数据库连接失败 | 1..env中的DB_PASSWORD与docker-compose.yml中POSTGRES_PASSWORD不一致。2. 数据库容器未健康启动。 3. 网络配置错误,后端无法通过服务名 postgres访问数据库。 | 1. 检查.env文件是否被正确加载(变量名是否完全匹配)。2. docker compose logs postgres查看数据库启动日志。3. 进入后端容器测试连接: docker compose exec backend ping postgres。 | 1. 统一密码配置,确保完全一致。 2. 等待数据库健康检查通过,或检查数据库日志中的错误。 3. 确认所有服务都在同一个自定义网络 ( wukong-network) 中。 |
| AI功能无法使用 | 1. AI服务未启动或配置错误。 2. API密钥无效或余额不足(使用云端API时)。 3. 本地模型未下载或加载失败(使用Ollama时)。 | 1.docker compose logs ai-service查看AI服务日志。2. 测试AI服务端点: curl http://localhost:11434/api/generate(Ollama)。3. 检查后端日志中调用AI服务的错误信息。 | 1. 确保ai-service容器正常运行。2. 核对 .env中的AI相关配置(类型、API Key、Base URL)。3. 对于Ollama,进入容器拉取模型: docker compose exec ai-service ollama pull llama3.2:latest。 |
7. 生产环境最佳实践与安全加固
将悟空AICRM用于实际业务时,必须考虑安全性和稳定性。以下是一些关键的最佳实践:
- 使用非root用户运行容器:在Dockerfile中,应用应使用非root用户启动。如果官方镜像未配置,可以考虑自己构建或寻找更安全的镜像。
- 强化密码与密钥管理:
.env文件绝不能提交到版本控制系统(如Git)。确保它在.gitignore文件中。- 生产环境的密码、密钥应使用更安全的管理方式,如Docker Secrets(Swarm模式)、HashiCorp Vault或云服务商提供的密钥管理服务。
- 定期轮换密钥。
- 配置反向代理与HTTPS:直接暴露3000/8000端口是不安全的。
- 使用Nginx或Caddy作为反向代理,将域名指向服务器。
- 申请SSL证书(可以使用Let‘s Encrypt免费证书),强制使用HTTPS。
- 在反向代理中配置安全头部,如HSTS。
- 数据备份策略:
- 定期备份Docker卷中的数据。对于PostgreSQL,可以使用
pg_dump命令在容器内执行备份,并将备份文件保存到主机或云存储。
# 示例备份命令 docker compose exec postgres pg_dump -U wukong_user wukong_aicrm > /path/to/backup/backup_$(date +%Y%m%d).sql- 制定并测试数据恢复流程。
- 定期备份Docker卷中的数据。对于PostgreSQL,可以使用
- 日志收集与监控:
- 配置Docker容器的日志驱动,将日志集中收集到ELK(Elasticsearch, Logstash, Kibana)或Loki等系统中。
- 使用Prometheus和Grafana监控服务器资源(CPU、内存、磁盘)以及关键服务(数据库连接数、API响应时间)的健康状态。
- 镜像管理与更新:
- 避免使用
latest标签。在docker-compose.yml中为每个服务指定明确的版本标签(如postgres:15-alpine)。 - 定期更新镜像以获取安全补丁。在测试环境验证后,再滚动更新生产环境。
- 避免使用
- 资源限制:在
docker-compose.yml中为每个服务设置资源限制,防止单个容器耗尽主机资源。services: backend: # ... 其他配置 ... deploy: # 注意:在Compose V3中,resources通常在deploy下 resources: limits: cpus: '1.0' memory: 1G reservations: cpus: '0.5' memory: 512M
通过以上步骤,你不仅成功部署了悟空AICRM,更建立了一个可维护、可扩展、相对安全的容器化运行环境。这套基于Docker Compose的部署方案,为你后续的版本升级、水平扩展(结合Docker Swarm或Kubernetes)打下了坚实的基础。现在,你可以开始探索悟空AICRM的AI销售功能,并将其整合到你的业务工作流中了。如果在配置过程中遇到本文未覆盖的特定问题,建议仔细查阅该项目的官方GitHub仓库的Issues和Wiki,通常能找到社区提供的解决方案。