1. 程式人生 > 實用技巧 >LAMP 全功能編譯安裝 for CentOS6.3筆記(更新)

LAMP 全功能編譯安裝 for CentOS6.3筆記(更新)

最近抽空在虛擬機器上測試成功了LAMP各個最新版本的整合編譯安裝,算是把之前的博文整合精簡,以下內容均在CENTOS6.3(安裝minimaldesktop和預設開發包)下測試安裝成功,並做了相應優化配置,如有遺漏,還請留言指教.


LINUX作業系統:centOS6.364bit(安裝了系統預設開發包)

APACHE:httpd-2.4.4

MYSQL:mysql-5.6.10

PHP:php-5.4.13

注:推薦安裝centos6.3系統時,在系統安裝嚮導中將預設開發包勾上,避免後期編譯報錯。


一.安裝開發包(使用預設CENTOS更新源):

#yum-yinstallwgetgcc-c++ncurses-develcmakemakeperl


二.關閉iptables和SELINUX

#serviceiptablesstop

#setenforce0

#vi/etc/sysconfig/selinux

---------------

SELINUX=disabled

---------------


三.安裝mysql資料庫


#wgethttp://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz/from/http://cdn.mysql.com/


#useradd-d/usr/local/mysql/mysql建立一個Mysql使用者,指定家目錄到/use/local目錄下。

#mkdir/usr/local/mysql/data

#mkdir/usr/local/mysql/log新建一個目錄

#chown-Rmysql:mysql/usr/local/mysql/data/

#chown-Rmysql:mysql/usr/local/mysql/log/

#chmod750/usr/local/mysql/data

#chmod750/usr/local/mysql/log修改目錄的所屬者以及所屬組

#tar-zxv-fmysql-5.6.10.tar.gz解包

#cdmysql-5.6.10

#cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql\

-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock\

-DDEFAULT_CHARSET=gbk\

-DDEFAULT_COLLATION=gbk_chinese_ci\

-DEXTRA_CHARSETS=all\

-DWITH_MYISAM_STORAGE_ENGINE=1\

-DWITH_INNOBASE_STORAGE_ENGINE=1\

-DWITH_ARCHIVE_STORAGE_ENGINE=1\

-DWITH_BLACKHOLE_STORAGE_ENGINE=1\

-DWITH_MEMORY_STORAGE_ENGINE=1\

-DWITH_READLINE=1\

-DENABLED_LOCAL_INFILE=1\

-DMYSQL_DATADIR=/usr/local/mysql/data\

-DMYSQL_USER=mysql\

-DMYSQL_TCP_PORT=3306


#make

#makeinstall

#複製配置檔案

cp/usr/local/mysql/support-files/my-default.cnf/etc/my.cnf


#vi/etc/my.cnf

-------------------

[mysql]


#CLIENT#

port=3306

socket=/var/lib/mysql/mysql.sock


[mysqld]


#GENERAL#

user=mysql

default_storage_engine=InnoDB

socket=/var/lib/mysql/mysql.sock

pid_file=/var/run/mysqld/mysqld.pid


#MyISAM#

key_buffer_size=32M

myisam_recover=FORCE,BACKUP


#SAFETY#

max_allowed_packet=16M

max_connect_errors=1000000

skip_name_resolve

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

sysdate_is_now=1

innodb=FORCE

innodb_strict_mode=1


#DATASTORAGE#

datadir=/usr/local/mysql/data


#BINARYLOGGING#

log-bin=/usr/local/mysql/log/bin.log

expire_logs_days=30

sync_binlog=1


#CACHESANDLIMITS#

key_buffer=256M

max_allowed_packet=32M

sort_buffer_size=16M

read_buffer_size=4M

read_rnd_buffer_size=16M

thread_stack=8M

tmp_table_size=32M

max_heap_table_size=32M

query_cache_type=1

query_cache_size=128M

query_cache_limit=2M

max_connections=2048

thread_cache_size=512

open_files_limit=65535

table_definition_cache=1024

table_open_cache=2048


#INNODB#

innodb_log_files_in_group=2

innodb_log_file_size=64M

innodb_flush_log_at_trx_commit=1

innodb_file_per_table=1

innodb_buffer_pool_size=2G


#LOGGING#

log-error=/usr/local/mysql/log/error.log

general_log=1

general_log_file=/usr/local/mysql/log/mysql.log

slow_query_log=1

slow_query_log_file=/usr/local/mysql/log/slowquery.log

log-output=FILE


#避免MySQL的外部鎖定,減少出錯機率增強穩定性#

skip-external-locking


#禁止sql讀取本地檔案#

local-infile=0


--------------------

#進入安裝路徑

cd/usr/local/mysql


