资讯专栏INFORMATION COLUMN

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

zhangke3016 / 3245人阅读

摘要:安装系统本次安装的是的最小化版本,以下操作在用户下进行。在搭建完该环境后,笔者使用作为开发,配置使其可以直接调试虚拟机上的代码即开发环境下代码是运行在虚拟机上的。通过该方法,可以最大程度地确保开发环境与生产环境的一致性。

安装系统

本次安装的是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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29801.html

相关文章

  • LNMP环境搭建(三):PHP

    摘要:安装扩展前面在设置了拓展的安装路径,于是此处已自动将加入拓展目录中,只要在,添加即可查看是否安装成功安装扩展根据版本选择对应的查看是否安装成功相关文章环境搭建一环境搭建二环境搭建三 安装的基本步骤官方文档都有说明:PHP官网安装文档 编译安装 依赖环境 这一步实际上已经在:LNMP环境搭建(二):Nginx上完成了 [root@localhost ~]# yum -y inst...

    malakashi 评论0 收藏0

发表评论

0条评论

zhangke3016

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<