天天看點

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

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

我的部落格新站已經建好,更多新的内容即将在新站更新。。

<a href="http://www.showerlee.com/" target="_blank"></a>

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

APACHE:httpd-2.4.4

MYSQL:mysql-5.6.10

PHP:php-5.4.13

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

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

# yum -y install wget gcc-c++ ncurses ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel libjpeg* libpng* freetype*

二.關閉iptables和SELINUX

# service iptables stop

# setenforce 0

# vi /etc/sysconfig/selinux

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

SELINUX=disabled

三.安裝mysql資料庫

1.下載下傳編譯包:

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

2.安裝前的初始配置工作:

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

# mkdir /usr/local/mysql/data          

# mkdir /usr/local/mysql/log           #建立mysql下data和log子目錄

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

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

# chmod 750 /usr/local/mysql/data      

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

3.解包編譯安裝

# tar -zxv -f mysql-5.6.13.tar.gz      

# cd mysql-5.6.13  

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

-DMYSQL_UNIX_ADDR=/tmp/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_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1 \

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

-DMYSQL_USER=mysql \

-DMYSQL_TCP_PORT=3306 \

-DSYSCONFDIR=/etc \

-DWITH_SSL=yes

#  make &amp; make install

編譯注解:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \         #安裝目錄

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \               #Unix socket檔案路徑,自定義此路徑防報錯

-DDEFAULT_CHARSET=gbk \                           #預設字元

-DDEFAULT_COLLATION=gbk_chinese_ci \              #校驗字元

-DEXTRA_CHARSETS=all \                            #安裝所有擴充字元集

-DWITH_MYISAM_STORAGE_ENGINE=1 \                  #安裝myisam存儲引擎

-DWITH_INNOBASE_STORAGE_ENGINE=1 \                #安裝innodb存儲引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                 #安裝archive存儲引擎

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \               #安裝blackhole存儲引擎

-DWITH_MEMORY_STORAGE_ENGINE=1 \                  #安裝memory存儲引擎

-DWITH_FEDERATED_STORAGE_ENGINE=1 \               #安裝frderated存儲引擎

-DWITH_READLINE=1 \                               #快捷鍵功能

-DENABLED_LOCAL_INFILE=1 \                        #允許從本地導入資料

-DMYSQL_DATADIR=/usr/local/mysql/data \           #資料庫存放目錄

-DMYSQL_USER=mysql \                              #資料庫屬主

-DMYSQL_TCP_PORT=3306 \                           #資料庫端口

-DSYSCONFDIR=/etc \                               #MySQL配輯檔案

-DWITH_SSL=yes                                    #資料庫SSL

4.編寫mysql配置項:

#  vi /etc/my.cnf

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

[mysql]

# CLIENT #

port                           = 3306

socket                         = /tmp/mysql.sock

[mysqld]

# GENERAL #

user                           = mysql

default_storage_engine         = InnoDB

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

# DATA STORAGE #

datadir                        = /usr/local/mysql/data

# BINARY LOGGING #

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

expire_logs_days               = 30

sync_binlog                    = 1

# CACHES AND LIMITS #

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

# 2G這個值配置低的話建議改小即可

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

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

5.将mysql的庫檔案路徑加入系統的庫檔案搜尋路徑中

方法一:直接做軟連結

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

方法二:利用ldconfig導入系統庫

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

# ldconfig

6.輸出mysql的頭檔案到系統頭檔案

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

7.進入安裝路徑,初始化配置腳本

# cd /usr/local/mysql

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

8.複制mysql啟動腳本到系統服務目錄

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

9.系統啟動項相關配置

# chkconfig --add mysqld  #添加開機啟動服務

# chkconfig --level 35 mysqld on  #設定mysql啟動

10.啟動mysql

# service mysqld start  

注:編譯時若socket路徑自定義為/var/lib/mysql/mysql.sock,這裡需要建立一個mysql接口的軟連結,防止登陸背景或安裝論壇報錯.

# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock  

11. 設定初始賬戶,并登陸背景:

# /usr/local/mysql/bin/mysqladmin -u root password 123456   #設定密碼

# /usr/local/mysql/bin/mysql -u root -p123456     #連接配接資料庫

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

mysql&gt; create database phpwind;      #建立資料庫

mysql&gt; grant all privileges on *.* to root@'%' identified by '123456' with grant option;  #給root使用者非本地連結所有權限,并改密碼和賦予其給其他人下發權限.

mysql&gt; show variables; #檢視mysql設定.

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

# /usr/local/mysql/bin/safe_mysqld

如果不設定chkconfig啟動項,也可在/etc/rc.local下添加如下指令,使mysql服務利用系統啟動腳本運作.

# echo "/usr/local/mysql/bin/safe_mysqld --user=mysql &amp;" &gt;&gt; /etc/rc.local

12 添加mysql指令集到系統全局變量

注:如果系統之前未安裝mysql用戶端,可以将編譯好的mysql指令集導入系統全局變量

以後就可以直接使用mysql指令集,而不需要使用絕對路徑通路.

# echo "PATH=$PATH:/usr/local/mysql/bin;export PATH" &gt;&gt; /etc/profile

# source /etc/profile

四.安裝apache網站服務

1.pcre依賴包安裝

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

# tar -xzvf pcre-8.32.tar.gz

# cd pcre-8.32

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

# make &amp;&amp; make install

2.下載下傳apache

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

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

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

3.解包

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

# tar jxvf httpd-2.4.4.tar.bz2

# tar jxvf httpd-2.4.3-deps.tar.bz2

