迁移PHP版本到PHP7
分类:多线程

今天看到微博上说phpng也就是php7合并到master上了,大家都知道我是比较喜欢探讨最新版本的东西,看看有什么特性,我就忍不住升级去了,以前我的PHP版本是5.5.19,然后我就开始了。

在centos部署yii2 advanced框架

手头闲置了一个阿里云的云服务器,干脆拿来部署一个yii2 advance框架,之后也可以在上面搭建自己的个人博客。话不多说,撸起袖子开干。

本次部署需要达到的目标:

a、可访问的网站正式环境端口10080(因域名还没准备,就先用ip地址+端口访问)。

b、可访问的网站测试环境端口10081。

c、可通过Git进行版本管理与迭代。git推入到远端时,代码即时更新至测试环境。

PHP运行环境提前备好,安装apache、php、MySQL,composer、git等, 此类的教程很多可以尽情百度,保证php能正常在网页中执行,就可以开始安装yii2了,开工!

1、首先从yii2官网获取yii2_advanced的框架文件,解压至特定文件夹:

图片 1

解压后的目录如上图。

2、创建空的git仓库,为承载框架内容做准备。

a、进入到准备存放git的仓库:cd /mnt/git

b、初始化git仓库:git init --bare yzz.git

c、建立可以使用git的用户:useradd gituser ; passwd gituser

d、之后赋予git用户访问git仓库的权限:chown -R gituser:gituseryzz.git/

3、创建测试环境:

a、进入测试环境的目录:cd /mnt/test

b、clone刚刚创建的空git仓库:git clone /mnt/git/yzz.git

c、将正式环境目录下的文件拷贝至测试环境目录:cp -a /www/project/. project/ #注意这里的/www/project/后有一个点号,代表连同隐藏文件一并复制,-a则可以连同文件权限属性一并复制。

4、以上即填充好了测试环境的数据,但此时git仓库还是空的,我们将测试目录下的文件提交至git。

a、进入测试环境的目录:cd /mnt/test

b、提交当前所有文件:

git add .

git commit -m "first init"

git push

c、等提交完成之后用git log看看日志,已经提交成功:

图片 2

d、另外,为了让本地推入到远程的代码能自动同步至测试服,这里将test/project目录更改为git用户所有,以让git的hooks脚本可以更新此目录下的文件,执行:chown -R gituser:gituser /mnt/test/project

4、以上即完成了正式环境数据、测试环境数据及git环境的初始化。现在尝试在本地检出代码。在Windows的G:/xmapp/htdocs/执行git命令:

git clone gituser:xxx.xxx.xxx.xx:/mntgit/project.git project/

图片 3

等待clone完成,本地的文件即同步完成。

5、现在所有的基础数据都准备好了。离目标还有三件事:1、让正式服和测试服目录可以通过浏览器访问。2、正式服或测试服的yii框架初始化。3、当本地更改代码并通过git 完成push之后,代码需要自动同步至测试服。先来让正式服和测试服可访问:

a、修改服务器apache的http.conf,增加对10080及10081端口的监听。目前只需要yii2的前台部分可访问,将网站根目录定至frontend/web。如下为测试环境的apache配置,具体情况根据个人服务器环境进行配置:

图片 4

