1. 程式人生 > >學習筆記之建立lamp平臺

學習筆記之建立lamp平臺

LAMP

      是指  Linux+Apache+Mysql/MariaDB+Perl/Python/PHP來搭建動態網站或伺服器的開源軟體

從網站的流量來說,70%以上的訪問量都是LAMP提供的,LAMP是最強大的網站解決方案。


                                   

看看其他網站的伺服器都是什麼,來看看愛奇異的伺服器

是Apache的吧,其實還有一些網站是nigix的。那就是lnmp了


先說說他們之間的關係

首先Apache想要支援動態網頁,那麼需要CGI能夠支援動態的程式語言來開發動態網站。那麼PHP就是一種。他以CGI方式執行。



        那麼就出現了分層結構。如果我們把Apache和PHP裝在同一臺主機上的話。而資料庫在另一臺主機上,他們之間的聯絡靠TCP/IP協議。那麼這就是兩層結構。(或者PHP和Mysql在一塊)

        或者是三層結構,那麼就是三臺主機了。Apache和PHP,Mysql都在不同的主機。靜態頁面在Apache上,如果Apache發現請求是動態的,就把請求轉交給php。

為什麼要這麼做呢?其實,無論是PHP還是Mysql都是CPU密集型的。就是對CPU的要求特別高,所以要分開放。而且當WEB伺服器不夠了,直接加一個主機就好。所以要做的就是要裝上驅動讓他們之間互聯。php可以做成一個deamon,監聽在埠上。

    下面說一下PHP和HTTP。

     php:指令碼程式語言。php直譯器,基於zend引擎。

     php的執行過程分3部分。

                       第一段:詞法分析、語法分析、編譯為Opcode(Opcode在記憶體中,opcode就是可執行的)

                       第二段 :執行Opcode

                       第三段 :將Opcode快取到Xcache,eAccelerator,APC中。(當有客戶再次請求時,就可以將xcache等快取的結果返回)

         

        工作為CGI的機制:當HTTP接到動態網頁請求的話,會再開啟一個程序,將使用者請求交給CGI程式處理。CGI再將處理結果返回給WEB伺服器,伺服器將結果返回給客戶。

        如果WEB很忙的話,還得管理那些CGI程序,當訪問量過大時。WEB就可能崩潰,能不能把CGI的訪問交給別人來管理呢。

        FAST-CGI來管理CGI程序。而不是WEB來管理CGI了。這樣就好了。

        moudle模組化:當HTTP需要PHP了,將PHP模組載入進來執行,不需要建立程序。

       靜態化。為了提高訪問速度,當第一次有人請求某個動態網頁,將最終結果快取到HTTP伺服器。第二個使用者訪問時直接返回快取就好了,這樣可以優化站點。這就式動態內容靜態化。將內容再快取到CDN中放到使用者的家門口,以實現更快的訪問。

       

      三種MPM的介紹,Apache2.x 支援了插入式並行處理模組,成為多路處理模組(MPM),在編譯apache的時候必須選擇也只能選擇一種MPM。這樣的選擇會影響到apache的執行速度和可擴充套件性。


      Perfork MPM:這種處理模組(MPM)實現了非執行緒,預派生的web伺服器。他是要求每個請求都相互獨立的最好的MPM,若一個請求出現問題不會影響到其他的請求,用單獨的子程序來處理請求,導致資源消耗大。(最安全的,穩定)

      Worker MPM:這種模型是基於多執行緒的,記憶體消耗低。這種模組使用了多程序,多個程序又有多個執行緒,來獲得基於程序的穩定性。一個單獨的控制程序(父程序)負責子程序的建立,每個程序可以建立一定數量的服務執行緒和一個監聽執行緒,該執行緒監聽接入請求並將其傳遞給服務執行緒和處理和應答。(可以應對海量的請求)

    以上兩種模式都試圖保證一些備用的或者空閒的子程序用於迎接即將到來的請求,這樣客戶端就不需要等子程序的產生

     event MPM:以上的MPM都有些不足,就是在非常繁忙的伺服器應用下就顯得有些不足。儘管HTTP的keepalive方式能減少TCP的連結和網路負載。但是keepalive需要和服務程序或執行緒繫結,這會導致耗盡資源。event 就可以把服務程序從連線中分離出來。在處理速度上很快。(可應對更高的負載,但不能再安全HTTP訪問下工作)


為了打造更合適自己的lamp,所以lamp是最需要完全手動編譯的。


編譯配置LAMP

httpd:2.4.12

Mysql :5.5.12

php :5.4.12


一。安裝HTTPD

APR(Apache portable Run-time librariesApache可移植執行庫)apr為了支援apache在各種平臺上執行的。


安裝前必須要依賴apr和apr-util


編譯前,把selinux關掉