#執行配置指令碼

scripts/mysql_install_db--user=mysql--datadir=/usr/local/mysql/data


#複製服務啟動指令碼

cp/usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld


#chkconfig--addmysqld#新增開機啟動服務

#chkconfig--level35mysqldon#設定mysql啟動

#servicemysqldstart#啟動資料庫

#ln-s/var/lib/mysql/mysql.sock/tmp/mysql.sock建立一個mysql介面的軟連結

#/usr/local/mysql/bin/mysqladmin-urootpassword123456#設定密碼

#/usr/local/mysql/bin/mysql-uroot-p123456#連線資料庫

mysql>createdatabasephpwind;#---建立資料庫

mysql>grantallprivilegeson*.*to[email protected]'%'identifiedby'123456'withgrantoption;#給root使用者非本地連結所有許可權,並改密碼和賦予其給其他人下發許可權.

mysql>showvariables;#檢視mysql設定.


#這裡是把mysql檔案連結到預設位置,必須做這步,在編譯其他軟體的時候自定義mysql的庫檔案路徑。

#ln-s/usr/local/mysql/lib/mysql/usr/lib/mysql

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


注:從啟MYSQL也可使用以下命令開啟此服務

#/usr/local/mysql/bin/safe_mysqld

如果不設定chkconfig啟動項,也可在/etc/rc.local下新增如下命令,使mysql服務利用系統啟動指令碼執行.

#/usr/local/mysql/bin/safe_mysqld--user=mysql&




四.安裝apache網站服務


1pcre安裝

#wgethttp://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download

#tar-xzvfpcre-8.32.tar.gz

#cdpcre-8.32

#./configure--prefix=/usr/local/pcre

#make&&makeinstall

2.安裝httpd

其實這裡在apache官網找不到httpd-2.4.4-deps.tar.bz2的編譯包,不知道官方怎麼想的,最後研究了下最近的2.43deps版本,解壓該編譯包,發現裡面放的其實就是apr和apr-util兩個apache的依賴包,現在的方法是直接把2.43的包解壓到apache安裝根目錄即可連同apache編譯安裝,最後能正常安裝使用,算是一個無奈之舉,但安裝起來較網上單獨編譯安裝依賴包要簡便一些.

#wgethttp://archive.apache.org/dist/httpd/httpd-2.4.3-deps.tar.bz2

#wgethttp://archive.apache.org/dist/httpd/httpd-2.4.4.tar.bz2

解壓安裝

注:httpd-2.4.3-deps.tar.bz2已整合APR,安裝apache前檢查pcre是否安裝成功.

#tarjxvfhttpd-2.4.4.tar.bz2

#tarjxvfhttpd-2.4.3-deps.tar.bz2

#cp-rfhttpd-2.4.3/*httpd-2.4.4

#cdhttpd-2.4.4


#偽裝Apache版本資訊

---------------

修改include/ap_release.h檔案"Apache"引數為"Microsoft-IIS/5.0"

修改os/unix/os.h檔案"Unix"引數為"Win32"

#cdhttpd-2.4.4

#viinclude/ap_release.h

#defineAP_SERVER_BASEPRODUCT"Apache"

改為

#defineAP_SERVER_BASEPRODUCT"Microsoft-IIS/5.0"


#vios/unix/os.h

#definePLATFORM"Unix"

改成

#definePLATFORM"Win32"

----------------


----------隨筆-----------------

這裡走了一些彎路,網上很多資料上寫到apache2.4版本開啟預設多執行緒模式時,都是在修改conf/extra/httpd-mpm.conf下preforkMPM處引數,但當我實際操作的時候發現,修改後系統的apache程序並未增加,但在2.2下修改此引數則沒有任何問題,最近研究worker模式下才發現到,實際你啟用worker模式後,執行此命令

#/usr/local/apache2/bin/apachectl-l

返回的結果如下:

core.c

mod_so.c

http_core.c

worker.c

看到worker.c,這裡就想到是不是使用預設的執行緒模式顯示的*.c的這個*就是apache根目錄conf/extra/httpd-mpm.conf下對應的引數,想到這個疑問然後就使用預設執行緒模式從新編譯了下apache,執行命令

#/usr/local/apache2/bin/apachectl-l

返回:

core.c

mod_so.c

http_core.c

event.c

OK,到conf/extra/httpd-mpm.conf下,檢視有如下幾行引數

<IfModulempm_event_module>

StartServers3

MinSpareThreads75

MaxSpareThreads250

ThreadsPerChild25

MaxRequestWorkers400

MaxConnectionsPerChild0

</IfModule>

將StartServers引數修改成10

#lsof-i:80

[[email protected]apache2]#lsof-i:80

COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME

httpd1302root4uIPv61065230t0TCP*:http(LISTEN)

httpd21852daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21854daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21855daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21856daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21857daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21858daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21859daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21860daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21936daemon4uIPv61065230t0TCP*:http(LISTEN)

httpd21937daemon4uIPv61065230t0TCP*:http(LISTEN)

問題解決,看來2.4版本的apache預設執行緒是需要修改event引數,這裡請注意.

--------------------


編譯預設eventMPM模式(推薦)

#./configure--prefix=/usr/local/apache2--enable-so--enable-rewrite--with-pcre=/usr/local/pcre/bin/pcre-config


編譯workerMPM模式(可選,能正常開啟服務,但本人未做過相關網站測試,不推薦生產環境下使用)

#./configure--prefix=/usr/local/apache2--enable-so--enable-rewrite-with-mpm=worker--with-pcre=/usr/local/pcre/bin/pcre-config


#make&&makeinstall


#防止apache啟動報錯.

vi/usr/local/apache2/conf/httpd.conf

新增:

ServerNamelocalhost:80


#/usr/local/apache2/bin/apachectlstart啟動apache


注:vi/etc/rc.local

新增如下命令,使apache服務開機執行

/usr/local/apache2/bin/apachectlstart


配置apache:

1.禁止地址目錄訪問和索引:

#vi/usr/local/apache2/conf/httpd.conf

搜尋OptionsIndexesFollowSymLinks

將其前面加#註釋

#OptionsIndexesFollowSymLinks


2.隱藏版本號:

#vi/usr/local/apache2/conf/httpd.conf

加入以下兩行:

ServerTokensProductOnly

ServerSignatureOff


3.優化執行緒數:

如果apche訪問量過大,將會導致頁面開啟遲緩,下載速度也降低,如果由於經費和環境問題,可以通過對Apache2增加模組MPM來進行優化,這裡我選擇執行緒型MPM加以優化:

注:此方法僅對編譯安裝apache有效:

a.開啟mpm:

#vi/usr/local/apache2/conf/httpd.conf

找到以下這行內容,去掉註釋.

Includeconf/extra/httpd-mpm.conf(如果沒有此段程式碼可以新加。沒有此檔案httpd-mpm.conf可以新建,也可以直接加程式碼到)

b.優化配置:

#vi/usr/local/apache2/conf/extra/httpd-mpm.conf

找到如下程式碼,修改成以下引數即可.

#eventMPM配置:

<IfModulempm_event_module>

StartServers5

ServerLimit5000

MaxClients4000

MinSpareThreads100

MaxSpareThreads400

ThreadLimit200

ThreadsPerChild100

MaxRequestWorkers400

MaxRequestsPerChild100

</IfModule>



#workerMPM配置:


<IfModulempm_event_module>

StartServers5

ServerLimit5000

MaxClients4000

MinSpareThreads100

MaxSpareThreads400

ThreadLimit200

ThreadsPerChild100

MaxRequestWorkers400

MaxRequestsPerChild100

</IfModule>


---------------------------

其中最重要的引數是ThreadsPerChild和MaxClients:


#ThreadsPerChild

每個子程序建立的執行緒數,子程序在啟動時建立這些執行緒後就不再建立新的執行緒了

#MaxClients

允許同時伺服的最大接入請求數量(在worker下就是最大執行緒數量)

#ServerLimit:

對最大子程序數的上限,該值必須大於等於MaxClients/ThreadsPerChild

#ThreadLimit:

對ThreadsPerChild的上限,該值必須大於等於ThreadsPerChild,如果將ThreadLimit設定成一個高出實際需要很多的ThreadsPerChild值,將會有過多的共享記憶體被分配,應當和ThreadsPerChild可能達到的最大值保持一致.

#StartServers:

伺服器啟動時的服務程序數目,該值肯定小於等於ServerLimit

#MinSpareThreads和MaxSpareThreads:

通過新建或結束子程序的方式,將空閒執行緒的總數維持在這個範圍內

#MaxRequestsPerChild:

用於控制伺服器建立新程序和結束舊程序的頻率,其實是一個為了防止記憶體溢位的引數,每個子程序在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子程序將會結束。對於KeepAlive連結,只有第一個請求會被計數。事實上,它改變了每個子程序限制最大連結數量的行為。


可以通過檢查HTTPServer/logs/error_log日誌,判斷MaxClients是否需要增加,如果有下面的報錯,就說明apache自上次重啟至今,曾經發生過達到MaxClients的情況:

--------------------------

4.關閉TRACEMethod.

#vi/usr/local/apache2/conf/httpd.conf


TraceEnableoff


5.實現service和chkconfig系統控制httpd開啟關閉


