天天看點

LAMP之一:apache、mysql、php的安裝及互聯互通

一、LAMP簡介

LAMP(Linux- Apache-MySQL-PHP)網站架構是目前國際流行的Web架構,該架構包括:Linux作業系統,Apache網絡伺服器,MySQL資料庫,Perl、PHP或者Python程式設計語言,所有組成産品均是開源軟體,是國際上成熟的架構架構,很多流行的商業應用都是采取這個架構。LAMP具有通用、跨平台、高性能、低價格的 優勢,是以LAMP無論是性能、品質還是價格都是企業搭建網站的首選平台。

二、相關說明

   1、本篇(LAMP系列之一)主要介紹整個平台架構的搭建:Apache2.4.9的編譯安裝,mysql-5.5.33的安裝,php-5.4.26的編譯安裝,以及整個平台的互聯互通;第二篇将介紹《LAMP的性能測試以及安裝xcache,為php加速》。

   2、為了模拟環境的真實性,實驗中使用3台伺服器,Apache伺服器,php伺服器和Mysql資料庫伺服器

   3、關于IP:Apache(172.16.251.93),php(172.16.150.150),Mysql(172.16.251.104)

   4、介于在本文中會使用到名稱解析,而關于DNS的博文在本部落格中已經有兩篇,是以這裡為了友善,不再搭建DNS伺服器,而是使用修改hosts檔案來做名稱解析

三、Apache2.4.9的編譯安裝

   1、解決依賴關系

       httpd-2.4.9需要較新版本的apr和apr-util,是以需要事先對其進行更新。事先我們還應該裝好開發包組和pcre。

1

2

3

<code>yum -y </code><code>install</code> <code>pcre-devel</code>

<code>yum -y groupinstall </code><code>"Development tools"</code>

<code>yum -y groupinstall </code><code>"Server Platform Development"</code>

   對于安裝過程中使用的apr,apr-util和httpd就使用下圖中的這幾個

<a href="http://s3.51cto.com/wyfs02/M02/23/03/wKiom1MuaxuxkksoAAAMp2MTuT8069.png" target="_blank"></a>

    1)編譯安裝apr

4

<code># tar xf apr-1.5.0.tar.bz2</code>

<code># cd apr-1.5.0</code>

<code># ./configure --prefix=/usr/local/apr</code>

<code># make &amp;&amp; make install</code>

    2)編譯安裝apr-util

<code># tar xf apr-util-1.5.3.tar.bz2</code>

<code># cd apr-util-1.5.3</code>

<code># ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr</code>

   2、編譯安裝httpd-2.4.9

<code># tar xf httpd-2.4.9.tar.bz2</code>

<code># cd httpd-2.4.9</code>

<code># ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --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 --with-mpm=event</code>

   在httpd-2.4.9的安裝路徑選擇上,為了不和系統的httpd沖突,我們指定其安裝路徑為/usr/local/apache,配置檔案裝到/etc/httd24中,同時一會兒的服務也要改為httpd24

   選項解釋說明:--prefix指定安裝路徑,--sysconfdir指定配置檔案目錄,--enalbe-so支援基于DMO的方式動态加載子產品,--enable-ssl支援https協定,--enable-cgi支援cgi機制,--enable-rewrite支援URL重寫,--with-zlib支援網頁資料壓縮,--enable-modules=most啟用大多數的常用子產品,--with-mpm=event預設的mpm子產品為event

   3、修改httpd的主配置檔案,設定其pid檔案的路徑 

      因為在httpd2.4中,其pid的位置變的很詭異,不再是在/var/run下,是以我們就給它修改到/var/run下,其實不改也無妨,隻要設定對了就好了

<code>vim </code><code>/etc/httpd/httpd</code><code>.conf</code>

  4、提供SysV服務腳本/etc/rc.d/init.d/http24

   這個腳本就不寫了,直接稍微改改httpd的服務腳本就好了,先拷貝一份

 修改httpd的腳本,改為适合httd24的,隻需把這幾個變量改了就好了,下面的start(),stop()等參數都是調用的這幾個變量,是以别的無需修改。儲存退出後不需要再給執行權限了,已經有了。

   5、把httpd24添加到系統服務,并測試

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKioL1MueBjheaJIAACMD5KlBaE337.png" target="_blank"></a>

