![22d6ef006a09aedb71918df7c1414048.png](https://i-blog.csdnimg.cn/blog_migrate/5a813fa7fe3f6475f0e1850d7f1c5cda.png)
读前声明:本文是面向已经有LAMP开发部署经验的同行,也是自己的一个经验分享,不提供基本的命令说明。初学者可以参考,但是不必太在意一些命令的细节,体会一下思路即可。
最近有服务器需要转场部署,原来的系统是LAMP开发的中等压力网站,而且采用了YII框架。在转场部署的过程中碰到了一些问题,本文作一个记录,也和同行分享一下,我们的目标是,避免掉坑不受伤,尽量不要掉到前辈已经掉进去的坑里。
第一部分,原环境的备份。
此处的备份,不仅包括原来的运行,而且连开发环境也同步备份进来,因此就包括如下部分:
1.1 Mysql
mysql因为数据量不是太大,所以直接用了mysqldump来作备份:
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
1.2 PHP代码
· cp –r 来源 目标
· tar cvzf 文件名 文件夹名
· tar xvzf 文件名
· 空目录下面解压缩
1.3 系统自动运行任务(crontab)
· crontab -l>~/crontab`date '+%Y%m%d'`.bak
· 此处的`是esc下面的那个符号,代表命令的执行。
1.4 SVN Server
svnadmin dump /data/SVN/REPO_NAME|gzip > ~/REPO_backup_yyyymmdd.gz
第二部分,新环境的一般性搭建,软件环境准备。
新的环境,建议用centos来作为正式部署环境。如果是私有开发环境的话,考虑到界面友好性,可以搭建Ubuntu环境,现在最新的LTS是Ubuntu 16.04 LTS。
安装好Ubuntu之后,其他必须的服务器环境为:Apache Mysql PHP SVN SSH
其中SSH是为了搭建基本的远程工作环境,在Windows客户端使用xshell加上winscp即可。
这些环境的安装,基本上配置了本地的package 源之后,就可以很方便的用apt-get install来安装了。我的本地源如下:
![9945f2b49a2cdb79339711478fc83466.png](https://i-blog.csdnimg.cn/blog_migrate/f716bebbb7fa7d9e2a48b7f5b90776ac.jpeg)
Figure 1 Ubuntu本地源
此处需要考虑的是PHP的版本,最新的PHP默认都安装PHP7,但是PHP7已经取消了mysql_connect之类函数的支持,所以有可能需要安装PHP5.6版本。因为我的代码用了mysql的函数,在验证PHP7不支持之后,删除了PHP7,重新安装了PHP5.6版本。
![7e119bfacf991537e164a131305c56c5.png](https://i-blog.csdnimg.cn/blog_migrate/7cd8bd2a8658c854f06094ab327b5193.jpeg)
Figure 2: 服务器软件package详情
第三部分:新环境下面的部署:
3.1 Mysql
· 先用mysql创建一个数据库
· create database XXXXX;
· mysql –u –p 数据库名 < 文件名
此处关于mysql的另外一个严重问题就是默认字符集的配置。随Ubuntu发布的默认mysql的character_set_server是latin1,如下图:
![5a5c611cdec11591c0d1dbacff1e840f.png](https://i-blog.csdnimg.cn/blog_migrate/b027a09bce98678877103efe8c4e9b39.png)
而一般情况下,我推荐所有的字符集配置都是utf8。所以这时需要修改默认字符集,我的版本是5.7,是在/etc/mysql/mysql.conf.d/mysqld.cnf文件里,如下图:
![69a9c06cba89b7eda156cdff81e411ad.png](https://i-blog.csdnimg.cn/blog_migrate/2d14523ba374eb7c77f139fc2f740510.png)
添加了:
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
修改之前,配置如图:
![5e43ca73e9ac7650506ddac2dda46cfb.png](https://i-blog.csdnimg.cn/blog_migrate/1fb7c9f57f043eee6d0e021fb3e62d99.jpeg)
修改,重启mysql之后,配置成功,如下图:
![cbc822affe2f671e5c35738e59f6589a.png](https://i-blog.csdnimg.cn/blog_migrate/f9eef6ebfffe54cac2f63e8eaa3fdd35.jpeg)
这样子client,connection,server三段的字符集统一,就不会再有乱码情况产生。
3.2 PHP与Apache的配置
我的习惯是把文件放入/data目录下,因为这样子可以为以后单独增加硬盘提供便利。因此,在把php文件解压到/data目录下之后,还需要配置apache2把www root指向该目录。
Apache2的配置和apache不一样,附上我的关键配置:
![3660a4692c0393c41b42be285297a75c.png](https://i-blog.csdnimg.cn/blog_migrate/4c0ea085f11e44f96700693cff12a1ab.jpeg)
Figure 3: Apache2.conf添加私有目录权限
把整个网站根目录指向修改:/etc/apache2/sites-enabled/000-default.conf
![06af9485a0c9ecc005859e47f37c804a.png](https://i-blog.csdnimg.cn/blog_migrate/b203255ab5760ccea21d14555e8af772.jpeg)
Figure 4: 000-default.conf修改DocumentRoot
3.3 crontab
这个不必多说,直接执行crontab –e编辑添加即可
3.4 SVN
· svnadmin create /data/SVN/zmngh-php
· gunzip –c XXX.gz > 备份文件
· svnadmin load zmngh-php < 备份文件
· 修改conf目录下面的svnserve.conf,然后修改auth passwd文件。
·
![5d476c1ec6bfce9a5321d98a97ab0962.png](https://i-blog.csdnimg.cn/blog_migrate/181830a4e74920f2d7f6986047f06eb9.jpeg)
· snvserve –d –r /data/SVN 就可以了。
· 然后在init.d下面写一个svnd.sh自动执行。
![2cf28fd3137263fecdc70cfad73f04a8.png](https://i-blog.csdnimg.cn/blog_migrate/39c61e6b6ac0d39125b08a222db03753.png)
Figure 5: svnd.sh
3.5 YII框架的移植。
因为网页代码使用了PHP框架,YII框架。但是YII框架对于URL的处理有自己的一套规则。其根本特点就是behind/index.php里面是整体框架入口。它的访问规则是依赖目录下面的.htaccess文件处理的,但是.htaccess会高压力下会引来可观的性能下降。所以建议不要使用.htaccess文件处理,而是直接在访问入口时明确指明。
比如我的behind下的.htaccess内容如下:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
那么就在访问时,直接加index.php字符串即可。放弃使用.htaccess,而且避免了换场部署时需要特别让apache处理.htaccess的设置。
第四部分:为方便部署而提倡的开发经验:
1 完全使用English+UTF8字符集。
服务器安装的时候,建议选择默认英文,这样子其实就是English+UTF8的字符集配置,已经提供了最大的统一性。Mysql与PHP的文件里面的中文字符都用UTF8保存。
这样子的好处是,不仅仅文件内容可以是中文,而且文件名也可以取中文名。
相应的客户端配置(xshell与winscp)如下:
![41512f98af42baa30a47de4d2e722022.png](https://i-blog.csdnimg.cn/blog_migrate/bae456a6476deed90c6cfd4eebb2838d.jpeg)
Figure 6: WinSCP设定UTF8
![4574dde4875cf4ffd3724db7c8849ce7.png](https://i-blog.csdnimg.cn/blog_migrate/4ee82bfed042ffd8af678ed223904000.jpeg)
Figure 7: Xshell设定UTF8
2 sql的语句不推荐复杂的sql,那种非常长的sql查询只会给自己带来麻烦,推荐使用简单的sql语句,复杂的逻辑处理,用php来完成即可。
其实这应该是一个最基本的编程理念:用最基础的,稳定的,可理解的标准化模块来搭建高楼大厦,而不是制造复杂的不好复制的特制形状建材。
以上。