#vi/etc/ld.so.conf.d/apache2.4.4.conf

-----------


/usr/local/apache2/lib


------------


#cp/usr/local/apache2/bin/apachectl/etc/init.d/httpd


#vi/etc/init.d/httpd

在首行#!/bin/sh下面新增:

----------------

#chkconfig:3456161

#description:Apachehttpd

---------------


#chkconfig--addhttpd


#chkconfighttpdon


#servicehttpdrestart


6.修改log日誌格式實現每天儲存.

#vi/usr/local/apache2/conf/httpd.conf

找到CustomLog和ErrorLog行,註釋掉修改為以下引數


CustomLog"|/usr/local/apache2/bin/rotatelogs/usr/local/apache2/logs/%Y_%m_%d.access_log86400480"combined

ErrorLog"|/usr/local/apache2/bin/rotatelogs/usr/local/apache2/logs/%Y_%m_%d.error_log86400480"



五.安裝php模組

1.處理依賴包

暫無..

2.安裝PHP

#wgethttp://cn2.php.net/distributions/php-5.4.13.tar.bz2

#tar-jxvfphp-5.4.13.tar.bz2

#cdphp-5.4.13

此處編譯安裝了我們專案經常用到的PHP模組,如有其它需要可以自定義新增.

#./configure--prefix=/usr/local/php5--with-apxs2=/usr/local/apache2/bin/apxs--with-libxml-dir=/usr/local/lib--with-zlib-dir=/usr/local/lib--with-mysql=/usr/local/mysql--with-mysqli=/usr/local/mysql/bin/mysql_config--with-gd--enable-soap--enable-sockets--enable-xml--enable-mbstring--with-png-dir=/usr/local--with-jpeg-dir=/usr/local--with-curl=/usr/lib--with-freetype-dir=/usr/include/freetype2/freetype/--enable-bcmath--enable-maintainer-zts

#注:其中最後一個引數--enable-maintainer-zts在安裝PHP5.4最新版本時必須新增(5.3貌似不需要),表示開啟PHP程序安全ThreadSafe,預設不新增為NONThreadSafe,開啟apache服務會報錯.....(此處被坑了一下午...#$%^&*)

#make

#makeinstall

安裝結束後:

#新增php配置檔案,需要CP一個原始碼裡面的php.ini-development或php.ini-production到/usr/local/php/lib為php.ini

#cd~/php-5.4.13

#cpphp.ini-development/usr/local/php5/lib/php.ini


然後配置APACHE的PHP模組:

編輯Apache配置檔案,即/usr/local/apache2/conf/httpd.conf,

並新增以下一行:AddTypeapplication/x-httpd-php.php

並在DirectoryIndex一行後面加上index.php

如果PHP無法載入,檢查httpd.conf配置下是否有該行配置(預設安裝PHP後會自動將該行寫入)

LoadModulephp5_modulemodules/libphp5.so


注:編譯安裝的apache網頁存放路徑跟rpm包安裝的不一樣。編譯安裝的路徑在/usr/local/apache2/htdocs/

可新增以下內容info.php到/usr/local/apache2/htdocs/下,測試php模組是否載入.

#vi/usr/local/apache2/htdocs/info.php

---------------

<?php

echophpinfo();

?>

---------------

檢查80埠是否開啟

#lsof-i:80

瀏覽器輸入http://localhost/info.php

顯示有如下測試頁面內容,PHP模組即在APACHE下載入成功


175502705.png


175904282.png


175919937.png


測試本地mysql是否正常連線

#vi/usr/local/apache2/htdocs/index.php

---------------------


<html><body><h1>Thepagetotestmysqllocalconnection.</h1></body></html>

<?php

$conn=mysql_connect('localhost','root','123456');

if($conn)

echo"<h2>Success...</h2>";

else

echo"<h2>Failure...</h2>";


?>


---------------------

瀏覽器輸入http://localhost

顯示如下頁面,表示連線成功.


100109589.jpg


PHP配置:(修改php.ini,預設目錄/usr/local/php5/lib/php.ini)

vi/usr/local/php5/lib/php.ini

-------------------------

#隱藏PHP版本資訊:
expose_php=Off

#關閉警告及錯誤資訊,爆路徑:

display_errors=Off

#調整時區,防止phpinfo()函式報錯.

date.timezone=PRC

#開啟php錯誤日誌並設定路徑.

log_errors=On

error_log=/usr/local/apache2/logs/php_error.log


--------------大功告成O(∩_∩)O~-----------------

覺得不錯,請大家回帖支援下....


本文出自“一路向北”部落格,請務必保留此出處http://showerlee.blog.51cto.com/2047005/1174141

轉載於:https://blog.51cto.com/lucifer119/1222519