編譯搭建LAMP伺服器
一、為什麼要編譯安裝
為什麼伺服器軟體需要編譯安裝?一個流傳很廣的說法是編譯安裝效能更好,其實這是個謠言,伺服器CPU事實已經被Intel壟斷了,就那麼幾種型號,編來編去生成的機器碼是一樣的。Intel宣傳自己的編譯工具Intel C++ Compiler 比GCC編譯出來效能要提升10%-20%,這就是一廣告,生產環境很少用人用它,何況它還要收費
效能真不是問題,比如 strip 命令可以大大減小可執行檔案的size,但是我裝過幾千遍軟體,都沒有見有人在安裝指令碼里面使用。
軟體需要編譯安裝的真實理由有如下3點:
-
軟體在編譯期間需要配置:比如說nginx,需要在編譯的時候指定包含哪些module,php,apache 也是一樣。同樣的是資料庫,mysql通過編譯安裝,因為要定製儲存引擎(是否支援innodb .. ),而sqlite卻絕少有人編譯,都是直接下載二進位制檔案來用。
-
軟體需要統一安裝路徑:每個team都會自己的安裝目錄約定,有些喜歡裝在 /opt/下面,有些喜歡裝在 /usr/local/ ,編譯安裝可以方便的指定這些路徑(configure –prefix=xxx )
-
需要最新的版本:軟體倉庫的版本一般都比較低,這個理由其實不充分,生產環境傾向保守,不追求最新版本,但是對於某些軟體來說,必須安裝特定的版本,這時候就只能進行編譯安裝。
二、Apache環境準備及安裝
我使用的搭建環境是Centos6.6 x86-64 mini版的系統;最小版安裝有很多軟體沒有提供,我們可以通過yum軟體庫進行安裝,到現在LAMP伺服器的“L”(linux)我們已經準備好了,那麼下一步我們是需要下載apache的httpd軟體,下載地址是httpd.apache.org,現在apache維護的httpd有2.0,、2.2、2.4幾個分支版本,每個版本的功能官網寫的很清楚,我這裡不再贅述,我所選擇的是httpd的最新版本2.4.10,下面我們進行httpd的編譯過程講解;
因為httpd可以在各種作業系統,各種硬體架構上執行,是因為httpd執行在apr(Apache Portable Runtime)虛擬機器上面,針對不同平臺和作業系統開發apr,所有首先在我們按照httpd之前應該先安裝apr,我們不使用軟體包自帶的apr軟體,好像是版本有點低,httpd2.4.10需要的apr版本最低是1.4,我們去官網下載最新版本的apr和apr-util,下載地址是apr.apache.org;
1
2
3
4
5
6
|
wget http: //apache .fayea.com //httpd/httpd-2 .4.10. tar .bz2
wget http: //mirrors .cnnic.cn /apache/apr/apr-1 .5.1. tar .bz2
wget http: //mirrors .cnnic.cn /apache/apr/apr-util-1 .5.4. tar .bz2
tar -xf httpd-2.4.10. tar .bz2
tar -xf apr-1.5.1. tar .bz2
tar -xf apr-util-1.5.4. tar .bz2
|
安裝開發庫
1
|
yum install gcc -y
|
進行軟體的編譯
1
2
3
4
5
6
7
8
9
|
cd apr-1.5.1
. /configure --prefix= /usr/local/apr
make make install
cd apr-util-1.5.4
. /configure --prefix= /usr/local/apr-util --with-apr= /usr/local/apr
make make install
|
因為httpd需要重寫功能,所有需要安裝pcre庫
1
|
yum install -y pcre-devel
|
然而我在編譯的時候出現checking for OpenSSL version >= 0.9.8a… FAILED,是因為我們的mini版本沒有安裝openssl的開發庫,所有要先安裝開發庫
1
|
yum install openssl-devel.x86_64 -y
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
cd httpd-2.4.10
. /configure
--prefix= /usr/local/apache
--sysconfdir= /etc/httpd
-- enable -so
-- enable -rewirte
-- enable -ssl
-- enable -cgi
-- enable -cgid
-- enable -modules=most
-- enable -mods-shared=most
-- enable -mpms-shared=all
--with-apr= /usr/local/apr
--with-apr-util= /usr/local/apr-util
make make install
|
關閉SELinux
1
|
setenforce 0 |
1
2
|
#把httpd的二進位制執行檔案新增到環境變數裡面 echo "export PATH=$PATH:/usr/local/apache/bin" > /etc/profile .d /httpd .sh
|
把httpd的man檔案加入系統裡面,首先安裝man工具
1
2
|
yum install man -y
vim /etc/man .config
|
新增如下內容
1
|
MANPATH /usr/local/apache/man
|
給httpd新增一個SysV風格的腳步放到/etc/init.d/目錄下面,到此為止httpd安裝完成了;
#cat /etc/rc.d/init.d/httpd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve # HTML files and CGI. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd.pid # Source function library. . /etc/rc .d /init .d /functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi # Start httpd in the C locale by default. HTTPD_LANG=${HTTPD_LANG- "C" }
# This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS= ""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server # with the thread-based "worker" MPM; BE WARNED that some modules may not # work correctly with a thread-based MPM; notably PHP will refuse to start. # Path to the apachectl script, server binary, and short-form for messages. apachectl= /usr/local/apache/bin/apachectl
httpd=${HTTPD- /usr/local/apache/bin/httpd }
prog=httpd pidfile=${PIDFILE- /var/run/httpd .pid}
lockfile=${LOCKFILE- /var/lock/subsys/httpd }
RETVAL=0 start() { echo -n $ "Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
} stop() { echo -n $ "Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
} reload() { echo -n $ "Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >& /dev/null ; then
RETVAL=$?
echo $ "not reloading due to configuration syntax error"
failure $ "not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
} # See how we were called. case "$1" in
start)
start ;; stop)
stop ;; status)
status -p ${pidfile} $httpd
RETVAL=$? ;; restart)
stop start ;; condrestart)
if [ -f ${pidfile} ] ; then
stop start fi ;; reload)
reload
;; graceful|help|configtest|fullstatus)
$apachectl $@ RETVAL=$? ;; *)
echo $ "Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac exit $RETVAL
|
而後為此指令碼賦予執行許可權:
1
|
chmod +x /etc/rc .d /init .d /httpd
|
加入服務列表:
1
2
|
chkconfig --add httpd chkconfig httpd on |
三、Mysql的安裝:
Mysql的安裝可以rpm安裝,可以使用通用二進位制包安裝,也可以使用原始碼編譯安裝,鑑於原始碼編譯太耗費時間,我們這使用通用二進位制格式包安裝,軟體包可以在搜狐映象網站下載到,我們現在使用的版本是mysql-5.5.20-linux2.6-x86_64.tar.gz。
1
2
3
4
5
6
7
8
9
10
11
|
#到映象網站下載需要的版本 wget #解壓 tar xf mysql-5.5.20-linux2.6-x86_64. tar .gz -C /usr/local
cd /usr/local
ln -s mysql-5.5.20-linux2.6-x86_64 mysql
#新增使用者 groupadd -r mysql useradd -g mysql -r -s /sbin/nologin mysql
cd mysql
chown -R mysql:mysql *
|
建立一個邏輯卷給Mysql資料存放位置。
1
2
3
4
5
6
|
pvcreate /dev/sda5
vgcreate myvg /dev/sda5
lvcreate -n mysql -L 5G myvg mkfs.ext4 /dev/myvg/mysql
vim /etc/fstab
mkdir /data
|
新增開機自動掛載。
1
2
|
#在/etc/fatab新增一行 /dev/myvg/mysql /data ext4 defaults 0 0
|
1
2
3
4
5
6
7
8
9
|
#掛載 mount -a
mkdir /data/mysql
chown mysql.mysql /data/mysql
chmod o-x /data/mysql
cd /usr/local/mysql
#初始化資料庫 . /scripts/mysql_install_db --user=mysql --datadir= /data/mysql/
chown -R root *
|
新增二進位制程式環境變數
1
|
echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile .d /mysql .sh
|
新增幫助檔案
1
|
vim /etc/man .config
|
新增如下內容
1
|
MANPATH /usr/local/mysql/man
|
把mysql的庫檔案加入到系統庫檔案目錄搜尋裡面
1
|
echo "/usr/local/mysql/lib" > /etc/ld .so.conf.d /mysql .conf
|
新增標頭檔案
1
|
ln -s /usr/local/mysql/include /usr/include/mysql
|
新增啟動指令碼
1
2
|
cp support-files /mysql .server /etc/init .d /mysqld
chkconfig --add mysqld |
新增配置檔案
1
|
cp support-files /my-large .cnf /etc/my .cnf
|
在配置檔案裡面新增
1
|
datadir = /data/mysql
|
現在可以啟動Mysql服務了,可以為mysql新增密碼
1
|
mysqladmin -uroot password `123456`
|
四、PHP的安裝
下面我們進行最後一項php的編譯安裝,我們選擇的php版本是5.4.36。
1
|
wget http: //cn2 .php.net /distributions/php-5 .4.36. tar .bz2
|
如果想讓編譯的php支援mcrypt擴充套件,此處還需要下如下兩個rpm包並安裝之:
libmcrypt-2.5.8-9.el6.rpm
libmcrypt-devel-2.5.8-9.el6.rpm
因為這兩個軟體包自帶的軟體庫沒有,所有我們更新增加yum源
1
2
|
rpm -ivh http: //download4 .fedora.redhat.com /pub/epel/6/x86_64/epel-release-6-8 .noarch.rpm
yum install -y libmcrypt libmcrypt-devel gd-devel
|
說明:
這些沒有自帶的包我們也可以到網站去查詢下載地址,比如:http://rpmfind.net;在裡面我們可以查詢到支援各種硬體平臺的rpm軟體包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
cd php-5.4.36
#下面開始進行編譯 . /configure
--prefix= /usr/local/php
--with-mysql= /usr/local/mysql
--with-openssl --with-mysqli= /usr/local/mysql/bin/mysql_config
-- enable -mbstring
--with-freetype- dir
--with-jpeg- dir
--with-png- dir
--with-zlib --with-libxml- dir = /usr
-- enable -xml
-- enable -sockets
--with-apxs2= /usr/local/apache/bin/apxs
--with-mcrypt --with-config- file -path= /etc
--with-config- file -scan- dir = /etc/php .d
--with-bz2 -- enable -maintainer-zts
|
說明:
1、這裡為了支援apache的worker或event這兩個MPM,編譯時使用了–enable-maintainer-zts選項。
2、–with-apxs2=/usr/local/apache/bin/apxs 這裡是讓php以httpd的模組模式執行,如果使用FastCGI模式執行的話需改為 –enable-fpm,如果httpd是rpm安裝的話,使用apxs需要安裝http-devle軟體包
3、如果使用PHP5.3以上版本,為了連結MySQL資料庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時繫結到它(而不用和具體的MySQL客戶端庫繫結形成依賴),但從PHP 5.4開始它就是預設設定了。
# ./configure –with-mysql=mysqlnd –with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd
4、此時如果編譯的東西不適合您的需要,您可以新增需要編譯的模組引數,也可以就此這樣安裝,後面我們可以動態安裝需要的模組,安裝方法和我後面為php安裝xcache的方法是一樣的。
注意:
我在編譯中出現了一個錯誤configure: error: xml2-config not found. Please check your libxml2 installation.
在這裡我們首先應該提交安裝libxml2,然後再進行編譯;
1
|
yum install libxml2 libxml2-devel -y
|
緊接著又出現錯誤,出現這麼多錯誤的原因是因為我們安裝的linux是mini版,好多軟體並沒有預裝的,安裝之前我們也不知道哪些軟體存在,哪些軟體不存在,只能出現一個問題解決一個問你
錯誤:configure: error: Please reinstall the BZip2 distribution
1
|
yum install bzip2 -devel.x86_64 -y
|
後面一切順利,直接到編譯配置結束,
1
2
|
make make install
|
為php提供好配置檔案,在php原始檔目錄下面
1
|
cp php.ini-production /etc/php .ini
|
編輯apache配置檔案httpd.conf,以apache支援php,而後重新啟動httpd,或讓其重新載入配置檔案即可測試php是否已經可以正常使用。
1
2
3
4
5
6
7
|
vim /etc/httpd/httpd .conf
1、新增如下二行 AddType application /x-httpd-php .php
AddType application /x-httpd-php-source .phps
2、定位至DirectoryIndex index.html 修改為:
DirectoryIndex index.php index.html
|
具體apache的配置我們這裡不在陳述,可以更改中心主機的路徑,配置虛擬主機,載入需要的模組等等;
到現在為止LAMP環境是搭建好了,下面我們進行測試,看看我們的php是否可以連線資料庫;在index.php裡面填寫上如下內容:
1
2
3
4
5
6
7
8
|
<?php $conn =mysql_connect( `localhost` , `root` , `123456` );
if ( $conn )
echo "Success....." ;
else
echo "Failure....." ;
phpinfo(); ?> |
當資料庫開啟的時候顯示Success….,資料庫關閉的時候顯示Failure…。
五、安裝加速器XCache
XCache 是一個開源的 php的opcode 快取器/優化器, 這意味著他能夠提高您伺服器上的 PHP 效能. 他通過把編譯 PHP 後的資料緩衝到共享記憶體從而避免重複的編譯過程, 能夠直接使用緩衝區已編譯的程式碼從而提高速度. 通常能夠提高您的頁面生成速率 2 到5 倍, 降低伺服器負載.
1
2
3
4
|
wget http: //xcache .lighttpd.net /pub/Releases/3 .2.0 /xcache-3 .2.0. tar .gz
tar xf xcache-3.2.0. tar .gz
cd xcache-3.2.0
/usr/local/php/bin/phpize |
然後卻出現了錯誤:
1
2
|
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script. |
原因是因為我還是有軟體包沒有安裝
1
2
3
4
|
yum install autoconf -y
. /configure -- enable -xcache --with-php-config= /usr/local/php/bin/php-config
make make install
|
為xcache提供配置檔案
1
2
|
mkdir /etc/php .d
cp xcache.ini /etc/php .d/
|
到此為止xcache安裝完成
第二部分、配置apache-2.4.10與fpm方式的php-5.4.36
一、apache、MySQL的安裝與前一部分相同;請根據其進行安裝;
二、編譯安裝php-5.4.36
1、解決依賴關係:
如果想讓編譯的php支援mcrypt擴充套件,此處還需要下載如下兩個rpm包並安裝之:
libmcrypt-2.5.7-5.el5.i386.rpm
libmcrypt-devel-2.5.7-5.el5.i386.rpm
mhash-0.9.9-1.el5.centos.i386.rpm
mhash-devel-0.9.9-1.el5.centos.i386.rpm
2、編譯安裝php-5.4.36
首先下載原始碼包至本地目錄,
# tar xf php-5.4.36.tar.bz2
# cd php-5.4.36
# ./configure
–prefix=/usr/local/php
–with-mysql=/usr/local/mysql
–with-openssl
–with-mysqli=/usr/local/mysql/bin/mysql_config
–enable-mbstring
–with-freetype-dir
–with-jpeg-dir
–with-png-dir
–with-zlib
–with-libxml-dir=/usr
–enable-xml
–enable-sockets
–enable-fpm
–with-mcrypt
–with-config-file-path=/etc
–with-config-file-scan-dir=/etc/php.d
–with-bz2
# make
# make intall
為php提供配置檔案:
# cp php.ini-production /etc/php.ini
3、配置php-fpm
為php-fpm提供Sysv init指令碼,並將其新增至服務列表:
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig –add php-fpm
# chkconfig php-fpm on
為php-fpm提供配置檔案:
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
編輯php-fpm的配置檔案:
# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相關選項為你所需要的值,並啟用pid檔案(如下最後一行):
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php/var/run/php-fpm.pid
接下來就可以啟動php-fpm了:
# service php-fpm start
使用如下命令來驗正(如果此命令輸出有中幾個php-fpm程式就說明啟動成功了):
# ps aux | grep php-fpm
預設情況下,fpm監聽在127.0.0.1的9000埠,也可以使用如下命令驗正其是否已經監聽在相應的套接字。
# netstat -tnlp | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm
三、配置httpd-2.4.10
1、啟用httpd的相關模組
在Apache httpd 2.4以後已經專門有一個模組針對FastCGI的實現,此模組為mod_proxy_fcgi.so,它其實是作為mod_proxy.so模組的擴充,因此,這兩個模組都要載入
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
2、配置虛擬主機支援使用fcgi
在相應的虛擬主機中新增類似如下兩行。
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
例如:
<VirtualHost *:80>
DocumentRoot “/www/html”
ServerName hebrxz.com
ServerAlias www.hebrxz.com
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/www/html/$1
<Directory “/www/html”>
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
ProxyRequests Off:關閉正向代理
ProxyPassMatch:把以.php結尾的檔案請求傳送到php-fpm程式,php-fpm至少需要知道執行的目錄和URI,所以這裡直接在fcgi://127.0.0.1:9000後指明瞭這兩個引數,其它的引數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。
3、編輯apache配置檔案httpd.conf,讓apache能識別php格式的頁面,並支援php格式的主頁
# vim /etc/httpd/httpd.conf
1、新增如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html
補充:Apache httpd 2.4以前的版本中,要麼把PHP作為Apache的模組執行,要麼新增一個第三方模組支援PHP-FPM實現。
相關文章
- CentOS7.3 編譯搭建 lamp 環境CentOS編譯LAMP
- lamp編譯詳解LAMP編譯
- ubuntu手動編譯lampUbuntu編譯LAMP
- 編譯安裝LAMP環境編譯LAMP
- 編譯LAMP環境之PHP編譯LAMPPHP
- LAMP原始碼編譯安裝LAMP原始碼編譯
- 如何在CentOS 7上搭建LAMP環境(使用YUM或編譯)CentOSLAMP編譯
- [LAMP]Php-5.3.29編譯安裝LAMPPHP編譯
- [LAMP]Mysql-5.6.28編譯安裝LAMPMySql編譯
- LAMP兩種編譯安裝模式LAMP編譯模式
- LAMP 編譯安裝基本步驟LAMP編譯
- LAMP-CentOS7搭建Web伺服器LAMPCentOSWeb伺服器
- Apache伺服器的編譯安裝和LAMP環境的構建Apache伺服器編譯LAMP
- 詳解LAMP原始碼編譯安裝LAMP原始碼編譯
- LAMP原始碼編譯安裝配置+wordpressLAMP原始碼編譯
- [LAMP]Apache-2.2.31編譯安裝LAMPApache編譯
- LAMP純原始碼編譯安裝日誌LAMP原始碼編譯
- 在Centos5.2下編譯安裝LAMPCentOS編譯LAMP
- LAMP搭建示例LAMP
- Ubuntu搭建LAMPUbuntuLAMP
- 雲伺服器Ubuntu下搭建NDK環境,並編譯FFmpeg伺服器Ubuntu編譯
- php環境搭建---LAMPPHPLAMP
- Centos6.5搭建LAMPCentOSLAMP
- Centos7.2搭建LampCentOSLAMP
- centos7lamp搭建CentOSLAMP
- RedHat5.4搭建LAMPRedhatLAMP
- LAMP全功能編譯安裝forCentOS6.3筆記(更新)LAMP編譯CentOS筆記
- 高通編譯環境搭建編譯
- openform環境搭建-編譯ORM編譯
- 搭建高效能LAMP架構:LAMP+FastCGI薦LAMP架構AST
- Centos6.8下編譯安裝LAMP的操作記錄梳理CentOS編譯LAMP
- CentOS5.5下快速編譯安裝最新的LAMP環境CentOS編譯LAMP
- Centos下搭建LAMP+PHPCentOSLAMPPHP
- Ubuntu14.04搭建LAMPUbuntuLAMP
- Ubuntu16.04搭建LAMPUbuntuLAMP
- linux搭建lamp環境LinuxLAMP
- lamp 以及ucenter、phpBB、discuz! 搭建LAMPPHP
- Android編譯環境搭建Android編譯