運維工作必備----------編譯安裝LAMP

1.編譯安裝介紹

        在工作中,基於各種生產環境下,可能yum安裝不能滿足我們的需求。這個時候我們就得自己動手編譯安裝軟件包,當然只要掌握了技巧,其實編譯安裝也非常的簡單。本文將介紹如何在CentOS 6.7系統下編譯安裝:httpd-2.4.6 + php-5.6.4 + xcache-3.2.0 + mariadb-5.5.43,編譯完成後基於LAMP環境搭建一個Wordpress 和phpMyAdmin。


2.編譯安裝

    2.1 mariadb-5.5.43


準備數據存放的文件系統

新建一個邏輯卷,並將其掛載至特定目錄,一般數據庫應存放於單獨的文件系統之中。

[root@ch ~]# mkdir /data/mydata/ -pv     ## 創建一個用於存放數據庫的目錄


新建用戶以安全方式運行進程

[root@ch ~]# groupadd -r mysql     ## 新建mysql組
[root@ch ~]# useradd -g mysql -r -s /sbin/nologin -M -d /data/mydata/ mysql   ## 新建mysql系統用戶
[root@ch ~]# chown -R mysql.mysql /data/mydata/     ## 修改目錄的屬主、屬組爲mysql


安裝並初始化mysql-5.5.43

下載對應的mysql版本至本地,官方下載站點:https://mariadb.org/download/ 這裏是64爲平臺,因此對應的版本是 mariadb-5.5.43-linux-x86_64.tar.gz

注意此爲二進制版本。

