跳到主要内容CRMEB v5.6.1 单商户应用部署指南:环境配置与进程守护 | 极客日志PHPSaaS
CRMEB v5.6.1 单商户应用部署指南:环境配置与进程守护
本文介绍 CRMEB v5.6.1 在 CentOS 7.9 上的完整部署流程。涵盖防火墙端口开放、LNMP 环境搭建(PHP 扩展及禁用函数配置)、MySQL 与 Redis 参数设置、Nginx 伪静态及 FastCGI 通信配置。重点讲解 Supervisor 管理消息队列任务、Workerman 长连接及定时任务的启动方法,并包含安全机制说明(如 PATH_TRANSLATED 风险)及前端调试步骤。
学习目标
完成本课程后,学习者将能够:
- 掌握 CentOS 7.9 安装最新版本 CRMEB v5.6.1 单商户应用部署
- 配置防火墙端口、PHP 扩展(fileinfo、redis)及禁用函数选项
- 设置数据库服务(MySQL、Redis)sql-mode 参数
- 理解 Nginx 与 FastCgi 通信方式(Unix Socket 方式、TCP 端口方式)
- 安装 Supervisor 管理消息队列任务
CRMEB v5.6.1 运行环境要求
官方文档要求的运行环境如下:
WEB: Nginx, PHP 7.4
Database: MySQL 5.7 (引擎:InnoDB)
Cache: Redis 5.0
Manager: Supervisor 4.3.0
Ports: 80, 21, 8888, 888, 443, 3306, 6379
PHP Extensions: fileinfo, redis
Disabled Functions: proc_open, pcntl_signal, pcntl_signal_dispatch, pcntl_fork, pcntl_wait, pcntl_alarm
Queue Command: php think queue:listen --queue (使用 Supervisor)
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown 转 HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
- HTML 转 Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
Long Connection:
sudo
-u
www
php
think
workerman
start
--d
Timer Task:
php
think
timer
start
--d
一、开放防火墙端口
开放防火墙端口以保证网络正常通信。以 80 端口为例,CRMEB 需要开放 80, 21, 8888, 888, 443, 3306, 6379。
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports
LNMP 一键安装
本文采用 lnmp2.2 一键安装集成包搭建开发环境。环境信息:CentOS 7.9 + PHP 7.4 + MySQL 5.7。
wget https://soft.lnmp.com/lnmp/lnmp2.2.tar.gz -O lnmp2.2.tar.gz && tar zxf lnmp2.2.tar.gz && cd lnmp2.2 && ./install.sh lnmp
成功安装后检查项包括 Nginx、MySQL、PHP、PHP-FPM。
查看 PHP 扩展是否安装 fileinfo、redis,并配置禁用函数 proc_open, pcntl_signal, pcntl_signal_dispatch, pcntl_fork, pcntl_wait, pcntl_alarm。
php -m | grep -E "fileinfo|redis"
在 php.ini 中设置 disable_functions 选项:
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,pcntl_signal,pcntl_signal_dispatch,pcntl_fork,pcntl_wait,pcntl_alarm
MySQL 需设置 sql_mode。如果 sql_mode 不生效,可尝试 sql-mode。
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
安装时可能遇到的问题
若遇到 HTTP Error 404,建议备份原配置文件并更换为阿里云镜像源。
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
cat > /etc/yum.repos.d/epel.repo <<EOF
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
EOF
yum clean all
yum makecache
FastCGI 模式下主要有两种连接方式:TCP 端口连接和Unix Socket 连接。
- Unix Socket:基于文件系统套接字,本地通信,性能更高。
- TCP 端口连接:基于 TCP/IP 协议,支持跨服务器部署。
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
Redis 安装、配置
安装 Redis 服务和扩展,设置密码和访问权限。
./addons.sh install redis
ps aux | grep redis
/usr/local/redis/bin/redis-server 0.0.0.0:6379
find / -name "redis.conf" 2>/dev/null
修改配置文件 /usr/local/redis/etc/redis.conf:
bind 0.0.0.0
requirepass m123456
protected-mode no
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /usr/local/redis/etc/redis.conf
sed -i 's/# requirepass foobared/requirepass m123456/g' /usr/local/redis/etc/redis.conf
sed -i 's/protected-mode no/protected-mode yes/g' /usr/local/redis/etc/redis.conf
下载 V5.6.1 源码包
将源码下载到 Web 服务器,注意文件权限。Web 服务器 root 参数设置为 /home/wwwroot/work/crmeb/public。
Nginx 部署 web 站点
配置伪静态和长连接,确保 Nginx 和 PHP 的所属用户和用户组权限正确。
server {
listen 80;
server_name www.work.com;
root /home/wwwroot/work/crmeb/public;
location / {
index index.php index.html;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ .php(.*)$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /notice {
proxy_pass http://127.0.0.1:40001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /msg {
proxy_pass http://127.0.0.1:40002/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
长连接、定时任务、消息队列
在 php.ini 中配置前请确认 disable_functions 不包含以下函数:proc_open, pcntl_signal, pcntl_signal_dispatch, pcntl_fork, pcntl_wait, pcntl_alarm。
1、设置客服长连接 启动 Workerman 服务
sudo -u www php think workerman start --d
php think timer start --d
yum install -y epel-release
yum install -y python-pip
pip install --upgrade pip
sudo pip install supervisor
sudo mkdir -p /etc/supervisor/conf.d
sudo echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim /etc/supervisor/supervisord.conf
[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
nodaemon=false
[program:think-queue]
command=/usr/bin/php /home/wwwroot/work/crmeb/think queue:listen --queue
directory=/home/wwwroot/work/crmeb/public
user=www
autostart=true
autorestart=true
stdout_logfile=/var/log/think-queue.log
systemctl daemon-reload
systemctl start supervisord
systemctl enable supervisord
systemctl status supervisord
supervisord -v
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start think-queue
sudo supervisorctl status think-queue
需要注意的安全机制
Nginx 配置中需注意 PATH_TRANSLATED 的安全风险,可能导致路径遍历攻击。现代 Nginx 和 PHP-FPM 默认配置了安全限制(如 open_basedir)。若出现 Access denied 错误,通常是因为开启了此参数,移除该参数即可解决问题。
location ~ .php(.*)$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
前端/调试
环境版本 Node v20.19.2,npm 11.6.2。