一、LAMP

1.LAMP简介

   LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代表的方面功能非常强大的组件。

   LAMP这个词的由来最早始于德国杂志“c't Magazine”,Michael Kunze在1990年最先把这些项目组合在一起创造了LAMP的缩写字。这些组件并不是开始就设计为一起使用的,但是,这些软件都是开源的,可以很方便的随时获得并免费使用,这就导致了这些组件经常在一起使用。这些组件的兼容性也在不断完善,为了改善不同组件之间的协作,已经创建了某些扩展功能,在一起的应用情形变得非常普便,因而成为目前最流行的web应用基础架构。

2.LAMP的组件

  平台由四个组件组成,呈分层结构,每一层都提供了整个架构的一个关键部分:

  Linux:Linux 处在最底层,提供操作系统。它的灵活性和可定制化的特点意味着它能够产生一种高度定制的平台,让其它组件在上面运行。其它组件运行于Linux 之上,但是并不一定局限于 Linux,也可以在 Microsoft Windows, Mac OS X 或 UNIX上运行。

  Apache:Apache位于第二层,它是一个Web 服务平台,提供可让用户获得 Web 页面的机制。Apache 是一款功能强大、稳定、可支撑关键任务的Web服务器,Internet 上超过 50% 的网站都使用它作为 Web 服务器。

  MySQL:MySQL 是最流行的开源关系数据库管理系统,是LAMP的数据存储端。在 Web 应用程序中,所有帐户信息、产品信息、客户信息、业务数据和其他类型的信息都存储于数据库中,通过 SQL 语言可以很容易地查询这些信息。

  PHP/Perl:Perl是一种灵活的语言,特别是在处理文本要素的时候,这种灵活性使Perl很容易处理通过 CGI接口提供的数据,灵活地运用文本文件和简单数据库支持动态要素。PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。可以使用 PHP 编写能访问 MySQL 数据库中的数据和 Linux 提供的一些特性的动态内容。

3.php作为apache模块加载

Apache对PHP的支持是通过Apache的模块mod_php5来支持的。如果希望Apache支持PHP的话,在php编译安装步骤需要指定--with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析。

在最后一步make install的时候我们会看到将动态链接库libphp5.so(Apache模块)拷贝到apache2的安装目录的modules目录下,并且还需要在httpd.conf配置文件中添加LoadModule语句来动态将libphp5.so 模块加载进来,从而实现Apache对php的支持。

由于该模式实在太经典了,因此这里关于安装部分不准备详述了,相对来说比较简单。我们知道nginx一般包括两个用途HTTP Server和Reverse Proxy Server(反向代理服务器)。在前端可以部署nginx作为reverse proxy server,后端布置多个Apache来实现机群系统server cluster架构的。

因此,实际生产中,我们仍旧能够保留Apache+mod_php5的经典App Server,而仅仅使用nginx来当做前端的reverse proxy server来实现代理和负载均衡。 因此,建议nginx(1个或者多个)+多个apache的架构继续使用下去。

PHP的所有应用程序都是通过WEB服务器(如IIS或Apache)和PHP引擎程序解释执行完成的

工作过程:
(1)当用户在浏览器地址中输入要访问的PHP页面文件名,然后回车就会触发这个PHP请求,并将请求传送化支持PHP的WEB服务器。
(2)WEB服务器接受这个请求,并根据其后缀进行判断如果是一个PHP请求,WEB服务器从硬盘或内存中取出用户要访问的PHP应用程序,并将其发送给 PHP引擎程序。
(3)PHP引擎程序将会对WEB服务器传送过来的文件从头到尾进行扫描并根据命令从后台读取,处理数据,并动态地生成相应的HTML页面。
(4)PHP引擎将生成HTML页面返回给WEB服务器。WEB服务器再将HTML页面返回给客户端浏览器。

二.下载软件包

shell> wget http://downloads.mysql.com/archives/get/file/mysql-5.5.30.tar.gz

shell> wget http://mirrors.axint.net/apache/apr/apr-util-1.4.1.tar.gz
shell> wget http://mirrors.axint.net/apache/apr/apr-1.4.8.tar.gz
shell> wget http://mirrors.axint.net/apache/apr/apr-iconv-1.2.1.tar.gz
shell> wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
shell> wget http://apache.fayea.com/apache-mirror//httpd/httpd-2.4.7.tar.gz

三.安装编译环境

shell> yum -y install vim man openssh-server wget nfs*

shell> yum -y install gcc gcc-c++ make cmake automake autoconf cpp ncurses ncurses-devel libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel pcre-devel libtool libtool-libs freetype-devel gd zlib-devel bison  readline-devel glibc-devel glib2-devel bzip2-devel gettext-devel libcap-devel libmcrypt-devel

zlib-devel   编译apache时候报错  error: mod_deflate has been requested but can not be built due to prerequisite failures

openssl-devel  checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures

四.安装mysql-5.5

shell> groupadd mysql && useradd -g mysql mysql -s /sbin/nologin
shell> cd /home/softs/mysql-5.5.30
shell> cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/dbdata -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_SSL=yes
shell> make && make install


shell> cp -f /home/softs/mysql-5.5.30/support-files/my-large.cnf /etc/my.cnf
shell> cp -f /home/softs/mysql-5.5.30/support-files/mysql.server /etc/init.d/mysqld

shell> chmod 755 /etc/init.d/mysqld
shell> sed -i "/\[mysqld\]/a datadir=/data/mysql" /etc/my.cnf
shell> sed -i "/^socket/d" /etc/my.cnf
shell> sed -i "/\[mysqld\]/a socket=/usr/local/mysql/tmp/mysql.sock" /etc/my.cnf
shell> sed -i "/\[client\]/a socket=/usr/local/mysql/tmp/mysql.sock" /etc/my.cnf