[root@ch ~]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/    ## 執行解壓縮
[root@ch ~]# cd /usr/local/[root@ch local]# ln -s mariadb-5.5.43-linux-x86_64 mysql     ## 創建符號鏈接
[root@ch local]# cd mysql/[root@ch mysql]# chown -R mysql.mysql .     ## 修改 mysql目錄下的所有文件屬主和屬組均爲mysql
[root@ch mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mydata    ## 執行數據庫初始化
[root@ch mysql]# cp support-files/my-large.cnf /etc/my.cnf   ## 爲mysql提供配置文件
[root@ch mysql]# vim /etc/my.cnf    ## 編輯配置文件
thread_concurrency = 2     ## 此處爲CPU的個數*2
datadir = /data/mydata     ## 添加行指定mysql數據存放位置


爲mysql提供sysv服務腳本

[root@ch mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@ch mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@ch mysql]# chkconfig --add mysqld     ## 添加至服務列表
[root@ch mysql]# chkconfig mysql on         ## 設置開機自啓


啓動並配置數據庫

[root@ch mysql]# service mysqld start    ## 啓動服務
[root@ch mysql]# ss -tan      ## 查看3306是否處於監聽狀態
[root@ch mysql]# export PATH=/usr/local/mysql/bin/:/$PATH
[root@ch mysql]# vim /etc/profile.d/mysql.sh    ## 修改PATH環境變量,讓系統可以直接使用mysql命令
export PATH=/usr/local/mysql/bin/:/$PATH
[root@ch mysql]# vim /etc/man.config     ## 輸出mysql的man手冊至man命令的查找路徑
MANPATH /usr/local/mysql/man
[root@ch mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql  ## 輸出mysql的頭文件至系統頭文件路徑/usr/include
[root@ch mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf    ## 輸出mysql的庫文件給系統庫查找路徑
[root@ch mysql]# ldconfig    ## 讓系統重新載入系統庫
[root@ch mysql]# mysqladmin -uroot password '123.com'  ## 修改數據庫root用戶密碼
[root@ch mysql]# mysql -uroot -p'123.com'      ## 登錄數據庫
MariaDB [(none)]> create database wp_DB;       ## 創建數據庫
MariaDB [(none)]> grant all on wp_DB.* to 'chen'@'172.18.20.%' identified by '123.com';   ## 授權用戶登錄數據庫

   

   2.2 httpd-2.4.6

    httpd-2.4 以上版本需要較新版本的apr和apr-util,因此需要事先對其進行升級。升級方式有兩種,一種是通過源代碼編譯安裝,一種是直接升級rpm包。這裏通過源代碼編譯安裝進行全部演示。官方下載地址:http://httpd.apache.org/


編譯安裝apr-1.5.0

[root@ch tmp]# tar xf apr-1.5.0.tar.bz2
[root@ch tmp]# cd apr-1.5.0
[root@ch apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@ch apr-1.5.0]# make -j 4 && make install


編譯安裝apr-util-1.5.2

[root@ch tmp]# tar xf apr-util-1.5.2.tar.bz2
[root@ch tmp]# cd apr-util-1.5.2
[root@ch apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@ch apr-util-1.5.2]# make -j 4 && make install


編譯安裝http-2.4.6

[root@ch httpd-2.4.6]# yum -y install pcre-devel
[root@ch tmp]# tar xf httpd-2.4.6.tar.bz2
[root@ch tmp]# cd httpd-2.4.6
[root@ch httpd-2.4.6]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-fcgi --enable-rewrite --with-zlib  --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --enable-mpm=worker
[root@ch httpd-2.4.6]# make -j 4 && make install

   -enable-so 支持動態模塊機制

        -enable-ssl 支持ssl功能

        -enable-fcgi  -enable-rewrite  支持fcgi和url重寫

        -enable-modules=all  啓用大多數常用模塊

        -enable-mpms-shared=all  編譯prefork/worker/event 3個模塊

        -with-mpm-worker  設置默認模塊爲worker

        -with-zlib   支持壓縮

        -with-pcre 支持pre擴展的正則表達式引擎


修改httpd的主配置文件,設置其Pid文件的路徑

[root@ch tmp]# vim /etc/httpd/httpd.confPidFile "/var/run/httpd.pid"    ## 在配置文件中添加這一行即可
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so       ## 啓用fcgi模塊


提供SysV服務腳本

[root@ch tmp]# vim /etc/rc.d/init.d/httpd   ## 內容如下
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
       . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
       echo -n $"Starting $prog: "
       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
       RETVAL=$?
       echo
       [ $RETVAL = 0 ] && touch ${lockfile}
       return $RETVAL
}
stop() {
 echo -n $"Stopping $prog: "
 killproc -p ${pidfile} -d 10 $httpd
 RETVAL=$?
 echo
 [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
   echo -n $"Reloading $prog: "
   if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
       RETVAL=$?
       echo $"not reloading due to configuration syntax error"
       failure $"not reloading $httpd due to configuration syntax error"
   else
       killproc -p ${pidfile} $httpd -HUP
       RETVAL=$?
   fi
   echo
}
# See how we were called.
case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 status)
       status -p ${pidfile} $httpd
 RETVAL=$?
 ;;
 restart)
 stop
 start
 ;;
 condrestart)
 if [ -f ${pidfile} ] ; then
   stop
   start
 fi
 ;;
 reload)
       reload
 ;;
 graceful|help|configtest|fullstatus)
 $apachectl $@
 RETVAL=$?
 ;;
 *)
 echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
 exit 1
esac
exit $RETVAL


[root@ch tmp]# chmod +x /etc/rc.d/init.d/httpd   ## 賦予腳本執行權限
[root@ch tmp]# chkconfig --add httpd             ## 加入服務列表
[root@ch tmp]# service httpd start               ## 啓動httpd服務 
[root@ch tmp]# netstat -tan                      ## 查看80端口是否監聽

    至於庫文件、man文檔、系統命令、頭文件依舊按照編譯安裝mariadb 第5節配置即可


提供服務器狀態頁面

[root@ch httpd]# vim httpd.conf     ## 編輯主配置文件
<Location /server-status>        
    SetHandler server-status        
    Require ip 172.18.20.1      ## 僅允許172.18.20.1 主機查看
</Location>

wKiom1cfKZ-RoeEwAAB_KnsG7tk873.png


2.3 php-5.6.4


