源碼準備
由于本文搭建LAMP環境使用的是源碼安裝,在安裝過程中需要使用到許多的軟件安裝包,因此在安裝過程中應該首先把需要用到的安裝包進行下載,需要使用的軟件安裝包以及下載地址如下所示:
核心源碼文件
apache源碼包 httpd-2.4.9.tar.gz
mysql源碼包 mysql-5.7.4.tar.gz
http://dev.mysql.com/downloads/
php源碼包 php-5.5.14.tar.gz
http://cn2.php.net/downloads.php
可選源碼文件
Apache編譯依賴包
apr-1.5.1.tar.gz (Apache可移植運行庫的組件)
http://apr.apache.org/download.cgi
apr-util-1.5.3.tar.gz (Apache可移植運行庫的組件)
http://apr.apache.org/download.cgi
pcre-8.35.zip (支持正則表達式的函數庫)
http://sourceforge.net/projects/pcrehttpd-2.4.9.tar.gz
PHP編譯依賴包
libxml2-2.9.0.tar.gz (用于解析XML的跨平臺C語言庫)
libmcrypt-2.5.8.tar.gz (用于實現加密算法的庫)
ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/
zlib-1.2.8.tar.gz (實現壓縮和解壓縮的庫)
freetype-2.5.3.tar.gz (開源免費的可移植的字體引擎)
http://download.savannah.gnu.org/releases/freetype/
libpng-1.6.12.tar.gz (用于讀寫png文件的庫)
ftp://ftp.simplesystems.org/pub/libpng/png/src/
jpegsrc.v9a.tar.gz (用于讀寫jpeg文件的庫)
libgd-2.1.0.tar.gz (開源的圖像處理庫)
https://bitbucket.org/libgd/gd-libgd/downloads
MySQL編譯依賴包
bison-2.5.tar.gz(用于自動生成語法分析器程序)
http://www.gnu.org/software/bison/
ncurses-5.8.tar.gz(管理程序在字符終端顯示的函數庫)
http://www.gnu.org/software/ncurses
上述軟件可以使用源碼編譯安裝,也可以使用yum安裝,有些軟件可能系統自帶。其中和APR相關的內容和Autotools相關的內容會單獨寫文章進行介紹。另外有關運行庫和開發庫的區別也將另寫文章剖析。
環境準備
檢測并配置編譯環境
1.檢查系統中是否存在已安裝的LAMP環境,以Apache為例,輸入‘rpm -qa | grep -i httpd’,如果存在已安裝的Apache,則應使用‘rpm –e httpd-xxx -nodeps’卸載Apache(xxx為版本號),MySql與PHP操作與Apache相同。
2.LAMP環境搭建所需要的軟件都使用C語言開發的,所以安裝源代碼文件最少需要配置(configure)、編譯(make)、安裝(make install)三個步驟,在虛擬機上輸入‘gcc -v’命令,如果gcc已安裝,則如下圖所示:
否則應該首先安裝編譯工具,使用yum安裝,輸入命令行‘yum -y install make cmake gcc gcc-c++ ’。bison用于生成語法分析器程序,ncurses是字符終端下屏幕控制的基本庫,兩者被MySQL安裝所依賴。
防火墻和SELinux配置
編輯/etc/sysconfig/iptables文件,配置防火墻,添加如下兩條規則并保存退出
-A INPUT –m state –state NEW –m tcp –p tcp –dport 80 –j ACCEPT
-A INPUT –m state –state NEW –m tcp –p tcp –dport 3306 –j ACCEPT
由于SELINUX的開啟可能會對MySQL造成一定的影響,所以提前關閉SELINUX
編輯/etc/selinux/config文件,修改如下內容:
#SELINUX=enforcing #將該行注釋
#SELINUXTYPE=targeted #將該行注釋
SELINUX=disabled #增加內容
完成上述操作后,重啟系統
開始編譯
編譯安裝Apache
編譯安裝apr和apr-util
cd /usr/local/src/lamp
tar zxvf apr-1.5.1.tar.gz # 解壓縮命令,tar zxvf apr-xxx.tar.gz(xxx為版本號)
cd apr-1.5.1
./configure --prefix=/usr/local/apr-httpd #配置apr安裝位置以及安裝目錄
make #編譯
make install #安裝
tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
make
make install
編譯安裝pcre
unzip –o pcre-8.35.zip
cd pcre-8.35
./configure--prefix=/usr/local/pcre
make
make install
編譯安裝apache
tar zxvf httpd-2.4.9.tar.gz
cd httpd-2.4.9
./configure --prefix=/usr/local/apache2 \ #指定安裝目錄
--enable-mods-shared=all \ #將所有模塊編譯為DSO模塊
--enable-deflate \ #壓縮發送給客戶端的內容
--enable-speling \ #自動糾正url拼寫中的錯誤
--enable-cache \ #基于uri鍵的內容動態緩沖
--enable-file-cache \ #提供文件描述符緩存支持,從而提高Apache性能
--enable-disk-cache \ #基于磁盤的緩沖管理器
--enable-mem-cache \ #基于內存的緩沖管理器
--enable-so \ #讓apache可以支持DSO模式
--enable-expires=shared \ #配置expires信息和cache-control信息
--enable-rewrite=shared \ #url重寫引擎模塊
--enable-static-support \ #使用靜態連接編譯所有二進制支持程序
--sysconfdir=/etc/httpd \ #指定配置文件路徑
--with-z=/usr/local/zlib/ \ #指定zlib所在路徑
--with-apr=/usr/local/apr-httpd/ \ #指定apr-httpd所在路徑
--with-apr-util=/usr/local/apr-util-httpd/ \ #指定apr-util-httpd所在路徑
--with-pcre=/usr/local/pcre/ \ #指定pcre所在路徑
--disable-userdir #禁用用戶主目錄提供頁面訪問模塊
make
make install
有關apache便宜安裝的configure詳細配置選項可以通過./configure --help命令來進行查看
修改配置文件
剛剛編譯安裝的apache服務器一般是沒有配置主機名的,這將在apache首次啟動的時候出現警告信息:
AH00558:httpd:Could not reliably determine the server's fully qualified domain
name, using::1.Set the ServerName' directive globally to suppress this message
修改apache配置文件httpd.conf,通常放在/usr/local/apache2/conf/下,配置ServerName項
ServerName localhost:80
進程控制方式
Apache啟動腳本通常放在/usr/local/apache2/bin/目錄下,其中httpd是可執行文件,apachectl是腳本文件,apachectl腳本會將apache運行時需要的一些參數和環境變量傳遞給httpd文件。因此官方推薦使用apchectl控制apache的啟動,停止和重啟。也可以配置apchectl啟動腳本中的配置項從而向httpd可執行文件中傳入指定的參數。
使用腳本控制
/usr/local/apache2/bin/apachectl -k start #啟動命令
/usr/local/apache2/bin/apachectl -k restart #強制重啟
/usr/local/apache2/bin/apachectl -k graceful #平滑重啟
/usr/local/apache2/bin/apachectl -k stop #強制關閉
/usr/local/apache2/bin/apachectl -l graceful-stop #平滑關閉
使用信號控制
kill -TERM `cat /usr/local/apache2/logs/httpd.pid` #強制關閉
kill -WINCH `cat /usr/local/apache2/logs/httpd.pid` #平滑關閉
kill -HUP `cat /usr/local/apache2/logs/httpd.pid` #強制重啟
kill -USR1 `cat /usr/local/apache2/logs/httpd.pid` #平滑重啟
注意這里/usr/local/apache2/logs/httpd.pid文件保存的是apache主進程的進程id。有關軟重啟與硬重啟,軟關閉與硬關閉的工作模式在另行補充。
測試安裝結果
根據以上控制方式,我們啟動apache服務器,推薦使用apachectl腳本。
/usr/local/apache/bin/apachectl -k start
打開瀏覽器,在地址欄中輸入主機的IP地址,本次安裝為:http://192.168.78.2/如果瀏覽器中出現It works!則表明Apache服務器可以使用。
后續處理工作
每種服務器軟件都有必要制成開機時自動啟動,Apache服務器開機自動啟動,只要在“/etc/rc.d/rc.local”文件,加上Apache服務器的啟動命令即可。可以直接打開“/etc/rc.d/rc.local”文件,在最后一行寫入Apache啟動命令,也可以用echo命令追加進去,如下命令行示:
echo "/usr/local/apache243/bin/apachectl -k start" >> /etc/rc.d/rc.local
對于linux系統中的服務有時候會使用service命令或chkconfig命令進行管理,這兩個工具的操作目錄是/etc/init.d/下,因此為了將apache服務納入,我們將apache服務器的啟動腳本復制到該目錄下,并其設置開機自動啟動。
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd #復制執行腳本
chmod +x /etc/init.d/httpd #賦予執行權限
chkconfig –add httpd #設置開機自動啟動
編譯安裝MySQL
這里編譯mysql我們采用cmake,有關make和cmake的使用和區別我們另行介紹。
編譯安裝bison
tar zxvf bison-2.5.tar.gz
cd bison-2.5
./configure
make
make install
編譯安裝ncurses
tar zxvf ncurses-5.8.tar.gz
cd ncurses-5.8
./configure
make
make install
編譯安裝mysql
tar xvf mysql-5.6.14.tar.gz
cd mysql-5.6.14
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安裝目錄
-DMYSQL_DATADIR=/usr/local/mysql/data \ #指定數據存放目錄
-DSYSCONFDIR=/etc \ #指定配置文件路徑
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #指定MYISAM存儲引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #指定INNODB存儲引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \ #指定MEMORY存儲引擎
-DWITH_READLINE=1 \ #提供行內編輯,歷史管理等功能。
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ #指定mysql.sock文件位置
-DMYSQL_TCP_PORT=3306 \ #指定監聽端口
-DENABLED_LOCAL_INFILE=1 \ #允許從本地導入數據
-DWITH_PARTITION_STORAGE_ENGINE=1 \ #安裝支持數據庫分區
-DEXTRA_CHARSETS=all \ #使MySQL支持所有的擴展字符
-DDEFAULT_CHARSET=utf8 \ #指定字符集utf8
-DDEFAULT_COLLATION=utf8_general_ci #指定校對集utf8_general_ci
make
make install
修改配置文件
默認讀取的配置文件是/usr/local/mysql/下的my.cnf文件
[mysqld]
basedir = /usr/local/mysql #mysql安裝主目錄
datadir = /usr/local/mysql/data #mysql存放數據的目錄
socket = /usr/local/mysql/mysql.sock #用于本地連接的sock文件
user = mysql #運行時的用戶身份
port = 3306 #mysql綁定的端口
[mysqld_safe]
pid-file = /usr/local/mysql/data/node-2.pid #記錄mysql進程pid文件
配置mysql
創建系統用戶和用戶組
groupadd mysql
useradd -g mysql mysql
修改/usr/local/mysql目錄權限
chown -R mysql:mysql /usr/local/mysql
進入安裝目錄,執行初始化腳本,創建系統自帶的數據庫和表
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
添加服務,拷貝服務腳本到init.d目錄,啟動并設置開機啟動
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
在啟動MySQL服務時,會按照一定次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置
注意:在CentOS 6.4版操作系統的最小安裝完成后,在/etc目錄下會存在一個my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啟動。
此外在使用"yum update"更新系統后,需要檢查下/etc目錄下是否會多出一個my.cnf,如果多出,將它重命名成別的。否則,MySQL將使用這個配置文件啟動,可能造成無法正常啟動等問題。
添加環境變量
將mysql二進制文件添加到PATH中,要不不能直接調用mysql,修改/etc/profile文件,在文件末尾添加
PATH=/usr/local/mysql/bin:$PATH
export PATH
關閉文件,運行下面的命令,讓配置立即生效
source /etc/profile
在終端內直接輸入mysql進入mysql的環境,執行下面的命令修改root密碼
mysql -uroot
mysql> SET PASSWORD = PASSWORD('123456');
或者使用mysql提供的mysql_admin二進制文件修改密碼
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
若要設置root用戶可以遠程訪問,執行
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%' IDENTIFIED BY 'password' WITH GRANT OPTION;
紅色的password為遠程訪問時,root用戶的密碼,可以和本地不同。
如果是生產環境,強烈推薦運行如下命令移除test數據庫和內建的匿名用戶
/usr/local/mysql/bin/mysql_secure_installation
你可以使用如下命令啟動mysql守護進程,使其進入后臺運行
/usr/local/mysql/bin/mysqld_safe &
你可以使用mysql-test目錄下的mysql-test-run.pl腳本測試mysql進程
perl /usrl/local/mysql-test/mysql-test-run.pl
輸入mysql -uroot -p回車,提示輸入密碼,輸入正確的密碼進入mysql的shell環境說明mysql安裝完成。
mysql.sock文件 是隨每一次 mysql server啟動生成的。其作用是mysql客戶端與服務器處于同一臺機器時,發起本地連接時采用unix domain socket方式進行連接。 對于本地連接這樣做的效率高于采用tcp/ip socket方式進行連接。而對于外部的遠程連接則只能采用tcp/ip socket方式建立連接。
有關tcp/ip socket連接方式和unix domain socket連接方式的比較另寫文章說明。
編譯安裝PHP
編譯安裝libxml2庫
libxml2是一個xml的c語言版的解析器,不僅支持c語言,還支持c++、php、Pascal、Ruby、Tcl等語言的綁定。
tar –zxvf libxml2-2.7.8.tar.gz
cd ./libxml2-2.7.8
./configure --prefix=/usr/local/libxml2/
make
make install
如果安裝成功以后,在/usr/local/libxml2/目錄下將生成bin,include,lib,share四個目錄。在后面安裝PHP5源代碼的配置時,會通過在configure命令的選項中加上"--with-libxml-dir=/usr/local/libxml2"選項,用于指定安裝libxml2庫文件的位置。
編譯安裝libmcrypt庫
tar –zxvf libmcrypt-2.5.8.tar.gz
cd ./libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt/
make
make install
如果安裝成功就會在/usr/local/libmcrypt/目錄下生成bin,include,lib,man,share五個目錄。然后在安裝PHP5源代碼包的配置時,就可以通過configure命令加上“--with-mcrypt-dir=/usr/local/libmcrypt”選項,指定這個libmcrypt庫文件的位置。
編譯安裝zlib庫
zlib是提供數據壓縮用的函式庫。
tar –zxvf zlib-1.2.5.tar.gz
cd ./zlib-1.2.5
./configure --prefix=/usr/local/zlib/
make
make install
如果安裝成功將會在/usr/local /zlib目錄下生成include,lib,share三個目錄。在安裝PHP5配置時,在configure命令的選項中加上“--with- zlib-dir=/usr/local/libmcrypt”選項,用于指定zlib庫文件位置。
編譯安裝libpng庫
tar –zxvf libpng-1.5.4.tar.gz
cd ./libpng-1.5.4
./configure --prefix=/usr/local/libpng/ --enable-shared
make
make install
如果安裝成功將會在/usr/local/libpng目錄下生成bin,include,lib和share四個目錄。在安裝GD2庫配置時,通過在configure命令選項中加上“--with-png=/usr/local/libpng”選項,指定libpng庫文件的位置。
編譯安裝jpeg庫
tar –zxvf jpegsrc.v8c.tar.gz
cd ./jpeg-8c/
mkdir /usr/local/jpeg/
mkdir /usr/local/jpeg/bin/(創建存放命令的目錄)
mkdir /usr/local/jpeg/lib/(創建jpeg庫文件所在目錄)
mkdir /usr/local/jpeg/include/(創建存放頭文件目錄)
mkdir –p /usr/local/jpeg/man/man1(建立存放手冊的目錄)
./configure --prefix=/usr/local/jpeg/ \
--enable-shared \
--enable-static(建立共享庫使用的GNU的libtool和靜態庫使用的GNU的libtool)
make && make install
在安裝GD2庫配置時,可以在configure命令的選項中加上“--with-jpeg=/usr/local/jpeg8”選項,指定jpeg8庫文件的位置。安裝PHP時也要指定該庫文件的位置。
編譯安裝freetype庫
tar –zxvf freetype-2.4.6.tar.gz
cd ./freetype-2.4.6
./configure --prefix=/usr/local/freetype/ --enable-shared
make && make install
如果安裝成功將會在/usr/local/freetype目錄下存在bin,include,lib和share四個目錄。并在安裝GD2庫時,通過configure命令選項中加上“--with-freetype=/usr/local/freetype/”選項,指定freetype庫文件位置。
編譯安裝autoconf庫
tar –zxvf autoconf-2.68.tar.gz
cd ./autoconf-2.68
./configure
make && make install
唯一注意的地方是configure時,不用指定路徑。
編譯安裝gd庫
tar –zxvf gd-2.0.35.tar.gz
cd ./gd-2.0.35
./configure --prefix=/usr/local/gd \
--with-jpeg=/usr/local/jpeg/ \
--with-png=/usr/local/libpng/ \
--with-zlib=/usr/local/zlib/ \
--with-freetype=/usr/local/freetype/
make && make install
如果安裝成功會在/usr/local/gd/目錄下存在bin、include和lib這三個目錄。在安裝PHP5時,通過在configure命令選項中加上“--with-gd=/usr/local/gd”選項,指定GD庫文件的位置。
編譯安裝PHP
tar –zxvf php-5.4.11.tar.gz
cd./php-5.4.11
./configure --prefix=/usr/local/php #指定PHP安裝目錄
--with-config-file-path=/usr/local/php/etc #指定配置文件目錄
--with-apxs2=/usr/local/apache2/bin/apxs #指定apache所在目錄
--with-mysql=/usr/local/mysql #指定mysql所在目錄
--with-mysqli=/usr/local/mysql/bin/mysql_config #指定mysqli擴展目錄
--with-libxml-dir=/usr/local/libxml2 #指定libxml2安裝路徑
--with-png-dir=/usr/local/libpng #指定libpng安裝路徑
--with-jpeg-dir=/usr/local/jpeg #指定jpeg安裝路徑
--with-freetype-dir=/usr/local/freetype #指定freetype安裝路徑
--with-gd=/usr/local/gd #指定gd庫安裝路徑
--with-zlib-dir=/usr/local/zlib #指定zlib安裝路徑
--with-mcrypt=/usr/local/libmcrypt #指定libmcrypt安裝路徑
--with-xpm-dir=/usr/lib64 #指定libXpm安裝路徑
--enable-soap #支持soap通信協議
--enable-mbstring=all #激活mbstring函數
--enable-sockets #激活套接字支持
配置apache關聯php
編輯配置文件/usr/local/apache2/etc/httpd.conf,在LoadModule最后面添加以下內容
LoadModule php5_module modules/libphp5.so
通常正確編譯安裝PHP后會自動增加,如果沒有,需要手工添加。
接下來要檢查apache目錄下生成的php動態連接庫文件,在目錄/usr/local/apache/modules,找到是否存在libphp5.so文件。若不存在則說明php安裝不正確。
在/etc/httpd/conf/httpd.conf文件中添加如下內容:
AddType application/x-compress.Z
AddType application/x-gzip .gz .tgz
Addtype application/x-httpd-php .php .phtml
Addtype application/x-httpd-php-source.phps
DirectoryIndex index.php index.html index.htm
配置結束后重啟Apache。
Apache服務器的根目錄默認為:/usr/local/apache2/htdocs/,此目錄下面存放資源:index.php添加內容為
<?php
echo phpinfo();
?>
在客服端驗證,出現下圖說明環境搭建成功
至此,LAMP三個最重要的組件Apache,MySQL和PHP編譯完成,并進行了初步的配置工作。
后續工作
對于未在編譯安裝時指定的模塊,php提供了一個工具phpize來幫助我們編譯php模塊,我們只需使用此工具在php源碼包中找到并編譯所需的擴展,將生成的.so文件添加到配置文件的extension_dir目錄中,并在擴展中開啟該模塊即可。
對于未在編譯安裝時指定的模塊,apache提供了一個工具apxs來幫助我們在編譯其某一模塊時與其進行關聯。我們編譯的php就是基于此方法生成.so文件與apache關聯的。
接下來我們介紹使用PHP自帶的工具phpize編譯并安裝php擴展。我們以openssl和mysql兩套擴展為例。
phpize 命令是用來準備 PHP 擴展庫的編譯環境的。下面例子中,擴展庫的源程序位于源碼文件的ext目錄中
添加openssl擴展
cd /root/php-5.5.15/ext/openssl
/usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
./configure --with-openssl \
--with-php-config=/usr/local/webserver/php/bin/php-config
make && make install
Build complete.
Don't forget to run 'make test'.
編譯完成后將生成的openssl.so添加到php.ini中,重啟apache,重啟完成后即可調用openssl庫中的方法生成公鑰、私鑰對。
添加mysql擴展
cd /root/php-5.5.15/ext/mysql
/usr/local/webserver/php/bin/phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
./configure --with-php-config=/usr/local/webserver/php/bin/php-config \
--with-mysql=/usr/local/webserver/mysql/
make && make install
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-
20121212/
mysql.so會自動添加extension_dir所指目錄中,修改php.ini添加 extension=mysql.so 重啟apache即可調用mysql擴展。