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

技術小胖子發表於2017-11-11

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


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

歡迎訪問     http://www.showerlee.com



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 & 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

socket                         = /tmp/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


# 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” >> /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> create database phpwind;      #建立資料庫

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

mysql> show variables; #檢視mysql設定.

———————————–

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

# /usr/local/mysql/bin/safe_mysqld

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

# echo “/usr/local/mysql/bin/safe_mysqld –user=mysql &” >> /etc/rc.local


12 新增mysql命令集到系統全域性變數

注:如果系統之前未安裝mysql客戶端,可以將編譯好的mysql命令集匯入系統全域性變數

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

# echo “PATH=$PATH:/usr/local/mysql/bin;export PATH” >> /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 && 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”

# cd httpd-2.4.4

# 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,執行命令

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

返回:

 core.c

 mod_so.c

 http_core.c

event.c

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

<IfModule mpm_event_module>

   StartServers            3

   MinSpareThreads         75

   MaxSpareThreads        250

   ThreadsPerChild         25

   MaxRequestWorkers      400

   MaxConnectionsPerChild   0

</IfModule>

將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


# make && make install


#  防止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” >> /etc/rc.local


7.配置apache:

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

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

搜尋  Options Indexes FollowSymLinks

將其前面加#註釋

—————–

# Options Indexes FollowSymLinks

—————–


2).隱藏版本號:

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

加入以下兩行:

——————

ServerTokens ProductOnly

ServerSignature Off

——————


3).優化執行緒數:

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

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

a.開啟mpm:

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

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

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

b.優化配置:

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

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

# event MPM配置:

————————

<IfModule mpm_event_module>

  StartServers 5

  ServerLimit 5000

  MaxClients 4000

  MinSpareThreads 100

  MaxSpareThreads 400

  ThreadLimit 200

  ThreadsPerChild 100

  MaxRequestWorkers    400

  MaxRequestsPerChild  100

</IfModule>

————————



# worker MPM配置:

———————–

<IfModule mpm_event_module>

  StartServers 5

  ServerLimit 5000

  MaxClients 4000

  MinSpareThreads 100

  MaxSpareThreads 400

  ThreadLimit 200

  ThreadsPerChild 100

  MaxRequestWorkers    400

  MaxRequestsPerChild  100

</IfModule>

———————–

—————————

其中最重要的引數是 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.

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

———————–

TraceEnable off

———————–


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


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

———–

/usr/local/apache2/lib

————

# ldconfig

# 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日誌格式實現每天儲存.

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

找到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許可權:

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

——————

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服務會報錯…..(此處被坑了一下午…#$%^&*)

# 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

—————

<?php

echo phpinfo();

?>

—————

檢查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>The page to test mysql local connection.</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


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,如需轉載請自行聯絡原作者


相關文章