解決依賴關係

[root@ch tmp]# yum -y groupinstall "X Software Development"

如果想讓編譯的php支持mcrypt擴展,此處還需安裝

[root@ch tmp]# yum -y install libmcrypt libmcrypt-devel mhash mhash-devel bzip2-devel


編譯安裝php-5.6.4

[root@ch tmp]# tar xf php-5.6.4.tar.xz 
[root@ch tmp]# cd php-5.6.4
[root@ch php-5.6.4]# ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
[root@ch php-5.6.4]# make -j 4 && make install

    如果使用PHP5.3以上版本,爲了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定形成依賴),但從PHP 5.4開始它就是默認設置了。


配置php-fpm

[root@ch php-5.6.4]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm   ## 爲php-fpm提供SysV init腳本
[root@ch php-5.6.4]# chmod +x /etc/rc.d/init.d/php-fpm
[root@ch php-5.6.4]# chkconfig --add php-fpm        ## 添加至服務
[root@ch php-5.6.4]# chkconfig php-fpm on           ## 設置開機自啓
[root@ch php-5.6.4]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf   ## 提供php-fpm配置文件
[root@ch php-5.6.4]# vim /usr/local/php/etc/php-fpm.conf  ## 編輯配置文件
listen = 172.18.20.21:9000    ## 服務監聽的地址
listen.allowed_clients = 172.18.20.20     ## 允許爲哪個客戶端響應轉發請求
pid = /usr/local/php/var/run/php-fpm.pid
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
[root@ch php]# mkdir /var/lib/php/session
[root@ch php]# chown apache:apache /var/lib/php/session     ##創建session目錄,並確保運行php-fpm進程的用戶對此目錄有讀寫權限
[root@ch php-5.6.4]# service php-fpm start   ## 啓動服務
[root@ch php-5.6.4]# netstat -tanlp | grep php-fpm      ## 驗證是否監聽9000端口


編譯安裝xcache,爲php加速

