phpbrew安装教程

简介

在windows环境下一般使用使用phpstudy切换php的版本,后来看到P牛提到使用phpbrew在Linux环境下管理php的版本,php7 + nginx + mysql 安装小计,但是在缺少细节。最近我也尝试在ubuntu1604上安装phpbrew。网上的安装说明都是针对Ubuntu 13.04 和 14.04,缺乏16.04的安装教程。而我希望搭建一个LNMP环境。安装过程中还是踩了很多的坑,特写此篇文章记录。

准备工作

phpbrew的官方地址:https://github.com/phpbrew/phpbrew
在安装phpbrew之前,需要预先安装一些库。

1
2
3
4
5
6
7
8
apt-get install -y php
apt-get install -y php-pear autoconf automake curl libcurl3-openssl-dev build-essential libxslt1-dev re2c libxml2 libxml2-dev bison libbz2-dev libreadline-dev
apt-get install -y libfreetype6 libfreetype6-dev libpng12-0 libpng12-dev libjpeg-dev libjpeg8-dev libjpeg8 libgd-dev libgd3 libxpm4 libltdl7 libltdl-dev
apt-get install -y libssl-dev openssl
apt-get install -y gettext libgettextpo-dev libgettextpo0
apt-get install -y libicu-dev
apt-get install -y libmhash-dev libmhash2
apt-get install -y libmcrypt-dev libmcrypt4

安装phpbrew

1
2
3
4
5
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew

# Move phpbrew to somewhere can be found by your $PATH
sudo mv phpbrew /usr/local/bin/phpbrew

出初始化phpbrew

1
phpbrew init

将phpbrew加入到shell中

1
2
3
4
5
# 在 .bashrc中加入如下的代码
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc

# 更新bashrc
source .bashrc

安装LAMP环境

LAMP的安装可以参考DO的教程
在Ubuntu16.04的环境下,默认安装的是php7.

phpbrew安装php

安装php的命令如下:

1
phpbrew --debug install --stdout 5.5.38  +default +mysql +gd +fpm

其中 --debug --stdout意思将debug信息在控制台输出,同时安装了mysql和gd,fpm的扩展库。fpm库是一定要安装的库。
安装过程中就是一个漫长登录的过程。

安装完毕之后,切换至5.5.38的版本,启动php-fpm

1
2
phpbrew use php-5.5.38
phpbrew fpm start

查看sock的权限

1
ls -ahl /home/spoock/.phpbrew/php/php-5.4.45/var/run/php-fpm.sock

对用户权限的修改就是在安装过程中遇到的最大的坑。
正常情况下一般都是root权限,将其修改为当前用户的权限,比如我当前的用户是spoock,则运行

1
chown -R spoock:spoock ~/.phpbrew/php/

修改完毕之后,对应的所有的配置文件都需要进行修改
包括/home/spoock/.phpbrew/php/php-5.5.38/etc/php-fpm.conf/etc/nginx/nginx.conf
php-fpm.conf的修改:

1
2
3
4
listen.owner = spoock
listen.group = spoock
user = spoock
group = spoock

nginx.conf的修改:

1
user spoock;

nginx.conf的配置/etc/nginx/sites-available/default

1
2
3
4
5
6
7
location ~ \.php$ {
# # With php7.0-fpm:
fastcgi_index index.php;
fastcgi_pass unix:/home/spoock/.phpbrew/php/php-5.5.38/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

至此,所有的配置均已完成。选择需要使用的php版本,运行下面的命令:

1
2
3
phpbrew use 5.5.38
phpbrew fpm start
sudo service nginx start

就开启开启php-5.5.38的测试了。

php版本修改

下载一个新的PHP版本,如5.6.31

1
phpbrew --debug install --stdout 5.6.31  +default +mysql +gd +fpm

下载完毕之后,按照php5.5.38的方法,修改/home/spoock/.phpbrew/php/php-5.6.31/etc/php-fpm.conf

1
2
3
4
listen.owner = spoock
listen.group = spoock
user = spoock
group = spoock

将nginx的配置文件/etc/nginx/sites-available/default修改如下:

1
2
3
4
5
6
7
location ~ \.php$ {
# # With php7.0-fpm:
fastcgi_index index.php;
fastcgi_pass unix:/home/spoock/.phpbrew/php/php-5.6.31/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

运行下面的命令

1
2
3
phpbrew use 5.5.38
phpbrew fpm start
sudo service nginx start

至此,就可以实现从php-5.5.38切换到php-5.6.31的过程了、

总结

在这个问题上,折腾了2天,但是最终还是将这个问题解决了。但是对于Nginx的用户和用户组还是很清楚。
其实,上述的配置还存在的问题是,每次修改php版本的时候,都需要修改Nginx的配置文件。同时在新增加php版本时,需要修改对应的php-fpm.conf,这些问题都很繁琐。
待日后研究清楚了Nginx的用户和用户组的概念之后,希望能够有一个完善的解决方法,不需要手动地修改这些文件。