在Mac从零搭建PHP7开发环境,由于我不想直接在本地环境下直接操作所以使用Vagrant+VirtualBox在虚拟机来搭建开发环境,这样可以不用考虑开发环境各种配置对于本机的影响。
关于Vagrant可以参考这两篇文章:为什么要使用Vagrant和Vagrant使用简介我就不多做解释了。
如果你不想自己手动搭建整个环境可以直接使用Laravel Homestead,这是由Laravel框架开发者提供的一个已搭建好的跨平台(Windows、 Mac、 Linux)的PHP开发环境,内置了如Nginx、PHP7、 MySQL、 Postgres、 Redis、 Memcached、 Node等服务,只需在Vagrant下载入box文件做到了开箱即用。
绕了半天还是回归正题,从零搭建PHP7开发环境:
初始化虚拟环境
这里假设你已经在本机安装好了VirtualBox+Vagrant,进入自己的想要存放环境的目录并在终端下执行如下命令:
mkdir trusty64 && cd trusty64 # 创建并进入存放虚拟机的目录
vagrant init ubuntu/trusty64 # 使用Vagrant载入Ubuntu 14.04的box文件
上面的命令会从外网下载Ubuntu 14.04的box文件,所以会比较慢,需要耐心等待。执行成功后编辑trusty64目录下的Vagrantfile配置文件来修改一些虚拟机的配置。
由于网络原因box文件的下载可能出错,所以我这里提供我已下载的Vagrant Ubuntu 14.04 Box文件给大家,可以直接在trusty64
目录下使用如下命令载入:
vagrant box add phpdev ubuntu-trusty64-20170831.box
vagrant init
调整虚拟机配置
我习惯将配置文件中config.vm.box_check_update = true
修改为config.vm.box_check_update = false
,这样每次启动虚拟机就不会检查box文件是否有更新了。
Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80 这种访问方式,我更喜欢以固定IP的方式访问虚拟机,修改配置:
config.vm.network :private_network, ip: "192.168.99.64"
这样启动虚拟机后我们就能用 192.168.99.64 访问这台机器了,你可以把IP改成其他地址,只要冲突就行。
默认Vagrant是把当前目录即trusty64
映射到虚拟机的/vagrant
目录下,你可以改变这个配置:
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.synced_folder "./PHPCode" , "/code", :mount_options => ["dmode=777", "fmode=666"]
上面第一行关闭默认的目录映射,第二行将当前目录下的PHPCode
映射到虚拟机的/code
目录下。
启动虚拟机
vagrant up # 启动虚拟机
vagrant ssh # ssh登陆虚拟机
OK,现在咱们就有了一个纯净的Ubuntu 14.04的虚拟环境,接下来开始配置开发环境吧。
配置开发环境
sudo su # 切换为root用户
首先切换为root用户,因为后面有些安装步骤需要用到超级用户权限,我们在本地虚拟机配置开发环境对于安全性的要求没那么严格,所以这里直接切换成root用户减少麻烦。
安装Nginx
apt-get update # 更新软件源
apt-get install nginx
安装完成之后在本机直接访问http://192.168.99.64/
,可以看到Welcome to nginx!
的页面表示nginx安装成功。
编译安装PHP
apt-get install build-essential libtool libpcre3 libpcre3-dev openssl libssl-dev
apt-get install libxml2-dev libcurl4-gnutls-dev libjpeg-dev libpng-dev libmcrypt-dev libreadline6 libreadline6-dev libfreetype6-dev
安装一些编译要用到的包。
ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/libssl.so
解决缺少了openssl的问题。
tar zxvf php-7.1.9.tar.gz
cd php-7.1.9
下载PHP7的源码包,并解压。
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
配置PHP编译选项。
make # 编译
make install # 安装
这样PHP将被安装到/usr/local/php
目录,编辑/etc/enviornment
, 将/usr/local/php/bin
添加到PATH
变量,然后在终端执行source /etc/environment
更新环境变量。
cp <php-source-dir>/php.ini-development /usr/local/php/etc/php.ini
配置php.ini文件。
php -v
验证PHP安装成功。
配置PHP-FPM
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
拷贝创建FPM配置文件,并修改/usr/local/php/etc/php-fpm.d/www.conf
部分配置如下:
; listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock
; unix socket
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
初始化PHP-FPM服务脚本
cp <source-dir>/sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
FPM Installation and Configuration
修改部分/etc/init.d/php-fpm
为如下:
prefix=
exec_prefix=
php_fpm_BIN=/usr/local/php/sbin/php-fpm
php_fpm_CONF=/usr/local/php/etc/php-fpm.conf
php_fpm_PID=/var/run/php-fpm.pid
启动PHP-FPM服务
/etc/init.d/php-fpm start # start php-fpm
# /etc/init.d/php-fpm stop
# /etc/init.d/php-fpm reload
编辑/etc/rc.local
文件,在开机启动中加入PHP-FPM服务:
/etc/init.d/php-fpm start
···
exit 0
至此PHP-FPM配置成功。
创建phpinfo()脚本
vim /etc/nginx/sites-available/trusty64
ln -s /etc/nginx/sites-available/trusty64 /etc/nginx/sites-enabled/
创建Nginx虚拟主机配置文件,并在中输入一下内容:
server {
listen 80;
server_name trusty64.local; # 设置域名
charset UTF-8;
# 配置访问日志和错误日志
access_log /var/log/trusty64-access.log;
error_log /var/log/trusty64-error.log;
# 站点根目录
root /code/www/trusty64/public;
index index.php index.html;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 5000;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Prevents caching of css/less/js/images, only use this in development
location ~* \.(css|less|js|jpg|png|gif)$ {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
expires 0;
}
}
在虚拟机/code/www/trusty64/public
目录(位于映射的共享目录下)下创建index.php
,输入一下内容:
<?php
phpinfo();
重启nginx,使配置的虚拟主机生效
service nginx restart #
修改本机(不是虚拟机)的/etc/hosts
文件添加trusty64.local
的域名解析:
192.168.99.64 trusty64.local
打开本机浏览器访问http://trusty64.local/
可以看到phpinfo()
的输出,Nginx+PHP-FPM的开发环境已配置成功。
安装Mysql
apt-get install mysql-server mysql-client
注意在提示时输入root密码,安装完成后登陆Mysql为本机配置数据库访问权限。
修改Mysql配置文件:
vim /etc/mysql/my.cnf
# 把bind-address参数的值改成你的内/外网IP或0.0.0.0,或者直接注释掉这行.
# 重启Mysql使配置生效
service mysql stop
service mysql start
登陆Mysql为本机IP添加访问权限。
mysql -u root -p
mysql> use mysql;
mysql> update user set host='192.168.99.1' where user='root';
mysql> flush privileges;
mysql> select user,host from user;
然后就可以直接使用本机的数据库管理工具如Navicat
连接192.168.99.64
访问和管理虚拟机上的Mysql。
总结
至此我们在Vagrant的Ubuntu 14.04下搭建了LNMP的开发环境,可以在本机上直接编辑映射的共享目录下的脚本文件,通过虚拟来进行测试,做到开发与测试环境隔离,不必担心在本地搭建过多的服务引起的混乱。