最近在调研开源CRM系统时发现悟空CRMWukongCRM凭借其开源免费、功能模块齐全以及支持AI能力集成等特性受到了不少中小企业和开发者的关注。然而在尝试部署时很多朋友卡在了环境配置这一步尤其是面对Java后端、Nacos注册中心、Elasticsearch搜索等一整套微服务组件手动安装配置不仅耗时还容易因版本兼容性问题导致失败。为了解决这个痛点悟空CRM官方提供了基于Docker Compose的一键部署方案将MySQL、Redis、Nacos、Nginx等所有依赖服务容器化极大简化了部署流程。本文将手把手带你完成悟空AICRM的Docker化完整部署从环境准备、源码拉取、配置调整到服务启动和访问验证覆盖Linux、macOS和Windows三大主流操作系统。无论你是想快速搭建一个CRM系统进行体验还是为团队部署一套可用的客户关系管理平台这篇教程都能提供清晰的指引和可复现的操作步骤。1. 悟空CRM与Docker部署概述在开始动手之前我们先了解一下核心组件和部署架构这有助于理解后续的配置和排错。1.1 悟空CRM (WukongCRM) 是什么悟空CRM是一款基于Java技术栈开发的开源客户关系管理系统。它并非一个简单的单体应用而是一个采用了微服务架构的复杂系统。这意味着系统由多个独立的服务组成例如用户服务、客户管理服务、订单服务等这些服务可以独立开发、部署和扩展。系统通常包含以下核心功能模块客户管理客户信息录入、跟进记录、公海池管理。销售管理销售机会、报价单、合同管理。办公协同审批流程、任务管理、日程安排。数据报表销售漏斗、业绩统计、客户分析。AI集成 (AICRM)如其名所示它集成了AI能力可能用于智能客户分类、销售话术建议、数据洞察等。由于其微服务架构部署时需要启动多个后端服务并依赖如注册中心、配置中心、数据库、缓存、搜索引擎等一系列中间件。传统部署方式需要逐一安装配置这些组件对运维技能要求较高。1.2 为什么选择Docker Compose部署Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过一个docker-compose.yml配置文件你可以描述所有服务如MySQL、Redis、应用本身的依赖关系、网络、卷等然后使用一条命令启动所有服务。对于悟空CRM这类多组件应用使用Docker Compose部署的优势非常明显环境标准化所有服务MySQL, Redis, Java应用都运行在容器中与宿主机环境隔离避免了“在我机器上能跑”的问题。一键启动无需手动按顺序启动十几个服务一条docker-compose up -d命令即可拉起所有依赖。简化配置网络、数据卷、服务间通信在Compose文件中预先定义好减少了手动配置的复杂度。易于维护和迁移整个应用栈的定义都在YAML文件中可以轻松地在不同环境开发、测试、生产之间迁移和复现。悟空CRM官方提供的Docker部署包正是利用Docker Compose来编排其所有微服务及依赖的中间件实现了真正意义上的“一键部署”。1.3 部署架构与组件说明根据官方提供的docker-compose.yml文件和相关资料我们可以梳理出部署后的架构概览用户浏览器 | v Nginx (反向代理/负载均衡) | v [悟空CRM微服务集群] | | | v v v Nacos Redis MySQL Elasticsearch XXL-Job ... (服务注册) (缓存) (数据库) (搜索引擎) (任务调度)核心组件角色Nginx作为网关接收外部HTTP/HTTPS请求并将其反向代理到后端的悟空CRM应用服务。Nacos服务注册与配置中心。所有悟空CRM的微服务启动后都会注册到Nacos服务间通过Nacos发现彼此。同时应用的配置如数据库连接串也通常由Nacos管理。MySQL主数据库存储核心的业务数据如客户、联系人、订单等。Redis用作缓存提升系统性能可能用于存储会话(Session)、热点数据等。Elasticsearch提供强大的全文搜索能力用于客户、联系人的快速检索。XXL-Job分布式任务调度平台用于处理定时任务如数据同步、报表生成等。Seata/Sentinel用于分布式事务管理和服务熔断降级根据官方目录结构推测。理解这个架构有助于在服务启动失败时快速定位是哪个环节出了问题。2. 环境准备与前置检查2.1 服务器/本地机要求官方建议的服务器配置为4核16G及以上。这是一个相对充裕的配置主要考虑到微服务本身以及Elasticsearch、MySQL等中间件对内存的消耗。对于个人学习或小团队试用2核4G或2核8G的服务器也可能成功运行但性能可能会成为瓶颈尤其是在进行数据导入或复杂查询时。操作系统支持Linux (如CentOS 7/8, Ubuntu 20.04/22.04)、macOS和Windows 10/11。本教程将以Linux (CentOS 7.x)作为主要操作环境进行演示同时会指出macOS和Windows的关键差异点。网络确保服务器可以访问互联网以下载Docker镜像和项目源码。如果是在内网部署需要提前将所需的Docker镜像导入到内网镜像仓库。2.2 安装Docker与Docker Compose这是最基础且必须的一步。悟空CRM的Docker部署包中自带了一个docker-install.sh脚本但为了更清晰地理解过程我们分步讲解。对于Linux系统 (以CentOS 7为例)卸载旧版本如有sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine安装yum工具包并设置镜像仓库sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 或者使用国内镜像源加速下载 # sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Docker引擎sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动Docker并设置开机自启sudo systemctl start docker sudo systemctl enable docker验证安装sudo docker --version sudo docker run hello-world如果能看到Docker版本信息和Hello from Docker!的提示说明安装成功。安装Docker Compose (独立版本) 虽然Docker现在包含了docker-compose-plugin但悟空CRM的脚本可能依赖独立的docker-compose命令。建议也安装一下# 下载最新稳定版的Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod x /usr/local/bin/docker-compose # 创建软链接可选方便调用 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 验证安装 docker-compose --version对于macOS系统推荐直接下载 Docker Desktop for Mac 。安装包会自动安装Docker引擎、Docker Compose以及图形化管理界面。安装完成后在应用程序中打开Docker Desktop即可。对于Windows系统同样推荐下载 Docker Desktop for Windows 。注意需要开启Windows的Hyper-V或WSL 2后端推荐WSL 2性能更好。安装完成后以管理员身份打开PowerShell或命令提示符才能执行后续的Docker命令。2.3 获取悟空CRM项目源码我们需要从GitHub上拉取包含Docker部署配置的悟空CRM源码。# 1. 安装Git如果尚未安装 sudo yum install -y git # 2. 克隆仓库使用国内镜像加速如Gitee如果GitHub慢 # 官方GitHub仓库 git clone https://github.com/WuKongOpenSource/WukongCRM-11.0-JAVA.git # 或者使用Gitee镜像如果存在且同步及时 # git clone https://gitee.com/mirrors/WukongCRM-11.0-JAVA.git # 3. 进入项目目录 cd WukongCRM-11.0-JAVA进入后你会看到项目结构。我们重点关注docker目录这就是一键部署的核心。ls -la docker/你应该能看到如官方Wiki中描述的结构docker/ ├── conf/ # 各组件配置文件 ├── data/ # 数据持久化目录 ├── log/ # 日志目录 ├── workspace/ # 应用服务目录 ├── docker-compose.yml # 编排文件 ├── docker-install.sh # Docker环境安装脚本 ├── start.sh # 启动脚本 └── ... (其他脚本)3. 核心配置文件详解与定制在启动之前理解并可能修改关键配置是成功部署的重要一环。不要直接无脑运行脚本。3.1 剖析 docker-compose.yml这是整个部署的蓝图定义了所有服务、网络和卷。用编辑器打开查看cat docker/docker-compose.yml文件内容较长但结构清晰。你会看到多个service定义例如mysql,redis,nacos,nginx,elasticsearch,wkcrm(应用本身) 等。每个服务大致包含image: 指定使用的Docker镜像。container_name: 容器名称。ports: 端口映射格式为宿主机端口:容器端口。volumes: 数据卷映射用于持久化数据和配置。environment: 环境变量用于传递配置如数据库密码。networks: 所属网络所有服务通常在一个自定义的桥接网络内方便通过服务名通信。depends_on: 依赖关系控制启动顺序。关键点检查端口冲突检查ports映射确保宿主机上的3306(MySQL),8848(Nacos),80(Nginx) 等端口没有被其他程序占用。资源限制默认配置可能没有设置内存限制。对于资源有限的服务器可以考虑为elasticsearch和mysql服务添加资源限制防止它们占用过多内存导致系统崩溃。例如services: elasticsearch: # ... 其他配置 deploy: resources: limits: memory: 2G reservations: memory: 1G注意deploy部分仅在docker-compose版本3及以上且以docker stack deploy方式运行时有效。对于普通docker-compose up可以使用mem_limit等旧标签但推荐使用docker-compose版本3的resources格式。3.2 修改Nginx配置配置访问域名/IP默认情况下Nginx配置允许通过服务器IP直接访问。如果你有域名或者想修改访问方式需要调整Nginx配置。配置文件位于docker/conf/nginx/conf.d/wkcrm.conf。vim docker/conf/nginx/conf.d/wkcrm.conf关键配置部分server { listen 80; server_name localhost; # 这里默认是localhost location / { proxy_pass http://wkcrm:8080; # 反向代理到名为‘wkcrm’的服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # ... 可能还有其他配置 }修改项server_name: 如果你想用域名访问将localhost改为你的域名例如server_name crm.yourcompany.com;。如果只用IP访问可以保持localhost或改为服务器IP地址。listen: 默认是80端口。如果你希望通过HTTPS访问需要配置SSL证书并修改为listen 443 ssl;同时添加ssl_certificate和ssl_certificate_key指令。这步可以在系统部署完成后进行。3.3 检查并修改数据库等组件密码强烈建议在docker-compose.yml或通过环境变量文件数据库、Redis等组件的密码通常是预设的。出于安全考虑在生产环境或暴露在公网的测试环境中必须修改这些默认密码查看docker-compose.yml中各个服务的environment部分services: mysql: environment: MYSQL_ROOT_PASSWORD: root123456 # 默认root密码 MYSQL_DATABASE: wkcrm MYSQL_USER: wkcrm MYSQL_PASSWORD: wkcrm123456 # 默认业务用户密码 redis: command: redis-server --requirepass redis123456 # 默认Redis密码 nacos: environment: - MODEstandalone - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOSTmysql - MYSQL_SERVICE_DB_NAMEnacos_config - MYSQL_SERVICE_USERroot - MYSQL_SERVICE_PASSWORDroot123456 # Nacos连接MySQL的密码需与上面一致修改步骤选择一个强密码生成器为MYSQL_ROOT_PASSWORD,MYSQL_PASSWORD, Redis的requirepass生成复杂且不同的密码。在docker-compose.yml中统一修改这些密码字段。重要还需要修改悟空CRM应用连接这些组件的配置。这些配置通常位于docker/workspace目录下的应用配置文件或者通过Nacos配置中心管理。由于悟空CRM项目可能已将数据库连接信息也放在了Nacos的配置中你需要在修改完docker-compose.yml后同时更新Nacos中对应的配置。更简单的做法是首次启动使用默认密码待所有服务启动、Nacos启动后再通过Nacos控制台 (http://服务器IP:8848/nacos) 去修改相关配置然后重启悟空CRM应用服务。这是一个进阶操作初次部署可先使用默认密码以简化流程。3.4 使用自有中间件可选如果你已经有一套稳定的MySQL、Redis或Elasticsearch集群不想使用Docker启动的版本可以按以下步骤操作注释服务在docker-compose.yml中找到对应的服务定义如mysql,redis,elasticsearch在其定义前添加#将其注释掉或者直接删除整个服务块。修改应用配置找到悟空CRM应用连接这些组件的配置。它们可能在docker/workspace下的application.yml、bootstrap.yml等文件中或者通过环境变量注入。你需要将连接地址从服务名如mysql改为你自有服务的主机IP和端口。例如将jdbc:mysql://mysql:3306/wkcrm改为jdbc:mysql://192.168.1.100:3306/wkcrm。同样密码也需要对应修改。确保网络可达确保Docker容器网络能够访问到你宿主机外部的这些服务。可能需要配置Docker网络模式或调整防火墙规则。对于初次部署建议使用Docker Compose自带的服务以减少外部依赖和配置复杂度。4. 完整部署实战流程假设你已经在Linux服务器上完成了第2、3步的环境准备和基本检查我们现在开始启动整个系统。4.1 执行一键启动脚本悟空CRM的docker目录下提供了start.sh脚本它封装了创建网络和启动容器的命令。# 确保位于项目根目录下的 docker 文件夹内 cd /path/to/WukongCRM-11.0-JAVA/docker # 赋予启动脚本执行权限如果尚未有 chmod x start.sh # 执行启动脚本 ./start.sh脚本做了什么查看start.sh内容它主要做了两件事docker network create --driverbridge --subnet172.20.0.0/16 wkcrm_network创建一个名为wkcrm_network的Docker桥接网络并指定子网。所有在docker-compose.yml中声明了该网络的服务都会加入其中它们可以通过服务名如mysql,nacos相互访问。docker-compose up -d以守护进程模式 (-d) 启动docker-compose.yml中定义的所有服务。对于Windows用户 不能直接运行.sh脚本。你需要手动执行上述两条命令。以管理员身份打开PowerShell或CMD。cd进入项目下的docker目录。执行网络创建命令docker network create --driverbridge --subnet172.20.0.0/16 wkcrm_network执行启动命令docker-compose up -d4.2 观察启动日志与状态启动命令执行后Docker会开始拉取镜像如果本地没有并创建容器。这个过程可能需要几分钟取决于你的网速和服务器性能。# 查看所有容器的运行状态 docker-compose ps # 或者使用 docker 命令 docker ps你应该看到类似下面的输出所有服务的State都应该是UpName Command State Ports --------------------------------------------------------------------------------------------------- docker-elasticsearch-1 /bin/tini -- /usr/local/bi ... Up 0.0.0.0:9200-9200/tcp, 9300/tcp docker-mysql-1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306-3306/tcp, 33060/tcp docker-nacos-1 bin/docker-startup.sh Up 0.0.0.0:8848-8848/tcp, 9848/tcp docker-nginx-1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80-80/tcp, 0.0.0.0:443-443/tcp docker-redis-1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379-6379/tcp docker-wkcrm-1 /bin/sh -c java -Dfile.enc ... Up 8080/tcp # ... 可能还有其他服务如 xxl-job, seata等如果某个容器状态不是Up或者反复重启就需要查看日志排查。# 查看指定容器的日志以mysql为例 docker-compose logs mysql # 或者查看所有容器的日志最后100行 docker-compose logs --tail100 -f关键服务启动顺序与健康检查MySQL和Redis会最先启动它们是基础依赖。Nacos启动后需要等待其完全就绪日志中出现“Nacos started successfully”因为其他微服务依赖它。悟空CRM应用服务 (wkcrm)最后启动它会尝试连接Nacos、MySQL、Redis等。在它的日志中你会看到服务注册到Nacos的成功信息。4.3 访问系统与初始化当所有容器状态稳定为Up后就可以通过浏览器访问了。访问Nacos控制台打开浏览器访问http://你的服务器IP:8848/nacos。默认账号密码是nacos/nacos。在这里你可以看到所有已注册的悟空CRM微服务以及它们的健康状态和配置信息。这是排查服务间通信问题的重要工具。访问悟空CRM系统打开浏览器访问http://你的服务器IP因为Nginx监听80端口。如果一切正常你应该会看到悟空CRM的登录或初始化页面。系统初始化首次访问系统可能会引导你进行初始化设置如创建管理员账号、配置公司信息等。按照页面提示完成即可。如果页面显示“无法连接”或“502 Bad Gateway”说明后端应用服务可能尚未完全启动成功或者Nginx配置有误。请返回上一步查看容器日志特别是wkcrm和nginx的日志。5. 常见问题与详细排查指南部署过程中难免会遇到问题这里汇总了高频问题及其解决方案。5.1 端口冲突问题现象执行docker-compose up -d时报错Bind for 0.0.0.0:XXXX failed: port is already allocated。原因宿主机上已有程序占用了MySQL(3306)、Redis(6379)、Nacos(8848)或Nginx(80)等端口。解决更改映射端口在docker-compose.yml中修改冲突服务的ports映射。例如将- 3306:3306改为- 3307:3306这样外部通过3307端口访问容器内的MySQL。停止占用程序找出并停止占用端口的程序。使用netstat -tlnp | grep :端口号(Linux) 或Get-NetTCPConnection -LocalPort 端口号(PowerShell) 查找进程ID然后终止它。使用主机网络模式不推荐将服务网络模式改为network_mode: host但这会失去容器网络隔离性且可能引起其他冲突。5.2 容器启动后立即退出 (Exited)现象docker-compose ps显示容器状态为Exited (1)或其他非0退出码。原因通常是容器内应用启动失败原因可能是配置错误、依赖服务未就绪、内存不足等。排查查看详细日志docker-compose logs 服务名或docker logs 容器ID。常见日志线索Connection refused应用无法连接到MySQL、Redis或Nacos。检查依赖服务是否已正常启动 (docker-compose ps)检查docker-compose.yml中连接地址通常是服务名和密码是否正确。OutOfMemoryErrorJVM内存不足。可以尝试在docker-compose.yml中为wkcrm服务增加环境变量JAVA_OPTS: -Xms512m -Xmx1024m来调整堆内存。Nacos server is downNacos未启动或未完全就绪。确保Nacos容器状态为Up并等待其日志显示启动成功。可以在wkcrm服务配置中添加depends_on条件确保在Nacos健康后再启动。Access denied for user数据库用户名或密码错误。核对docker-compose.yml和悟空CRM应用配置中的数据库密码。5.3 磁盘空间不足现象拉取镜像或容器运行时提示no space left on device。原因Docker默认存储目录如/var/lib/docker空间不足。解决清理无用的Docker资源# 删除所有已停止的容器 docker container prune # 删除所有未被使用的镜像 docker image prune -a # 删除所有未被使用的卷 docker volume prune # 删除所有未被使用的网络 docker network prune如果仍不足考虑扩展磁盘分区或迁移Docker数据目录到更大空间的位置。5.4 无法通过IP访问系统现象服务器本地curl http://localhost可能正常但外部浏览器通过服务器IP无法访问。排查防火墙检查服务器防火墙是否放行了80端口。# CentOS 7 sudo firewall-cmd --permanent --add-port80/tcp sudo firewall-cmd --reload # 或者临时关闭防火墙仅测试用 sudo systemctl stop firewalld安全组云服务器如果你使用的是阿里云、腾讯云等云服务器需要在控制台配置安全组规则入方向允许80端口。Nginx配置检查docker/conf/nginx/conf.d/wkcrm.conf中的server_name是否配置正确。可以暂时改为server_name _;下划线匹配所有域名进行测试。容器网络确保Nginx容器正确映射了端口- 80:80。5.5 数据库连接失败应用日志中现象wkcrm容器日志中持续报数据库连接错误。解决确认MySQL容器已启动且健康docker-compose logs mysql查看有无错误。进入MySQL容器验证是否能登录docker-compose exec mysql mysql -uroot -p # 输入密码默认root123456检查悟空CRM应用的数据库配置。配置可能在Nacos中。访问Nacos控制台 (ip:8848/nacos)在配置管理-配置列表中查找以wkcrm或application为Data ID的配置检查里面的spring.datasource.url,username,password是否正确。注意如果修改了docker-compose.yml中的MySQL密码必须同步修改Nacos中对应的配置然后重启wkcrm服务 (docker-compose restart wkcrm)。6. 生产环境部署建议与优化将悟空CRM用于正式业务时需要考虑安全性、稳定性和数据持久化。6.1 安全加固修改所有默认密码这是必须做的第一步。包括MySQL root密码、业务数据库用户密码、Redis密码、Nacos控制台密码等。启用HTTPS通过Nginx配置SSL证书将HTTP重定向到HTTPS。你需要获取域名SSL证书.crt和.key文件。在wkcrm.conf中新增一个server块监听443端口并配置ssl_certificate和ssl_certificate_key。将80端口的server块配置为HTTP到HTTPS的重定向。限制访问来源在Nginx配置中可以使用allow和deny指令限制只有公司IP或VPN IP可以访问管理后台。定期更新与漏洞扫描关注悟空CRM官方GitHub仓库的Release和安全公告定期更新镜像。使用安全工具扫描镜像漏洞。6.2 数据持久化与备份Docker Compose中通过volumes将容器内数据目录映射到宿主机数据已经持久化在docker/data/目录下。MySQL数据位于docker/data/mysql/Elasticsearch数据位于docker/data/elasticsearch/备份策略定期备份编写脚本定期将docker/data/目录打包压缩并传输到远程存储或对象存储。# 简单示例备份MySQL数据目录 tar -czf /backup/wkcrm-mysql-$(date %Y%m%d).tar.gz /path/to/WukongCRM-11.0-JAVA/docker/data/mysql数据库逻辑备份除了文件备份还应定期使用mysqldump进行逻辑备份便于单表恢复。docker-compose exec mysql mysqldump -uroot -p[密码] wkcrm /backup/wkcrm-sql-$(date %Y%m%d).sql测试恢复流程定期验证备份文件的可恢复性。6.3 性能与监控资源限制在docker-compose.yml中为每个服务尤其是MySQL、Elasticsearch、Java应用设置合理的CPU和内存限制 (resources.limits)防止单个服务耗尽主机资源。日志收集默认日志在docker/log/目录。可以考虑使用ELKElasticsearch, Logstash, Kibana或EFKFluentd替代Logstash栈来集中管理和分析日志。应用监控集成Spring Boot Actuator如果应用已包含提供健康检查、度量指标端点。配合Prometheus和Grafana进行可视化监控。数据库优化根据业务量调整MySQL的innodb_buffer_pool_size等参数。可以在docker/conf/mysql目录下提供自定义的my.cnf配置文件并通过卷映射到容器内。6.4 版本升级与回滚升级关注官方仓库的Release。升级前务必完整备份数据和当前配置。升级步骤通常包括拉取最新代码。检查docker-compose.yml和配置文件是否有不兼容的变更。停止旧容器docker-compose down。拉取新镜像docker-compose pull。启动新容器docker-compose up -d。回滚如果升级失败需要快速回滚。停止新容器docker-compose down。恢复备份的数据目录 (docker/data/)。使用旧的镜像标签启动容器如果docker-compose.yml中使用了latest标签回滚会麻烦因此生产环境建议使用固定版本标签。至此你已经完成了悟空AICRM从零开始的Docker Compose部署并掌握了基本的运维和排错知识。这套部署方案将复杂的微服务架构简化为几条命令是体验和中小规模部署的理想选择。接下来你可以登录系统探索其客户管理、销售流程、AI功能等模块根据业务需求进行配置和使用。如果在使用过程中遇到更深层次的问题建议查阅官方Wiki的“常见问题”部分或在其GitHub仓库的Issues中搜索类似问题。