6、導出頭檔案

<a href="http://s3.51cto.com/wyfs02/M00/23/03/wKiom1MueGqiPeYuAAAd53J5uMI513.png" target="_blank"></a>

7、導出man幫助手冊

<a href="http://s3.51cto.com/wyfs02/M02/23/05/wKioL1MueHHy8y8VAAAuiiJjIt4566.png" target="_blank"></a>

 8、輸出二進制程式

<code>#vim /etc/profile.d/httpd.sh</code>

<code>export</code> <code>PATH=</code><code>/usr/local/apache/bin</code><code>:$PATH</code>

<code>#. /etc/profile.d/httpd.sh</code>

四、安裝mysql-5.5.33

1、準備資料存放的檔案系統

       因為資料總是在動态增長的,是以我們要建立一個邏輯卷來儲存資料。使用/dev/sdb1這個分區來建立邏輯卷。

    1)準備磁盤為LVM格式

<a href="http://s3.51cto.com/wyfs02/M01/23/04/wKiom1MugPaiOfC1AABW1sbuHoM802.png" target="_blank"></a>

    2)建立lvm并格式化

<a href="http://s3.51cto.com/wyfs02/M00/23/04/wKiom1Muf2jy4jp7AABbNZVA1UE129.png" target="_blank"></a>

 2、設定開機自動挂載

       這裡假設其邏輯卷的挂載目錄為/data,而後需要建立/data/mydata目錄做為mysql資料的存放目錄。

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKioL1Mugx7xYOQrAABMNvQwwZs059.png" target="_blank"></a>

   3、檢視挂載情況

<a href="http://s3.51cto.com/wyfs02/M00/23/04/wKiom1Mug32xG4MBAABPUFnbn0I083.png" target="_blank"></a>

   4、為mysql準備系統使用者群組

   5、進入/data挂載目錄,建立mydata資料存放的目錄,并修改屬主和屬組

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKioL1MuhHbwOAZdAAAmkD9xzv4425.png" target="_blank"></a>

  6、解壓mysql并為其建立一個連結,以後更新的時候,直接改連結位址就可以了

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKioL1MugIayDQQ6AAA7f4v-_WM995.png" target="_blank"></a>

 7、進入/usr/local/mysql檔案夾,修改屬主與屬組

<a href="http://s3.51cto.com/wyfs02/M00/23/04/wKiom1MuhOvhB2o_AABk7flcMSI475.png" target="_blank"></a>

8、初始化系統庫,進入到/usr/local/mysql

<a href="http://s3.51cto.com/wyfs02/M01/23/04/wKiom1MuhWXgtaE4AAAx-MMor2s248.png" target="_blank"></a>

9、為mysql提供主配置檔案,并修改此檔案中thread_concurrency的值為你的CPU個數乘以2,另外還需要添加如下行指定mysql資料檔案的存放位置

<code># cd /usr/local/mysql</code>

<code># cp support-files/my-large.cnf  /etc/my.cnf</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/05/wKioL1MuhqDzSVs1AABA1SfWHGQ722.png" target="_blank"></a>

 10、為mysql提供sysv服務腳本并添加為系統服務

5

<code># cp support-files/mysql.server  /etc/rc.d/init.d/mysqld</code>

<code># chmod +x /etc/rc.d/init.d/mysqld</code>

<code># chkconfig --add mysqld</code>

<code># chkconfig mysqld on</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/04/wKiom1Muh3qDMdW_AABIt8_3PzI200.png" target="_blank"></a>

11、啟動mysql服務,看能否正常啟動

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKioL1Muh4vSm28_AABSM6pGPTY450.png" target="_blank"></a>

12、後續操作