b、同时更改fpm的配置,在php_admin_value[open_basedir后面加上正式环境及测试环境的目录。

c、完成以上工作,重启apache和fpm,理论上就可以通过外部访问正式服和测试服。这时访问xxx.xxx.xxx.xx:10080就可以看到yii2输出的网页了,但因为yii框架并没有初始化,此时会提示错误。

6、初始化正式服和测试服的数据。如有必要,本地也可以初始化,方法都是一样,非常简单,此处以初始化正式服为例。进入正式服的project目录,执行:php init ,之后选择1(测试环境可选择0,便于开发过程中定位问题),二次确认“yes”,之后输入“all”,初始化即完成。此时访问正式环境的10080端口,就可以看到正常的yii2框架了:

图片 5

测试环境或本地的初始化也是一样,1个“php init”命令搞定初始化。

最后一个任务,git自动提交。当本地提交并push代码后,要可以在测试服立刻看到效果:

a、在/mnt/git/project.git/hooks中,新建post-receive文件:执行“cp -a post-update.sample post-receive“,打开post-receive,删除已有的所有内容,并写入以下3行命令:

git --work-tree=/mnt/test/project checkout -f

cd /mnt/test/project

composer dump-autoload

图片 6

保存后退出文件就ok了。之后只需在本地修改文件,用git推入远端即可在测试服看到效果,待测试服稳定,再发布至正式服。

后续需要使用数据库,则还要在project/common/config/main-local.php里填写数据库相关信息,可参考yii2的官方文档进行。

以上,作为本次操作的记录,希望对大家有所帮助

advanced框架 手头闲置了一个阿里云的云服务器,干脆拿来部署一个yii2 advance框架,之后也可以在上面搭建自己的个人博客。...

本文讲述了ubuntu14.04LTS安装nginx+mariaDB+php7+YAF的方法。分享给大家供大家参考,具体如下:

复制代码 代码如下:
yum install git
git clone  

ubuntu apt-get方式安装nginx

然后编译配置参数,我的博客服务器是腾讯云服务器,因为是博客配置比较低。如下:

参考:

复制代码 代码如下:
 单核 Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz
 内存 2G

下边是针对php5.5和phpNG版本的测试,当然我这是线上,也受网络环境的干扰,大家就看看的了,基准不对的哈。

首先

我的测试模拟的是然后开始100个并发, 100个请求的ab压测

in order to authenticate the nginx repository signature and to eliminate warnings about missing PGP key during installation of the nginx package, it is necessary to add the key used to sign the nginx packages and repository to the apt program keyring.

php5

下载密钥

图片 7

wget http://nginx.org/keys/nginx_signing.key

php7

然后添加

图片 8

sudo apt-key add nginx_signing.key

php5 的QPS是2.09
php7 的QPS是3.67

加入nginx的repository

当然在测试的时候php5的最高负载时3.0,php7的最高负载时2.05,当然现在还是php7-dev

cd /etc/apt/sources.list.d/
sudo vim nginx.list

所以PHP7的性能大家是可以看到的,只是我的服务器配置不给力测试的这个结果,大家可以自己测试看看

若安装稳定版本,则输入以下内容

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

若最新版本,则输入以下内容:

deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

然后安装

apt-get update
apt-get install nginx

安装完成

nginx -v
nginx version: nginx/1.8.0

MariaDB数据库安装

MariaDB是一个开源数据库且100%与MySQL兼容,目标是替代MySQL数据库。

MariaDB的背景 :

2008年,MySQL被后来被Oracle在2010年收购的Sun Microsystems收购了。 最初被Sun公司的收购由于符合项目的需要而受到MySQL社区的欢呼,但是这种情绪并没有持续太久,接下来被Oracle的收购,不幸期望远远低于预 期。许多MySql的开发者离开了Sun和Oracle公司开始新的项目。在他们中间就有MySQL的创建者以及项目长期技术带头人之一的Michael 'Monty' Widenius。Monty和他的团队创建了MySQL的一个fork版本并且命名它为MariaDB。

默认上MariaDB的包并没有在Ubuntu仓库中。要安装MariaDB,我们首先要设置MariaDB仓库。

设置 MariaDB 仓库

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.3GolFM9PZ5 --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
gpg: requesting key 1BB943DB from hkp server keyserver.ubuntu.com
gpg: key 1BB943DB: public key "MariaDB Package Signing Key <package-signing-key@mariadb.org>" imported
gpg: Total number processed: 1
gpg:        imported: 1
sudo add-apt-repository 'deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main'

安装 MariaDB :

sudo apt-get update
sudo apt-get install mariadb-server

在安装中,你会被要求设置MariaDB的root密码。

从命令行连接到MariaDB :

keyun@ubuntu-server:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 43
Server version: 10.0.23-MariaDB-1~trusty-log mariadb.org binary distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]>

MariaDB 服务

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

以上只是在Ubuntu上装完MariaDB,下面要设置MariaDB允许远程访问

1、如果Ubuntu有设置防火墙或者iptables规则的话,请自行打开

2、3306端口是不是没有打开?

使用nestat命令查看3306端口状态:

~# netstat -an | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。

解决方法:修改/etc/mysql/my.cnf文件。打开文件,找到下面内容:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。

重新启动后,重新使用netstat检测:

~# netstat -an | grep 3306
tcp    0   0 0.0.0.0:3306      0.0.0.0:*        LISTEN
  1. 把用户权限分配各远程用户。

登录到mysql服务器,使用grant命令分配权限

复制代码 代码如下:

mysql> grant all on . to 你的用户名如root@'%' identified by '你的密码';

完成后使用mysql命令连接,提示成功,为了确保正确可以再远程登陆测试一下。

安装PHP7

因为是最小化安装的ubuntu,先安装make

sudo apt-get install make

下载源码

sudo wget https://downloads.php.net/~ab/php-7.0.2RC1.tar.gz
sudo tar -zvxf php-7.0.2RC1.tar.gz
cd php-7.0.2RC1

根据鸟哥指示,安装gcc4.8

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量) 其实GCC 4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade

查看版本

gcc --version
gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

先安装依赖

sudo apt-get install libxml2 
sudo apt-get install libxml2-dev 
sudo apt-get install openssl 
sudo apt-get install libssl-dev 
sudo apt-get install curl 
sudo apt-get install libcurl4-openssl-dev 
sudo apt-get install libgd-dev 
sudo apt-get install libxslt-dev

因本机lib目录在/usr/lib/x86_64-linux-gnu

