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下載入成功
測試本地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
顯示如下頁面,表示連線成功.
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