最近抽空在虛拟機上測試成功了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 & 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" >> /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"
# 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下,檢視有如下幾行參數
<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
# 防止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).隐藏版本号:
加入以下兩行:
------------------
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服務會報錯.....(此處被坑了一下午...#$%^&*)
# 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端口是否打開
浏覽器輸入 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
---------------------
<html><body><h1>The page to test mysql local connection.</h1></body></html>
$conn=mysql_connect('localhost','root','123456');
if ($conn)
echo "<h2>Success...</h2>";
else
echo "<h2>Failure...</h2>";
浏覽器輸入 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,如需轉載請自行聯系原作者