為了使用mysql的安裝符合系統使用規範,并将其開發元件導出給系統使用,這裡還需要進行如下步驟:

   1)輸出mysql的man手冊至man指令的查找路徑:

       編輯/etc/man.config,添加如下行即可:

       MANPATH  /usr/local/mysql/man

   2)輸出mysql的頭檔案至系統頭檔案路徑/usr/include:

       這可以通過簡單的建立連結實作:

       # ln -sv /usr/local/mysql/include  /usr/include/mysql

   3)輸出mysql的庫檔案給系統庫查找路徑:

       # echo '/usr/local/mysql/lib' &gt; /etc/ld.so.conf.d/mysql.conf

       而後讓系統重新載入系統庫:

       # ldconfig

   4)修改PATH環境變量,讓系統可以直接使用mysql的相關指令。具體實作過程這裡不再給出。

       # vim /etc/profile.d/mysql.sh

       #export PATH=/usr/local/mysql/bin:$PATH

       #. /etc/profile.d/mysql.sh

五、編譯安裝php-5.4.26

 1、編譯安裝php ,步驟和上面的都一樣,就不再給圖了,隻給步驟

因為我們這裡php和mysql伺服器是分開部署的,不在本地,是以得考慮到資料庫的連接配接問題。

說明:如果使用PHP5.3以上版本,為了連結MySQL資料庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL用戶端庫綁定形成依賴),但從PHP 5.4開始它就是預設設定了。

<code># tar xf php-5.4.26.tar.bz2</code>

<code># cd php-5.4.26</code>

<code># ./configure --prefix=/usr/local/php --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 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd</code>

<code># make</code>

<code># make intall</code>

2、為php提供配置檔案(我的php解壓在了/root/soft下,安裝在了/usr/local/php下)

<code>cp</code> <code>/root/soft/php-5</code><code>.4.26</code><code>/php</code><code>.ini-production </code><code>/etc/php</code><code>.ini</code>

3、 編輯apache配置檔案httpd.conf,以apache支援php

<code># vim /etc/httpd24/httpd.conf</code>

<code>AddType application</code><code>/x-httpd-php</code>  <code>.php</code>

<code>AddType application</code><code>/x-httpd-php-source</code>  <code>.phps</code>

   定位至DirectoryIndex index.html

   修改為:DirectoryIndex  index.php  index.html

六、配置php-fpm

因為Apache伺服器連接配接php伺服器是通過fastcgi協定的,是以我們還需通過php-fpm對其進行配置。

   1、為php-fpm提供SysV init腳本,并将其添加至服務清單:

<code># cp /root/soft/php-5.4.26/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm</code>

<code># chmod +x /etc/rc.d/init.d/php-fpm</code>

<code># chkconfig --add php-fpm</code>

<code># chkconfig php-fpm on</code>

 2、為php-fpm提供配置檔案:

<code># cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf</code>

3、配置php-fpm的相關選項,并啟用pid檔案

<code>pm.max_children = 50</code>

<code>pm.start_servers = 5</code>

<code>pm.min_spare_servers = 2</code>

<code>pm.max_spare_servers = 8</code>

<code>pid = </code><code>/usr/local/php/var/run/php-fpm</code><code>.pid</code>

pm.max_children:靜态方式下開啟的php-fpm程序數量。 pm.start_servers:動态方式下的起始php-fpm程序數量。 pm.min_spare_servers:動态方式下的最小php-fpm程序數量。 pm.max_spare_servers:動态方式下的最大php-fpm程序數量。

如果dm設定為static,那麼其實隻有pm.max_children這個參數生效。系統會開啟設定數量的php-fpm程序。

如果dm設定為dynamic,那麼pm.max_children參數失效,後面3個參數生效。系統會在php-fpm運作開始的時候啟動pm.start_servers個php-fpm程序,然後根據系統的需求動态在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm程序數。

4、修改fpm的預設監聽端口

   預設情況下,fpm監聽在127.0.0.1的9000端口,也可以使用如下指令驗正其是否已經監聽在相應的套接字。

   # netstat -tnlp | grep php-fpm

   tcp   0  0  127.0.0.1:9000   0.0.0.0:*   LISTEN   689/php-fpm

是以我們要把監聽端口改到我們的php伺服器上

<code>vim </code><code>/usr/local/php/etc/php-fpm</code><code>.conf</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/04/wKiom1MumTeRx9pzAAAyjpYKYGE742.png" target="_blank"></a>

接下來就可以啟動php-fpm并驗證其否成功監聽了

   使用如下指令來驗正(如果此指令輸出有中幾個php-fpm程序就說明啟動成功了):

   # ps aux | grep php-fpm

七、配置httpd-2.4.9

