关于这篇文章,可能花较多的内容来解决WHMCS迁移后的乱码问题,大家可能要问,你这个标题不是写的WHMCS迁移到VPS的教程吗?其实,数据的迁移真的是一个简单的过程,所以我只是大概阐述,不过这个乱码的问题,却是一个令很多人纠结的事情。
Hostgator在本月对基本上所有的分销账户服务器进行了迁移和IP更换,并带来了大量的问题,可能影响到目前所有IDC销售的WHMCS主机,一些朋友就想算了,要么买个终身授权,要么就去用无视授权,受部分客户所托,我写一篇WHMCS从主机到VPS的迁移教程,请留意,本文提及的VPS编译的是军哥LNMP一键包最新版本。
整个搬迁的过程,我将他分为三个部分:备份→导入→调试。
备份篇
因为这里赵容所说的是从WHMCS主机迁移,所以备份非常的简单,登陆cPanel面板,选择文件菜单中的备份功能。
然后选择下载或者生成全部备份,这里,你可以选择备份在本地主目录,也可以备份到您的VPS或者服务器上,我这里直接备份到准备用来恢复的VPS上,更方便。
如果该VPS并未安装FTP,在这里备份也可以选备份目的地为安全副本(SCP),就是通过类似SSH直接备份到您的VPS上的目录。
注意,CP面板备份的压缩包中,我们仅需要了解两个内容的目录:
1、public_html,这个目录下有我们原本的所有的源码文件,在压缩包中homedir.tar压缩文件内;
2、数据库文件,这个是我们的数据库,在压缩包的mysql目录中,以您的数据库名称命名的一个.sql文件。
恢复篇
教程假定我们已编译LNMP及必要组件(如:ionCube,IMAP等),同时,新建虚拟主机您的WHMCS域名,在/home/wwwroot/下有了您建立的该域名的目录。
恢复我将它分为2个部分:
1、恢复文件。在VPS中命令解压压缩包中的homedir.tar,得到public_html文件夹,mv里面的内容到您建立的虚拟主机的文件目录/home/wwwroot/****,并修正目录权限;
2、恢复SQL。先登陆phpmyadmin,建立与我们之前WHMCS同名的数据库,数据库用户,密码(这里您也可以建立不同的,最后修改下配置文件即可,图省事的就知道建立一模一样的)。
接下来,在MySQL文件目录,用mysql –u 用户名 –p 数据库名 < 数据库文件,导入数据库。
调试篇
在调试篇的开头,我们说下乱码问题,先看一张截图:
如上图,恢复后,我们发现后台添加的中文内容,全部乱码的,包括网站标题,产品信息,邮件模板,等等。
在网络上搜索了一通,大部分包括两类,一个是解决跟我上面图中一样的乱码问题的,千篇一律是修改configuration.php,添加$mysql_charset = “utf8”;;另一个是密码乱码,导致后台无法登陆服务器和主机,这个是替换配置文件中的$cc_encryption_hash这一行内容。
很遗憾,这两个都无法解决WHMCS主机迁移到VPS上的乱码问题,第一个方案没有作用,第二个方案根本不适合,因为我们是直接恢复原来的文件,$cc_encryption_hash内容根本就是一模一样的。遇到问题,要举一反三。我将备份的数据库文件打开,发现数据库内容里面本身就是乱码的,phpmyadmin登陆到原来主机的数据库中,查看到的编码也是utf8,这就真的见鬼了。原因只有一个,原来的数据库编码根本就不是utf8,尝试远程强制编码为latin1导出数据库,再打开数据库查看,发现导出的数据库不是乱码了,看来,原来的数据库是latin1,并非utf8.
这样的话,我们可以有两种解决方式:一种,就是导出latin1之后转码,转为utf8再导入恢复;另一种更简单,直接修改configuration.php,添加$mysql_charset = “latin1”;,强制在新的环境也使用latin1。
另外,我尝试过在DA面板,CP面板恢复,都没遇到这种乱码问题,但是LNMP尝试过多台VPS,均为乱码。
请留意我以上并不是一个通用的解决方案,以上的过程只是告诉您遇到问题可以多角度的检查,不要看教程就死搬,照搬也要看自己的环境是不是一模一样。另外,Hostgator新服务器上的数据库导入可能不会乱码,旧服务器数据库的编码部分有类似问题。
乱码问题解决之后,我们转移到VPS上,还需要对下列问题加以修改或者处理:
1、在VPS上设定自动任务,原来使用主机是直接添加到时钟守护作业,现在在VPS上用crontab -e添加自动任务进程;
2、写每日自动备份脚本,原来在主机上只是偶尔备份,换到VPS上建议做每日备份,安全第一,脚本可修改原来的文章:VPS自动备份
3、如果有域名业务,登陆代理账户,修改授权IP为自己的VPS的IP;
4、如果公告啊,下载啊,帮助啊这些页面之前有伪静态的,就把whmcs在nginx下的伪静态规则写到conf,然后修改域名配置文件即可(这个也可以先弄好了,创建虚拟主机的时候直接就给定伪静态的文件名),我是开始就选的other,所以直接修改了other.conf的,下面是规则:
# Announcements
rewrite ^/announcements/([0-9]+)/[a-zA-Z0-9-]+\.html$ /./announcements.php?id=$1 last;
rewrite ^/announcements$ /./announcements.php last;
# Downloads
rewrite ^/downloads/([0-9]+)/([^/]*)$ /./downloads.php?action=displaycat&catid=$1 last;
rewrite ^/downloads$ /./downloads.php last;
# Knowledgebase
rewrite ^/knowledgebase/([0-9]+)/[a-zA-Z0-9-]+\.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;
rewrite ^/knowledgebase/([0-9]+)/([^/]*)$ /./knowledgebase.php?action=displaycat&catid=$1 last;
rewrite ^/knowledgebase$ /./knowledgebase.php last;
…………
建议做到一定基础的可以去买个独立授权,装在VPS上,配置SSL,开端口之类的都自己方便点,官方买个终身价格是249.95刀:www.whmcs.com
实在不行的,也可以用无视授权版本放在国内,或者荷兰啦这些抗诉的地区,迁移过程中遇到其他问题的,或者迁移后还有什么注意事项需要补充的,都可以留言我大家一起看看。