对话笔记直发:7.17 WSL_YoShop与CRMEB_Docker手动启停部署说明。分类:小程序接单。
WSL YoShop 与 CRMEB Docker 手动操作手册
更新时间:2026-07-17。本手册适用于当前 WSL 本地测试环境,不适用于腾讯云生产服务器。
1. 当前部署结构
| 项目 | 运行方式 | 本地入口 | 默认状态 |
|---|---|---|---|
| YoShop | 宿主 Nginx + PHP 8.3 FPM + MariaDB + Redis + Timer | http://wx.oiob.cn | 已下线,不自启动 |
| CRMEB | 独立 Docker Compose(PHP 7.4/MySQL 8/Redis/Nginx) | http://127.0.0.1:18081 | 当前运行,不自启动 |
| 其他 Docker 项目 | 独立容器,例如 zhou-web-1 | 8000 | 不受两个控制脚本影响 |
CRMEB 后台入口:
http://127.0.0.1:18081/admin/管理员凭据没有写入本手册或 Git。仅在 WSL 本机用以下命令查看:
sudo cat /opt/crmeb/admin-credentials.txt该文件权限为 0600,请不要复制到聊天、Git 或公开目录。
2. YoShop 手动操作
启动
sudo yoshopctl start
sudo yoshopctl status启动会检查/按需启动共享的 Nginx、PHP-FPM、MariaDB、Redis,恢复 YoShop Nginx 站点并启动 Timer。
停止
sudo yoshopctl stop
sudo yoshopctl status || true停止只撤下 YoShop 站点并停止 Timer,不停止共享基础设施。
诊断和日志
sudo yoshopctl doctor
sudo yoshopctl logs
sudo yoshopctl logs 300systemd 备用入口
sudo systemctl start yoshop-app.service
sudo systemctl stop yoshop-app.service
systemctl status yoshop-app.service确认不自启动
systemctl is-enabled yoshop-app.service
systemctl is-enabled yoshop2.0-timer.service两项均应为 disabled。
3. CRMEB 手动操作
启动
sudo crmebctl start
sudo crmebctl status停止(保留数据库和上传数据)
sudo crmebctl stop
sudo crmebctl status || true普通 stop 只停止容器,绝不删除容器、network 或 volume。
重启、诊断和日志
sudo crmebctl restart
sudo crmebctl doctor
sudo crmebctl logs
sudo crmebctl logs 300Compose 原生命令(只在排障时使用)
必须固定 project、env 和文件路径,避免操作其他项目:
sudo docker compose \
--project-name crmeb-local \
--env-file /opt/crmeb/.env \
--file /opt/crmeb/compose.yaml \
ps不要运行 CRMEB 上游的 help/docker/run.sh;其中包含宽泛的 Docker 网络清理和删除数据行为。
4. CRMEB 文件与数据位置
/opt/crmeb/app/ CRMEB Git 源码(固定上游 commit)
/opt/crmeb/compose.yaml 本机安全 Compose
/opt/crmeb/config/nginx.conf 容器 Nginx 配置
/opt/crmeb/.env Compose 密钥,0600
/opt/crmeb/admin-credentials.txt 管理员凭据,0600
/opt/crmeb/bin/crmebctl 控制脚本Docker 持久卷:
docker volume ls | grep '^local.*crmeb-local_'预期包含:
crmeb-local_mysql-data
crmeb-local_redis-data上传和 runtime 当前位于源码挂载目录:
/opt/crmeb/app/crmeb/public/uploads
/opt/crmeb/app/crmeb/runtime5. 端口隔离
| 端口 | 用途 |
|---|---|
| 80 | 宿主 Nginx;CRMEB 不占用 |
| 3306 | 宿主 MariaDB;CRMEB MySQL 不暴露宿主端口 |
| 6379 | 宿主 Redis;CRMEB Redis 不暴露宿主端口 |
| 8000 | 现有 zhou-web-1;CRMEB 不占用 |
| 18081 | CRMEB Web,仅绑定 127.0.0.1 |
CRMEB PHP-FPM、MySQL、Redis、Workerman 只在 crmeb-local Docker 网络内通信。
6. 自启动策略
CRMEB 所有容器的 restart policy 均为 no。Docker/WSL 重启后不会自动恢复 CRMEB;需要执行:
sudo crmebctl startYoShop 同样保持 disabled,需要执行:
sudo yoshopctl start不要为了关闭某个项目 disable Docker、Nginx、MariaDB 或 Redis,它们属于共享基础设施。
7. 建议的日常顺序
只使用 CRMEB
sudo yoshopctl stop
sudo crmebctl start
sudo crmebctl status只使用 YoShop
sudo crmebctl stop
sudo yoshopctl start
sudo yoshopctl status两者同时运行
端口和数据库已经隔离,可以同时启动:
sudo yoshopctl start
sudo crmebctl start8. 数据备份
在重要配置或二次开发前,至少备份 CRMEB 数据库和 uploads。
数据库导出
sudo install -d -m 0700 /opt/crmeb/backups
sudo bash -c 'set -a; source /opt/crmeb/.env; set +a; \
docker exec crmeb-local-mysql-1 mysqldump \
-u"$MYSQL_USER" -p"$MYSQL_PASSWORD" \
--single-transaction "$MYSQL_DATABASE" \
> "/opt/crmeb/backups/crmeb-$(date +%Y%m%d-%H%M%S).sql"'上传文件备份
sudo tar -C /opt/crmeb/app/crmeb/public \
-czf "/opt/crmeb/backups/uploads-$(date +%Y%m%d-%H%M%S).tar.gz" uploads数据库恢复会覆盖数据,必须另行确认并先保留当前备份;不要把恢复命令做成无确认的一键操作。
9. 常见检查
sudo crmebctl doctor
sudo crmebctl status
curl -I http://127.0.0.1:18081/
docker compose --project-name crmeb-local \
--env-file /opt/crmeb/.env \
--file /opt/crmeb/compose.yaml ps若页面出现 500:
sudo crmebctl logs 300
sudo find /opt/crmeb/app/crmeb/runtime -type f -name '*.log' -print若 runtime 出现权限错误:
sudo chown -R 33:33 /opt/crmeb/app/crmeb/runtime /opt/crmeb/app/crmeb/public/uploads
sudo find /opt/crmeb/app/crmeb/runtime /opt/crmeb/app/crmeb/public/uploads \
-type d -exec chmod 0770 {} +
sudo find /opt/crmeb/app/crmeb/runtime /opt/crmeb/app/crmeb/public/uploads \
-type f -exec chmod 0660 {} +
sudo crmebctl restart10. 禁止事项
- 不要把
/opt/crmeb/.env或管理员凭据提交 Git。 - 不要把 CRMEB 映射到宿主
80/3306/6379。 - 不要运行
docker network prune或不带 project 限定的宽泛清理命令。 - 不要执行
docker compose down -v,除非已经备份且明确要永久删除数据库。 - 不要用停止 Docker 的方式停止 CRMEB,这会影响
zhou-web-1等其他容器。