虚拟机上Centos7开发环境搭建(编译安装LNMP,多版本PHP共存,PHP扩展安装)

安装系统

本次安装的是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网络配置

  1. 在vm中添加一个host-only网络,并将其分配给相应的虚拟机
  2. 进入虚拟机后通过ip addr命令可以看到多了一个网络接口(假设为enp0s8),为接口生成uuid(uuidgen enp0s8)(ac3c6922-c33b-4f8b-8d7f-13a958b0807f)
  3. 在/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)

添加共享文件夹

  1. 配置virtualbox的共享文件夹
  2. 进入centos后执行:mount -t vboxsf shared_file [共享文件夹名] [挂载的目录] (eg : mount -t vboxsf php /data/php)
  3. 设置开机自动挂载

    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

编译安装

  1. 下载相应的源码包并且安装依赖 : yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
  2. 进入源码目录,执行./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
  3. 执行make
  4. 执行make install >& LOG_make_install
  5. 创建一个软链接/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

  1. 修改nginx配置文件,开启pid : pid /var/run/nginx.pid;
  2. 先关闭nginx服务
  3. 配置服务,在/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]部分是服务安装的相关设置,可设置为多用户的`
    
  4. 服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下,然后执行(修改或新增文件需要执行以下语句才能生效) systemctl daemon-reload

防火墙设置

因为防火墙的存在,所以默认情况下无法访问nginx监听的端口

对外开放80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
说明 :

  1. firewall-cmd : linux中提供的操作firewall的工具
  2. --zone : 指定作用域
  3. --add-port=80/tcp : 添加的端口,格式为:端口/通讯协议
  4. --permanent : 表示永久生效,没有此参数重启后会失效

重启防火墙

systemctl restart firewalld

安装mysql

MySQL的编译需要好久,笔者没有采用编译安装,安装方法采用了官方文档的方法 : 安装mysql

安装php

此次共安装了3个版本的php,包括php5.4,php7.0,php7.1

准备工作

  1. 下载源码包 : http://php.net/releases/
  2. 安装依赖包 : 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
  3. 安装php语法分析器re2c : yum install re2c
  4. 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

  1. 新建安装目录:/usr/local/php/php54
  2. 执行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
  3. 编译 : make (可以通过make clean进行清理,编译完成后可以执行测试 make test)
  4. 安装 : make install >& LOG_make_install
  5. 配置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
  6. 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
  7. 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

  1. 新建目录/usr/local/php/php71
  2. 执行 : ./buildconf --force (为了防止出现错误 : cp:cannot stat 'sapi/cli/php.1': No such file or directory)
  3. 执行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
  4. 编译 : make (可以通过make clean进行清理,编译完成后可以执行测试 make test)
  5. 安装 : make install >& LOG_make_install
  6. 配置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     
  7. 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端口)         
  8. 在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扩展的源码安装过程基本相似,主要可以概括成以下几个步骤:

  1. 安装相应的依赖(源码安装或通过yum等方式安装皆可)
  2. 进入源码目录执行phpize
  3. 执行configure
  4. 执行make
  5. 执行make install
  6. 修改php.ini配置,重启php

安装xdebug扩展

  1. 下载源码 : sudo wget http://pecl.php.net/get/xdebu...,解压,进入源码目录
  2. 运行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)
  3. 编译安装XDebug

    ./configure --enable-xdebug --with-php-config=/usr/local/php/php54/bin/php-config
    make && make install
  4. 配置 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
  5. 新建目录“/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扩展

  1. 下载,解压,进入源码目录
  2. /usr/local/php/php54/bin/phpize
  3. ./configure --with-php-config=/usr/local/php/php54/bin/php-config --with-imagick
  4. make
  5. make install > LOG_make_install
  6. 修改自己的php.ini文件,然后添加magick扩展:vim .../php.ini 添加extension=imagick.so
  7. 重启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
  1. 下载,解压,进入源码目录
  2. sudo /usr/local/php/php54/bin/phpize
  3. sudo ./configure --enable-memcached --with-php-config=/usr/local/php/php54/bin/php-config
  4. sudo make && make install
  5. 修改自己的php.ini文件,然后添加memcached扩展:vim .../php.ini 添加extension = memcached.so
  6. 重启PHP

安装reids扩展

  1. 下载,解压,进入源码目录
  2. sudo /usr/local/php/php54/bin/phpize
  3. sudo ./configure --enable-redis --with-php-config=/usr/local/php/php54/bin/php-config
  4. sudo make && make install
  5. 修改自己的php.ini文件,然后添加redis扩展:vim .../php.ini 添加extension = redis.so
  6. 重启PHP

你可能感兴趣的:(centos7,php,lnmp,imagick,开发环境配置)