1、啟用httpd的相關子產品

在Apache httpd 2.4以後已經專門有一個子產品針對FastCGI的實作,此子產品為mod_proxy_fcgi.so,它其實是作為mod_proxy.so子產品的 擴充,是以,這兩個子產品都要加載

       LoadModule proxy_module modules/mod_proxy.so

       LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

<a href="http://s3.51cto.com/wyfs02/M00/23/06/wKioL1MunCiB0CRWAAAv1tt3Kr8610.png" target="_blank"></a>

   2、配置虛拟主機支援使用fcgi

     1)要使用虛拟主機,首先要關閉中心主機,再開啟虛拟主機的子產品兒,也是在/etc/httpd24/httpd.conf中

<a href="http://s3.51cto.com/wyfs02/M01/23/05/wKiom1Munh-SapEZAAAaMxCsC-I564.png" target="_blank"></a>

2)配置虛拟主機

<code>vim </code><code>/etc/httpd24/extra/httpd-vhosts</code><code>.conf</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/06/wKioL1MuotLDu24MAABk0TIH5e0403.png" target="_blank"></a>

ProxyPassMatch:把以.php結尾的檔案請求發送到php-fpm程序,php-fpm至少需要知道運作的目錄和URI,是以這裡直接在fcgi://127.0.0.1:9000後指明了這兩個參數,其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。是以在Apache伺服器和php伺服器都應該建立/www/shuishui.com/這個目錄,然後把網頁檔案放到這個目錄中來,Apache下要儲存靜态的index.html和動态的index.php,php伺服器上隻需儲存動态的index.php即可。

   3、繼續編輯Apache的主配置檔案,讓apache能識别php格式的頁面,并支援php格式的首頁

<code>vim </code><code>/etc/httpd24/httpd</code><code>.conf</code>

1)添加如下二行

      AddType application/x-httpd-php  .php

      AddType application/x-httpd-php-source  .phps

   2)定位至 DirectoryIndex index.html

      修改為:DirectoryIndex  index.php  index.html

八、測試Apache伺服器與php伺服器的互連

在Apache伺服器與php伺服器下的/www/shuishui.com/目錄中分别建立index.php。Apache中的index.php隻需要有這個名就可以,因為它會去調用php伺服器中的php.index,是以php伺服器中的index.php必須要有内容。

給php伺服器中的首頁檔案來個測試頁,并重新開機下服務:

<code>service httpd24 restart</code>

到windows上去通路下www.shuishui.com試試,下面就是見證奇迹的時刻

<a href="http://s3.51cto.com/wyfs02/M02/23/06/wKioL1MuqbizSTVCAAB9G51_C50764.png" target="_blank"></a>

Apache與pah伺服器的互聯成功

   補充:Apache httpd 2.4以前的版本中,要麼把PHP作為Apache的子產品運作,要麼添加一個第三方子產品支援PHP-FPM實作。

九、測試php伺服器與mysql伺服器的互聯

1、在php伺服器上的index.php中加入連接配接mysql伺服器的選項

<a href="http://s3.51cto.com/wyfs02/M02/23/05/wKiom1Mus53Tq_QbAABCrHrRFt8755.png" target="_blank"></a>

  2、測試能否成功連上mysql資料庫

<a href="http://s3.51cto.com/wyfs02/M01/23/06/wKioL1Mus7ahig9nAABtCNeJ0js160.png" target="_blank"></a>

哎,失敗了!這是為什麼呢?為什麼呢?雖然在index.php中要求連接配接資料庫,可是你想使用人家mysql的資源,也不獲得mysql的授權,這怎麼可以?除非你想黑了它。沒那技術就去拿授權吧!

   3、在mysql伺服器上授權

<a href="http://s3.51cto.com/wyfs02/M00/23/05/wKiom1MutLPgaQouAABnRLaSoNc663.png" target="_blank"></a>

4、再來,重新連接配接

<a href="http://s3.51cto.com/wyfs02/M02/23/06/wKioL1MutLShqKEMAAB1JlCXEZ8730.png" target="_blank"></a>

本文轉自 nmshuishui 51CTO部落格,原文連結:http://blog.51cto.com/nmshuishui/1381822,如需轉載請自行聯系原作者