实验者: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.178linux.com/5848
评论列表(1条)
代码高亮+图片 会使得博文可读性更佳