[root@ch tmp]# tar xf xcache-3.2.0.tar.bz2 
[root@ch tmp]# cd xcache-3.2.0
[root@ch xcache-3.2.0]# /usr/local/php/bin/phpize 
[root@ch xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
[root@ch xcache-3.2.0]# make -j 4 && make install

    安裝完成後,會出現 Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ 


編輯php.ini,整合php和xcache

[root@ch xcache-3.2.0]# mkdir /etc/php.d
[root@ch xcache-3.2.0]# cp xcache.ini /etc/php.d/
[root@ch xcache-3.2.0]# vim /etc/php.d/xcache.ini 
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xcache.so


3.整合測試

3.1 配置http

[root@ch ~]# vim /etc/httpd/httpd.conf 
User apache
Group apache       ## 修改運行httpd服務的屬組和屬組爲apache
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps    ## 讓apache能識別php格式的頁面,並支持php格式的主頁
<Directory />
   AllowOverride none
   Require all granted      ## 修改爲允許所有人訪問
</Directory>
#DocumentRoot "/usr/local/apache/htdocs"    ## 禁用中心主機
DirectoryIndex index.html index.php         ## 添加一項爲index.php
<VirtualHost 172.18.20.20:80>        ## 添加虛擬主機
   DocumentRoot "/www/ch1"
   ServerName www.ch.com
   ProxyRequests Off       ## 關閉正向代理
   ProxyPassMatch ^/(.*\.php)$ fcgi://172.18.20.21:9000/www/ch2/$1   ## 把以.php結尾的文件請求發送到php-fpm服務器
   <Directory "/www/ch1">
       Options none
       AllowOverride none
       Require all granted
   </Directory>
</VirtualHost>
[root@ch ~]# useradd -r -s /sbin/nologin apache    ## 新建apache系統用戶
[root@ch ~]# mkdir -pv /www/ch1     ## 創建網頁所需目錄
[root@ch ~]# vim /www/ch1/index.html     ## 創建html頁面
<p1> 172.18.20.20 </p1>   ## 編輯測試頁面
[root@ch ~]# /usr/local/apache/bin/httpd -t    ## 檢查配置文件
[root@ch ~]# service httpd reload     ## 重載配置文件


用客戶端瀏覽器訪問 http://172.18.20.20/index.html 確保http正常工作


wKiom1cfK8_x_0_GAAAsWayRbs0279.png


3.2 配置php-fpm

[root@ch ~]# mkdir -pv /www/ch2       ## 創建網站所需目錄
[root@ch ~]# vim /www/ch2/index.php   ## 新建php測試頁面
<?php        
    phpinfo();
?>

    用瀏覽器訪問 http://172.18.20.20/index.php 確保http+php工作是正常的,查看phpinfo信息能看到xcache信息,確保xcache配置安裝也是沒有問題的


wKiom1cfLEPDVEnBAABG3K7QzdU249.png


    編輯php測試頁面,確保php連接mysql沒有問題

[root@ch fpm]# vim /www/ch2/index.php
<?php        
    $con = mysql_connect('172.18.20.22','chen','123.com');        
    if ($con)                
        echo "OK";        
    else                
        echo "Failure";
?>

    用瀏覽器訪問 http://172.18.20.20/index.php 出現OK代表連接數據庫正常

wKioL1cfLXfRp2moAAAbNg4jbM0550.png


4.安裝網站程序

4.1 安裝wordpress

[root@ch ~]# cd /www/ch2/
[root@ch ch2]# unzip wordpress-4.3.1-zh_CN.zip
[root@ch ch2]# chown -R apache:apache wordpress
[root@ch ch2]# chmod -R g+w wordpress
[root@ch ch2]# ln -s wordpress wp

    以上需在http主機和php-fpm主機上做同樣的操作,或者可以搭建一個nfs服務器,基於文件系統共享的方式進行設置。

    

    訪問 http://172.18.20.20/wp   配置正確的數據庫信息

wKioL1cfLm7inyadAABDtOE-EhQ632.png

    
    配置網站信息

wKioL1cfLxLjHyiCAABdTTkVLEQ734.png

    接下來wordpress就安裝完成了。

4.1 安裝phpMyAdmin

[root@ch ch2]# yum -y install php-common php-mbstring
[root@ch tmp]# unzip phpMyAdmin-4.3.5-all-languages.zip
[root@ch tmp]# chown -R apache:apache phpMyAdmin-4.3.5-all-languages
[root@ch tmp]# chmod -R g+w phpMyAdmin-4.3.5-all-languages
[root@ch tmp]# ln -s phpMyAdmin-4.3.5-all-languages php
[root@ch php]# cp config.sample.inc.php config.ini.php   ## 複製phpmyadmin的配置文件
[root@ch php]# vim config.inc.php      ## 編輯配置文件
$cfg['Servers'][$i]['host'] = '172.18.20.22';    ## 將這一項改爲mariadb數據庫的IP地址

此處也是php-fpm和httpd主機都需這樣配置


在httpd主機上配置如下:

<VirtualHost 172.18.20.20:8080>    
DocumentRoot "/www/ch2/php"    
ServerName www.ch.com  
ProxyRequests Off  ProxyPassMatch ^/(.*\.php)$ fcgi://172.18.20.21:9000/www/ch2/php/$1    
<Directory "/www/ch2/php">        
    Options FollowSymLinks        
    AllowOverride none        
    Require all granted    
</Directory></VirtualHost>


打開客戶端瀏覽器,訪問 http://172.18.20:8080登錄數據,出現以下界面

wKiom1cfL26zIqYAAADGsQfn7zA307.png


5.遇到的問題

打開phpmyadmin發現網站頁面顯示不了圖片

wKioL1cfML2CWveCAABr2XpUCXI726.png


隨便點擊一張圖片出現下圖,可以看出是html資源路徑出現問題。

wKioL1cfMS3xCOSsAAAqek__aB8430.png

檢查靜態頁面配置,發現路徑存在問題,解決之後就OK了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章