{{wikiTitle}}
项目运行说明
CRMEB PRO 项目运行说明(前后端)
一、环境要求
1.1 后端环境要求
| 组件 | 最低版本 | 推荐版本 | 说明 |
|---|---|---|---|
| PHP | 8.0+ | 8.0 | 必须支持Swoole扩展 |
| MySQL | 5.7+ | 8.0 | 支持utf8mb4字符集 |
| Redis | 5.0+ | 6.0+ | 用于缓存和队列 |
| Swoole | 4.4+ | 4.8+ | 必须扩展,协程支持 |
| Composer | 2.0+ | 最新版 | PHP依赖管理 |
PHP扩展要求
- swoole >= 4.8.0
- redis
- pdo_mysql
- mbstring
- json
- openssl
- curl
- gd
- fileinfo
- zip
1.2 前端环境要求
后台管理端(Admin)
| 组件 | 版本要求 |
|---|---|
| Node.js | 16.x - 18.x |
| npm | 8.x+ |
| Vue CLI | 4.x+ |
移动端(UniApp)
| 组件 | 版本要求 |
|---|---|
| HBuilderX | 3.1.0+ |
| Node.js | 14.x+ |
| npm/yarn | 最新稳定版 |
二、后端部署运行
2.1 传统方式部署
2.1.1 安装依赖
# 进入项目根目录
cd /path/to/CRMEB_PRO_v3.5.1
# 安装Composer依赖
composer install --no-dev --optimize-autoloader
2.1.2 环境配置
# 复制环境配置文件
cp .example.env .env
# 编辑环境变量
vim .env
主要配置项:
# 应用配置
APP_DEBUG = false
APP_TRACE = false
# 数据库配置
DB_TYPE = mysql
DB_HOST = 127.0.0.1
DB_NAME = crmeb_pro
DB_USER = root
DB_PWD = your_password
DB_PORT = 3306
DB_PREFIX = eb_
DB_CHARSET = utf8mb4
# Redis配置
REDIS_HOST = 127.0.0.1
REDIS_PORT = 6379
REDIS_PWD =
REDIS_SELECT = 0
REDIS_TIMEOUT = 0
REDIS_PREFIX = crmeb_
# 缓存配置
CACHE_TYPE = redis
CACHE_PREFIX = crmeb_pro_
# 队列配置
QUEUE_NAME = crmeb_pro
2.1.3 目录权限
# 设置运行时目录权限
chmod -R 777 runtime/
chmod -R 777 public/uploads/
# 创建必要目录
mkdir -p runtime/{cache,log,session,temp}
mkdir -p public/uploads/{image,file,video}
2.1.4 数据库初始化
# 导入数据库
mysql -u root -p crmeb_pro < pc.sql
# 或使用安装向导
# 访问 http://your-domain/install 进行在线安装
2.1.5 启动服务
# 启动Swoole HTTP服务
php think swoole
# 后台运行
nohup php think swoole > /dev/null 2>&1 &
# 或使用Supervisor管理
Supervisor配置示例:
[program:crmeb-pro]
command=php /var/www/crmeb/think swoole
directory=/var/www/crmeb
autostart=true
autorestart=true
startsecs=3
startretries=3
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/crmeb-pro.log
2.2 Docker方式部署
2.2.1 使用Docker Compose
# 进入docker配置目录
cd help/docker-compose
# 启动所有服务
docker-compose up -d
docker-compose.yml 服务说明:
services:
# MySQL数据库服务
mysql_pro:
image: mysql:5.7
ports:
- 3366:3306
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_USER: 'crmeb'
MYSQL_PASS: '123456'
MYSQL_DATABASE: 'crmeb'
# Redis缓存服务
redis_pro:
image: redis:latest
ports:
- 6399:6379
# PHP应用服务
crmeb_pro:
build: ./php
ports:
- 20199:20199
command: php think swoole
2.2.2 单独构建Docker镜像
# 构建镜像
docker build -t crmeb-pro:3.5.1 .
# 运行容器
docker run -d \
--name crmeb-pro \
-p 20199:20199 \
-v $(pwd):/var/www \
crmeb-pro:3.5.1
2.3 定时任务配置
# 编辑crontab
crontab -e
# 添加定时任务(每分钟执行)
* * * * * cd /var/www/crmeb && php think timer >> /dev/null 2>&1
定时任务功能:
- 自动取消超时未支付订单
- 自动确认收货
- 自动好评
- 优惠券过期提醒
- 会员到期处理
2.4 队列服务启动
# 启动队列消费者
php think queue:work --queue crmeb_pro --daemon
# 使用Supervisor管理队列
[program:crmeb-queue]
command=php /var/www/crmeb/think queue:work --queue crmeb_pro --daemon
directory=/var/www/crmeb
autostart=true
autorestart=true
user=www-data
numprocs=4
process_name=%(program_name)s_%(process_num)02d
三、前端运行
3.1 后台管理端(Admin)
3.1.1 项目位置
后台管理端代码位于 view/admin/ 目录。
3.1.2 安装依赖
cd view/admin
# 使用npm安装
npm install
# 或使用yarn
yarn install
3.1.3 开发环境运行
# 启动开发服务器
npm run serve
# 默认访问地址
# http://localhost:8080
3.1.4 配置API地址
编辑 view/admin/.env.development:
# 开发环境API地址
VUE_APP_API_URL = http://localhost:20199
编辑 view/admin/.env.production:
# 生产环境API地址
VUE_APP_API_URL = https://your-api-domain.com
3.1.5 生产环境构建
# 构建生产版本
npm run build
# 构建后的文件在 dist/ 目录
# 将 dist/ 目录内容部署到Web服务器
3.2 移动端(UniApp)
3.2.1 项目位置
移动端代码位于 view/uniapp/ 目录。
3.2.2 使用HBuilderX
导入项目
- 打开HBuilderX
- 文件 → 导入 → 从本地目录导入
- 选择
view/uniapp/目录
配置API地址
编辑 view/uniapp/config/app.js:
// API请求地址配置
module.exports = {
// HTTP请求地址
HTTP_REQUEST_URL: 'https://your-api-domain.com',
// WebSocket地址
VUE_APP_WS_URL: 'wss://your-api-domain.com',
}
运行到浏览器
- 运行 → 运行到浏览器 → Chrome
运行到微信小程序
- 运行 → 运行到小程序模拟器 → 微信开发者工具
- 需要先配置微信开发者工具路径
运行到APP
- 运行 → 运行到手机或模拟器
3.2.3 命令行方式运行
cd view/uniapp
# 安装依赖
npm install
# H5开发模式
npm run dev:h5
# 微信小程序开发模式
npm run dev:mp-weixin
# APP开发模式
npm run dev:app-plus
3.2.4 打包发布
H5打包:
npm run build:h5
微信小程序打包:
npm run build:mp-weixin
# 输出目录:dist/build/mp-weixin
# 使用微信开发者工具上传
APP打包:
# 在HBuilderX中
# 发行 → 原生App-云打包
四、Nginx配置示例
4.1 后端API配置
server {
listen 80;
server_name api.your-domain.com;
# 强制HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.your-domain.com;
# SSL证书配置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 反向代理到Swoole
location / {
proxy_pass http://127.0.0.1:20199;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# WebSocket支持
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
# 静态文件
location /uploads {
alias /var/www/crmeb/public/uploads;
expires 30d;
}
}
4.2 后台管理端配置
server {
listen 443 ssl http2;
server_name admin.your-domain.com;
root /var/www/crmeb/view/admin/dist;
index index.html;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# Vue Router History模式
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
4.3 H5移动端配置
server {
listen 443 ssl http2;
server_name h5.your-domain.com;
root /var/www/crmeb/view/uniapp/dist/build/h5;
index index.html;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
try_files $uri $uri/ /index.html;
}
}
五、常见问题排查
5.1 后端问题
Swoole启动失败
# 检查Swoole扩展
php -m | grep swoole
# 查看PHP版本
php -v
# 检查端口占用
netstat -tlnp | grep 20199
# 查看错误日志
tail -f runtime/log/swoole.log
Redis连接失败
# 测试Redis连接
redis-cli -h 127.0.0.1 -p 6379 ping
# 检查Redis服务
systemctl status redis
数据库连接失败
# 测试MySQL连接
mysql -h 127.0.0.1 -u root -p
# 检查配置
cat .env | grep DB_
5.2 前端问题
npm install失败
# 清除缓存
npm cache clean --force
# 删除node_modules重装
rm -rf node_modules package-lock.json
npm install
# 使用国内镜像
npm config set registry https://registry.npmmirror.com
编译内存不足
# 增加Node内存限制
export NODE_OPTIONS=--max_old_space_size=4096
npm run build
跨域问题
确保后端配置了跨域中间件:
// app/middleware.php
return [
\app\http\middleware\AllowOriginMiddleware::class,
];
5.3 WebSocket连接失败
# 检查WebSocket端口
netstat -tlnp | grep 20199
# Nginx WebSocket配置检查
location /ws {
proxy_pass http://127.0.0.1:20199;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
六、性能优化建议
6.1 后端优化
# 开启OPcache
php.ini:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
# Redis配置优化
redis.conf:
maxmemory 2gb
maxmemory-policy allkeys-lru
6.2 MySQL优化
# my.cnf
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 1
query_cache_size = 128M
6.3 Swoole优化
// config/swoole.php
return [
'worker_num' => swoole_cpu_num() * 2,
'max_request' => 10000,
'max_coroutine' => 100000,
];
七、开发环境快速启动清单
7.1 后端启动清单
- ✅ 安装PHP 8.0+和Swoole扩展
- ✅ 安装MySQL 5.7+和Redis
- ✅ 执行
composer install - ✅ 复制
.example.env为.env并配置 - ✅ 导入数据库或运行安装向导
- ✅ 设置目录权限
- ✅ 执行
php think swoole
7.2 前端启动清单
后台管理端:
- ✅ 安装Node.js 16+
- ✅ 进入
view/admin/ - ✅ 执行
npm install - ✅ 配置API地址
- ✅ 执行
npm run serve
移动端:
- ✅ 安装HBuilderX
- ✅ 导入
view/uniapp/项目 - ✅ 配置API地址
- ✅ 运行到浏览器/小程序/APP
八、重要配置文件清单
| 文件路径 | 说明 |
|---|---|
.env |
环境变量配置 |
config/swoole.php |
Swoole服务配置 |
config/database.php |
数据库配置 |
config/cache.php |
缓存配置 |
config/queue.php |
队列配置 |
view/admin/.env.* |
后台前端环境配置 |
view/uniapp/config/app.js |
移动端配置 |
view/uniapp/pages.json |
小程序页面配置 |
注意事项
- PHP 版本:系统要求 PHP 8.0+,低版本 PHP 会导致语法错误,请先确认 PHP 版本
- Swoole 扩展:Swoole 扩展是必需的,安装时注意开启
--enable-openssl和--enable-http2选项 - 目录权限:
runtime和public/uploads目录必须有写权限,否则会导致缓存和上传失败 - 端口占用:Swoole 默认使用 20199 端口,启动前确认端口未被占用
- 前后端分离:后端 API 和前端是分离部署的,注意配置正确的 API 地址和跨域设置
- Node.js 版本:后台管理端要求 Node.js 16-18 版本,版本过高或过低可能导致依赖安装失败
- 小程序配置:微信小程序需要在微信公众平台配置服务器域名(request 合法域名)
- 生产环境关闭调试:生产环境务必将
APP_DEBUG设为false,避免暴露敏感信息
常见问题
Q: 执行
php think swoole提示 Swoole 扩展未安装?
A: 使用php -m | grep swoole检查扩展是否安装,若未安装需要通过 pecl 或源码编译安装 Swoole 扩展Q: 启动后访问报 502 错误?
A: 检查 Swoole 服务是否正常运行,查看runtime/log目录下的日志文件,确认 Nginx 反向代理配置是否正确Q: 前端
npm install安装依赖失败?
A: 尝试切换 npm 镜像源(npm config set registry https://registry.npmmirror.com),或删除node_modules和package-lock.json后重试Q: 移动端请求接口报跨域错误?
A: 检查后端AllowOriginMiddleware跨域配置,确认允许的域名列表是否正确Q: 小程序真机调试接口不通?
A: 确认 API 地址使用 HTTPS,且域名已在微信公众平台配置为合法域名Q: Docker 部署后数据库连接失败?
A: Docker 容器间通信使用服务名而非 localhost,检查.env中数据库主机是否配置为 Docker 服务名(如mysql_pro)