# cp -rf httpd-2.4.3/* httpd-2.4.4

# cd httpd-2.4.4

4.僞裝Apache版本資訊

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

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

# vi include/ap_release.h

#define AP_SERVER_BASEPRODUCT "Apache"

改為

#define AP_SERVER_BASEPRODUCT "Microsoft-IIS/5.0"

# vi os/unix/os.h

#define PLATFORM "Unix"

改成

#define PLATFORM "Win32"

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

----------随  筆-----------------

這裡走了一些彎路,網上很多資料上寫到apache2.4版本打開預設多線程模式時,都是在修改conf/extra/httpd-mpm.conf下prefork MPM處參數,但當我實際操作的時候發現,修改後系統的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,執行指令

傳回:

 core.c

event.c

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

&lt;IfModule mpm_event_module&gt;

   StartServers            3

   MinSpareThreads         75

   MaxSpareThreads        250

   ThreadsPerChild         25

   MaxRequestWorkers      400

   MaxConnectionsPerChild   0

&lt;/IfModule&gt;

将StartServers 參數修改成10

# lsof -i:80

[root@lamp apache2]# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

httpd    1302   root    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21852 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21854 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21855 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21856 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21857 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21858 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21859 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21860 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21936 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

httpd   21937 daemon    4u  IPv6 106523      0t0  TCP *:http (LISTEN)

問題解決,看來2.4版本的apache預設線程是需要修改event參數,這裡請注意.

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

5.編譯安裝:

編譯預設event MPM模式(推薦)

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

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

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

#  防止apache啟動報錯.

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

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

ServerName localhost:80

6.啟動apache

# /usr/local/apache2/bin/apachectl start    

設定開機啟動

# echo "/usr/local/apache2/bin/apachectl start" &gt;&gt; /etc/rc.local

7.配置apache:

1).禁止位址目錄通路和索引:

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

搜尋  Options Indexes FollowSymLinks

将其前面加#注釋

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

# Options Indexes FollowSymLinks

2).隐藏版本号:

加入以下兩行:

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

ServerTokens ProductOnly

ServerSignature Off

3).優化線程數:

如果apche通路量過大,将會導緻頁面打開遲緩,下載下傳速度也降低,如果由于經費和環境問題,可以通過對Apache2增加子產品MPM來進行優化, 這裡我選擇線程型MPM加以優化:

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

a.開啟mpm:

找到以下這行内容,去掉注釋.

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

b.優化配置:

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

找到如下代碼,修改成以下參數即可.

# event MPM配置:

  StartServers 5

  ServerLimit 5000

  MaxClients 4000

  MinSpareThreads 100

  MaxSpareThreads 400

  ThreadLimit 200

  ThreadsPerChild 100

  MaxRequestWorkers    400

  MaxRequestsPerChild  100

# worker MPM配置:

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

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

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

#ThreadsPerChild

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

#MaxClients

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

#ServerLimit:

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

#ThreadLimit:

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

#StartServers:

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

#MinSpareThreads和MaxSpareThreads:

通過建立或結束子程序的方式,将空閑線程的總數維持在這個範圍内

#MaxRequestsPerChild:

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

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

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

4).關閉TRACE Method.

TraceEnable off

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:345 61 61

#description:Apache httpd

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

# chkconfig --add httpd

# chkconfig httpd on

# service httpd restart

6).修改log日志格式實作每天儲存.

找到CustomLog和ErrorLog行,注釋掉修改為以下參數

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

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

ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/%Y_%m_%d.error_log 86400 480"

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

7).修改apache權限:

User www

Group www

注:這裡其實就相當于使用者執行WEB浏覽會觸發httpd程序,該程序由于屬主屬組都為www,是以對屬主屬組為www的目錄都有讀寫權限,當然前提你的目錄u=r+w+x,這樣就保證開發人員在執行PHP語句時能對項目目錄下的檔案具有讀寫權限,避免運維人員手動對需要讀寫的子目錄再設定777權限,保證項目順利實施.

五.安裝php子產品

1.處理依賴包

暫無..

2.安裝PHP

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

# tar -jxvf php-5.4.13.tar.bz2

# cd php-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-calendar --enable-zip --enable-maintainer-zts

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

# make

# make install

安裝結束後:

添加php配置檔案,需要CP一個源碼裡面的php.ini-development或php.ini-production  到/usr/local/php/lib為php.ini

#cd ~/php-5.4.13

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

3.配置APACHE的PHP子產品:

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

并添加以下一行:AddType application/x-httpd-php .php

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

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

LoadModule php5_module modules/libphp5.so

4.測試PHP加載:

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

可添加以下内容info.php到/usr/local/apache2/htdocs/下,測試php子產品是否加載.

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

&lt;?php

echo phpinfo();

?&gt;

檢查80端口是否打開

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

顯示有如下測試頁面内容,PHP子產品即在APACHE下加載成功

<a href="http://blog.51cto.com/attachment/201304/175502705.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201304/175904282.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201304/175919937.png" target="_blank"></a>

測試本地mysql是否正常連接配接

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

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

&lt;html&gt;&lt;body&gt;&lt;h1&gt;The page to test mysql local connection.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;

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

 if ($conn)

   echo "&lt;h2&gt;Success...&lt;/h2&gt;";

 else

   echo "&lt;h2&gt;Failure...&lt;/h2&gt;";

浏覽器輸入 http://localhost

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

<a href="http://blog.51cto.com/attachment/201304/100109589.jpg" target="_blank"></a>

5.PHP配置項: (預設路徑/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~-----------------

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

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