安裝系統
本次安裝的是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網絡配置
- 在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 --disable-fileinfo
- 編譯 : 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 --disable-fileinfo
- 編譯 : 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