實驗者:FrankStar 實驗日期:20150628
任務:主要是實現在Linux環境下配置LAMP環境,利用VMware+centos6.4實現,將LAMP分離為多臺主機;
附注:由于大家的環境不一樣,可能有些人已經安裝了這個包或者那個軟件,所以調試的環境結果也不一樣,為了盡量能模擬到
可能出現的所有問題,在編譯會出現問題和錯誤的地方都做了應對。沒有像很多其他文檔一樣,直接一開頭就讓讀者安裝大量的包,
可能遇到的錯誤不一樣,安裝過的軟件也不一樣,所以筆者將提示都一一標注清楚,望讀者不厭其煩。
附注:需要大家在宿主機的hosts文件中添加192.168.197.202(http服務器地址) www.frank.com(由于此時并未做好DNS服務器)
文件目錄: C:\Windows\System32\drivers\etc\hosts
1.主機規劃
配置虛擬機中有至少 3臺,操作系統都是centos6.4.網段在192.168.197.0/24 網關192.168.197.2
分配如下:
1臺httpd服務器(192.168.197.202)
1臺php服務器 (192.168.197.204)
1臺mysql服務器(192.168.197.205)
由于這些虛擬主機都是克隆產生的,所以需要先更改相應的IP和網卡設置。
1.首先刪除Eth1網卡,點擊右上角的網絡編輯,delete Eth1網卡。
2.同時編輯eth0為你需要配置的網絡地址,同時設置網關等參數,并啟用。
3.ifconfig -a 查看Eth1的mac地址,記住之。
4.vim /etc/sysconfig/network-scripts/ifcfg-eth0 編輯其mac地址為HWADDR="步驟2中的mac地址"
5.vim /etc/udev/rules.d/70-persistent-net.rules找到步驟2中那個Mac地址所在行將其name改為eth0,然后刪除另一行即可。
6.service network restart即可。
2.工作模式
首先客戶端發起請求,請求分為2種,一種是靜態請求它可以直接由Apache直接響應返回;另一種是動態的請求,如其中包含中php或者Perl這種腳本解釋性語言,則由Apache服務器通過fastcgi協議調用php服務器執行并返回給Apache由Apache返回解釋執行后的結果,如果這個過程中涉及到對數據的操作,此時php服務器還會還會通過mysql協議調用mysql服務器。
3.編譯安裝Apache(192.168.197.202)
首先去官網 http://httpd.apache.org/download.cgi#apache24下載最新穩定版httpd,在這里使用的是 httpd-2.4.12.tar.bz2
由于Apache的安裝需要先安裝Apr與Apr-utils,同時本環境中系統并沒有自帶httpd,所以對于不一樣的環境,希望讀者可以將自帶的httpd
服務關閉,并關閉開啟自動啟動,同時注意不要編譯時不要指定到默認路徑即可。我們這里不需要考慮這么多,環境是全新的。所以可以指定安裝。
(1)安裝Apr與Apr-utils
官網下載: http://apr.apache.org/download.cgi 版本為apr-1.5.2.tar.bz2與apr-util-1.5.4.tar.bz2
利用xftp將文件傳輸到202主機上。
tar xf apr-1.5.2.tar.bz2
cd apr-1.5.2
./configure –prefix=/usr/local/apr
提示:
一、此步可能提示 no acceptable C compiler found in $PATH 這是因為沒有安裝GCC組件的原因
解決辦法: yum -y install gcc即可。
二、提示“ rm: cannot remove `libtoolT': No such file or directory” 可以將configure這個文件(在該目錄下)
中的RM=‘$RM'改為RM='$RM -f'然后重新編譯。
make && make install 即可安裝完畢。
(2)安裝Apr-utils
tar xf apr-util-1.5.4.tar.bz2
cd apr-util-1.5.4
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
make && make install 安裝完畢。
(3)安裝Apache
tar xf httpd-2.4.12.tar.bz2
cd httpd-2.4.12
在執行configure腳本時,使用–enable-mpms-shared選項即可啟用動態構建MPM模塊。當給出的參數為all時,所有此平臺支持的MPM模塊都會被安裝。
還可以在參數中給出模塊列表。默認MPM,可以自動選擇或者在執行configure腳本時通過–with-mpm選項來指定,然后出現在生成的服務器配置文件中。
編輯LoadModule指令內容可以選擇不同的MPM。
./configure –prefix=/usr/local/apache –sysconfdir=/etc/httpd24 –enable-so –enable-ssl –enable-cgi –enable-rewrite –with-zlib –with-pcre
–with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util –enable-modules=most –enable-mpms-shared=all
–with-mpm=event –enable-proxy –enable-proxy-fcgi
提示:
一、可能提示 MPM most does not support dynamic loading. 此時將–enbale-mpm-shared改為all即可
二、pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/,沒有安裝pcre-devel,yum -y install pcre-devel即可。
三、 OpenSSL version is too old。openssl版本過舊,yum -y install openssl-devel即可。
make && make install
(4)修改httpd的配置文件
vim /etc/httpd/httpd.conf 在其中添加一行內容如下:
PidFile "/var/run/httpd.pid"
然后為httpd提供服務腳本
提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:
#!/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
chmod +x /etc/init.d/httpd
chkconfig –add httpd
chkconfig –level 2345 httpd on
chkconfig –list httpd
service httpd start
提示:
一、 AH00557: httpd: apr_sockaddr_info_get() failed for frank,添加主機名到/etc/hosts文件中即可。
vim /etc/hosts 127.0.0.1 一行中添加你的主機名即可。
二、 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1.
Set the 'ServerName' directive globally to suppress this message 修改配置文件/etc/httpd/httpd.conf
vim /etc/httpd/httpd.conf找到#ServerName www.example.com:80行啟用并修改為ServerName localhost:80
三、如果出現service httpd restart stop總是失敗,可以查看下日志tail /usr/local/apache/logs/error_log
如出現錯誤;AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded 即編輯/etc/httpd/httpd.conf
加載該模塊即可LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
然后重新啟動即可。
在瀏覽器中輸入ip地址即可訪問,顯示it works代表我們的httpd服務器已搭建完畢。(關閉防火墻和selinux)
4.編譯安裝php+xcache (192.168.197.204)
php官網下載: http://php.net/get/php-5.6.10.tar.bz2/from/a/mirror 這里使用的是php-5.6-10的穩定版
Xcache官網下載: http://xcache.lighttpd.net/wiki/Release-3.2.0 這里使用xcache-3.2.0支持php-5.6-10的穩定版
這里需要提醒的是,需要注意相應版本之間的支持與兼容問題。詳情見版本介紹與發布說明。
(1)編譯安裝php
tar xf php-5.6.10.tar.bz2
cd php-5.6.10
./configure –prefix=/usr/local/php –enable-fpm –with-config-file-path=/etc –with-config-file-scan-dir=/etc/php.d
–with-libxml-dir=/usr –with-openssl –with-zlib –with-bz2 –with-jpeg-dir –with-png-dir –with-freetype-dir –enable-mbstring
–with-mcrypt –enable-sockets –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-maintainer-zts
提示:
一、安裝gcc 由于是獨立的主機 需要配置環境 yum -y install gcc
二、 –with-mysql幾個選項都要為mysqlnd;因為mysql服務器單獨為另一臺主機
三、為了支持apache的worker或event這兩個MPM,編譯時使用了–enable-maintainer-zts選項。
四、error: xml2-config not found. Please check your libxml2 installation.安裝libxml2-devel yum -y install libxml2-devel
五、 error: Cannot find OpenSSL's <evp.h> 安裝openssl openssl-devel
六、Please reinstall the BZip2 distribution。 安裝bzip2 bzip2-devel .yum install bzip2 bzip2-devel
七、 error: mcrypt.h not found. Please reinstall libmcrypt.安裝 libmcrypt libmcrypt-devel 這個需要注意,因為一般的yum源中是沒有
這2個package的,所以需要先對其下載安裝。
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz獲取文件
安裝libmcrypt
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure –prefix=/usr/local/libmcrypt
make && make install
安裝完畢。
此時需要將php安裝的命令中修改 –with-mcrypt=/usr/lib/libmcrypt即可。
make && make install 即可。
(2)配置php
cp php.ini-production /etc/php.ini
配置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
chkconfig –list php-fpm
為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
可以使用netstat -tunlp 查看 9000端口
(3)連接Apache
修改配置php-fpm的文件vim /usr/local/php/etc/php-fpm 定位到listen =192.168.197.204:9000
在該主機上新建虛擬主機目錄用于存放網頁文件
mkdir -pv /var/www/{frank,frankstar,kelly,kellystar}
(4)配置apache虛擬主機使用php
回到httpd主機上,建立一個目錄作為虛擬主機的家目錄
cd /usr/local/apache
mkdir -pv www/{frank,frankstar,kelly,kellystar}
編輯主配置文件;關閉中心主機,開啟虛擬主機
vim /etc/httpd/httpd.conf
注釋 #DocumentRoot "/usr/local/apache/htdocs"
并打開啟用 Include /etc/httpd24/extra/httpd-vhosts.conf
同時定位 AddType;添加下面兩行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
并且定位至DirectoryIndex
<IfModule dir_module>
DirectoryIndex index.php index.html #添加index.php(最好添加在最前面)
</IfModule>
還要啟用proxy_module proxy-fcgi_module等
LoadModule proxy_module modules/mod_proxy.so #開啟
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #開啟
(5)編輯虛擬主機
<VirtualHost *:80>
ServerAdmin admin@frank.com
DocumentRoot "/usr/local/apache/www/frank"
ServerName www.frank.com
ServerAlias frank.com
ErrorLog "/usr/local/apache/logs/frank.error_log"
CustomLog "/usr/local/apache/logs/frank.access_log" combined
ProxyRequests off #關閉正向代理
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.197.204:9000/var/www/frank/$1
<Directory "/usr/local/apache/www/frank">
Options none
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@frankstar.com
DocumentRoot "/usr/local/apache/www/frankstar"
ServerName www.frankstar.com
ServerAlias frankstar.com
ErrorLog "/usr/local/apache/logs/frankstar.error_log"
CustomLog "/usr/local/apache/logs/frankstar.access_log" combined
ProxyRequests off #關閉正向代理
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.197.204:9000/var/www/frankstar/$1
<Directory "/usr/local/apache/www/frankstar">
Options none
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@kelly.com
DocumentRoot "/usr/local/apache/www/kelly"
ServerName www.kelly.com
ServerAlias kelly.com
ErrorLog "/usr/local/apache/logs/kelly.error_log"
CustomLog "/usr/local/apache/logs/kelly.access_log" combined
ProxyRequests off #關閉正向代理
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.197.204:9000/var/www/kelly/$1
<Directory "/usr/local/apache/www/kelly">
Options none
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@kellystar.com
DocumentRoot "/usr/local/apache/www/kellystar"
ServerName www.kellystar.com
ServerAlias kellystar.com
ErrorLog "/usr/local/apache/logs/kellystar.error_log"
CustomLog "/usr/local/apache/logs/kellystar.access_log" combined
ProxyRequests off #關閉正向代理
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.197.204:9000/var/www/kellystar/$1
<Directory "/usr/local/apache/www/kellystar">
Options none
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
然后在php服務器上的/var/www/目錄下分別建立網頁文件,重啟服務即可。
(6)為了提高php的性能安裝Xcache
在php服務器中安裝,Xcache官網下載: http://xcache.lighttpd.net/wiki/Release-3.2.0 這里使用xcache-3.2.0支持php-5.6-10的穩定版
tar xf xcache-3.2.0.tar.bz2
cd xcache-3.2.0
/usr/local/php/bin/phpize
提示:
如果出現 Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
需要安裝yum -y install m4 autoconf即可
然后./configure –enable-xcache –with-php-config=/usr/local/php/bin/php-config
make && make install
安裝完畢后會出現這么一行 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
編輯php.ini,整合php和xcache:
首先將xcache提供的樣例配置導入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d
說明:xcache.ini文件在xcache的源碼目錄中。
接下來編輯/etc/php.d/xcache.ini,找到extension開頭的行,修改為如下行:
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so
注意:如果php.ini文件中有多條zend_extension指令行,要確保此新增的行排在第一位。
然后重啟服務即在phpinfo的頁面中就可看見xcache的選項了。
5.編譯安裝mysql
(1)建立mysql用戶及mysql用戶組
groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin mysql
(2)建立邏輯卷存放數據
首先建立邏輯卷組
fdisk /dev/sda
創建一個類型為8e的分區
pvcreate /dev/sda5(該分區為新建的邏輯分區)
vgcreate frank /dev/sda5
lvcreate -n mydata -L 3G frank
mkfs -t ext4 /dev/frank/mydata
mkdir /mydata
vim /etc/fstab 添加如下一行:
/dev/frank/mydata /mydata ext4 defaults 0 0保存退出
mount -a
mount查看是否掛在上去了
然后在本機建立一個mysql的數據存放目錄
mkdir /mydata/mysql即可
chown -R mysql.mysql /mydata/mysql
chmod o-rx /mydata/mysql
(3)解壓安裝cmake
mysql5.5以后的版本需要使用到cmake來編譯
先安裝gcc和c++ yum -y install gcc yum install gcc-c++
tar xf cmake-2.8.5.tar.gz
cd cmake-2.8.5
./configure
gmake
make install即可。
(4)編譯安裝mysql
tar xf mysql-5.5.21.tar.gz -C /usr/local/
cd /usr/local/mysql-5.5.21
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/mysql/ -DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1
參數說明:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //安裝目錄
-DINSTALL_DATADIR=/usr/local/mysql/data //數據庫存放目錄
-DDEFAULT_CHARSET=utf8 //使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci //校驗字符
-DEXTRA_CHARSETS=all //安裝所有擴展字符集
-DENABLED_LOCAL_INFILE=1 //允許從本地導入數據
提示:
Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu,
package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
錯誤說的很明顯,找不到Curse需要安裝ncurses-devel但是需要先清空前面的安裝信息。
重新編譯時,需要清除舊的對象文件和緩存信息。
# make clean
# rm -f CMakeCache.txt
# rm -rf /etc/my.cnf
make && make install安裝完畢.
(5)配置mysql
cd /usr/local/mysql
chown -R root:mysql .
cp support-files/my-medium.cnf /etc/my.cnf
scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/mydata/mysql
設置環境變量
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib保存退出
source /root/.bash_profile
cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/rc.d/init.d/mysql
添加至服務列表:
chkconfig –add mysql
chkconfig mysql on
chkconfig –list mysql
service mysql start 即可。
netstat -tunlp可以看見3306這個端口 即代表mysql服務啟動了。
(6)修改MySQL的root用戶的密碼以及打開遠程連接
mysql -u root mysql
mysql>use mysql;
mysql>desc user;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "frank"; //為root添加遠程連接的能力。
mysql>update user set Password = password('xxxxxx') where User='root';
mysql>select Host,User,Password from user where User='root';
mysql>flush privileges;
mysql>exit
重新登錄:mysql -u root -p
(7)man文檔與頭文件的導出
vim /etc/man.config添加一行 MANPATH /usr/local/mysql/man
ln -sv /usr/local/mysql/include/ /usr/include/mysql
echo /usr/local/mysql/lib/ > /etc/ld.so.conf.d/mysql.conf
(8)整合php
進入mysql
use mysql;
grant all privileges on *.* to 'root'@'192.168.197.204' identified by 'frank';
select Host,User,Password from user where User='root';
flush privileges;
(9)進入php主機 編輯index.php 文件內容如下:
<?php
$link=mysql_connect('192.168.197.205','root','frank');
if($link){
echo "success..frank!";
}else{
echo "failed..frank!".mysql_error();
}
mysql_close($link);
phpinfo();
?>
出現success..frank!則成功了,若失敗看失敗的原因進行相關的操作!
切記,要將防火墻關閉!
(10)配置phpmyadmin
在php 主機和http主機上分別在frank目錄或者隨意一個虛擬主機目錄中建立一個文件夾叫pma
例如在php主機中在目錄/var/www/frank/pma
unzip phpMyAdmin-4.4.10-all-languages.zip
mv phpMyAdmin-4.4.10-all-languages/* ./
即可。這兩臺主機的操作一樣。
接下來在php主機上進行對phpmyadmin的配置。
cp config.sample.inc.php config.inc.php
vim config.inc.php
主要找到
$cfg['Servers'][$i]['host']=‘192.168.197.205’ 數據庫服務器的IP地址
$cfg['blowfish_secret'] = 'frank';這里的字符隨意,這個主要是為了區分cookie。
然后重啟三臺主機上的服務即可測試。
www.frank.com/pma/index.php 就可以看見phpmyadmin 的界面了。至此lamp環境搭建完畢。
原創文章,作者:frankstar,如若轉載,請注明出處:http://www.www58058.com/5848
代碼高亮+圖片 會使得博文可讀性更佳