Wukong AICRM Docker部署实战:从环境准备到生产运维 这类工具最值得先看的不是功能列表而是能不能在普通环境里稳定跑起来。Wukong AICRM 作为一个集成了 AI 能力的客户关系管理工具核心价值在于把 AI 对话、客户跟进、数据分析这些功能打包成一个开箱即用的服务。它适合想快速搭建内部 CRM 系统、又希望集成智能助手的团队或个人开发者。最关键的一点是它提供了 Docker 部署方案这意味着环境依赖和配置过程被大大简化了。但简化不等于没坑。我见过不少人在 Docker 安装这步就卡住了问题往往不是出在 Wukong 本身而是 Docker 环境没准备好、镜像拉取慢、端口冲突或者配置文件没写对。所以我更建议把第一次部署拆成三步先确保 Docker 环境本身是干净可用的再拉取和运行 Wukong 的镜像最后才是配置和访问。下面我会按这个实际落地顺序结合常见的 Windows 和 Linux 环境把完整的流程和排查点都过一遍。1. 先确认你的 Docker 环境到底能不能用很多人一上来就直接docker run结果报错连篇其实问题八成出在 Docker 环境本身。这一步的目标不是“安装了 Docker”而是“Docker 能正常拉取镜像并运行容器”。1.1 Windows 环境重点看 WSL2 和虚拟化如果你在 Windows 上操作最常见的问题有两个一是没装 WSL2Windows Subsystem for Linux 2二是 BIOS 里的 CPU 虚拟化技术没开。首先别急着去 Docker 官网下载 Docker Desktop。先确认你的系统版本。Docker Desktop 对 Windows 版本有要求通常是 Windows 10 专业版/企业版/教育版版本号 2004 及以上或者 Windows 11。家庭版可能需要额外步骤。确认系统符合后以管理员身份打开 PowerShell运行以下命令来启用 WSL2 和虚拟机平台功能# 启用 WSL 功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 启用虚拟机平台功能这是虚拟化的基础 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart运行后重启电脑。重启后再次打开 PowerShell设置 WSL 2 为默认版本wsl --set-default-version 2接下来才是安装 Docker Desktop。去 Docker 官网下载安装包安装过程基本就是一路下一步。安装完成后启动 Docker Desktop如果图标在系统托盘区稳定运行没有弹出红色错误通常就成功了。验证方法打开命令行CMD 或 PowerShell输入docker --version docker run hello-world如果第一行能显示 Docker 版本号第二行能成功拉取并运行一个测试镜像打印出 “Hello from Docker!”那说明基础环境没问题。如果hello-world运行失败Docker Desktop 界面通常会给出具体错误比如 “Virtualization support not detected”。这时你需要进入电脑 BIOS开机时按 F2、Del 等键因品牌而异找到 Intel VT-x 或 AMD-V 的选项确保它是Enabled状态。1.2 Linux 环境重点看安装源和用户权限Linux 下安装 Docker 相对直接但不同发行版的包管理命令不同。这里以最常见的 Ubuntu 和 CentOS 为例。对于Ubuntu/Debian系 首先更新软件包索引然后安装必要的依赖最后添加 Docker 的官方 GPG 密钥和软件源。# 更新索引 sudo apt-get update # 安装依赖包允许 apt 通过 HTTPS 使用仓库 sudo apt-get install -y ca-certificates curl gnupg lsb-release # 添加 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 # 设置稳定版仓库 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 # 再次更新并安装 Docker Engine sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin对于CentOS/RHEL系# 安装 yum-utils 工具包提供 yum-config-manager 命令 sudo yum install -y yum-utils # 添加 Docker 的官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装 Docker Engine sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin安装完成后启动 Docker 服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker关键一步将当前用户加入 docker 组。否则每次运行docker命令都需要加sudo。sudo usermod -aG docker $USER执行这个命令后你需要完全退出当前终端重新登录或者重启系统这个改动才会生效。验证安装docker --version sudo systemctl status docker # 查看服务状态应该是 active (running) docker run hello-world1.3 配置镜像加速器国内环境必备无论是 Windows 还是 Linux在国内直接拉取 Docker Hub 的镜像都可能非常慢甚至超时。配置一个国内镜像加速器是必须的。对于 Docker Desktop (Windows/Mac) 在系统托盘右键点击 Docker 图标选择 “Settings” - “Docker Engine”。在配置窗口中你会看到一段 JSON 配置。在registry-mirrors数组中添加国内镜像地址。例如使用阿里云镜像需要先登录阿里云容器镜像服务获取专属地址或中科大镜像。{ registry-mirrors: [ https://your-aliyun-mirror.mirror.aliyuncs.com, https://docker.mirrors.ustc.edu.cn ] }修改后点击 “Apply Restart”。对于 Linux 编辑或创建/etc/docker/daemon.json文件需要 sudo 权限sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://docker.mirrors.ustc.edu.cn] } EOF然后重启 Docker 服务sudo systemctl daemon-reload sudo systemctl restart docker验证加速器是否生效docker info在输出信息中查找Registry Mirrors确认你添加的镜像地址已经在列表中。2. 获取并运行 Wukong AICRM 的 Docker 镜像环境准备好之后才是处理 Wukong 本身。这里通常有两种方式直接使用docker run命令运行单个容器或者使用docker-compose编排多个关联服务比如数据库、Redis等。Wukong AICRM 很可能需要后一种方式。2.1 方式一使用 Docker Compose推荐如果项目提供了docker-compose.yml文件这是最省心的方式。它会把应用、数据库、缓存等所有依赖定义在一个文件里一键启动。首先你需要找到 Wukong AICRM 的官方部署文档或代码仓库例如 GitHub。通常里面会有一个docker-compose.yml示例文件。假设你找到了这个文件或者内容类似下面这样这是一个通用示例具体参数以官方为准version: 3.8 services: db: image: postgres:15-alpine container_name: wukong-db environment: POSTGRES_DB: wukong POSTGRES_USER: wukong_user POSTGRES_PASSWORD: your_strong_password_here volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped networks: - wukong-network redis: image: redis:7-alpine container_name: wukong-redis restart: unless-stopped networks: - wukong-network app: image: wukongai/wukong-aicrm:latest # 假设的镜像名请替换为官方镜像 container_name: wukong-app depends_on: - db - redis ports: - 3000:3000 # 主机端口:容器端口 environment: DATABASE_URL: postgresql://wukong_user:your_strong_password_heredb:5432/wukong REDIS_URL: redis://redis:6379 # 其他环境变量如 API_KEY、SECRET 等 volumes: - uploads:/app/uploads # 持久化上传文件 - logs:/app/logs # 持久化日志 restart: unless-stopped networks: - wukong-network volumes: postgres_data: uploads: logs: networks: wukong-network: driver: bridge操作步骤在你选定的部署目录例如~/wukong-aicrm下创建一个文件将上面的内容根据官方文档修改后保存为docker-compose.yml。关键修改务必修改POSTGRES_PASSWORD和DATABASE_URL中的密码不要使用默认值。其他环境变量也根据官方说明填写。在该目录下打开终端运行docker-compose up -d这个命令会以后台模式拉取所有镜像并启动所有服务。-d代表 detached后台运行。2.2 方式二直接使用 Docker Run 命令如果官方只提供了单个镜像或者你想更手动地控制可以使用docker run。但你需要自己处理数据库、Redis 等其他服务的连接。首先拉取应用镜像假设镜像名为wukongai/wukong-aicrm:latestdocker pull wukongai/wukong-aicrm:latest然后运行一个 PostgreSQL 数据库容器docker run -d \ --name wukong-db \ -e POSTGRES_DBwukong \ -e POSTGRES_USERwukong_user \ -e POSTGRES_PASSWORDyour_strong_password_here \ -v postgres_data:/var/lib/postgresql/data \ --restart unless-stopped \ postgres:15-alpine接着运行一个 Redis 容器docker run -d \ --name wukong-redis \ --restart unless-stopped \ redis:7-alpine最后运行 Wukong AICRM 应用容器并链接到数据库和 Redisdocker run -d \ --name wukong-app \ -p 3000:3000 \ -e DATABASE_URLpostgresql://wukong_user:your_strong_password_herewukong-db:5432/wukong \ -e REDIS_URLredis://wukong-redis:6379 \ -v wukong_uploads:/app/uploads \ -v wukong_logs:/app/logs \ --link wukong-db:db \ --link wukong-redis:redis \ --restart unless-stopped \ wukongai/wukong-aicrm:latest注意--link参数在较新版本的 Docker 中已被视为遗留功能更推荐使用用户自定义网络如docker network create然后--network。docker-compose方式自动帮你管理了网络所以更推荐。2.3 验证容器是否成功运行无论用哪种方式启动后都要验证。# 查看所有容器状态 docker ps -a你应该能看到wukong-app、wukong-db、wukong-redis如果用了这几个容器的状态是Up。查看应用容器的日志这是排查问题的第一现场docker logs -f wukong-app-f参数可以实时滚动查看日志。观察日志中是否有明显的错误比如数据库连接失败、Redis 连接失败、端口被占用等。如果看到应用成功启动并监听在3000端口的消息通常就表示启动成功了。3. 配置、访问与初始化 Wukong AICRM容器跑起来只是第一步要让 Wukong AICRM 真正可用还需要进行网络访问、初始配置可能还包括数据初始化。3.1 访问 Web 界面假设你的应用容器将内部的 3000 端口映射到了主机的 3000 端口-p 3000:3000。如果 Docker 运行在本地电脑上直接在浏览器访问http://localhost:3000。如果 Docker 运行在远程服务器IP 为192.168.1.100上则访问http://192.168.1.100:3000。如果无法访问按顺序排查检查端口映射docker ps查看PORTS列确认0.0.0.0:3000-3000/tcp这样的映射存在。检查防火墙在服务器上确保防火墙放行了 3000 端口。Ubuntu/Debian:sudo ufw allow 3000CentOS/RHEL:sudo firewall-cmd --permanent --add-port3000/tcp sudo firewall-cmd --reload检查容器日志docker logs wukong-app看是否有启动错误。检查容器内网络进入容器内部测试端口是否监听。docker exec -it wukong-app sh # 进入容器后 netstat -tlnp | grep 3000 # 或者用 curl curl -I http://localhost:30003.2 关键环境变量配置Wukong AICRM 的功能很大程度上通过环境变量控制。除了基础的数据库连接信息通常还需要配置AI 服务相关如 OpenAI API Key、Azure OpenAI 端点、或国内大模型如文心一言、通义千问的 API Key 和 Base URL。这决定了 CRM 的智能对话能力。邮件服务器 SMTP 配置用于发送客户跟进邮件、系统通知等。文件存储路径如果使用本地卷确保映射的宿主机目录有写权限。密钥和加密盐用于会话加密、JWT Token 生成等生产环境必须修改。这些变量通常在docker-compose.yml的app服务的environment部分或者docker run命令的-e参数中设置。永远不要将敏感信息如 API Key、密码硬编码在镜像或代码里一定要通过环境变量或外部配置文件注入。一个更安全的做法是使用环境变量文件。创建一个.env文件在docker-compose.yml同级目录# .env 文件示例 POSTGRES_PASSWORDyour_very_strong_db_password OPENAI_API_KEYsk-your-openai-key-here SMTP_HOSTsmtp.your-email.com SMTP_PORT587 SMTP_USERyour-emailexample.com SMTP_PASSWORDyour-email-password SECRET_KEYyour-long-random-secret-string然后在docker-compose.yml中引用app: image: wukongai/wukong-aicrm:latest env_file: - .env # 加载 .env 文件 environment: - DATABASE_URLpostgresql://wukong_user:${POSTGRES_PASSWORD}db:5432/wukong # 其他变量也可以直接引用或者在这里覆盖记得将.env文件加入.gitignore避免泄露。3.3 数据初始化与数据库迁移很多 Web 应用尤其是使用 Django、Rails、Laravel 等框架的在第一次启动时需要执行数据库迁移Migration来创建表结构或者需要初始化一个管理员账户。查看 Wukong AICRM 的官方文档确认是否需要此步骤。如果需要通常通过进入应用容器执行命令来完成# 进入应用容器 docker exec -it wukong-app sh # 在容器内部执行迁移命令具体命令以官方文档为准以下是示例 # 示例1 (类似Django): python manage.py migrate # 示例2 (类似Rails): bundle exec rails db:migrate # 示例3 (Node.js): npm run db:migrate # 创建超级用户如果需要 # 示例: python manage.py createsuperuser执行完成后退出容器。如果应用设计得好这些步骤可能在容器启动时的入口脚本中自动执行了日志里会有提示。4. 生产环境部署的进阶考量与日常维护把服务在本地跑起来和在生产环境稳定运行是两回事。如果你打算长期使用下面这些点需要提前规划。4.1 数据持久化与备份Docker 容器的文件系统是临时的容器被删除里面的数据数据库、上传的文件、日志就没了。所以必须做数据卷Volume持久化。在之前的docker-compose.yml示例中我们已经定义了 volumespostgres_data 映射到数据库容器的/var/lib/postgresql/data保存所有数据库数据。uploads 映射到应用容器的/app/uploads保存用户上传的文件。logs 映射到应用容器的/app/logs保存应用日志。这些卷名如postgres_data是 Docker 管理的命名卷数据存储在 Docker 的特定目录如/var/lib/docker/volumes/。你也可以绑定挂载到宿主机特定路径便于直接管理volumes: - ./data/postgres:/var/lib/postgresql/data - ./data/uploads:/app/uploads - ./data/logs:/app/logs使用绑定挂载时要确保宿主机路径./data/postgres存在并且容器内的进程有读写权限通常需要调整目录所有者如chown -R 1000:1000 ./data其中 1000 是容器内应用用户的常见 UID。备份策略定期备份postgres_data卷的数据。可以使用docker exec执行pg_dump命令导出数据库或者直接备份整个卷目录。4.2 资源限制与监控默认情况下容器可以使用宿主机的所有资源。为了防止某个容器耗尽资源影响其他服务应该设置资源限制。在docker-compose.yml中app: image: wukongai/wukong-aicrm:latest deploy: # 注意这通常用于 Docker Swarm单机 Docker Compose 在某些版本下也支持 resources: limits: cpus: 1.0 # 最多使用 1 个 CPU 核心 memory: 2G # 内存限制为 2GB reservations: cpus: 0.5 memory: 1G或者使用docker run参数--cpus、--memory。监控使用docker stats命令可以实时查看所有容器的 CPU、内存、网络 I/O 使用情况。docker stats wukong-app wukong-db对于生产环境可以考虑集成 Prometheus Grafana 或使用商业监控方案。4.3 日志收集与问题排查日志是排查线上问题的生命线。除了查看实时日志docker logs应该将日志持久化并集中管理。持久化如上所述通过 Volume 将容器内的日志目录映射出来。日志轮转应用本身应该配置日志轮转如按天或按大小切割避免单个日志文件过大。也可以在宿主机上使用logrotate工具管理映射出来的日志文件。查看日志进入日志目录查看或者使用tail -f命令跟踪。tail -f ./data/logs/app.log常见启动问题排查清单数据库连接失败检查DATABASE_URL环境变量格式是否正确密码是否对应数据库容器是否健康docker logs wukong-db网络是否互通在应用容器内ping db。端口已被占用docker ps查看哪个容器占用了 3000 端口或者宿主机有其他进程占用。可以修改docker-compose.yml中的端口映射如- “8080:3000”。权限错误常见于绑定挂载的宿主机目录。检查目录所有者和权限确保容器内进程通常是非 root 用户有写权限。镜像拉取失败检查网络确认 Docker 镜像加速器配置正确。尝试docker pull镜像看具体错误。应用启动后立即退出查看容器日志docker logs wukong-app通常是关键环境变量缺失、配置文件错误或应用本身启动脚本有问题。4.4 更新与回滚当 Wukong AICRM 发布新版本时更新流程如下# 进入 docker-compose.yml 所在目录 cd ~/wukong-aicrm # 拉取最新的镜像 docker-compose pull app # 如果镜像标签是 latest或者指定新版本 # 重新启动服务会使用新镜像创建容器 docker-compose up -d # 查看更新日志 docker-compose logs -f app回滚如果新版本有问题需要回滚到旧版本。前提是你有旧版本的镜像标签。# 修改 docker-compose.yml将镜像标签改为旧版本例如 wukongai/wukong-aicrm:v1.2.0 # 然后重新启动 docker-compose up -d更稳妥的做法是在更新前为当前数据库和重要文件打一个备份快照。我个人更建议在正式生产部署前先在测试环境完整走一遍这个流程。把数据库连接、AI接口调用、文件上传、邮件发送这些核心功能都测一遍。Docker 解决了环境一致性问题但应用本身的配置和业务逻辑还是需要你自己根据文档和日志来摸清楚。把第一次部署当成一个标准操作流程SOP记录下来以后维护和排错会省心很多。