最近总当机,IT帮网站用了1天时间成功搬家

最近一两周,IT帮的会员、BA学员和AM学员时不时反馈网站打不开、敏捷个人APP登录不了,有时候又可以但是很慢,还有的时候电信能访问而联通网络访问不了。

这个体验可不好,于是前天想把站点和APP后台都挪一下窝,于是在腾讯买了个云主机,开始网站搬迁。

在过程中学习,以下是这次搬迁中的技术问题和解决记录,说不定对一些人有帮助,也可以给自己做个备份,以便之后再次搬迁时查看。

购买云主机,安装系统

在腾讯云选了配置,付钱就OK了。因为我没学过Linux啊,以前都是在window上干活,工作中服务器端我也不需要自己去做,我提出需求即可。所以云主机购买时我选择的是window系统,因为总觉得这样搬移我的工作量就可以少。

不过我不喜欢重复,所以想换成CentOS系统。从window切换到centos系统会更改系统盘大小之类的,要下工单由后台重新分配主机。没过多久给我重新分配安装了CentOS 6。通过腾讯云控制台登录,感觉网页操作有点慢,于是想着远程命令行操作。我的是Mac机,于是百度了“Mac CentOS 远程操作”,知道通过终端SSH就能访问,于是通过SSH进行了远程操作。

因为没学过linux,不熟悉命令行啊,于是想弄个图形桌面是不是更容易上手呢。于是网上查了一些如何安装图形界面。操作了几次,死机几次,重装了几次。后来想干脆从CentOS6重装到CentOS7.2,虽然网上有人说CentOS7可能会对熟悉的人有些不方便。不过我反正都不会,于是选择装最新版,所以自己重新安装了CentOS7系统。

从CentOS6切换到7很快,一下子就好了。我接着通过Mac终端ssh命令访问重装后的CentOS7,不过提示错了:
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
Host key verification failed.
这个问题的解决方法如下:
finder->前往—>前往文件夹,输入 /Users/sw/.ssh/known_hosts,将文件中与ip地址相关的信息全部删除,保存即可。

这个问题搞定之后,通过SSH操作。因为我对linux的生疏,还是不习惯命令行,所以还是想要一个图形界面来远程操作,于是网上找如何安装系统桌面,又查找VNC怎么安装。按照不同文章所示进行操作,死机了几次,重装了几次。最后终于安装好了,不过最后发现基本也没有用到,因为我觉得得练习一下命令行操作,而且大部分教程也都是命令行的。

安装PHP环境

因为IT帮网站、敏捷个人APP后台都是基于PHP开发的,所以在搞定系统之后就开始时安装环境了。当然为了简单性,你也可以直接从服务市场获得做好的PHP环境镜像。不过我第一次弄这个,还是留给我自己吧。

上网搜索“CentoOS7 PHP环境”,出来很多相关文章,这个过程还是又折腾了一些时间。以下是正确操作的这一次的步骤:

卸载mariadb

CentOS7默认不用MySQL,而是mariadb了,虽说mariadb可以向后兼容MySQL,不过我还是想用MySQL,所以我先要卸载mariadb。

先列出所有被安装的rpm package

# rpm -qa | grep mariadb
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64

不同版本返回结果可能不一样,按照返回版本号卸载上面返回的内容

# rpm -e mariadb-libs-5.5.50-1.el7_2.x86_64

安装MySQL

CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安装之后重启mysql服务

# service mysqld restart

初次安装mysql是root账户是没有密码的,可以通过以下命令去设置密码:

# mysql -uroot
mysql> set password for ‘root’@‘localhost’ = password(‘mypasswd’);
mysql> exit

安装Apache

yum install httpd #根据提示,输入Y安装即可成功安装

  • systemctl start httpd.service #启动apache
  • systemctl stop httpd.service #停止apache
  • systemctl restart httpd.service #重启apache
  • systemctl enable httpd.service #设置apache开机启动

在客户端浏览器中打开服务器IP地址,会出现下面的界面,说明apache安装成功

