安装系统
本次安装的是Centos7.3的最小化版本,以下操作在root用户下进行。在搭建完该环境后,笔者使用phpstorm作为开发ide,配置phpstorm使其可以直接调试虚拟机上的代码(即开发环境下代码是运行在虚拟机上的)。通过该方法,可以最大程度地确保开发环境与生产环境的一致性。(phpstrom xdebug的配置请参考官方文档phpstorm上使用debug)
网络配置
1.动态ip配置(nat或桥接)
进入/etc/sysconfig/network-scripts,找到网卡对应的配置文件(eg:ifcfg-ens0s3),配置下面的内容
TYPE=Ethernet
PROXY_MEHTOD=none
BROWSER_ONLY=no
BOOTPROTO=dpcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens0s3
UUID=ac3c6922-c33b-4f8b-8d7f-13a958b0ffff(这里按照已有的,不需要更改)
DEVICE=ens0s3
ONBOOT=yes
2.host-only网络配置
- 在vm中添加一个host-only网络,并将其分配给相应的虚拟机
- 进入虚拟机后通过ip addr命令可以看到多了一个网络接口(假设为enp0s8),为接口生成uuid(uuidgen enp0s8)(ac3c6922-c33b-4f8b-8d7f-13a958b0807f)
-
在/etc/sysconfig/network-scripts下添加相应的网络接口配置文件
TYPE=Ethernet PROXY_MEHTOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens0s8 UUID=ac3c6922-c33b-4f8b-8d7f-13a958b0807f DEVICE=ens0s8 ONBOOT=yes IPADDR=192.168.56.102 GATEWAY=192.168.56.1 NETMASK=255.255.255.0
3.重启网络
重启网络:systemctl restart network
软件源配置
笔者使用了阿里的软件源,按照https://opsx.alibaba.com/mirror的方法进行操作即可
添加epel源
方法1:
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
方法2:
wget http://d.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh ./epel-release-latest-7.noarch.rpm
yum clean all
yum makecache
更新系统
执行以下命令:
sudo yum update
sudo yum upgrade
虚拟机增强功能与共享文件夹创建
安装增强功能(guest additions)
1.安装kernel-devel和gcc :sudo yum install -y "kernel-devel-$(uname -r)" gcc bzip2
2.加载guest additions光盘
3.mkdir /mnt/cdrom
4.mount -t auto -r /dev/cdrom /mnt/cdrom
5.cd /mnt/cdrom
6.sudo sh ./VBoxLinuxAdditions.run(若执行失败按照提示安装相应的依赖)
若出现kernel-devel版本不符合要求的情况,可以到http://rpm.pbone.net下载相应的rpm包,然后安装(eg : rpm -Uvh kernel-devel-3.10.0-514.el7.x86_64.rpm)
添加共享文件夹
- 配置virtualbox的共享文件夹
- 进入centos后执行:mount -t vboxsf shared_file [共享文件夹名] [挂载的目录] (eg : mount -t vboxsf php /data/php)
-
设置开机自动挂载
1.在/opt/onbootscript/(自己新建该目录)下添加开机启动脚本(mount.sh,需具备可执行权限),包含以下命令 mount -t vboxsf php /data/php 2.在文件/etc/rc.local中(以root用户)追加 : /opt/onbootscript/mount.sh 3.chmod +x /etc/rc.d/rc.local
Selinux设置
开机关闭SELinux : 编辑/etc/selinux/config文件,将SELINUX的值设置为disabled
安装gcc和开发环境
yum groupinstall "Development Tools"
安装nginx
通过yum安装
yum install nginx
systemctl start nginx
查看yum安装的文件 : rpm -ql nginx
编译安装
- 下载相应的源码包并且安装依赖 : yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
- 进入源码目录,执行
./configure --user=nobody --group=nobody --prefix=/usr/local/nginx-1.xx.xx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
- 执行
make
- 执行
make install >& LOG_make_install
- 创建一个软链接/usr/local/nginx指向/usr/local/nginx-1.xx.xx:
ln -s /usr/local/nginx-1.xx.xx /usr/local/nginx
常用命令
- 修改配置后重新加载生效 :/usr/local/nginx/sbin/nginx -s reload
- 重新打开日志文件 : /usr/local/nginx/sbin/nginx -s reopen
- 测试nginx配置文件是否正确 : /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
- 启动nginx : /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 快速停止nginx : /usr/local/nginx/sbin/nginx -s stop
- 完整有序的停止nginx : /usr/local/nginx/sbin/nginx -s quit
-
其他的停止nginx 方式:
ps -ef | grep nginx kill -QUIT 主进程号 :从容停止Nginx kill -TERM 主进程号 :快速停止Nginx pkill -9 nginx :强制停止Nginx
- 平滑重启nginx :kill -HUP 主进程号
将nginx添加至systemctl
若是通过yum安装的,则已经可以使用systemctl控制nginx
- 修改nginx配置文件,开启pid :
pid /var/run/nginx.pid;
- 先关闭nginx服务
-
配置服务,在/usr/lib/systemd/system/新建nginx.service文件,vim编辑如下`
[Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop ExecQuit=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target 以上配置的说明 : 1.[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别 2.[Service]部分是服务的关键,是服务的一些具体运行参数的设置,这里Type=forking是后台运行的形式,PIDFile为存放PID的文件路径,ExecStart为服务的具体运行命令,ExecReload为重启命令,ExecStop为停止命令,PrivateTmp=True表示给服务分配独立的临时空间,注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错! 3.[Install]部分是服务安装的相关设置,可设置为多用户的`
- 服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下,然后执行(修改或新增文件需要执行以下语句才能生效)
systemctl daemon-reload
防火墙设置
因为防火墙的存在,所以默认情况下无法访问nginx监听的端口
对外开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
说明 :
- firewall-cmd : linux中提供的操作firewall的工具
- --zone : 指定作用域
- --add-port=80/tcp : 添加的端口,格式为:端口/通讯协议
- --permanent : 表示永久生效,没有此参数重启后会失效
重启防火墙
systemctl restart firewalld
安装mysql
MySQL的编译需要好久,笔者没有采用编译安装,安装方法采用了官方文档的方法 : 安装mysql
安装php
此次共安装了3个版本的php,包括php5.4,php7.0,php7.1
准备工作
- 下载源码包 : http://php.net/releases/
- 安装依赖包 :
yum install gcc gcc-c++ wget make libxml2 libxml2-devel openssl openssl-devel curl curl-devel libjpeg-devel freetype-devel bison autoconf libmcrypt libmcrypt-devel gd gd-devel mhash mhash-devel mcrypt
- 安装php语法分析器re2c :
yum install re2c
-
configure参考
[root@localhost php-src-php-7.1.6]# ./configure \ --prefix=/usr/local/php \ [php安装的根目录] --exec-prefix=/usr/local/php \ [php执行文件所在目录] --bindir=/usr/local/php/bin \ [php/bin目录] --sbindir=/usr/local/php/sbin \ [php/sbin目录] --includedir=/usr/local/php/include \ [php包含文件所在目录] --libdir=/usr/local/php/lib/php \ [php/lib目录] --mandir=/usr/local/php/php/man \ [php/man目录] --with-config-file-path=/usr/local/php/etc \ [php的配置目录] --with-mysql-sock=/tmp/mysql.sock \ [php的Unix socket通信文件] --with-mcrypt \ [是php里面重要的加密支持扩展库,linux环境下该库在默认情况下不开启] --with-mhash \ [Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启] --with-openssl \ [OpenSSL 是一个安全套接字层密码库] --with-mysqli=shared,mysqlnd \ [php依赖mysql库] --with-pdo-mysql=shared,mysqlnd \ [php依赖mysql库] --with-gd \ [gd库] --with-iconv \ [关闭iconv函数,种字符集间的转换] --with-zlib \ [zlib是提供数据压缩用的函式库] --enable-zip \ [打开对zip的支持] --enable-inline-optimization \ [优化线程] --disable-debug \ [关闭调试模式] --disable-rpath \ [关闭额外的运行库文件] --enable-shared \ [启用动态库] --enable-xml \ [开启xml扩展] --enable-bcmath \ [打开图片大小调整,用到zabbix监控的时候用到了这个模块] --enable-shmop \ [共享内存] --enable-sysvsem \ [内存共享方案] --enable-mbregex \ [开启多字节正则表达式的字符编码。] --enable-mbstring \ [开启多字节字符串函数] --enable-ftp \ [开启ftp] --enable-gd-native-ttf \ [开启gd库原有字体] --enable-pcntl \ [PHP的进程控制支持实现了Unix方式的多进程创建] --enable-sockets \ [开启套节字] --with-xmlrpc \ [打开xml-rpc的c语言] --enable-soap \ [开启简单对象访问协议简单对象访问协议] --without-pear \ [开启php扩展与应用库] --with-gettext \ [开户php在当前域中查找消息] --enable-session \ [允许php会话session] --with-curl \ [允许curl扩展] --with-jpeg-dir \ [指定jpeg安装目录yum安装过后不用再次指定会自动找到] --with-freetype-dir \ [指定freetype安装目录yum安装过后不用再次指定会自动找到] --enable-opcache \ [开启使用opcache缓存] --enable-fpm \ [开启fpm] --with-fpm-user=nginx \ [php-fpm的用户] --with-fpm-group=nginx \ [php-fpm的用户组] --without-gdbm \ [数据库函数使用可扩展散列和类似于标准UNIX dbm的工作] --enable-fast-install \ [为快速安装优化] --disable-fileinfo
安装php5.4
- 新建安装目录:/usr/local/php/php54
- 执行configure :
./configure --prefix=/usr/local/php/php54 --datadir=/usr/local/php/php54/doc --mandir=/usr/local/php/php54/man --with-config-file-path=/usr/local/php/php54/etc --with-mcrypt --with-mhash --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-zlib --enable-zip --disable-rpath --enable-shared --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --with-curl --with-jpeg-dir --with-freetype-dir --enable-fpm --enable-fast-install
- 编译 : make (可以通过make clean进行清理,编译完成后可以执行测试 make test)
- 安装 : make install >& LOG_make_install
-
配置php.ini
1.cp php.ini-production /usr/local/php/php54/etc/php.ini 2.修改php扩展目录所在位置 extension_dir="/usr/local/php/php54/lib/php/extensions/no_debug_non_zts_20160303" 3.修改时区 date.timezone=PRC
-
php-fpm配置(php-fpm.conf)
1.cp /usr/local/php/php54/etc/php-fpm.conf.default /usr/local/php/php54/etc/php-fpm.conf 2.修改配置 pid=run/php-fpm.pid error_log=log/php-fpm.log
-
nginx相应配置(nginx.conf)
1.在nginx.conf所在的目录下添加目录‘vhosts.d’(用于存放各个站点配置) 2.修改nginx.conf配置文件(include vhosts.d目录) #user nginx; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; # all real virtual machine,下面这一行引入vhosts.d目录下的所有站点配置 include vhosts.d/*.conf; } 3.在vhosts.d目录下添加站点配置文件(eg : www.php5.net) server { listen 80; server_name www.php5.net; access_log logs/www_php5_net_access.log main; error_log logs/www_php5_net_error.log; location / { root /data/code/php/vm/php5/; try_files $uri $uri/ /index.php?$args; index index.html index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/code/php/vm/php5/$fastcgi_script_name; include fastcgi_params; } }
安装php7.1
- 新建目录/usr/local/php/php71
- 执行 :
./buildconf --force
(为了防止出现错误 : cp:cannot stat 'sapi/cli/php.1': No such file or directory) - 执行configure :
./configure --prefix=/usr/local/php/php71 --datadir=/usr/local/php/php71/doc --mandir=/usr/local/php/php71/man --with-config-file-path=/usr/local/php/php71/etc --with-mcrypt --with-mhash --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-zlib --enable-zip --disable-rpath --enable-shared --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --with-curl --with-jpeg-dir --with-freetype-dir --enable-fpm --enable-fast-install
- 编译 : make (可以通过make clean进行清理,编译完成后可以执行测试 make test)
- 安装 : make install >& LOG_make_install
-
配置php.ini
1.cp php.ini-production /usr/local/php/php71/etc/php.ini 2.修改php扩展目录所在位置 extension_dir="/usr/local/php/php71/lib/php/extensions/no_debug_non_zts_20160303" 3.修改时区 date.timezone=PRC
-
php-fpm配置(php-fpm.conf)
cp /usr/local/php/php71/etc/php-fpm.conf.default /usr/local/php/php71/etc/php-fpm.conf pid=run/php-fpm.pid error_log=log/php-fpm.log cp /usr/local/php/php71/etc/php-fpm.d/www.conf.default /usr/local/php/php71/etc/php-fpm.d/www.conf listen = 127.0.0.1:9002(php54占用了9000端口)
-
在vhosts.d目录下添加站点配置文件(eg : www.php7.net)
server { listen 80; server_name www.php7.net; access_log logs/www_php7_net_access.log main; error_log logs/www_php7_net_error.log; location / { root /data/code/php/vm/php7/; try_files $uri $uri/ /index.php?$args; index index.html index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/code/php/vm/php7/$fastcgi_script_name; include fastcgi_params; } }
安装php7.0
php7.0的安装与php7.1基本没有差别,此处不再赘述。
启动和关闭php-fpm
1.启动 : sudo /usr/local/php/php71/sbin/php-fpm
2.关闭 : sudo kill -INT `cat /usr/local/php/php71/var/run/php-fpm.pid
php5.4,php7.0的操作方式是相同的
安装PHP扩展
各种php扩展的源码安装过程基本相似,主要可以概括成以下几个步骤:
- 安装相应的依赖(源码安装或通过yum等方式安装皆可)
- 进入源码目录执行phpize
- 执行configure
- 执行make
- 执行make install
- 修改php.ini配置,重启php
安装xdebug扩展
- 下载源码 : sudo wget http://pecl.php.net/get/xdebu...,解压,进入源码目录
- 运行phpize命令 :
/usr/local/php/php54/bin/phpize
(若报错 :Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.则安装autoconf(yum install autoconf),然后重新运行phpize) -
编译安装XDebug
./configure --enable-xdebug --with-php-config=/usr/local/php/php54/bin/php-config make && make install
-
配置 php.ini,追加以下内容
[XDebug] zend_extension = "/usr/local/php/php54/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so" xdebug.profiler_append = 0 xdebug.profiler_enable = 0 xdebug.profiler_enable_trigger = 0 xdebug.profiler_output_dir = "/tmp/php54/xdebug" xdebug.profiler_output_name = "cachegrind.out.%t-%s" xdebug.remote_enable = 1 xdebug.remote_handler = "dbgp" xdebug.remote_host = "10.3.20.151" 这个是ide所在机器的ip xdebug.remote_port = 9010 这个是ide监听的端口 xdebug.trace_output_dir = "/tmp/php54/xdebug" xdebug.remote_autostart = 1 xdebug.default_enable = 1 ;xdebug.idekey=PHPSTORM
- 新建目录“/tmp/php54/xdebug”并赋予相应的权限
安装imagick扩展
笔者安装该扩展用于实现pdf转图片
安装Ghostscript
下载相应的源码,解压后进入源码目录
./configure --prefix=/usr/local/ghostscript-9.18
make >& LOG_make
make install >& LOG_make_install
ln -s /usr/local/ghostscript-9.18/bin/gs /usr/local/bin/gs(创建软连接)
安装ImageMagick
通过yum安装
yum install ImageMagick ImageMagick-devel
源码安装
下载相应的源码,解压后进入源码目录
./configure
make >& LOG_make
make install >& LOG_make_install
安装imagick扩展
- 下载,解压,进入源码目录
- /usr/local/php/php54/bin/phpize
- ./configure --with-php-config=/usr/local/php/php54/bin/php-config --with-imagick
- make
- make install > LOG_make_install
- 修改自己的php.ini文件,然后添加magick扩展:vim .../php.ini 添加extension=imagick.so
- 重启PHP
安装memcached扩展
先安装依赖libmemcached库
通过yum安装
yum install libmemcached libmemcached-devel
源码安装
1.下载,解压,进入源码目录(https://launchpad.net/libmemcached/+download)
2.sudo ./configure --prefix=/usr/local/libmemcached
3.make && make test && sudo make install
- 下载,解压,进入源码目录
- sudo /usr/local/php/php54/bin/phpize
- sudo ./configure --enable-memcached --with-php-config=/usr/local/php/php54/bin/php-config
- sudo make && make install
- 修改自己的php.ini文件,然后添加memcached扩展:vim .../php.ini 添加extension = memcached.so
- 重启PHP
安装reids扩展
- 下载,解压,进入源码目录
- sudo /usr/local/php/php54/bin/phpize
- sudo ./configure --enable-redis --with-php-config=/usr/local/php/php54/bin/php-config
- sudo make && make install
- 修改自己的php.ini文件,然后添加redis扩展:vim .../php.ini 添加extension = redis.so
- 重启PHP