Files
crmchat/部署文档.md
T
2026-08-11 22:22:10 +08:00

201 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CRMChat 客服系统 — Docker 部署文档
## 环境要求
- Docker 24+
- Docker Compose v2+
- 端口 18091(可自定义)
## 快速开始
### 国内网络(默认,镜像加速)
```bash
# 1. 复制环境变量
cp .env.docker .env
# 2. 一键启动
docker compose -f docker-compose.yml -f docker-compose.cn.yml up -d
```
### 海外网络
```bash
cp .env.docker .env
docker compose up -d
```
## 访问地址
| 入口 | 地址 | 账号 | 密码 |
|------|------|------|------|
| 后台管理 | `http://localhost:18091/admin` | admin | admin123 |
| 客服坐席 | `http://localhost:18091/kefu` | kefu | kefu123 |
| 用户端 | `http://localhost:18091/chat/index?token=82b739d20bd2d29dc67f112b7f193683` | — | — |
| Demo 页 | `http://localhost:18091/demo` | — | — |
## 容器架构
```
┌──────────┐ ┌──────────────┐ ┌───────────┐ ┌────────┐
│ Nginx │────▶│ PHP 7.4 + │────▶│ MySQL 5.7│ │ Redis │
│ :18091 │ │ Swoole 4 │ │ :3306 │ │ :6379 │
└──────────┘ └──────────────┘ └───────────┘ └────────┘
│ │
▼ ▼
静态文件 ThinkPHP 6 路由
admin/ /api/* /kefu /install
demo/ WebSocket /ws
```
| 容器 | 镜像 | 说明 |
|------|------|------|
| crmchat-nginx | nginx:alpine | 反向代理 + 静态文件 |
| crmchat-php | 自构建 (PHP 7.4 + Swoole 4.8 + Redis) | ThinkPHP 6 应用 |
| crmchat-mysql | mysql:5.7 | 数据库,数据持久化 |
| crmchat-redis | redis:alpine | 缓存/Session/WebSocket 状态 |
## 环境变量 (.env)
```bash
# 数据库
DB_HOSTNAME=mysql
DB_DATABASE=crmeb_chat
DB_USERNAME=root
DB_PASSWORD=root # 生产环境务必修改
DB_PORT=3306
# Redis
REDIS_HOSTNAME=redis
REDIS_PORT=6379
REDIS_PASSWORD=
# Nginx 端口
NGINX_PORT=18091
# MySQL root 密码
MYSQL_ROOT_PASSWORD=root # 生产环境务必修改
```
## 目录结构
```
kefu/
├── docker/
│ └── php/
│ ├── Dockerfile # PHP 7.4 + Swoole4 镜像
│ ├── entrypoint.sh # 启动脚本(自动生成 .env、导入数据库、启动 Swoole
│ └── swoole.php # Swoole 配置
├── nginx/
│ └── nginx.conf # Nginx 配置
├── crmchat/ # ThinkPHP 6 后端源码
│ └── public/
│ ├── admin/ # 管理后台前端(构建产物)
│ ├── demo/ # 用户端 Demo 页
│ └── install/
│ ├── crmeb_clean.sql # 数据库初始化 SQL(29 张表,含初始数据)
│ └── install.lock # 自动生成,跳过安装向导
├── docker-compose.yml # 海外版 Docker Compose
├── docker-compose.cn.yml # 国内镜像加速版(覆盖镜像源)
├── .env.docker # 环境变量模板
└── .env # 实际环境变量(gitignore
```
## 常用命令
```bash
# 启动
docker compose -f docker-compose.yml -f docker-compose.cn.yml up -d
# 停止
docker compose down
# 停止并清除数据(完全重置)
docker compose down -v
# 重启
docker compose restart
# 查看日志
docker compose logs -f php
# 进入容器
docker exec -it crmchat-php bash
```
## 数据库说明
初始化 SQL 文件 `crmchat/public/install/crmeb_clean.sql` 包含:
- 29 张 `eb_` 前缀表
- 完整初始数据:管理员、客服、角色权限、系统菜单、系统配置、应用 Token
- 启动时 `entrypoint.sh` 自动导入,首次启动即用,无需安装向导
APP_KEY 已固定,Token `82b739d20bd2d29dc67f112b7f193683` 重启不变。
## 注意事项
1. **客服需要打开 WebSocket** — 仅仅登录 API 不够,需要浏览器访问 `/kefu` 进入聊天面板建立 WebSocket 连接才能接收用户消息
2. **生产环境务必修改** `.env` 中的数据库密码和 MySQL root 密码
3. **APP_KEY 已固定** — 如需更换,修改 `entrypoint.sh``APP_KEY` 的值,并重新执行 `docker compose down -v && docker compose up -d`
## 模块打包部署
三个模块的分工与部署方式:
| 模块 | 功能 | Docker 部署方式 |
|------|------|-----------------|
| `admin/` | Web 前端(管理后台 + 客服面板 + 用户端) | 构建后复制到 `crmchat/public/admin/`Nginx 静态 serve |
| `crmchat/` | PHP 后端(API + WebSocket | Volume 挂载到容器,Swoole 运行 |
| `uniapp/` | 移动端客服 App | 不在 Docker 范围内,需单独打包 |
### admin/ — 管理后台前端
**构建产物已内置在 `crmchat/public/admin/` 中,直接可用,无需额外构建步骤。**
只有在修改了 `admin/src/` 下的源码后,才需要重新构建并提交:
```bash
cd admin
npm install # 首次或依赖变更后
npm run build # 构建 → dist/
# Windows
Remove-Item -Path "..\crmchat\public\admin\*" -Recurse -Force
Copy-Item -Path "dist\*" -Destination "..\crmchat\public\admin\" -Recurse
# Linux / Mac
rm -rf ../crmchat/public/admin/*
cp -r dist/* ../crmchat/public/admin/
# 确认提交
git add ../crmchat/public/admin/ && git commit -m "更新 admin 前端构建产物"
```
构建产物提交后,新环境 clone 即可直接用 Docker 部署,无需安装 Node.js。
### crmchat/ — PHP 后端
代码通过 volume 挂载到容器(`./crmchat:/var/www/html`),修改 `.php` 文件后需重启 PHP 容器才能生效:
```bash
docker compose restart php
```
### uniapp/ — 移动端客服 App
不在 Docker 部署范围内。使用 **HBuilderX** 打开 `uniapp/` 目录,即可编译打包为:
- Android APK
- iOS IPA
- 微信小程序 / 支付宝小程序 / 百度小程序 / 头条小程序
- H5 网页
打包前需在 `uniapp/pages/config/app.js` 中配置后端 API 域名和 WebSocket 地址:
```javascript
defaultDomainName: '你的后端域名', // 如 chat.example.com
defaultRequestType: 'https', // http 或 https
defaultWsType: 'wss', // ws 或 wss
```