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

安裝系統

本次安裝的是Centos7.3的最小化版本,以下操作在root用戶下進行

網絡配置

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 --disable-fileinfo
  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 --disable-fileinfo
  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章