资讯动态

CRMEB 商城 Windows 环境 Docker Compose 快速部署指南:从容器编排到后台任务全流程

发布时间:2026/10/15 2:51:12 来源:尧图企业网站定制
后端电商前端【免费下载链接】CRMEBCRMEB开源商城免费开源多语言商城系统Tp6框架商城系统可商用包含小程序商城、H5商城、公众号商城、PC商城、App支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY前后端分离方便二开更有详细使用文档、接口文档、数据字典、二开文档/视频教程欢迎大家提出宝贵意见和建议项目地址https://gitcode.com/gh_mirrors/cr/CRMEB点击查看免费下载本指南以 CRMEB 开源商城仓库中的 docker-compose/window/README.md 为骨架完整讲解在 Windows 上使用 Docker Compose 一键拉起 CRMEB 前后端分离环境MySQL Redis PHP-FPM Nginx的步骤并深入剖析 docker-compose/window/docker-compose.yml 的容器网络、端口映射与数据持久化设计以及php think timer / workerman / queue:listen三类后台任务的启动原理。读完本文你将能够从零搭建一套可运行、可安装、可二开的 CRMEB 本地开发环境并具备独立排查端口冲突、IP 占用、镜像兼容性等常见故障的能力。一、环境准备安装 Docker 与 Docker ComposeCRMEB 的 Docker 部署方案由四个容器组成全部依赖 Docker 运行时与 Compose 编排工具因此环境准备是第一道门槛。1. 安装 DockerWindows 用户推荐直接下载 Docker Desktop 官方安装包Docker Desktop 内置了 docker CLI 与 docker-compose v2 插件安装后需确保 Docker Desktop 已启动并在设置中将共享驱动器/文件共享指向代码所在目录。如果宿主系统为 Linux也可用于 Windows WSL文档同时提供了国内可用的脚本安装方式curl -sSL https://get.daocloud.io/docker | sh该脚本通过 DaoCloud 镜像源安装 Docker 引擎适合网络受限环境。2. 安装 docker-composeDocker Desktop 自带 compose 能力可直接使用docker compose子命令若使用独立安装的 docker-compose v1需单独安装。命令均以docker-compose up -d形式调用与文档保持一致。二、下载 CRMEB 代码并规划目录文档要求将 CRMEB 程序放到与docker-compose目录同级的位置。以当前仓库为例目录结构对应为CRMEB/ # 仓库根目录 ├── crmeb/ # CRMEB 主程序ThinkPHP 6 应用 └── docker-compose/ └── window/ # Windows 版 Compose 编排目录 ├── docker-compose.yml ├── mysql/ # my.cnf 配置挂载 ├── nginx/ # vhost.conf 配置挂载 ├── php/ # Dockerfile 与 php.ini 覆盖 └── redis/ # redis.conf 配置挂载关键挂载关系在 docker-compose/window/docker-compose.yml 中PHP 容器通过../../crmeb:/var/www将仓库根目录下的crmeb主程序直接挂载进容器工作目录/var/www。这意味着代码改动即时生效无需重新构建镜像非常适合二开调试同时../../crmeb/runtime:/var/www/temp将运行时缓存目录单独挂载用于承载上传临时文件与缓存。三、启动项目docker-compose up -d 背后发生了什么进入 Compose 编排目录并执行cd docker-compose docker-compose up -d-d表示后台守护模式运行。首次执行时Compose 会按编排文件拉取基础镜像并执行 docker-compose/window/php/Dockerfile 构建 PHP 镜像。下面拆解四个服务的编排设计。3.1 服务清单与端口映射容器名镜像/构建宿主机端口 → 容器端口固定容器 IPcrmeb_mysqlmysql:5.73336:3306192.168.10.11crmeb_redisredis:alpine6379:6379192.168.10.10crmeb_php由./php/Dockerfile构建php:7.4-fpm9000:9000、40001:40001、40002:40002、40003:40003192.168.10.90crmeb_nginxnginx:alpine8011:80192.168.10.80其中 PHP 容器的 40001/40002/40003 三个端口对应 CRMEB 的 Workerman 长连接服务端口见下文第四节9000 为 PHP-FPM 默认端口供 Nginx 通过fastcgi_pass phpfpm:9000转发 PHP 请求。3.2 自定义桥接网络与固定 IP编排文件底部声明了自定义桥接网络networks: app_net: driver: bridge ipam: driver: default config: - subnet: 192.168.10.0/24四个容器全部接入app_net并各自固定ipv4_address。这样设计的原因在于CRMEB 安装向导需要填入数据库与 Redis 的固定地址详见第五节固定 IP 可以保证容器重启后连接地址不变。Nginx 的 vhost.conf 中/notice与/msg两个 WebSocket 反向代理也直接引用了 PHP 容器的固定 IP192.168.10.90若改动了 IP 段这两处代理地址必须同步修改。3.3 MySQL 的关键启动参数MySQL 容器通过command注入了一组对 CRMEB 至关重要的参数command: --character-set-serverutf8mb4 --collation-serverutf8mb4_general_ci --explicit_defaults_for_timestamptrue --lower_case_table_names1 --max_allowed_packet128M --default-authentication-pluginmysql_native_password --sql-modeNO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONutf8mb4字符集保证商品标题、用户昵称等 emoji 字符正常存储lower_case_table_names1让表名不区分大小写避免 Linux 容器与 Windows 开发环境的表名大小写差异引发报错max_allowed_packet128M支持较大数据包如批量导入的商品图片数据mysql_native_password认证插件则确保 ThinkPHP 6 的旧式 MySQL 客户端驱动可以正常连接。挂载的 docker-compose/window/mysql/my.cnf 还会叠加character-set-serverutf8mb4、collation-serverutf8mb4_unicode_ci与skip-grant-tables等配置数据目录与日志目录分别挂载到本地的./mysql/data与./mysql/log。3.4 Redis 与 PHP 配置Redis 使用redis-server /usr/local/etc/redis/redis.conf启动挂载 docker-compose/window/redis/redis.conf。该配置中与 CRMEB 直接相关的关键项包括port 6379监听端口requirepass 123456连接密码与安装向导中的 Redis 密码一致databases 16可用 db 编号 0~15安装时默认使用db:0appendonly yes开启 AOF 持久化避免容器重启丢失缓存数据protected-mode no允许容器网络内其他主机访问。PHP 容器构建自php:7.4-fpmDockerfile 安装bcmath / redis / mysqli / gd四个扩展正好对应该仓库 composer.json 中声明的依赖ThinkPHP 6 需要 bcmath、Redis 连接需要 redis 扩展、二维码与图片处理需要 gd。此外还会注入 php-ini-overrides.ini其中upload_max_filesize100M、post_max_size108M支撑商城商品图与编辑器大图上传upload_tmp_dir/var/www/temp对应挂载的临时目录。四、启动队列、定时任务与长连接CRMEB 的业务强依赖三个常驻后台进程定时任务如未支付订单自动取消、Workerman 长连接后台新订单弹窗、客服消息、Redis 队列短信、订单通知等异步任务。它们都需要在 PHP 容器内以守护方式启动# 进入 PHP 容器 docker exec -it crmeb_php /bin/bash # 进入项目目录 cd /var/www # 启动定时任务守护进程方式 php think timer start --d # 启动 Workerman 长连接服务 php think workerman start --d # 启动 Redis 队列消费 php think queue:listen --queue4.1 定时任务php think timertimer命令由 crmeb/crmeb/command/Timer.php 实现它基于 Workerman 的 Worker 构建常驻进程--d表示 daemon 守护方式运行PID 写入runtime/timer.pid-i选项可自定义执行间隔精确到 0.001 秒进程启动后在onWorkerStart回调中调用SystemCrontabServices::crontabCommandRun()即从数据库读取后台配置的定时任务并逐条执行对应 CRMEB 后台「定时任务」管理功能。4.2 长连接php think workermanworkerman命令由 crmeb/crmeb/command/Workerman.php 实现启动三类服务端口定义在 crmeb/config/workerman.php服务端口作用adminWorkermanService40001系统程序推送消息给后台新订单/新退款弹窗提醒chatChatService40002客户或客服发送消息客服消息通知/notice代理到该端口channelChannel Server40003内部通讯服务程序间消息转发/msg代理到该端口这与 PHP 容器暴露的 40001~40003 端口一一对应。Nginx 的 vhost.conf 将/notice与/msg两个路径通过 WebSocket 升级代理到 PHP 容器固定 IP 的 40002/40003 端口实现浏览器端长连接。4.3 队列php think queue:listenCRMEB 的异步任务基于 ThinkPHP 的think-queue组件crmeb/config/queue.php 将默认驱动设为redis队列名为CRMEB并读取环境变量中的 Redis 主机、端口、密码与 select 库。因此队列消费进程必须与安装时填写的 Redis 配置一致否则会出现任务入队成功但无法消费的情况。--queue参数指定监听队列名称CRMEB。五、访问并安装 CRMEB 系统容器全部启动后浏览器访问http://localhost:8011/Nginx 容器将宿主机 8011 端口映射到容器内 80 端口root /var/www/public指向 CRMEB 的前端入口目录。首次访问会进入安装向导由 crmeb/public/install/index.php 提供依次完成「安装许可协议 → 运行环境检测 → 安装参数设置 → 安装详细过程 → 安装完成」五个步骤。5.1 MySQL 数据库连接信息在安装向导的「数据库配置」步骤填写以下固定信息Host:192.168.10.11 Port:3306 user:root pwd:123456192.168.10.11 即 MySQL 容器在app_net网络中的固定 IP容器内部端口为 3306宿主机上的 3336 端口仅供外部工具如 Navicat 连接localhost:3336调试使用root 密码由编排文件的MYSQL_ROOT_PASSWORD: 123456指定。5.2 Redis 连接信息Host:192.168.10.10 Port:6379 db:0 pwd:123456Redis 容器固定 IP 为 192.168.10.10密码123456对应 redis.conf 中的requirepass 123456默认使用 0 号库。5.3 环境兼容性提示安装向导对 PHP 版本有硬性校验install/index.php要求PHP 7.1.0 ~ 7.4。这正是 PHP 容器选用php:7.4-fpm镜像的原因请勿随意更换为 PHP 8 以上镜像否则安装向导会直接拒绝。六、常见问题排查问题 1端口被占用若宿主机 8011、3336、6379、9000、40001~40003 中的某个端口已被占用docker-compose up -d会报端口绑定失败。解决方式打开 docker-compose/window/docker-compose.yml修改对应服务的ports左侧宿主机端口例如将8011:80改为8012:80同时注意同步更新 vhost.conf 中引用的容器内部端口。问题 2启动失败启动失败时优先查看容器日志定位原因docker-compose logs mysql docker-compose logs phpfpm docker-compose ps文档提示可检查镜像地址或其它配置。常见的镜像拉取失败场景可切换编排文件注释中预留的镜像备选例如 Redis 的daocloud.io/library/redis:6.0.5-alpineMySQL 的daocloud.io/library/mysql:5.7.5-m15。问题 3Error response from daemon: Address already in use该报错通常不是端口冲突而是容器网络 IP 被占用。由于编排文件为每个容器固定了ipv4_address若宿主机所在网段恰好已存在同名 IP 或其他 Docker 网络占用了该地址就会触发此错误。解决方式修改 docker-compose.yml 中对应容器networks.app_net.ipv4_address的值保持192.168.10.0/24网段内并同步更新 nginx vhost.conf 中192.168.10.90的代理地址以及安装向导中填写的数据库/Redis 地址。问题 4MYSQL 容器无法启动且无日志文档特别指出M1 芯片Apple Silicon下必须使用daocloud.io/library/mysql:5.7.5-m15镜像其他任何情况下都使用mysql:5.7镜像。这本质上是mysql:5.7官方镜像在 arm64 架构下的兼容性问题Windows Intel/AMD 环境使用默认的mysql:5.7即可M1 用户则需要将编排文件中image: mysql:5.7替换为 M1 专用镜像后重新docker-compose up -d。七、一句话总结部署闭环整个部署链路可以概括为装好 Docker → 放置代码 →docker-compose up -d拉起四容器 → 进 PHP 容器启动 timer/workerman/queue 三个常驻进程 → 访问 8011 端口走安装向导填 192.168.10.11 与 192.168.10.10 两个固定地址→ 完成安装。这套方案将代码以卷挂载方式接入容器既保证了 MySQL/Redis/Workerman 端口与地址的可预期性又让二开者可以在宿主机直接编辑crmeb/目录下的代码是 CRMEB 在 Windows 上进行本地开发与部署的推荐起点。赞分享后端电商前端【免费下载链接】CRMEBCRMEB开源商城免费开源多语言商城系统Tp6框架商城系统可商用包含小程序商城、H5商城、公众号商城、PC商城、App支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY前后端分离方便二开更有详细使用文档、接口文档、数据字典、二开文档/视频教程欢迎大家提出宝贵意见和建议项目地址https://gitcode.com/gh_mirrors/cr/CRMEB点击查看免费下载相关推荐CRMEB 商城 Docker Compose 快速部署指南基于 docker-compose/linux 的容器化安装与运行CRMEB 商城 Docker Compose 快速部署指南基于 docker compose/linux 的容器化安装与运行 导读 本指南以 CRMEB 仓后端电商前端从0到1搭建CRMEB Java商城Docker Compose一键部署多环境从0到1搭建CRMEB Java商城Docker Compose一键部署多环境 CRMEB Java商城是一款基于SpringBoot Maven V后端前端电商CRMEB 商城在 Mac M 系列芯片上的 Docker Compose 快速部署指南环境搭建、容器配置与定时任务/长连接/队列启动全解析CRMEB 商城在 Mac M 系列芯片上的 Docker Compose 快速部署指南环境搭建、容器配置与定时任务/长连接/队列启动全解析 导读 本文基于后端电商前端上一篇终极宝可梦随机化工具如何用Universal Pokemon Randomizer ZX重燃你的冒险热情 下一篇黑苹果休眠问题终极解决方案3步诊断与5大修复技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