简介
在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
8apt-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
安装phpbrew1
2
3
4
5curl -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
出初始化phpbrew1
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-fpm1
2phpbrew 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
4listen.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
7location ~ \.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
3phpbrew use 5.5.38
phpbrew fpm start
sudo service nginx start
就开启开启php-5.5.38的测试了。
php版本修改
下载一个新的PHP版本,如5.6.311
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
4listen.owner = spoock
listen.group = spoock
user = spoock
group = spoock
将nginx的配置文件/etc/nginx/sites-available/default
修改如下:1
2
3
4
5
6
7location ~ \.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
3phpbrew 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的用户和用户组的概念之后,希望能够有一个完善的解决方法,不需要手动地修改这些文件。