shell> chown mysql.mysql /usr/local/mysql -R
shell> /usr/local/mysql/scripts/mysql_install_db --user=root --datadir=/data/mysql --basedir=/usr/local/mysql
shell> chown mysql.mysql /data/mysql -R
shell> /etc/init.d/mysqld restart
shell> echo "export PATH=${PATH}:/usr/local/mysql/bin" >> /etc/profile

五.安装apache

1.apr简介

Apache可移植运行时( Apache Portable Runtime,简称APR)是ApacheHTTP服务器的支持库,提供了一组映射到下层操作系统的API。如果操作系统不支持某个特定的功能,APR将提供一个模拟的实现。这样程序员使用APR编写真正可在不同平台上移植的程序。

最初,APR是作为Apache HTTP服务器的一部分而存在的,但是Apache软件基金会将其延伸成一个单独的项目。其他的应用程序可以使用APR来实现平台无关性。

2.pcre简介

PCRE(Perl Compatible Regular Expressions),中文含义:perl语言兼容正则表达式, 它是一个用C语言编写的正则表达式函数库,PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库。
PCRE被广泛使用在许多开源软件之中,最著名的莫过于Apache HTTP服务器和PHP脚本语言、R脚本语言,此外,正如从其名字所能看到的,PCRE也是perl语言的缺省正则库。

3.apr install

cd /home/softs/apr-1.4.8
sed -i "/.*\$RM\ \"\$cfgfile\"/d" configure
./configure '--prefix=/usr/local/apr'
make && make install

4.apr-util install

[ -d "/home/softs/apr-util-1.4.1" ] && cd /home/softs/apr-util-1.4.1
./configure "--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config"
make && make install

5.apr-iconv install

cd /home/softs/apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr/bin/apr-1-config
make && make install

6.pcre install

cd /home/softs/pcre-8.35
./configure --prefix=/usr/local/pcre
make && make install

7.apache install

cd /home/softs/httpd-2.4.7
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-apr-iconv=/usr/local/apr-iconv --with-ssl --enable-ssl --enable-so --enable-deflate=shared --enable-expires=shared --enable-headers=shared --enable-rewrite=shared --enable-static-support --with-pcre=/usr/local/pcre
//配置参数解析
–prefix=/usr/local/apache2    //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。
--enable-ssl          //Enable support for SSL/TLS provided by mod_ssl.
--enable-so         //允许运行时加载DSO模块
--enable-deflate=shared   //支持网页压缩
--enable-expires=shared   //支持 HTTP 控制
--enable-rewrite=shared   //支持 URL 重写
--enable-header          //Enable control of HTTP headers provided by mod_headers.
--enable-cache //支持缓存
--enable-file-cache //支持文件缓存
--enable-mem-cache //支持记忆缓存
--enable-disk-cache //支持磁盘缓存
--enable-static-support   //支持静态连接(默认为动态连接)
--enable-static-checkgid   //使用静态连接编译 checkgid
--disable-cgid   //禁止用一个外部 CGI 守护进程执行CGI脚本
--disable-cgi   //禁止编译 CGI 版本的 PHP
make && make install

8.添加启动脚本和环境变量

cp -f /usr/local/apache2/bin/apachectl /etc/init.d/httpd
echo "export PATH=${PATH}:/usr/local/apache2/bin" >> /etc/profile

六.安装php

1.libmcrypt install
[ -d /home/softs/libmcrypt-2.5.7 ] && cd /home/softs/libmcrypt-2.5.7
./configure
make && make install

2.php install
cd /home/softs/php-5.4.26

./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/usr/local/mysql/tmp/mysql.sock --with-gd --with-iconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt
make && make install
//编译参数
--prefix    //安装目录
--with-config-file-path    //指定php.ini位置
--with-apxs2    //整合 apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到 apache,要求 apache 要打开SO模块
--with-mysql    //mysql扩展支持,这个填mysql目录地址,实际应用开发时可以连接其他机器的mysql服务器,只是一个扩展而已。
--with-mysqli    //mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
--with-mysql-sock    //sock文件位置
--with-gd     //打开gd库支持
--with-iconv     //
--with-freetype-dir     //打开对freetype字体库的支持
--with-jpeg-dir         //打开对jpeg图片的支持
--with-png-dir         //打开png图片支持
--with-zlib-dir     //打开zlib库的支持
--with-libxml-dir     //打开libxml2库的支持
--enable-xml         //xml支持
--enable-bcmath     //打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-shmop     //
--enable-sysvsem      //要使用 SysV 的信号 (semaphores) 机制--enable-inline-optimization     //优化线程
--with-curlwrappers     //运用curl工具打开url流
--enable-mbregex     //多字节,字符串的支持
--enable-mbstring     //多字节,字符串的支持
--enable-ftp     //打开ftp的支持
--enable-gd-native-ttf     //支持TrueType字符串函数库
--with-openssl     //openssl的支持,加密传输时用到的
  --enable-pcntl     //
--enable-sockets     //打开sockets支持
--with-xmlrpc     //打开xml-rpc的c语言
--enable-zip     //打开对zip的支持
--enable-soap     //
--without-pear     //打开pear命令的支持,PHP扩展用的
--with-gettext     //打开gnu的gettext支持,编码库用到
--enable-session     //启用session支持
--with-mcrypt    //mcrypt算法的扩展


七配置apache支持php
sed -i "/^LoadModule\ php5_module/a AddType application/x-httpd-php .php .phtml" /usr/local/apache2/conf/httpd.conf
chown daemon.daemon -R /usr/local/apache2/htdocs
echo "hello" > /usr/local/apache2/htdocs/index.html