LAMP平臺搭建
一,環境搭建
1,安裝libxml
使用libxml2解析xml文件,提供函數庫
[root@test3 bin]# cd /usr/src/ [root@test3 src]# tar xvf libxml2-2.9.0.tar.gz [root@test3 src]# cd libxml2-2.9.0 [root@test3 libxml2-2.9.0]# ./configure --prefix=/usr/local/libxml2 [root@test3 libxml2-2.9.0]# make [root@test3 libxml2-2.9.0]# make install
編譯遇到的問題/bin/rm:cannotremove`libtoolt':Nosuchfileordirectory
解決:
1、確認libtool是否已經安裝,如果沒有安裝的話,則先安裝libtool
#yum-yinstalllibtool
2、分別執行以下三條命令:
#autoreconf--force--install
#libtoolize--automake--force
#automake--force--add-missing
再重新編譯安裝,問題解決!
這時直接打開configure,把$RM“$cfgfile”那行刪除掉,重新再運行./configure就可以了
2,安裝libmcrypt
libmcrypt是加密算法擴展庫。支持DES,3DES,RIJNDAEL,Twofish,IDEA,GOST,CAST-256,ARCFOUR,SERPENT,SAFER+等算法。
編譯安裝libmcrypt之前要先安裝如下編譯工具和支持包libltdl
yuminstallgccgcc-c++
[root@test3 bin]# cd /usr/src/ [root@test3 src]# tar xvf libmcrypt-2.5.8.tar.gz [root@test3 src]# cd libmcrypt-2.5.8 [root@test3 libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt [root@test3 libmcrypt-2.5.8]# make [root@test3 libmcrypt-2.5.8]# make install
安裝完成libmcrypt庫以後,不同的linux系統版本有可能還要安裝一下libltdl庫。安裝方法和前面的步驟相同,可以進入到解壓縮的目錄/usr/local/src/libmcrypt-2.5.8下,找到libltdl庫源代碼所在的目錄libltdl,進入這個目錄按照下面幾個命令配置、編譯、安裝就可以了。
[root@test3 libltdl]# pwd /usr/local/src/libmcrypt-2.5.8/libltdl//進入軟件源代碼目錄 [root@test3 libltdl]# ./configure --enable-ltdl-install //配置ltdl庫的安裝 [root@test3 libltdl]# make //編譯 [root@test3 libltdl]# make install //安裝
3,安裝zlib
zlib是提供數據壓縮用的函式庫
[root@test3 src]# tar xvf zlib-1.2.7.tar.gz [root@test3 src]# cd zlib-1.2.7 [root@test3 zlib-1.2.7]# ./configure [root@test3 zlib-1.2.7]# make [root@test3 zlib-1.2.7]# make install
4,安裝libpng
libpng是一套免費的、公開源代碼的程序庫,支持對PNG圖形文件的創建、讀寫等操作。可以到www.libpng.org上下載源代碼。libpng使用zlib程序庫作爲壓縮引擎,zlib也是著名的gzip(GNUzip)所採用的壓縮引擎。zlib是通用的壓縮庫,提供了一套in-memory壓縮和解壓函數,並能檢測解壓出來的數據的完整性(integrity)。zlib也支持讀寫gzip(.gz)格式的文件這些都是免費和公開的
[root@test3 src]# tar xvf libpng-1.5.14.tar.gz [root@test3 src]# cd libpng-1.5.14 [root@test3 libpng-1.5.14]# ./configure --prefix=/usr/local/libpng [root@test3 libpng-1.5.14]# make [root@test3 libpng-1.5.14]# make install
5,安裝jpeg8
利用jpeg庫實現多種圖片格式安裝GD2庫前所需的jpeg8庫文件,需要自己手動創建安裝需要的目錄,它們在安裝時不能自動創建
[root@test3 src]# mkdir /usr/local/jpeg8 //軟件安裝目錄 [root@test3 src]# mkdir /usr/local/jpeg8/bin //命令目錄 [root@test3 src]# mkdir /usr/local/jpeg8/lib //庫函數的目錄 [root@test3 src]# mkdir /usr/local/jpeg8/include //建立存放頭文件目錄 [root@test3 src]# mkdir -p /usr/local/jpeg8/man/man1 //幫助手冊 [root@test3 src]# tar xvfz jpegsrc.v8b.tar.gz [root@test3 src]# cd jpeg-8b/ [root@test3 jpeg-8b]# ./configure --prefix=/usr/local/jpeg8/ --enable-shared --enable-static [root@test3 jpeg-8b]# make [root@test3 jpeg-8b]# make install
6,安裝freet
#tar zxvf freetype-2.4.10.tar.gz //解壓包到freetype-2.4.10目錄 #cd freetype-2.4.10 //進入目錄freetype-2.4.10中 #./configure --prefix=/usr/local/freetype //選項--prefix=/usr/local/freetype,是在安裝時將軟件安裝到/usr/local/freetype目錄下 #make //對軟件源代碼文件進行編譯 #make install //開始安裝freetype庫文件
7,安裝atuoconf
[root@test3 src]# tar xvf autoconf-2.69.tar.gz [root@test3 src]# cd autoconf-2.69 [root@test3 autoconf-2.69]# ./configure [root@test3 autoconf-2.69]# make [root@test3 autoconf-2.69]# make install
8,安裝GD
在php中使用gd庫來對圖像進行操作,GD爲是一個動態的開放的創建圖像的源代碼公開的函數庫。可以從官方網站www.boutell.com/gd處下載,目前GD庫支持gif,png,jpeg,wbmp,xbm等多種圖像格式。GD庫通常用於對圖像的處理。
解壓gd包
[root@test3src]#tarxvfzgd-2.0.35.tar.gz
vigd_png.c
找到#include"png.h"改成#include"/usr/local/libpng/include/png.h"
否則報錯:
make[2]:***[gd_png.lo]Error1
make[2]:Leavingdirectory`/tmp/gd-2.0.35'
make[1]:***[all-recursive]Error1
make[1]:Leavingdirectory`/tmp/gd-2.0.35'
make:***[all]Error2
編譯安裝GD
[root@test3 src]# cd gd-2.0.35 [root@test3 gd-2.0.35]# ./configure --prefix=/usr/local/gd --with-jpeg=/usr/local/jpeg8/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/ [root@test3 gd-2.0.35]# make [root@test3 gd-2.0.35]# make install
二,編譯安裝apache
1,安裝apr和apr-util
APR(ApacheportableRun-timelibraries,Apache可移植運行庫)的目的如其名稱一樣,主要爲上層的應用程序提供一個可以跨越多操作系統平臺使用的底層支持接口庫。首先卸載系統中安裝的apr和apr-util
[root@test3src]#rpm-eapr--nodeps
[root@test3src]#rpm-eapr-util--nodeps
編譯安裝apr和apr-util
[root@test3 src]# tar xvf apr-1.4.6.tar.gz [root@test3 src]# cd apr-1.4.6 [root@test3 apr-1.4.6]# ./configure --prefix=/usr/local/apr-httpd [root@test3 apr-1.4.6]# make [root@test3 apr-1.4.6]# make install [root@test3 src]# tar xvf apr-util-1.5.1.tar.gz [root@test3 src]# cd apr-util-1.5.1 [root@test3 apr-util-1.5.1]# ./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/ [root@test3 apr-util-1.5.1]# make [root@test3 apr-util-1.5.1]# make install
2,安裝PCRE
PCRE(PerlCompatibleRegularExpressions)是一個Perl庫,包括perl兼容的正規表達式庫
unzip -o pcre-8.32.zip #cd pcre-8.32 #./configure --prefix=/usr/local/pcre #make #make install
3,正式安裝apache
[root@test3 src]#tar xvfz httpd-2.4.3.tar.gz [root@test3 src]#cd httpd-2.4.3 [root@test3 httpd-2.4.3]# ./configure \ > --prefix=/usr/local/apache2 \ > --enable-mods-shared=all \ > --enable-deflate \ > --enable-speling \ > --enable-cache \ > --enable-file-cache \ > --enable-disk-cache \ > --enable-mem-cache \ > --enable-so \ > --enable-expires=shared \ > --enable-rewrite=shared \ > --enable-static-support \ > --sysconfdir=/etc/httpd \ > --with-z=/usr/local/zlib/ \ > --with-apr=/usr/local/apr-httpd/ \ > --with-apr-util=/usr/local/apr-util-httpd/ \ > --with-pcre=/usr/local/pcre/ \ > --disable-userdir [root@test3 httpd-2.4.3]#make && make install
啓動apache,如果出現如下圖就說明apache可以正常工作了
[[email protected]]#/usr/local/apache2/bin/apachectlstart
三,mysql數據庫的編譯安裝
mysql-5.1.70編譯
依賴包:
ncurses-devel
編譯安裝MySQL5.1.70
[root@test4~]#yuminstalllibtermcaplibtermcap-develimakeautoconfautomakelibtoolm4
libstdc++-develgcc-c++zlib-develncurses-devel
[root@test4~]#useradd-M-s/sbin/nologinmysql
[root@test4~]#mkdir/usr/local/mysql
[[email protected]]#./configure--prefix=/usr/local/mysql\mysql的安裝目錄
--enable-assembler\
--with-client-ldflags=-all-static\
--with-unix-socket-path=/tmp/mysql.sock\
--with-charset=utf8\
--enable-thread-safe-client\
--with-pthread\
--without-debug\
--with-big-tables\
--enable-community-features\
--enable-profiling\
--enable-local-infile\
--with-fast-mutexes\
--with-plugins=partition,federated,ndbcluster,innobase,csv,blackhole,myisam,innodb_plugin
四,php安裝編譯
編譯之前,先處理一下mysql的庫,默認查找libmysqlclient_r.so,可是mysql默認爲libmysqlclient.so,內容完全一樣,做個鏈接即可.但是如果有libmysqlclient_r.so就不用這麼做了
#cd/usr/local/mysql/lib/mysql/
#ln-slibmysqlclient.so.16.0.0libmysqlclient_r.so
[root@test3 src]# tar xvfz php-5.4.11.tar.gz [root@test3 php-5.4.11]# ./configure \ > --prefix=/usr/local/php \ > --with-config-file-path=/usr/local/php/etc \ > --with-apxs2=/usr/local/apache2/bin/apxs \ > --with-mysql=/usr/local/mysql/ \ > --with-libxml-dir=/usr/local/libxml2/ \ > --with-png-dir=/usr/local/libpng/ \ > --with-jpeg-dir=/usr/local/jpeg8/ \ > --with-freetype-dir=/usr/local/freetype/ \ > --with-gd=/usr/local/gd/ \ > --with-zlib-dir=/usr/local/zlib/ \ > --with-mcrypt=/usr/local/libmcrypt/ \ > --with-mysqli=/usr/local/mysql/bin/mysql_config \ > --enable-soap \ > --enable-mbstring=all \ > --enable-sockets [root@test3 php-5.4.11]#make [root@test3 php-5.4.11]#make install
報錯1,make:***[ext/gd/gd.lo]Error1這個錯誤是php5.4的一個bug
解決方法
vi/usr/local/gd/include/gd_io.h
gdIOCtx結構中增加void*data;
typedefstructgdIOCtx
{
int(*getC)(structgdIOCtx*);
int(*getBuf)(structgdIOCtx*,void*,int);
void(*putC)(structgdIOCtx*,int);
int(*putBuf)(structgdIOCtx*,constvoid*,int);
/*seekmustreturn1onSUCCESS,0onFAILURE.Unlikefseek!*/
int(*seek)(structgdIOCtx*,constint);
long(*tell)(structgdIOCtx*);
void(*gd_free)(structgdIOCtx*);
void(*data);
}
報錯2,libltdl.so.3:cannotopensharedobjectfile:Nosuchfileordirectory
make:***[ext/phar/phar.php]Error127
解決方法:
ln-s/usr/local/lib/libltdl.so.3/usr/lib/libltdl.so.3
[root@test3~]#cd/usr/local/libpng/lib/
[root@test3lib]#ls
libpng15.alibpng15.solibpng15.so.15.10.0libpng.lapkgconfig
libpng15.lalibpng15.so.15libpng.alibpng.so
可以看到libpng15.so.15
然後修改/etc/ld.so.conf文件:vi/etc/ld.so.conf
在第一行下面追加/usr/local/libpng/lib這個路徑。
安裝完成後,需要建立PHP配置文件。在使用configure命令安裝配置時使用“--with-config-file-path=/usr/local/php/etc/”選項,指定了配置文件的位置。將源碼包下面的php.ini-development文件複製到/usr/local/php/etc/中,並改名爲php.ini即可,如下示:
[[email protected]]#cpphp.ini-development/usr/local/php/etc/php.ini
修改php.ini把;date.timezone前面的分號去掉,改成date.timezone="PRC"
整合Apache與PHP,上面編譯之前,我們使用configure命令安裝配置時,使用--with-apxs2=/usr/local/apache242/bin/apxs選項以使Apache2將PHP作爲功能模塊使用。但我們還要修改Apahce配置文件,添加PHP的支持,告訴Apache將哪些後綴作爲PHP解析。例如,讓Apache把.php或.phtml後綴名解析爲PHP.使用vi打開Apache的配置文件/etc/httpd/httpd.conf,找到AddTypeapplication/x-gzip.gz.tgz指令選項,並在其下方添加一條指令AddTypeapplication/x-httpd-php.php.phtml。也可以將任何後綴的文件解析爲PHP,只要在添加的語句中加入並用空格分開,這裏以多添加一個.phtml來示例,如下示:
#IftheAddEncodingdirectivesabovearecommented-out,thenyou
#probablyshoulddefinethoseextensionstoindicatemediatypes:
AddTypeapplication/x-compress.Z
AddTypeapplication/x-gzip.gz.tgz
AddTypeapplication/x-httpd-php.php.phtml
測試PHP環境是否可以正常運行,在/usr/local/apache243/htdocs目錄下建一個test.php或test.phtml的文件,內容如下示:
<?php
phpinfo();
?>
五,phpMyAdmin的安裝
1、進入軟件源碼所在的目錄/usr/local/src/中,並解壓軟件包phpMyAdmin-3.5.6-all-languages.tar.gz到當前目錄phpMyAdmin-3.5.6-all-languages下。
2、把解壓的目錄phpMyAdmin-3.5.6-all-languages下的文件,全部複製到Apache的/usr/local/apache243/htdocs下,並新建一個名爲phpmyadmin的目錄下面,即安裝完成。
[root@localhostsrc]#cp-aphpMyAdmin-3.5.6-all-languages/usr/local/apache243/htdocs/phpmyadmin
3、在使用phpmyadmin之前,也需要先配置一下。配置的方法是通過對phpmyadmin頂層目錄下的config.inc.php文件中的幾個選項做一些設置即可。默認不存在config.inc.php文件,我們需要手工創建一個,也可以複製config.sample.inc.php模板得到最低限度的配置文件。
[root@localhostsrc]#cd/usr/local/apache243/htdocs/phpmyadmin/
[root@localhostphpmyadmin]#cpconfig.sample.inc.phpconfig.inc.php
phpMyAdmin的配置
我們通過身份驗證模式的要求,可以有兩種配置方案,一種是http和cookie身份驗證模式。在這兩種模式下,用戶必須先在一個登錄窗口裏輸入MySQL數據庫的有效用戶名和密碼,才能使用phpMyAdmin程序。這種做法有兩個明顯的好處;首先,因爲MySQL數據庫的密碼沒有出現在config.inc.php文件裏,所以身份驗證過程更加安全;其次,允許以不同的用戶身份登錄對自己的數據庫進行管理。這兩種身份驗證模式尤其適合數據庫中多個用戶賬號的情況。
第二種方案是,config身份驗證模式。這種情況下,密碼以明文形式保存在config.inc.php文件裏。只需要把MySQL用戶名和密碼直接寫入到config.inc.php文件即可。這樣,在登錄phpMyAdmin時就不會提示輸入用戶名和密碼了,而只直接用config.inc.php文件裏寫入的用戶登錄。如果只是在一個本地測試系統上使用phpMyAdmin,可以使用這種模式。
1、http身份驗證模式
如果想讓phpMyAdmin使用HTTP身份驗證模式,首先需要在config.inc.php文件做如下修改:
$cfg['Servers'][$i]['auth_type']='http';
當完成設置之後,我們啓動phpMyAdmin時,屏幕上將彈出一個WEB瀏覽器對話框,需要在這個對話框裏輸入MySQL用戶名和密碼,才能進入phpMyAdmin操作界面。如下圖示,在windows客戶端用IE瀏覽器,訪問WEB服務器的phpMyAdmin目錄下的index.php文件,即可啓動phpMyAdmin
2、cookie身份驗證模式
cookie身份驗證模式是HTTP身份驗證模式的補充,不能使用HTTP身份驗證模式的場合都可以使用它。cookie身份驗證模式要求用戶必須允許來自phpMyAdmin的cookie進入自己的計算機。即用戶需要在瀏覽器中開啓客戶端的cookie功能。
如果想讓phpMyAdmin使用cookie身份驗證模式,除了必須修改config.inc.php文件裏的auth_type語句外,還必須向blowfish_secret參數提供一個字符串。這個字符串可以是任意的,目的是在把登錄時使用的用戶和密碼存儲在客戶端電腦上的cookie之前,系統將會使用這個字符串對它們進行加密碼
$cfg['blowfish_secret']='a8b7c6d';
$cfg['Servers'][$i]['auth_type']='cookie';
3、config身份驗證模式
如果想讓phpMyAdmin使用config身份驗證模式,首先需要在config.inc.php文件裏做出如下所示的修改。把MySQL數據庫的用戶名和密碼以明文的方式寫入,具體修改內容如下
$cfg['Servers'][$i]['auth_type']='config';
/*Serverparameters*/
$cfg['Servers'][$i]['host']='localhost';
$cfg['Servers'][$i]['user']='chen';
$cfg['Servers'][$i]['password']='chen';
和上面啓動phpMyAdmin的方式一樣,我們在windows客戶端使用IE瀏覽器,訪問WEB服務器上的phpMyAdmin目錄下的index.php文件。提供MySQL的用戶名和密碼就可以登錄,它是使用config.inc.php中以明文方式寫入的用戶名和密碼登錄的
解決不能通過mysql.sock連接MySQL問題的辦法phpmyadmin的說明書有說
ForRedHatusers,HaraldLegnersuggeststhisonthemailinglist:
OnmyRedHat-Boxthesocketofmysqlis/var/lib/mysql/mysql.sock.Inyourphp.iniyouwillfindaline
mysql.default_socket=/tmp/mysql.sock
changeitto
mysql.default_socket=/var/lib/mysql/mysql.sock
Thenrestartapacheanditwillwork.
HereisafixsuggestedbyBradUmmerinthephpwizardforum:
First,youneedtodeterminewhatsocketisbeingusedbyMySQL.
Todothis,telnettoyourserverandgototheMySQLbindirectory.Inthisdirectorythereshouldbeafilenamedmysqladmin.Type./mysqladminvariables,andthisshouldgiveyouabunchofinfoaboutyourMySQLserver,includingthesocket(/tmp/mysql.sock,forexample).
Then,youneedtotellPHPtousethissocket.
AssumingyouareusingPHP3.0.10orbetter,youcanspecifythesockettousewhenyouopentheconnection.TodothisinphpMyAdmin,youneedtocompletethesocketinformationintheconfig.inc.php3.
Forexample:$cfg['Servers'][$i]['socket']='/tmp/mysql.sock';
六,安裝和使用memcached
體系結構相當容易理解。我建立了一個Web層,其中包括一些Apache實例。下一層是應用程序本身。這一層通常運行於ApacheTomcat或其他開源應用服務器之上。再下面一層是配置memcached實例的地方—即應用服務器與數據庫服務器之間。在使用這種配置時,需要採用稍微不同的方式來執行數據庫的讀取和寫入操作。它可以應對任意多個連接,使用非阻塞的網絡IO。由於它的工作機制是在內存中開闢一塊空間,然後建立一個HashTable,Memcached自管理這些HashTable。
我執行讀取操作的順序是從Web層獲取請求(需要執行一次數據庫查詢)並檢查之前在緩存中存儲的查詢結果。如果我找到所需的值,則返回它。如果未找到,則執行查詢並將結果存儲在緩存中,然後再將結果返回給Web層。
將數據寫入到數據庫中時,首先需要執行數據庫寫入操作,然後將之前緩存的任何受此寫入操作影響的結果設定爲無效。此過程有助於防止緩存和數據庫之間出現數據不一致性。
Memcache函數庫是在PECL(PHPExtensionCommunityLibrary)中,主要作用是搭建大容量的內存數據的臨時存放區域,在分佈式環境下的作用體現的非常明顯。
libevent是安裝memcached的唯一前提條件。它是memcached所依賴的異步事件通知庫。
# cd /usr/src # wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz # tar vxf libevent-1.4.12-stable.tar.gz # cd libevent-1.4.12 # ./configure --prefix=/usr/local/libevent # make && make install
#wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz #tar zxvf memcached-1.4.13.tar.gz #cd memcached-1.4.13 #./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent #make #make install #ln -s /usr/local/memcached/bin/memcached /usr/local/bin/
2,安裝memcached的php擴展
首先到http://pecl.php.net/package/memcache下載memcache的php擴展最新穩定版本
#wget http://pecl.php.net/get/memcache-2.2.5.tgz #tar zxvf memcache-2.2.5.tgz 編譯安裝: [root@Linux ~]#cd memcache-2.2.5 [root@Linux ~]#/usr/local/php/bin/phpize [root@Linux ~]#./configure --enable-memcache --with-php-config=/usr/bin/php-config --with-zlib-dir=/usr/local/zlib [root@Linux ~]#make [root@Linux ~]#make install 在php.ini文件中添加memcache擴展 [root@Linux ~]#vim /etc/php.d/php.ini 添加以下內容 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060922/" extension=memcache.so 檢驗memcache安裝 [root@Linux ~]#php -m [...] memcache mysql mysqli [...
可能會遇到error:toofewargumentstofunction‘zend_list_insert’
其實這是個bug
解決:打開memcache.c文件,
將所有的:zend_list_insert(pool,le_memcache_pool);
zend_list_insert(mmc,le_pmemcache);
改爲:zend_list_insert(pool,le_memcache_poolTSRMLS_CC);
zend_list_insert(mmc,le_pmemcacheTSRMLS_CC);
保存,退出繼續編譯,成功搞定!
3,啓動memcached
[root@Linux~]#memcached-d-m10-uroot-l127.0.0.1-p11211-c256-P/tmp/memcached
參數說明:
-d選項是啓動一個守護進程,
-m是分配給Memcache使用的內存數量,單位是MB,這裏是10MB,
-u是運行Memcache的用戶,我這裏是root,
-l是監聽的服務器IP地址,如果有多個地址的話,由於是本地開發(非實際運行環境)這裏指定了服務器的IP地址127.0.0.1,
-p是設置Memcache監聽的端口,這裏設置了11211,最好是1024以上的端口,
-c選項是最大運行的併發連接數,默認是1024,這裏設置了256,按照服務器的負載量來設定,
-P是設置保存Memcache的pid文件,這裏是保存在/tmp/memcached.pid。
#ln-s/usr/local/lib/libevent-2.0.so.5/lib64/libevent-2.0.so.5
#ldd/usr/local/bin/memcached
linux-vdso.so.1=>(0x00007fff8e9ff000)
libevent-2.0.so.5=>/lib64/libevent-2.0.so.5(0x00007fe494e34000)
libpthread.so.0=>/lib64/libpthread.so.0(0x00007fe494c17000)
libc.so.6=>/lib64/libc.so.6(0x00007fe494884000)
librt.so.1=>/lib64/librt.so.1(0x00007fe49467c000)
/lib64/ld-linux-x86-64.so.2(0x00007fe495087000)
ok,重新啓動memcached