安装PHP

yum install php #根据提示输入Y直到安装完成

安装PHP组件,使PHP支持 MySQL

yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

apache默认的程序目录是/var/www/html

复制网站文件

环境搭建好了,就要拷贝文件了。这次要从原有网站把完整目录拷贝到云主机,不过我怎么拷贝呢。想到最简单的办法就是通过FTP上传文件了。于是百度如何开启FTP服务。

yum install -y vsftpd

Mac下之前我用的是ForkLift访问FTP,这次我用它访问原有和现在的主机,并开始拖动上传文件。一切正常,但是访问网站发现网页不显示图片,原来是图片是中文名,而ForkLift对中文名显示乱码。

于是开始找有没有其他FTP工具,找了一个Transmit,发现还是乱码,又搜索如何解决乱码问题,发现在Transmit中的View菜单选择文本编码为GB 2312,接着拷贝正常,网页显示正常。

备份恢复数据库

文件拷贝完了,就这就是恢复数据库了。原本想着把备份好的SQL文件上传到服务器,然后再去执行。想着现在对安全性也要求不高,简单一些,使用Navicat远程访问服务器执行SQL文件进行数据库恢复。

这步一切正常。

让wordpress正常

文件和数据库好了并不就意味着结束了,后面还有很多问题需要解决。例如这个:

Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50550 Library:50635 in /var/www/html/blog/wp-includes/wp-db.php on line 1142

解决办法是:

  1. yum remove php-mysql
  2. yum install php-mysqlnd

Fatal error: Call to undefined function mb_convert_encoding() in /var/www/html/blog/wp-includes/class-wp.php on line 146

解决办法是:

  1. 首先安装 php-mbstring库文件:yum install php-mbstring
  2. 之后,修改/etc/php.ini文件,在里面加一句: extension=mbstring.so

因为这时候域名还没有重新解析,所以wordpress在切换域名时文章链接会链接到以前的域名,而不是现在的IP,所以又遇到如何更改网站域名的问题。后来找到了几个办法,采用了在wp_option表去更改网站地址。中间好像还遇到了一些问题,没有一一记录,现在也懒得去回忆了。

让codeigniter正常

敏捷个人APP是使用codeigniter框架开发的,本以为这个比较简单,拷贝文件即可。但是因为window和Linux操作系统的差别,以前的代码运行不了,而我又没安装调试环境,所以遇到问题也不知道什么原因。

于是用了各种办法,打开codeigniter的DB Debug模式,然后尝试简单更改源码再运行的方式去发现问题,终于最后都解决了。

其中有这么几个问题:

require_once找不到文件,这个主要是我在window下使用的是 require_once( ‘..\application\libraries\class-phpass.php’); 正常,但是Linux文件系统和window不一样,这样的代码在CentOS则是错误的,

解决办法是:

  • centos下需要 require_once(dirname(__FILE__).’/’.”../libraries/class-phpass.php”);

还有一个问题是 Unable to locate the model you have specified:*_model 的问题,这还是windows和linux对文件名的处理不一致导致,windows下文件名是不区分大小写的,但是Linux是严格区分大小写的。

解决办法是:

  1. 修改所有的model,文件名全部小写
  2. class model_name , model_name 只有第一个字母是大写,其余一律小写

域名重新绑定

搬家后自己再简单测试了一下,发现OK了,于是开始域名绑定。域名绑定网上找了找,相对简单,我到域名解析的管理页面,绑定了www.zhoujingen.cn和zhoujingen.cn到云主机的IP地址,等待一个小时左右就重新绑定成功了。

折腾1天终于搞定了新主机

虽然问题一个接一个,不过有网络,这些也不是什么大问题,终于在1天后主机搞定了。IT帮网站、敏捷个人网站、敏捷个人APP均已成功搬家,大家仍旧按以前方式访问,所有改变都只是在后台而已。

以此记录一下这个过程,以便后期再次搬家时参考,也对那些PHP环境从window搬迁到Linux的人有帮助。

发表评论