基于apache + mysql + php编译安装过程详解
准备工作(前提:在一个干净的平台上操作):1、 准备安装环境,确保安装组配置文件“Development Libraries”“Development Tools”;这里使用配置好的yum源安装,下载路径:ftp://172.16.0.1/pub/gls/server.repo;
2、 下载apache软件包,httpd-2.4.4版本,httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。由于此版本需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包,这里选择使用编译源代码的方式进行,下载路径ftp://172.16.0.1/pub/Sources/new_lamp;
下载apr版本为:apr-1.4.6.tar.bz2
下载apr-util版本为:apr-util-1.5.2.tar.bz2
3、 下载mysql软件包,我这里使用mysql-5.5.28-linux2.6-i686.tar.gz,下载路径ftp://172.16.0.1/pub/Sources/mysql-5.5;
4、 下载php软件包,php-5.4.13.tar.bz2,如果想让编辑的php支持mcrypt扩展,还需下载依赖于该库文件的软件包,mhash*.rpm libmcrypt-*.rpm,下载ftp://172.16.0.1/pub/Sources/nginx;
5、 下载xcache软件包,是为php加速的缓存工具,我使用的是xcache-2.0.0.tar.bz2;下载路径:ftp://172.16.0.1/pub/Sources/new_lamp;
注意:下载这些软件包之前,要把自己主机的系统时间同步为硬件时间,假如时间是过去的时间点,而下载的软件包是现在时间,这样系统会出现凌乱。
安装次序很重要:
apr --> apr-util --> httpd --> MySQL -->php--->Xcache
一、编译安装apache
1 编译安装apr
[*]#tar xf apr-1.4.6.tar.bz2
[*]#cd apr-1.4.6
[*]#./configure --prefix=/usr/local/apr
[*]#####软件包安装的路径统一放在第三方软件位置:/usr/local/
[*]#make
[*]#make install
2 编译安装apr-util
[*]#tar xf apr-util-1.5.2.tar.bz2
[*]#cd apr-util-1.5.2
[*]#./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
[*]####指定apr-util和apr安装路径
3 安装pcre-devel软件包
[*]# yum install pcre-devel
4 编译安装httpd-2.4.4
[*]# tar xf httpd-2.4.4.tar.bz2
[*]# cd httpd-2.4.4
[*]#./configure --prefix=/usr/local/apache –sysconfdir=/etc/httpd --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-mpms-shared=all --with-mpm=event
[*]说明:--prefix=/usr/local/apache ####httpd安装路径
[*]--sysconfdir=/etc/httpd ####系统配置文件目录路径
[*]--enable-so ######支持共享模块功能
[*]--enable-ssl #####支持ssl功能
[*]--enable-cgi ####支持cgi功能
[*]--enable-rewrite ####支持重写功能
[*]--with-zlib #####支持扩展库文件功能
[*]--with-pcre #####支持pcre功能
[*]--with-apr=/usr/local/apr ######指定apr安装路径
[*]--with-apr-util=/usr/local/apr-util #####指定apr-util安装路径
[*]--enable-mpms-shared=all #####表示此平台的mpm模块都会被安装
[*]--with-mpm=event #####特指定mpm模块为event,mpm模块可以在配置文件中修改
[*]#make
[*]#setenforce 0 #####由于web服务是受selinux控制会导致系统运行不起来,要把selinux的功能关掉
[*]#make install
5 修改httpd的主配置文件,设置其pid文件的路径
[*]#vim /etc/httpd/httpd.conf
[*]添加内容:PidFile“/var/run/httpd.pid”
[*]保存退出
6 为httpd提供服务脚本
[*]#vim /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 #####指定pid的配置文件
[*]
[*]# Source function library.
[*]. /etc/rc.d/init.d/functions #####导入函数的配置文件
[*]
[*]if [ -f /etc/sysconfig/httpd ]; then #####判断/etc/sysconfig/httpd是否为普通文件,如果是,就导入执行该配置文件
[*] . /etc/sysconfig/httpd
[*]fi
[*]
[*]# Start httpd in the C locale by default.
[*]HTTPD_LANG=${HTTPD_LANG-"C"} ####如果没有设置HTTPD_LANG,就把C赋值给HTTPD_LANG
[*]
[*]# 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 ###指定apachectr文件路径
[*]httpd=${HTTPD-/usr/local/apache/bin/httpd}####如果没有指定httpd,就把后面的路径赋值给httpd
[*]prog=httpd
[*]pidfile=${PIDFILE-/var/run/httpd.pid}####如果没有指定pidfile路径,就把后面的路径赋值给pidfile文件
[*]lockfile=${LOCKFILE-/var/lock/subsys/httpd}###如果没有指定lockfile路径,就把后面的路径赋值给lockfile文件
[*]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/rc.d/init.d/httpd ####为脚本赋予执行权限
7 添加httpd到服务列表
8 查看httpd的监听端口
二、编译安装mysql
1 安装mysql-5.5.28
[*]#tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local
[*]#cd /usr/local/
[*]# ln -sv mysql-5.5.28-linux2.6-i686mysql ########为了保全mysql的路径、版本,要为此软件包创建链接
2 创建mysql用户和mysql组
[*]# cd mysql
[*]#groupadd –r –g 306 mysql
[*]#useradd –g 306 –r –u 306 mysql
[*]#chown –R mysql.mysql /usr/local/mysql/*
3 准备数据存放的文件系统
[*]在mysql目录下有个默认存放数据的目录,不过以后存储数据的规模会逐渐变大,建议使用逻辑卷挂载数据目录,我使用逻辑卷挂载数据目录,假设逻辑卷的挂载目录为/mydata;
[*]#fdisk /dev/sda
[*]#创建一个为20G的分区sda5,并把文件系统类型改为8e
[*]#partprobe /dev/sda
[*]#pvcreate /dev/sda5 #####创建物理卷
[*]#vgcreate myvg /dev/sda5 ####创建卷组
[*]#lvcreate -n mydata -L 5G myvg #####创建逻辑卷
[*]# lvs ####查看创建情况
[*]LV VG Attr LSizeOrigin Snap%Move Log Copy%Convert
[*]mydata myvg -wi-a-5.00G
[*]home vol0 -wi-ao4.88G
[*]root vol0 -wi-aob 29.28G
[*]#mke2fs -j /dev/myvg/mydata ####格式化
[*]#mkdir /mydata ######创建目录,让逻辑卷挂载到这个目录下
[*]#vim /etc/fstab #####让其在开机时自动挂载
[*]/dev/myvg/mydata /mydata ext3 defaults 0 0
[*]保存退出
[*]#mount -a ###挂载
[*]#mkdir /mydata/data #####为了数据便于管理,再创建一个子目录用来作为数据目录
[*]#chown -R mysql.mysql /mydata/data #####将来mysql用户要在数据目录下添加数据,要把数据目录的属主、属组都改为mysql
[*]#chmod o-rx /mydata/data ####为了数据的安全性,把数据目录修改不让其它人有任何权限
4 初始化mysql-5.5.28
[*]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data #########初始化mysql脚本,并指定用户和数据目录路径
[*]#chown -R root /usr/local/mysql/* #####初始化完成后,要把mysql目录下的属主改为root,防止其他人使用mysql用户进入/mysql下修改数据
[*]#cp suppor-files/mysql.server /etc/init.d/mysqld ####把服务器提供的脚本重命名为/etc/init.d/mysqld
[*]#ls -l /etc/init.d/mysqld ####注意查看该文件的是否有执行权限,如果没有要修改有执行权限
[*]-rwxr-xr-x 1root root10650 Mar 31 20:06/etc/init.d/mysqld
5 为mysql提供主配置文件
mysql的配置文件很特别:
/etc/my.cnf ---> /etc/mysql/my.cnf ---> $BASEDIR/my.cnf --> ~/.my.cnf
####找完一个接着找下一个,这里的$BASEDIR默认指的是自己的安装目录
#####找完之后可能会有冲突,出现冲突时,一般以最后一个为主,后一个会覆盖前一个
主配置文件在/support-files下有多个,可以根据自己的内存大小选择;
my-medium.cnf:内存为32M-64M选择
my-small.cnf:内存为64M以下选择
my-large.cnf:内存为512M选择
my-huge.cnf:内存为1G-2G选择
可以通过free -m查看自己的内存大小
[*]# cp support-files/my-large.cnf/etc/my.cnf ###把配置文件重命名为/etc/my.cnf
[*]#vim /etc/my.cnf
6 为mysql提供服务脚本
[*]# cp support-files/mysql.server/etc/rc.d/init.d/mysqld
[*]# chmod +x /etc/rc.d/init.d/mysqld
7 添加mysqld至服务列表
8 重启服务并查看mysql进程的端口
9执行mysql数据库操作
[*]#vim /etc/profile.d/mysql.sh ##mysql和mysqld系统默认都安装过,创建/etc/profile.d/mysql.sh并把执行路径添加进来
[*]export PATH=$PATH:/usr/local/mysql/bin
[*]保存退出
为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
10 输出帮助手册及man命令的查找路径
[*]#vim /etc/man.config
11 输出mysql的头文件至系统头文件路径/usr/include
[*]#ln –sv /usr/local/mysql/include /usr/include/mysql ####通过创建链接实现
12 输出mysql的库文件给系统库查找路径
[*]#echo ‘/usr/local/mysql/lib’ > /etc/ld.so.conf.d/mysql.conf##把查找路径追加到配置文件中
[*]#ldcofig –v###让系统重新载入系统库,并把过程显示出来
三、编译安装php-5.4.13
1 编译安装php-5.4.13
[*]# tar xf php-5.4.13.tar.bz2
[*]# cd php-5.4.13
[*]# ./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
[*]说明:
[*]--prefix=/usr/local/php:php安装路径
[*]--with-mysql=/usr/local/mysql:mysql安装路径
[*]--with-openssl:支持openssl功能
[*]--with-mysqli=/usr/local/mysql/bin/mysql_config:mysql与apache访问的另一种接口,安装在二进制目录下
[*]--enable-mbstring:多字节string
[*]--with-freetype-dir:安装的字体库头文件
[*]--with-jpeg-dir:jpeg类型的库
[*]--with-png-dir:png类型的库
[*]--with-zlib:互联网上通用压缩库,先压缩再传送,减少带宽
[*]--with-libxml-dir=/usr:xml库文件的路径
[*]--enable-xml:支持xml功能
[*]--enable-sockets:php支持套接字功能
[*]--with-apxs2=/usr/local/apache/bin/apxs:基于apxs实现让php编译成apache模块
[*]--with-mcrypt:支持额外的加密库
[*]--with-config-file-path=/etc:php配置文件放置路径
[*]--with-config-file-scan-dir=/etc/php.d :php配置文件的分段文件放置路径
[*]--with-bz2 :压缩库
[*]--enable-maintainer-zts:当apache使用worker或event这两个MPM,编译时使用该选项
[*]###我在执行./configure时候,出现了错误,提示我没有安装libmcrypt库文件,可以有两种解决方式:1、去掉该模块 2、下载依赖于该库文件的软件包,mhash*.rpm libmcrypt-*.rpm
[*]#make
[*]#make install
2 为php提供配置文件
[*]#cp php.ini-production /etc/php.ini ##php包中提供了配置文件,把配置文件重命名为/etc/php.ini,php的配置文件后缀名是以.ini结尾
3编辑apache配置文件httpd.conf,以apache支持php
[*]#vim /etc/httpd/httpd.conf
[*]#cd /usr/local/apache/htdocs/ #####进入apache页面目录下,把默认页面修改为php页面文件
[*]#mv index.html index.php
[*]#vim index.php
[*]It works! my test page
[*]
[*]保存退出
[*]#####发起php页面测试
[*]#####生成的测试页面内容对我们还是会有帮助,可以留意一下里面的内容
4 php和mysql结合,在index.php页面文件中修改一下内容
[*]It works! my test page
[*]
[*]保存退出
四、安装xcache,为php加速
1 安装xcache-3.0.1
[*]# tar xf xcache-3.0.1.tar.gz
[*]# cd xcache-3.0.1 ###xcache是php的扩展,要使用php命令加载此扩展
[*]# /usr/local/php/bin/phpize ####phpize命令作用是要准备一个php扩展准备编译,所以扩展要先执行编译
[*]#./configure--enable-xcache--with-php-config=/usr/local/php/bin/php-config
[*]#######php-config表示能够获取php的配置信息以及编译时的选项信息;
[*]######由于不在默认路径下,xcache要获取php安装时所启用的功能,否则xcache会找不到php的路径
[*]#make
[*]#make install
[*]安装结束时,会出现类似如下行:
[*]Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/
[*]#####安装共享扩展模块路径,先把这个路径复制下来,等一下复制到xcache的配置文件中
2 编辑php.ini,整合php和xcache
[*]# mkdir /etc/php.d
[*]# cp xcache.ini /etc/php.d ###将xcache提供的样例配置导入php.ini
[*]#vim /etc/php.d/xcache.ini
[*]# service httpd restart ####模块是要被web加载,要启动web服务
3 添加phpinfo功能,测试页面
[*]# vim /usr/local/apache/htdocs/index.php
[*]添加一行:phpinfo();
[*]保存退出并刷新页面
4 为源码编译httpd提供虚拟主机
[*]#vim /etc/httpd/httpd.conf
[*]#DocumentRoot "/usr/local/apache/htdocs" #####一定要注释中心主机配置
[*]Include /etc/httpd/extra/httpd-vhosts.conf #######开启虚拟主机配置文件,默认有样例
[*]LoadModule log_config_module modules/mod_log_config.so #####开启mod_log功能,默认是启用的
[*]保存退出
[*]#vim /etc/httpd/extra/httpd-vhosts.conf ########在提供的样例上修改
[*]
[*] ServerName www.a.org
[*] DocumentRoot "/www/a.org"
[*]
[*] Options none
[*] AllowOverride none
[*] Require all granted ####定义任何都有访问权限
[*]
[*] ErrorLog "/var/log/httpd/a.org-error_log"
[*] CustomLog "/var/log/httpd/a.org-access_log" combined
[*]
[*]
[*]
[*] ServerName www.b.net
[*] DocumentRoot "/www/b.net"
[*]
[*] Options none
[*] AllowOverride none
[*] Require all granted
[*]
[*] ErrorLog "/var/log/httpd/b.net-error_log"
[*] CustomLog "/var/log/httpd/b.net-access_log" common
[*]
[*]保存退出
5 创建域名和日志的目录
[*]# mkdir /www/{a.org,b.net} –pv
[*]#mkdir /var/log/httpd/
6 创建域名的页面index.html
[*]#echo "www.a.org" > /www/a.org/index.html
[*]#echo "www.b.net" > /www/b.net/index.html
[*]#httpd –t
7 在物理机上添加域名解析记录
[*]过程:点击硬盘c盘---> Windows---> System32---> drivers---> etc--->hosts文件
[*]添加如下内容:
[*]172.16.52.2 www.a.org
[*]172.16.52.2 www.b.net
[*]######注意:不要忘记保存,点击保存按钮
[*]#service httpd restart
8 测试域名
9 使用ab工具对静态页面进行压力测试
[*]#ab -c 10 -n 100 http://www.a.org/index.html
10 对动态页面进行压力测试
[*]安装phpMyAdmin-3.5.1-all-languages.tar.bz2软件包到/www/b.net下
[*]#tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2/ -C /www/b.net
[*]#cd /www/b.net
[*]#mv phpMyAdmin-3.5.1-all-languages / pma
[*]#cd pma
[*]#cp config.sample.inc.php config.inc.php #####软件包提供默认配置文件,重命名配置文件名称
[*]#openssl rand -base64 10 ####生成10位的随机数,把生成的随机数复制到配置文件中
[*]#vim config.inc.php ####编辑配置文件,把生成的随机数写在下面的位置
[*]$cfg['blowfish_secret'] = 'QkMTw3ZlpJlBKA'
[*]#mysqladmin -uroot password 'redhat' ######生成root用户的密码,登录站点www.b.net/pma不允许使用空密码
[*]#ab -c 100 -n 1000 http://www.b.net/pma/index.html ###动态页面压力测试
常见的压力测试工具:ab, http_load, webbench, siege;大家可以下载这些测试工具对页面进行测试一下
11 使用apache如何实现https功能,在一台主机上进行操作
11.1 启动模块及添加虚拟主机
[*]#vim /etc/httpd/httpd.conf ####进入配置文件启用ssl模块
[*]LoadModule ssl_module modules/mod_ssl.so ####启用模块
[*]Include /etc/httpd/extra/proxy-html.conf
[*]保存退出
[*]#vim /etc/httpd/extra/httpd-ssl.conf ####编辑此配置文件,添加虚拟主机
[*]
[*]DocumentRoot "/www/a.org"
[*]ServerName www.a.org
[*]ErrorLog "/var/log/httpd/a.org-error_log"
[*]TransferLog "/var/log/httpd/a.org-access_log"
[*]SSLCertificateFile "/etc/httpd/ssl/httpd.crt" ###证书文件放置的位置
[*]SSLCertificateKeyFile "/etc/httpd/ssl/httpd.key"####证书文件密钥放置的位置
11.2 CA机构自身生成私钥
[*]#cd /etc/pki/
[*]#cd CA/
[*]#(umask 077; openssl genrsa -out private/cakey.pem 2048)
11.3在配置文件中修改默认信息
[*]#vim ../tls/openssl.cnf
[*]countryName_default=CN
[*]stateOrProvinceName_default=Henan
[*]localityName_default =Zhengzhou
[*]O.organizationName_default =MageEdu
[*]organizationalUnitName_default =Tech
[*]######这些默认信息可以根据自己需求自定义
11.4 生成自签证书
11.5 为签证的证书准备目录和文件
[*]#mkdir certs crl newcerts
[*]#touch index.txt
[*]#echo 01 > serial
11.6 生成服务器端密钥
[*]#cd /etc/httpd/
[*]#mkdir ssl
[*]#cd ssl/
[*]#(umask 077; openssl genrsa 1024 > httpd.key)
11.7 生成颁发证书请求
[*]#openssl req –new –key httpd.key –out httpd.csr
[*]输入几个信息,这些信息和颁发证书的内容相同,除了主机名不同,这里应该写虚拟主机的主机名称:www.a.org
11.8 向CA机构发出签证的请求
[*]#openssl ca -in httpd.csr -out httpd.crt -days 365
[*]#ll ####签证完成,在当前目录下自动生成几个文件
[*]#cd /etc/pki/CA
[*]#cat index.txt #####显示CA证书中签证的记录
[*]#service httpd restart
11.9 查看监听端口
11.10 在物理机的hosts文件添加虚拟主机IP和域名
[*]物理机hosts文件路径:点击“本地磁盘C”—>Windows—>System32—>drivers—>etc—>hosts
[*]添加:172.16.52.2 www.a.org
[*]######在IE浏览器上测试站点,对虚拟主机进行域名解析
11.11把服务器端的证书文件拖到物理机上
11.12安装证书
一直点击“下一步”,出现“导入成功”字样
11.13 测试站点www.a.org
页:
[1]