1. 部署不只是上传文件:先搞清楚phpStudy和CRM系统的配合关系
我以前接过不少"帮我装个CRM"的活儿,发现大部分人对部署这件事有个误区:觉得把源码丢进网站目录就完事了。结果要么打开首页一片空白,要么数据库连接失败,要么登录进去全是404。其实部署一套PHP的CRM系统,本质上是在做三件事的匹配:Web服务软件(Apache/Nginx)负责接收HTTP请求并交给PHP解析,PHP解释器负责执行CRM的代码逻辑,MySQL负责存取客户数据。三者的版本和配置必须互相兼容,系统才能跑起来。
符号象CRM这类国产轻量级客户关系管理系统,核心功能和主流PHP开源CRM差别不大:联系人管理、销售机会跟踪、跟进记录、合同回款、数据看板这些模块,底层都是标准的PHP加MySQL组合。也正因为如此,它对运行环境的要求非常主流——PHP 7.x以上版本、MySQL 5.7以上、需要curl和fileinfo扩展、需要伪静态规则支持。这些恰恰是phpStudy最擅长提供的东西。
选择phpStudy来做这件事,看中的不只是"安装简单"这个表面优点。它真正的价值在于提供了同一台机器上多版本切换的能力。同样一套CRM,有的跑在PHP 7.2上正常,有的必须用PHP 7.4才不报错,有的甚至要开PHP 8.0才能兼容新版本框架。phpStudy的PHP版本管理面板就像工具箱里的一套内六角扳手,不同规格随时换,不用装一堆独立环境在系统里打架。再加上它对MySQL 5.7和MySQL 8.0的同时支持,基本覆盖了市面上绝大多数CRM系统的运行要求。
在动手之前,你先要有一个判断:这套CRM是基于传统PHP写法还是基于现代框架(比如ThinkPHP、Laravel)开发的。两种类型在部署细节上有明显差异。传统写法大多不依赖伪静态,文件丢进去改个数据库配置就能访问;框架开发的系统则强烈依赖伪静态规则和PHP扩展,少配一个扩展就卡在安装界面。符号象CRM按我接触过的情况看,采用主流PHP框架开发的概率很高,所以部署时伪静态和扩展检查这两个环节,我会在后面重点展开。这个判断直接决定了你部署花十分钟还是折腾一下午。
还有一点容易被新手忽略:先装环境还是先建项目。很多人习惯先把CRM源码传上去,再去装phpStudy,装完发现phpStudy自带的MySQL和系统原有的MySQL端口冲突,或者PHP版本太低无法启动,来回折腾。正确顺序永远是先把phpStudy环境搭好、跑通探针页,再进入CMS的部署环节。后面我会按这个顺序一步步走,尽量让你少走弯路。
2. 环境规划:PHP版本、Web服务与数据库的选型思路
2.1 先选Web服务:Apache还是Nginx
phpStudy面板里默认提供Apache和Nginx两种Web服务,很多第一次用的人会卡在这个选择上。我直接说结论:部署符号象CRM,优先选Apache,等跑通之后再考虑要不要切到Nginx。
原因很简单。Apache对伪静态的支持是开箱即用的,通过.htaccess文件就能实现URL重写,不需要你额外理解和配置server块。而Nginx本身不认.htaccess,所有重写规则必须写到nginx.conf或者站点的conf配置文件里,配置语法也更严格,一个分号写错整个站点直接500。对于部署一个CRM系统的场景,Apache虽然并发性能比Nginx弱一些,但中小企业的客户管理需求,每天几百上千的访问量根本到不了性能瓶颈,稳才是第一位的。
如果你所在团队有足够的运维经验,或者明确的Nginx部署要求,那选Nginx也没问题。但注意,符号象CRM如果在文档里提供了伪静态规则,通常会同时给Nginx版和Apache版两份,你复制对应版本即可。没有文档的话,Apache的兜底能力更强——即使伪静态没配置好,系统多数还能以兼容模式运行,Nginx则经常会白屏给你看。
2.2 PHP版本不是越新越好
phpStudy在我看来做得最好的功能之一,就是PHP版本随意切换:从PHP 5.2到PHP 8.2,全部集成在同一个面板里。但版本多不等于随便选,这里面有一个兼容性逻辑要理解。
老系统用新PHP,最常见的坑是代码语法报错。PHP 5时代很多函数和写法在PHP 7.4以后就被移除了,比如mysql_*系列函数(PHP 7.0移除)、each()函数(PHP 8.0移除)、花括号访问字符串偏移(PHP 8.0移除)。如果你的符号象CRM是版本比较老的程序包,直接上PHP 8.x大概率会报一堆致命错误,你根本无从下手。
我用phpStudy部署过不少PHP系统,个人经验是分两种情况处理。如果你下载的符号象CRM是官方最新发布包,那就用PHP 7.4或更高版本,现在国内主流PHP框架最低要求一般是PHP 7.2以上,7.4是最稳妥的中间值。如果你拿到的是一份老旧的二次开发包或者网上流传的破解整合包,建议从PHP 7.2起步,不行再降到PHP 5.6,逐级探测。判断PHP版本是否合适的直接方法,不是看探针页,而是访问CRM的安装向导页面——如果不出现白色错误页或者语法报错,通常说明版本兼容没问题。
phpStudy面板里切换PHP版本的操作是:在"网站"列表中找到你的站点,点"管理"里的"PHP版本"下拉框,直接换版本,然后重启一下Web服务即可生效。这个操作可以反复做,不影响站点文件,可以用它快速排查版本兼容性问题。
2.3 MySQL的版本和初始密码:两个小坑先说清楚
phpStudy把MySQL 5.7和MySQL 8.0做成了两个独立选项,但你只能勾选启用其中一个(新版phpStudy其实允许同时启用,但端口要错开)。符号象CRM这类系统,用MySQL 5.7绝对够了,MySQL 8.0的很多新特性在CRM场景中根本用不上,反而会因为认证插件不同引发连接问题。
有个特殊情况说一下:如果你的系统要以MySQL 8.0作为数据库,而PHP版本又是7.2或更早,连接时极可能出现The server requested authentication method unknown to the client报错。这是因为MySQL 8.0默认用caching_sha2_password认证,而老版本PHP的MySQL驱动不认这个认证方式,需要你手动把MySQL用户改回mysql_native_password。为了少折腾,我建议直接用MySQL 5.7搭配PHP 7.4,这个组合兼容性最稳。
再提醒一个新手必踩的坑:phpStudy默认的MySQL root账号密码是root,但不同版本之间可能有差异,有些版本安装时让你自定义,有些默认无密码。如果你在安装CRM填写数据库信息时连接失败,先回到phpStudy面板的"数据库"工具里,用phpMyAdmin或者命令行验证一下root密码到底是多少。还有一种情况是MySQL服务根本没能启动,大部分原因是系统原有的MySQL服务占了3306端口,把原来的MySQL服务停掉,再去phpStudy里点启动。
环境规划做完之后,你得到的是一个"Apache + PHP 7.4 + MySQL 5.7"的组合,这套组合我实测下来跑符号象CRM完全没问题。确定好组合之后,下一步就是动手部署。
3. 部署实操:从创建站点到进入安装向导的全过程
3.1 第一步:创建站点,别直接把文件扔到WWW目录
很多教程上来就让你把CRM源码解压到phpStudy的WWW目录,然后访问localhost。这个做法不是说不行,但有个问题——如果以后你要在一台机器上部署多个系统,或者打算用独立域名访问,那WWW根目录方案就非常难管理。
我推荐在phpStudy面板里手动创建站点。打开phpStudy控制面板,找到"网站"选项卡,点"创建网站"。在弹出的表单里,填上你的域名(如果是本机测试,填crm.local,然后到系统hosts文件里加一行127.0.0.1 crm.local,这样模拟出来的访问方式和线上一致);端口保持80;PHP版本选7.4;创建站点的时候,phpStudy会自动给你建一个根目录,默认在C:\phpstudy_pro\WWW\crm.local之类的位置。把符号象CRM的源码包解压进这个目录。
创建站点这个步骤的核心作用是:phpStudy会为这个站点生成一份独立的配置文件。Apache版本会生成httpd-vhosts.conf里的一个VirtualHost配置段,Nginx版本会生成conf文件。这意味着你以后在这个站点下做的伪静态设置、PHP版本切换、SSL证书配置,都不会影响其他站点。一套干净的环境,后面排查问题会省一半力气。
3.2 第二步:把源码放进去,并确认目录结构
源码包的放置有几个细节值得注意。第一,解压方式:Windows下直接右键解压就行,但注意如果压缩包里面还有一层同名目录,也就是crm.local/crm/这种结构,你要么把内层目录的全部文件移动到站点根目录,要么访问时就要带子目录路径,很别扭。第二,路径不要带中文和空格:有些CRM代码里硬编码了路径,中文目录名会导致资源加载不了。第三,确认入口文件:大多数PHP系统入口是index.php,在站点根目录下,但也有些系统把入口放在public或web子目录里。这种情况Apache还能靠DocumentRoot和RewriteRule调整,新手最好还是把网站根目录直接指向入口文件所在目录,最省事。
放好文件后,访问你的测试域名(比如crm.local),正常情况下会跳转到安装向导页面。如果直接出现403(Forbidden),一般是目录权限问题,检查phpStudy的站点目录是否有IIS_IUSRS或Everyone的读取权限,没有的话右键目录选属性,在安全选项卡里加一下。如果出现404,八成是入口文件路径不对。
3.3 第三步:跑安装向导,重点看数据库参数怎么填
符号象CRM的安装向导流程和绝大多数PHP系统一样,分为"环境检查 → 数据库配置 → 管理员账号设置"三步。环境检查页面会列出每一项要求的PHP扩展是否开启:curl、fileinfo、openssl、pdo_mysql、mbstring,这几项是大多数现代PHP框架的标配。phpStudy默认开的扩展不一定全,特别是fileinfo经常是关的。如果检查页面提示扩展缺失,回到phpStudy面板,点击"设置 → PHP扩展",勾选并应用,然后重启Web服务。
数据库配置这一步,需要填的分别是:数据库主机(默认localhost,一般不用改)、数据库端口(MySQL默认3306)、数据库名(建议提前在phpStudy面板里手动创建一个,比如crm_db,安装向导再填这个名字)、数据库用户名和密码(用root和root即可,也可以到数据库工具里新建一个专用账号)。这里我想强调一个习惯:正式部署时不要用root账号连数据库,但本地测试无所谓,怎么顺手怎么来。
管理员账号设置,就是给你自己创建一个登录后台的账号,填姓名、密码、邮箱。密码建议设置复杂一点,别用123456,否则后面测试的时候你会怀疑是自己忘了密码还是系统出了bug。填完之后点安装,安装程序会写好config文件(不同系统命名不同,常见的有config.php、.env、database.php),然后跳转到登录页。到这一步,基础部署就算完成了。
3.4 第四步:登录后台,先快速验证三个核心页面
安装完成只是个开始,你必须确认三个核心页面能正常访问:后台登录页、登录后的首页仪表盘、客户列表页。如果这三个页面都通,说明CRUD(增删改查)基本链路没断,部署成功了一大半。
验证方法很简单:用刚才设置的管理员账号登录,看仪表盘是否显示统计数据;进客户列表,尝试新增一条测试客户记录,保存后看是否出现在列表里;再编辑这条记录,保存,刷新。新增、编辑、查询这三个操作分别对应了数据库的INSERT、UPDATE、SELECT,只要这三个操作正常,说明PHP到MySQL的联通没问题。如果新增时报数据库写权限错误,检查数据库账号权限;如果编辑后数据没变化,检查页面是否有缓存。
我见过不少部署完成后卡在这一步的人——登录进去首页正常,一点客户管理就报错或者跳404。这时候再去排查,多半是伪静态规则没生效,这是下一步要解决的核心问题。
4. 伪静态与目录权限:最容易让部署翻车的两个环节
4.1 伪静态到底解决了什么问题
打开一个CRM系统,点击"客户管理"按钮,URL可能是http://crm.local/index.php?m=customer&a=index,也可能是http://crm.local/customer/index。如果你是第二种简洁的URL形式,恭喜你,说明伪静态已经生效了。第一种带index.php问号参数的URL虽然也能访问,但有两个问题:一是URL难看,二是搜索引擎抓取不友好,三是某些系统的路由机制在非伪静态模式下会丢失参数,导致部分功能异常。
理解原理上,伪静态做的事很简单:当用户请求/customer/index这个路径时,Web服务器不会去磁盘上寻找customer目录下的index文件(这个目录根本不存在),而是按照预设的规则,把这个请求内部转交给index.php,再由PHP框架的路由解析出要执行哪个控制器和哪个方法。规则就是那张"内部转交表",没有这张表,Apache会老老实实去找物理文件,找不到就给你一个404。
4.2 Apache下配置伪静态:用代码块里的规则,一分钟搞定
如果你在phpStudy里用的是Apache,伪静态配置非常简单。符号象CRM系统的根目录下通常会有一个.htaccess文件,如果没有,自己新建一个,把下面这段内容写进去:
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>这段规则的意思是:当请求的路径不是一个真实存在的目录(!-d),也不是一个真实存在的文件(!-f)时,就把这个请求交给index.php去处理。[QSA]表示保留原有的查询字符串,[PT]告诉Apache把重写后的URL当作一次新的URL请求来解析,[L]表示如果匹配了就停止后续规则。对大多数PHP框架型CRM来说,这段规则直接通用。
写完.htaccess后,重启Apache让规则生效。然后刷新你的客户管理页面,看URL是否变成了简洁路径。如果还是404,检查一下Apache是否加载了mod_rewrite模块——在phpStudy的Apache配置里,默认是启用的,但你切换过版本的话可能被重置。在Apache的httpd.conf里搜索LoadModule rewrite_module,确认前面没有#注释。
4.3 Nginx下配置伪静态:别漏了这两行配置
如果你坚持用Nginx,伪静态配置比Apache稍麻烦一点,但也就三五行的事。在phpStudy的Nginx站点配置文件中,找到server块,在location里面加上:
location / { index index.php; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } }if (!-e $request_filename)这句的意思是:如果请求的路径在磁盘上不存在(不是真实文件也不是真实目录),就执行rewrite重写到index.php,last参数表示重写后重新进入location匹配,交给PHP解析。配置改完后,到phpStudy面板的重启Nginx,然后强制刷新页面测试。
Nginx配置里有一个容易踩的坑:有的版本location块里已经写了try_files $uri $uri/ /index.php?$query_string;,这种情况下你就不需要再加if重写了,直接用try_files更标准。所以配置前先看看原配置文件里有没有类似行,避免重复设置导致500错误。
4.4 目录权限:Linux和Windows的差别理解一下
符号象CRM在运行过程中需要写缓存文件、日志文件、上传的附件等,所以部分目录必须对Web服务进程开放写入权限。Windows下部署(也就是phpStudy主战场),通常不存在严格的用户权限问题,因为phpStudy默认以当前Windows用户运行,当前用户一般有完整读写权限。如果出现无法创建缓存目录之类的报错,更多是因为目录属性是"只读",或者杀毒软件锁定了文件。右键目录取消只读属性,或者把phpStudy的整个目录加入杀毒软件白名单,能解决大部分问题。
如果你是在Linux下使用phpStudy的Linux版(这个后面会提到),目录权限就非常重要了。部署完要把runtime、uploads、data这类目录的属主改为Web服务运行用户,一般命令是这样:
chown -R www:www /var/www/html/crm/runtime chmod -R 755 /var/www/html/crm/runtime理解上,www用户是Nginx或Apache-FPM的运行身份,只有它拥有写入权限,PHP代码才能正常创建缓存文件。如果不设置,安装向导能过,一进后台就报"目录没有写入权限"。
伪静态配好了,权限也对,那么一个CRM系统的部署就基本完整了。但部署中最消耗时间的往往不是正常的配置流程,而是各种莫名其妙的报错。下面把实际部署中最常遇到的几个故障链路完整复盘一遍。
5. 常见故障排查:我把踩过的坑一个个拆给你看
5.1 MySQL无法启动:端口冲突和DLL缺失要分清
phpStudy面板里搭建环境时,最常见的一个拦路虎就是点"启动MySQL"按钮后,状态一直是红色,或者过几秒变绿又变红。很多人以为是phpStudy坏了,其实90%的情况是端口冲突。
端口冲突的排查路径是这样的:先看3306端口是否被占用。命令行里执行netstat -ano | findstr 3306,看到输出结果里有LISTENING状态,记下最后一列的PID,再到任务管理器里查这个PID对应的进程是谁。如果是一个服务叫MySQL或者MariaDB,说明你系统里已经装了一套独立的MySQL服务,和phpStudy抢端口。解决方法是:运行services.msc,找到原来的MySQL服务,右键停止并设为"禁用",再去phpStudy里启动MySQL。
另外20%的情况是VC运行库缺失。phpStudy本身依赖微软的Visual C++运行库,如果系统精简过,启动MySQL时可能报MSVCR120.dll或VCRUNTIME140.dll缺失。这时候不要去网上随便下载DLL文件放进系统目录,正确的做法是安装微软官方的"Visual C++ Redistributable"合集,把2015到2022的x64和x86版本都装上,重启phpStudy即可。
5.2 安装向导白屏:把PHP报错显示打开
安装向导页面打开是空白,这个问题的本质是PHP运行时报错了,但错误信息被隐藏了,页面只输出了一部分内容或者什么都没输出。最直接的排查办法是开启PHP的报错显示,让错误信息直接打到浏览器上。
在phpStudy面板里,点击"设置 → PHP配置",找到display_errors项,改成On;再把error_reporting改成E_ALL。修改后重启Web服务,重新访问安装向导,这时候页面会显示具体的报错信息,比如某个PHP函数未定义、某个扩展没安装、某行代码有语法错误。看到具体报错,你就能对症下药。排查完问题后,记得把display_errors关回Off——正式环境下把错误显示给用户看,既不安全也影响体验。
如果你不想动全局配置,也可以临时在CRM入口文件index.php第一行加上:
ini_set('display_errors', 1); error_reporting(E_ALL);效果一样,而且只在当前站点生效。
5.3 安装时数据库连接失败:先排除MySQL服务本身
安装向导走到数据库配置那一步,点击下一步报数据库连接失败,这种情况下,问题一般不在CRM系统,而在MySQL服务端。你按这个顺序排查:第一,回到phpStudy面板,确认MySQL服务确实处于启动状态,不是靠记忆,而是看状态灯。第二,用phpStudy的phpMyAdmin工具试试能不能登录,能登录说明服务正常,问题出在账号密码,必须用正确的root密码;不能登录说明服务有问题,回到前面端口冲突的排查流程。第三,确认数据库名已经创建——有些安装向导不会自动创建数据库,只会连接你填的库名,库不存在自然连接失败。
有一个细节很多人会卡住:符号象CRM的安装向导填的"数据库主机"这一项,如果填localhost不行,试试改成127.0.0.1。虽然两者通常等价,但极少情况下PHP的MySQL驱动解析localhost会走socket方式,Windows下不支持或者路径不对,就会出现"本地连接失败"。改成127.0.0.1强制走TCP/IP协议,问题就没了。
5.4 登录后台就404:伪静态和入口目录的联合排查
安装都顺利,但登录后点菜单全是404,这是最让人头疼的。先别急着怀疑系统有问题,按下面逻辑走一遍。第一,看浏览器地址栏URL:如果是http://crm.local/index.php/customer/index这种带index.php的URL,说明伪静态根本没生效,回到前面伪静态配置的部分检查规则和模块。第二,如果URL是http://crm.local/customer/index这样的简洁地址,但还是404,说明伪静态规则生效了,但重写目标错了——比如规则里写的是index.php,但你的系统入口文件在public/index.php,这时候要改的是网站根目录指向或者重写规则里的目标路径。
还有一个低温坑:站点配置里设置了禁止访问某些目录,比如phpStudy的默认配置可能对/data或/runtime目录设置了deny,而CRM的控制器恰好用了这个目录名,就会导致404。碰到这种,检查站点的location配置或.htaccess里有没有类似的deny规则。
5.5 页面能开但样式全是乱的:检查伪静态和资源路径
登录进去了,页面文字都在,但CSS样式、图片全挂,整个页面就像没穿衣服。这个问题的本质是:HTML文档正常输出了,但文档里引用的CSS和JS文件加载失败。排查办法是浏览器F12打开开发者工具,切到Network面板刷新页面,找出404状态的资源,看它的URL路径。
路径不对的常见原因有两个。一是伪静态配置不正确,导致框架生成的资源URL带了不该带的路径前缀;二是系统配置里的站点URL填写错误,比如安装时填的是http://localhost,但你实际用http://crm.local访问,资源路径就全偏了。解决办法:进后台找到站点配置项或者打开系统的配置文件,把站点URL改成实际的访问地址,保存后刷新页面。如果你用的是框架型CRM,这一步叫"修改应用URL"或"配置APP_URL"。
这些故障在实际部署中我不敢说你一次都碰不到——反正我第一次部署就栽在伪静态上,但排查逻辑捋清楚了,每次报错都指向一个明确的检查项,部署就会从"碰运气"变成"按清单完成"。
6. 部署完成之后的收尾:备份策略、安全设置和性能微调
6.1 立即做一次完整的备份,养成肌肉记忆
部署成功的那一刻,是你整个过程中最有把握的时刻——数据库里还没有太多数据,系统状态完全可控。这时候立刻做一次完整备份,是我对所有项目的建议。备份分两部分:站点文件和数据库。
站点文件的备份很简单,直接把站点根目录整个压缩成一个zip包就行;数据库备份可以到phpStudy面板自带的工具区,用phpMyAdmin导出SQL文件,或者用命令行mysqldump导出。我个人的习惯是两者都要:站点文件备份解决代码层面的问题,SQL备份解决数据层面的问题。把备份文件放到一个和工作目录不同的位置,比如D盘专门建个backup文件夹,别放在WWW目录里,避免被误删。
备份的意义在于:接下来你做的任何配置调整、模块升级、风格修改,万一搞坏了系统,能快速回到当前这个可用状态,而不是从零开始重新部署一遍。
6.2 安全设置:改默认后台路径,限制文件上传类型
符号象CRM无论功能多好,默认安装的后台入口和数据库配置都存在被扫描的风险。本机测试可以无所谓,但如果你打算把系统放到公网上,或者部署到一台能被局域网其他机器访问的电脑上,下面几个安全项别跳过。
第一,修改后台登录入口。大多PHP CRM支持自定义后台入口文件名或访问路径,在系统配置里改成一个不常见的名字,比如从admin改成xd_admin,能有效降低被扫描工具直接找到后台的概率。第二,修改数据库连接账号密码。安装时如果你用的是root,部署完成后到MySQL里创建一个只拥有这一个库权限的新账号,修改系统的数据库配置文件,把root账号换下来。第三,处理安装目录。大多数系统安装向导的上限是安装完成后提示你"删除install目录",或者系统会自动生成一个install.lock文件防止重新安装。确认一下这个锁是否存在,如果系统没自动处理,手动把install目录改名,防止别人重新运行安装程序覆盖你的数据。
6.3 性能微调:opcache和MySQL缓冲池
部署完成后如果觉得访问速度不够快,先别急着怀疑服务器配置不够。对于符号象CRM这种PHP应用,前端响应慢更多是PHP解释和执行层面的问题。phpStudy自带的PHP默认没开opcache,你可以在PHP配置里打开扩展,并设置以下参数:
[opcache] zend_extension=php_opcache.dll opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0opcache的功能是把PHP源码编译后的opcode缓存到内存里,第二次访问同一个PHP文件时,直接执行缓存结果,不需要重新编译和解析。对于CRM这种大量页面基于同一个框架循环调用的场景,这个优化非常立竿见影,实测能带来30%到50%的响应提升。注意validate_timestamps改成0后,修改代码不会自动生效,需要手动清opcache或重启PHP。如果是开发调试阶段,这一项保持1即可。
MySQL的缓冲池对CRM这种数据库操作频繁的系统影响也很大。在MySQL配置文件my.ini里,找到innodb_buffer_pool_size,默认值一般比较保守,你可以按机器物理内存的50%左右调整,比如8GB内存的机器设成4G。改之后重启MySQL生效。数据量小的时候你可能感觉不到差别,但客户数据积累到几十万条以后,这个参数的调整直接关系到列表页的响应速度。
6.4 iframe引用问题:一个容易被忽略的登录状态坑
最后说一个我在实际部署中踩过、但很多教程不会提的坑:CRM后台可能因为X-Frame-Options设置,无法被iframe嵌套。如果你后续有需求要把CRM嵌入到公司门户网站或者OA系统里,用iframe的方式展示,就会发现登录页面要么打不开,要么打开了但无法使用。这是系统为了防点击劫持而做的安全设置。
解决办法是,在Web服务层对特定页面放行iframe。Apache通过响应头设置取消,Nginx在配置里加一句add_header X-Frame-Options SAMEORIGIN;调整为同源可嵌,或者干脆对需要嵌入的页面不加这个头。需要说明的是,这样操作会降低安全性,只建议在内网环境中使用。如果你没有嵌入需求,保持默认设置就行,别为了"功能丰富"改动安全配置。
部署到这个程度,一个基于phpStudy的符号象CRM系统已经从"能装"做到了"能用、好用"。后续你要考虑的,就是根据实际业务去调整模块字段、配置审批流、给销售团队分配权限这些偏业务层面的工作了,技术部署这块基本可以告一段落。