一。配置安裝環境




二。安裝httpd

    下載並解壓httpd的壓縮包,這個官方網站上都可以找到.記得還需要下載apr和apr-utils。(apr,apr-util,httpd都在官網上可以下載


記住需要先裝apr,再裝apr-util。而後有了環境才可以安裝httpd


1.裝apr

 
 

2.裝apr-util

3.裝httpd

對其中的部分引數解釋一下:

--enable-so 支援動態共享模組

--enable-ssl 啟用ssl功能來用https

--enable-deflate  常用的壓縮機制

--enable-fcgi PHP和HTTP以fast-cgi工作

--enable-cgid  執行緒

--enable-mpms-shared=MPM_LIST    預設是event

--with-mpm=MPM

--enable-rewrite  支援url重寫

    解壓後根據自己的需要執行編譯。這個幫助可以使用./configure --help檢視.可以自定義新增選項。根據自己需要來編寫相應的選項。

啟動後可以使用apachectl來啟動apache服務。

用瀏覽器開啟看看(網頁檔案再htdocs下)

接下來。我們來改一下,pid檔案所放位置,這是為了好管理httpd。就像rpm安裝的一樣。

在。/etc/httpd/httpd.conf下加入    PidFile “/var/run/httpd/pid”

再用rpm安裝的指令碼加以修改就可以用來啟動httpd了

改這裡就好

到此httpd的配置就結束了,但可以再加一些指令碼,讓httpd可以使用service命令去管理。後面會在自動配置lamp的腳本里面寫

讓httpd開機自啟動

httpd-2.4 的新特性:

1.MPM可在執行時裝載:

2.Event MPM

3.非同步讀寫

4.在每模組或者每目錄下制定日誌級別

5.每請求配置:<If> <ElseIf> <Else>

6.增強的表示式分析器

7.毫秒級的KeepAlive Timeout

8.基於域名的虛擬主機不再需要NameVirtualHost 指令

9.降低了記憶體佔用

10.支援在配置檔案中使用自定義變數(允許某個IP可以訪問可以使用Require ip IPADDR   等等)

二。安裝MYSQL

1.配置安裝環境

2.在官網上下載mysql的tar包

官網的地址點選開啟連結

3.開始編譯

先解壓

用cmake

開始make和make install

3.收尾工作

建立mysql的使用者和使用者組

將環境改得和yum安裝的一樣

配置PATH,啟動mysql

連結庫檔案

完成了,OK了

其實最好把其他人看資料庫的權利剝奪了。(chmod o-rx data)為了資料庫安全,讓mysql目錄下的所有人都是root。就data是mysql就好

其中解釋以下編譯安裝的那些引數。

mysql 伺服器

     伺服器變數:

              定義了MySQL伺服器的執行狀態

              SHOW GLOBAL VARIABLES

     狀態變數:

              儲存了MySQL伺服器執行的統計資料

              SHOW GLOBAL STATUS

mysql> SHOW GLOBAL VARIABLES LIKE 'data%';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)


三。安裝PHP

php有三種工作模式1.cgi  2.fast-cgi 3.模組

模組是最簡單的。

1.下載php原始碼包。同樣,去php官網去下載。

2.配置環境所需要的庫依賴。

這裡,根據我之前的報錯無數次以解決的依賴問題,這裡需要5個包。分別是mhash,mhash-devel,libcrypt,libcrypt-devel和libiconv。

前四個是rpm包。在rpmfind網站上可以找到。各種平臺的都有,已親試。最後一個我提供一個原始碼包下載地址。安裝如下圖。


下載後,執行命令

tar xf libiconv-1.13.1.tar.gz

./confiure .

3.開始編譯php

先解壓縮



開始編譯

make 和 make install



fast-cgi 模式  --enable-fpm

4.配置php

轉移php的配置檔案到/etc


php的配置檔案 比較獨特

/etc/php.ini

/etc/php.d/*.ini


修改httpd的配置檔案(/etc/httpd/httpd.conf)



四。安裝Xcache

xcache是php的擴充套件。(他的功能是opcode優化器,把php編譯結果緩衝到共享記憶體中,避免重複編譯)

所以需要讓php載入這個擴充套件模組,

先下載Xchache的安裝包,這個我是在網上隨便找的。解壓

進去後編譯載入模組

編譯安裝。


配置檔案


修改其中內容


好了,配置成功了。可以從phpinfo裡看到



五。WEB配置

好了,至此。lamp配置完成了。可以配置虛擬主機再壓力測試一下。

1.配置虛擬主機

註釋中心主機


啟用虛擬主機


編輯檔案 [[email protected] htdocs]# vim /etc/httpd//extra/httpd-vhosts.conf


重啟httpd



六。壓力測試

在本機測試。