./configure –prefix=/usr/local/php –with-curl –with-freetype-dir –with-gd –with-gettext –with-iconv-dir –with-kerberos –with-libdir=lib/x86_64-linux-gnu –with-libxml-dir –with-mysqli –with-openssl –with-pcre-regex –with-pdo-mysql –with-pdo-sqlite –with-pear –with-png-dir –with-xmlrpc –with-xsl –with-zlib –enable-fpm –enable-bcmath –enable-libxml –enable-inline-optimization –enable-gd-native-ttf –enable-mbregex –enable-mbstring –enable-opcache –enable-pcntl –enable-shmop –enable-soap –enable-sockets –enable-sysvsem –enable-xml –enable-zip
sudo make
sudo make install
sudo cp php.ini-development /usr/local/php/lib/php.ini
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
sudo cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

最后一条命令,作用是php-fpm随系统自启动。

利用php自带的php-fpm管理工具,可以很方便的start,stop,restart
把管理工具从源码包里放到php/sbin文件夹里,方便使用

sudo cp ./sapi/fpm/init.d.php-fpm /usr/local/php/sbin/
sudo cd /usr/local/php/sbin/
sudo chmod 755 init.d.php-fpm

配置nginx与php-fpm后,通过phpinfo(),看到如下

 图片 9

至此,php7安装成功。

安装apache ab压测工具

sudo apt-get install apache2-utils

压测一下

echo "hello world"


ab -n 1000 -c 20 http://10.81.36.158:9528/

QPS 7000左右

接下来开启opcache

sudo vi /usr/local/php/lib/php.ini

找到opcache设置

添加以下内容

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

重启php-fpm

sudo kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid

或者

sudo /usr/local/php/sbin/init.d.php-fpm restart

再次测试,QPS上升到8000以上

开启HugePages

参考://www.jb51.net/article/85491.htm

再次测试,QPS偶尔能彪上10000

安装YAF

sudo wget http://pecl.php.net/get/yaf-3.0.2.tgz
sudo tar -zvxf yaf-3.0.2.tgz

解压缩以后, 进入Yaf的源码目录, 依次执行(其中PHP_BIN是PHP的bin目录):

sudo /usr/local/php/bin/phpize

报错:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决办法:

sudo apt-get install m4
sudo apt-get install autoconf
sudo apt-get install libpcre3 libpcre3-dev 

phpize执行后:

sudo ./configure --with-php-config=/usr/local/php/bin/php-config
sudo make
sudo make install
Installing shared extensions:   /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/

安装成功,修改php.ini,加入yaf扩展

extension=yaf.so

重启php-fpm,查看phpinfo()

 图片 10

安装yaf成功

PS:使用PDO过程中,出现 SQLSTATE[HY000] [2002] No such file or directory 错误

经查,是mysql.sock找不到

在phpinfo()中,看到pdo_mysql.default_socket的值是/tmp/mysql.sock

 图片 11

但是在服务器上并没有这个文件

通过sudo service mysql status 命令

* /usr/bin/mysqladmin Ver 9.1 Distrib 10.0.23-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Server version     10.0.23-MariaDB-1~trusty-log
Protocol version    10
Connection       Localhost via UNIX socket
UNIX socket       /var/run/mysqld/mysqld.sock
Uptime:         3 min 28 sec

找到sock文件的位置在/var/run/mysqld/mysqld.sock

于是在/tmp下 做个软链接

sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock

问题解决

通过localhost无法访问到数据库,但是通过IP可以

分析:这是典型的socket没有正确设置的情况。

连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127.0.0.1,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127.0.0.1也是分开设置的。当设置为127.0.0.1时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。

根据上面的sudo service mysql status命令

得到sock文件的位置在/var/run/mysqld/mysqld.sock

于是,修改php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

重启php-fpm

问题解决

希望本文所述对大家ubuntu服务器配置有所帮助。

您可能感兴趣的文章:

  • centos 7安装mysql5.5和安装 mariadb使用的命令
  • CentOS 7中成功安装MariaDB的方法教程
  • 在Ubuntu系统中安装MariaDB数据库的教程
  • Linux下安装MariaDB数据库问题及解决方法(二进制版本的安装)
  • mariadb的主从复制、主主复制、半同步复制配置详解
  • MariaDB配置双主复制方案
  • MariaDB(Mysql分支)my.cnf配置文件中文注释版
  • Windows Server 2016 服务器配置指南 之 MariaDB数据库环境搭建方法
  • CentOS 7.0服务器安装配置LAMP服务器(Apache+PHP+MariaDB)
  • Window7安装MariaDB数据库及系统初始化操作分析

本文由10bet手机官网发布于多线程,转载请注明出处:迁移PHP版本到PHP7

上一篇:PHP的cURL库简介及使用示例 下一篇:iostat命令详解,include类文件超时问题处理
猜你喜欢
热门排行
精彩图文