{{wikiTitle}}
项目运行说明
目录:
CRMEB多店系统 - 项目运行说明
一、概述
本文档详细介绍CRMEB多店系统的环境搭建、项目安装、前后端启动、调试等完整运行指南。
二、环境要求
2.1 服务端环境
| 组件 | 版本要求 | 推荐版本 | 说明 |
|---|---|---|---|
| PHP | >= 7.1 | 7.4 | 需开启swoole扩展 |
| MySQL | >= 5.7 | 8.0 | 推荐InnoDB引擎 |
| Redis | >= 5.0 | 6.x | 用于缓存和队列 |
| Nginx | >= 1.18 | 1.20+ | 或Apache |
2.2 PHP扩展要求
# 必需扩展
php -m | grep -E "pdo_mysql|redis|curl|gd|mbstring|openssl|swoole|fileinfo"
# 需要开启的扩展
- pdo_mysql # MySQL数据库支持
- redis # Redis缓存支持
- curl # HTTP请求
- gd # 图片处理
- mbstring # 多字节字符串
- openssl # 加密支持
- swoole >= 4.4 # 异步IO(可选,用于websocket)
- swoole_loader(3.0.8版本) #商业版用于解密
- fileinfo # 文件类型检测
- bcmath # 精确计算
- pcntl # 进程控制(队列需要)
2.3 前端环境
| 工具 | 版本要求 | 说明 |
|---|---|---|
| Node.js | >= 14.x | 推荐16.x LTS |
| npm | >= 6.x | 或使用yarn |
| yarn | >= 1.22 | 可选 |
三、后端安装部署
3.1 方式一:常规安装
第一步:下载代码
# 克隆项目
git clone https://gitee.com/ZhongBangKeJi/CRMEB.git
# 或解压源码包
unzip CRMEB_MULTI_v3.5.0.zip
cd CRMEB_MULTI_v3.5.0
第二步:安装PHP依赖
# 进入项目目录
cd /www/wwwroot/crmeb
# 安装依赖
composer install
# 如果composer较慢,可使用国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer install
第三步:配置环境变量
# 复制环境配置文件
cp .example.env .env
# 编辑配置文件
vim .env
.env 配置内容:
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = crmeb_multi
USERNAME = root
PASSWORD = your_password
HOSTPORT = 3306
CHARSET = utf8mb4
DEBUG = false
PREFIX = eb_
[LANG]
default_lang = zh-cn
[REDIS]
REDIS_HOSTNAME = 127.0.0.1
PORT = 6379
REDIS_PASSWORD =
SELECT = 0
第四步:导入数据库
# 创建数据库
mysql -uroot -p -e "CREATE DATABASE crmeb_multi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 导入数据
mysql -uroot -p crmeb_multi < public/install/crmeb.sql
第五步:配置Nginx
server {
listen 80;
server_name your-domain.com;
root /www/wwwroot/crmeb/public;
index index.html index.php;
# 前端静态资源
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 后端API
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问敏感文件
location ~ /\.(env|git|svn) {
deny all;
}
# 静态资源缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires 30d;
}
}
第六步:设置目录权限
# 设置存储目录权限
chmod -R 777 runtime
chmod -R 777 public/uploads
chmod -R 777 public/install
# 设置所有者
chown -R www:www /www/wwwroot/crmeb
第七步:访问安装向导
浏览器访问:http://your-domain.com/install
按照安装向导完成安装配置
3.2 方式二:Docker安装
docker-compose.yml 配置:
version: "3"
services:
crmeb:
image: leekay0218/crmeb-pro
container_name: crmeb
ports:
- "80:80"
- "9501:9501"
volumes:
- ./:/var/www
- ./help/docker-compose/nginx/conf.d:/etc/nginx/conf.d
depends_on:
- mysql
- redis
networks:
- crmeb-network
mysql:
image: mysql:8.0
container_name: crmeb-mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: crmeb_multi
ports:
- "3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- crmeb-network
redis:
image: redis:6
container_name: crmeb-redis
ports:
- "6379:6379"
volumes:
- ./data/redis:/data
networks:
- crmeb-network
networks:
crmeb-network:
driver: bridge
启动Docker容器:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 进入容器
docker exec -it crmeb bash
# 停止服务
docker-compose down
3.3 配置队列服务
# 启动队列监听
php think queue:listen --queue
# 后台运行(推荐使用supervisor管理)
nohup php think queue:listen --queue > /dev/null 2>&1 &
Supervisor配置:
; /etc/supervisor/conf.d/crmeb-queue.conf
[program:crmeb-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/crmeb/think queue:listen --queue
autostart=true
autorestart=true
user=www
numprocs=4
redirect_stderr=true
stdout_logfile=/www/wwwroot/crmeb/runtime/queue.log
# 启动supervisor
supervisorctl reread
supervisorctl update
supervisorctl start crmeb-queue:*
3.4 配置定时任务
# 编辑crontab
crontab -e
# 添加定时任务(每分钟执行)
* * * * * cd /www/wwwroot/crmeb && php think crmeb:timer >> /dev/null 2>&1
3.5 启动WebSocket服务(可选)
# 启动swoole服务
php think swoole start
# 后台启动
php think swoole start -d
# 重启服务
php think swoole restart
# 停止服务
php think swoole stop
四、前端安装部署
4.1 平台后台前端
# 进入前端目录
cd view/admin
# 安装依赖
npm install
# 或
yarn install
# 开发环境运行
npm run serve
# 或
yarn serve
# 生产环境打包
npm run build
# 或
yarn build
环境配置文件:
// view/admin/.env.dev(开发环境)
NODE_ENV=development
VUE_APP_BASE_API=/adminapi
VUE_APP_WS_URL=ws://localhost:9501
// view/admin/.env.production(生产环境)
NODE_ENV=production
VUE_APP_BASE_API=/adminapi
VUE_APP_WS_URL=wss://your-domain.com:9502
4.2 门店端前端
# 进入门店前端目录
cd view/store
# 安装依赖
npm install
# 开发环境运行
npm run serve
# 生产环境打包
npm run build
4.3 供应商端前端
# 进入供应商前端目录
cd view/supplier
# 安装依赖
npm install
# 开发环境运行
npm run serve
# 生产环境打包
npm run build
4.4 收银端前端
# 进入收银端前端目录
cd view/cashier
# 安装依赖
npm install
# 开发环境运行
npm run serve
# 生产环境打包
npm run build
4.5 移动端(UniApp)
# 进入移动端目录
cd view/uniapp
# 安装依赖
npm install
# 运行到H5
npm run dev:h5
# 运行到微信小程序
npm run dev:mp-weixin
# 运行到APP
npm run dev:app
# 打包H5
npm run build:h5
# 打包小程序
npm run build:mp-weixin
HBuilderX运行方式:
- 打开HBuilderX
- 导入
view/uniapp项目 - 运行 → 运行到浏览器/小程序模拟器/手机
五、开发环境配置
5.1 IDE推荐配置
PHPStorm/WebStorm:
- 安装PHP插件
- 配置PHP解释器路径
- 配置Composer路径
- 安装Vue.js插件
VSCode:
- 安装PHP Intelephense
- 安装Vetur(Vue工具)
- 安装ESLint
- 安装Prettier
5.2 本地开发环境
Windows(使用宝塔/phpStudy):
1. 安装宝塔面板或phpStudy
2. 创建站点,根目录指向项目的public目录
3. 配置PHP版本 >= 7.4
4. 安装必要的PHP扩展
5. 配置hosts文件
macOS(使用MAMP/Homebrew):
# 安装PHP
brew install [email protected]
# 安装MySQL
brew install mysql
# 安装Redis
brew install redis
# 安装Nginx
brew install nginx
5.3 调试配置
后端调试(Xdebug):
; php.ini
[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
前端调试(Vue Devtools):
- Chrome安装Vue.js devtools扩展
- Firefox安装Vue.js devtools扩展
六、常用命令
6.1 ThinkPHP命令
# 清除缓存
php think clear
# 查看路由列表
php think route:list
# 生成命令列表
php think list
# 创建控制器
php think make:controller admin/Test
# 创建模型
php think make:model Test
# 创建验证器
php think make:validate TestValidate
# 数据库迁移
php think migrate:run
6.2 队列命令
# 启动队列监听
php think queue:listen
# 指定队列名称
php think queue:listen --queue=order
# 查看失败任务
php think queue:failed
# 重试失败任务
php think queue:retry all
6.3 Swoole命令
# 启动服务
php think swoole start
# 后台启动
php think swoole start -d
# 重启服务
php think swoole restart
# 停止服务
php think swoole stop
# 查看状态
php think swoole status
6.4 前端命令
# 安装依赖
npm install / yarn install
# 开发运行
npm run serve / yarn serve
# 生产打包
npm run build / yarn build
# 代码检查
npm run lint / yarn lint
# 代码修复
npm run lint --fix
七、部署上线
7.1 部署检查清单
- [ ] 关闭调试模式 APP_DEBUG = false
- [ ] 配置生产环境数据库
- [ ] 配置生产环境Redis
- [ ] 打包前端资源
- [ ] 配置HTTPS证书
- [ ] 配置队列服务
- [ ] 配置定时任务
- [ ] 检查目录权限
- [ ] 配置日志轮转
- [ ] 配置服务器安全组
7.2 性能优化
# 开启OPcache
vim /etc/php/8.0/fpm/php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
# 优化Composer
composer dump-autoload -o
# 生成配置缓存
php think config:cache
# 生成路由缓存
php think route:cache
7.3 安全配置
# 禁止访问敏感目录
chmod 000 .env
chmod 000 .git
# 配置防火墙
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw enable
八、常见问题
Q1: composer install 失败?
解决方案:
# 使用国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 忽略版本要求
composer install --ignore-platform-reqs
Q2: 前端npm install报错?
解决方案:
# 清除缓存
npm cache clean --force
# 删除node_modules重新安装
rm -rf node_modules
rm package-lock.json
npm install
# 使用淘宝镜像
npm config set registry https://registry.npmmirror.com
Q3: Redis连接失败?
解决方案:
- 检查Redis服务是否启动
- 检查.env配置是否正确
- 检查Redis密码配置
- 检查防火墙端口
Q4: 队列任务不执行?
解决方案:
- 检查队列监听是否启动
- 检查Redis连接是否正常
- 查看runtime/queue.log日志
- 检查任务类是否存在语法错误
Q5: 文件上传失败?
解决方案:
# 检查目录权限
chmod -R 777 public/uploads
# 检查PHP配置
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 300
Q6: WebSocket连接失败?
解决方案:
- 检查Swoole服务是否启动
- 检查端口是否开放
- 检查Nginx反向代理配置
- 检查前端WebSocket地址配置
九、日志查看
# 查看PHP错误日志
tail -f /www/wwwroot/crmeb/runtime/log/*.log
# 查看Nginx错误日志
tail -f /var/log/nginx/error.log
# 查看队列日志
tail -f /www/wwwroot/crmeb/runtime/queue.log
# 查看Swoole日志
tail -f /www/wwwroot/crmeb/runtime/swoole.log
评论({{cateWiki.comment_num}})
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
{{cateWiki.page_view_num}}人看过该文档
评论(0)
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
11人看过该文档
{{item.user ? item.user.nickname : ''}}
(自评)
{{item.content}}
{{item.create_time}}
删除
搜索结果
为您找到{{wikiCount}}条结果
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}
位置:
{{path.name}}
{{(i+1) == item.catalogue.path_data.length ? '':'/'}}