虛擬機上Centos7開發環境搭建(編譯安裝LNMP,多版本PHP共存,PHP擴展安裝)

安裝系統

本次安裝的是Centos7.3的最小化版本,如下操做在root用戶下進行。在搭建完該環境後,筆者使用phpstorm做爲開發ide,配置phpstorm使其能夠直接調試虛擬機上的代碼(即開發環境下代碼是運行在虛擬機上的)。經過該方法,能夠最大程度地確保開發環境與生產環境的一致性。(phpstrom xdebug的配置請參考官方文檔phpstorm上使用debugphp

網絡配置

1.動態ip配置(nat或橋接)

進入/etc/sysconfig/network-scripts,找到網卡對應的配置文件(eg:ifcfg-ens0s3),配置下面的內容html

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下添加相應的網絡接口配置文件node

    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 networkmysql

軟件源配置

筆者使用了阿里的軟件源,按照https://opsx.alibaba.com/mirror的方法進行操做便可linux

添加epel源

方法1:nginx

wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

方法2:c++

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

更新系統

執行如下命令:web

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. 設置開機自動掛載redis

    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
相關文章
相關標籤/搜索