LAMP环境搭建-Apache
1. 引言
系统环境:CentOS 6.4-x86_64
Apache: 2.2 (apache官网只提供最新包, 无法下载旧版的源码包, 2.2各版本之间应该不会有较大区别).
使用yum安装apache时会自动安装其依赖包, 包括apr
, apr-util
, pcre
等(还有mailcap
什么的, 不过并不是必须的), 编译安装时也需要至少这个3个包.
yum安装依赖
可以使用yum安装依赖包, 然后编译apache时就不需要指定--with-pcre
, --with-apr
与--with-apr-util
的路径了. 不过很可能会出现版本不匹配的问题, 所以最好统一使用源码安装
yum install apr apr-devel apr-util apr-util-devel pcre pcre-devel
源码安装依赖
高端一点的方式是源码安装依赖
apr
与apr-util
在这里下载. 注意: 是Releases
这一项中的, 而不是Source
.(咳, 直接在这里吧, 方便一点)
两者configure时只需要指定--prefix
(当然也可以不指定). 因为apr-util依赖于apr, 前者安装时需要指定后者的路径(--with-apr
), 所以应该优先安装apr
.
pcre
的官网, 貌似现在有pcre2
了, 不知道其向前兼容性怎样, 还是直接使用pcre
吧. 选择最新最稳定的就可以了. 这个也是只需要指定--prefix
就可以了.
安装 apache
apache的configure选项很多, 需要对apache也有很深刻的了解才可以准确配置. 引用网上的一个安装步骤:
tar xf httpd-2.2.31.tar.bz2
cd httpd-2.2.31
./configure \
--prefix=/usr/local/apache \
--sysconfdir=/etc/httpd-2.2.31 \
--enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-deflate \
--with-z --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util \
--enable-modules=most --enable-mpms-shared=all \
--with-mpm=event
make && make install
各编译参数详解
–prefix | 安装路径 |
–sysconfdir | 配置文件路径 |
–enable-ssl | 支持SSL/TLS, 可以实现https访问 |
–enable-cgi | 支持CGI脚本(默认对非线程的MPM模式开启) |
–enable-rewrite | 启用Rewrite功能 |
–enable-deflate | 支持压缩 |
–with-z | 使用指定的zlib库, 不指定路径会自动寻找 |
–with-pcre | 使用指定的PCRE库, 不指定路径会自动寻找 |
–with-apr | 指定apr安装路径 |
–with-apr-util | 指定apr-util安装路径 |
–enable-modules | 支持动态启用的模块, 可选参数有"all", “most”, “few”, “reallyall” |
–enable-so | DSO兼容, DSO=Dynamic Shared Object, 动态共享对象, 可实现模块动态生效 |
–enable-mpms-shared | 支持动态加载的MPM模块, 可选"all" |
–with-mpm | 设置默认启用的MPM模式 |
Apache安装目录结构
/usr/local/apache/
├── bin #存放启动或关闭httpd的脚本文件
├── build
├── cgi-bin #cgi程序文件的存放目录
├── error #发生服务器端错误时返回给客户端的错误页面
│ └── include
├── htdocs #Web页面所在的目录
├── icons #存放httpd的图标文件
│ └── small
├── include #存放头文件
├── logs #httpd的日志文件
├── man #帮助手册
│ ├── man1
│ └── man8
├── manual #httpd的配置手册
│ ├── developer
│ ├── faq
│ ├── howto
│ ├── images
│ ├── misc
│ ├── mod
│ ├── platform
│ ├── programs
│ ├── rewrite
│ ├── ssl
│ ├── style
│ │ ├── css
│ │ ├── lang
│ │ ├── latex
│ │ ├── scripts
│ │ └── xsl
│ │ └── util
│ └── vhosts
└── modules #存放httpd的模块
一些善后工作
以前从来没有考虑过这个, 参考文章给了我很大提醒. 除了修改配置文件中的pid/log路径, 修改PATH变量还有这几个步骤.
导出头文件
ln -sv /usr/local/apache/include /usr/local/include/httpd
导出man手册
编辑/etc/man.config, 添加入:
MANPATH /usr/local/apache/man
编写服务脚本
因为是编译安装, 不会自动生成服务脚本(service httpd start
的那个httpd
), 另外还要给其添加执行权限
一般是编辑为/etc/rc.d/init.d/httpd
文件, 文件内容可以参考同目录下的其他服务脚本或者直接从使用yum安装httpd的此目录下copy一个. 这里就不抄了.
LAMP环境搭建-PHP
#!/bin/bash
## 常用依赖
yum install -y \
libxml2 libxml2-devel \
libvpx libvpx-devel libjpeg libjpeg-devel \
libpng libpng-devel \
libXpm libXpm-devel t1lib t1lib-devel \
freetype freetype-devel gd gd-devel \
curl libcurl-devel \
zlib zlib-devel bzip2 bzip2-devel openssl openssl-devel \
libmcrypt libmcrypt-devel mhash mhash-devel mcrypt
## 编译选项
#### --with-mysql=mysqlnd表示使用php官方的mysql驱动, 所以编译php前不需要安装mysql
./configure \
--prefix=/usr/local/php \
--enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets \
--enable-sysvmsg --enable-sysvsem --enable-sysvshm \
--enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring \
--disable-rpath --disable-debug --disable-fileinfo \
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-pcre-regex --with-iconv --with-zlib --with-gd --with-xmlrpc --with-curl \
--with-mcrypt --with-openssl --with-mhash --with-imap-ssl
make && make install
编译选项
关于PHP源码编译应该首先了解的, 把它的configure
选项分为两种:
-
一种是编译时选择开启或关闭的特性.
-
需要额外安装的模块与依赖.
根据这种原则, configure
文件中的常用选项可以分为这4种情况.
--prefix
,--with-config-file-path
这种关于php的安装路径
,配置路径
,扩展路径
等;
除了--prefix
在安装前必须指定, 其他的都可以在配置文件中指定其他路径.
- php语言内置特性, 使用configure中
--enable-*
选项开启或关闭.
这些选项应该是无法在php配置文件中修改的, 所以编译时应该准确指定, 不过默认值应该是官方推荐的比较好的选择, 除非有特别需要, 不必纠结这个.
- 安装时指定的依赖库(libxml2), 模块(mcrypt)等, 使用
--with-*
指定路径;
模块对于原生php语言来说不是必须的, 只是少了些额外功能而已, 但依赖库是必须要安装的, 比如libxml2, 这些是php本身的依赖, 如果没有这些, php是无法安装的.
- 配合使用的环境(apxs, mysql), 在configure文件中被称为
SAPI
, 应该是 服务器应用编程接口, 不过官网中这一节中大部分还是使用--enable-*
开启或关闭的, 我自己把这些归为第2种情况.
关于这种情况, 如果php不是单纯的作为脚本执行, 而是需要处理http请求, 连接数据库等, 就需要apache有执行php程序的模块, 而php也需要有各种数据库的"驱动". 所以应该先安装apache与数据库, 再安装php. 其实也可以算上是一种模块.
扩展: 内置扩展与模块扩展
如网上所说, 一开始安装PHP的时候, 一般并不知道需要哪些扩展, 所以只有等到我们真正用到的时候才想办法去安装. 不过, 也会有些确定需要的扩展可直接编译进PHP环境.
这两者的区别是, 后者可以在php.ini配置文件中选择开启或者关闭, 而前者只能一直处于开启状态. 当然, 因为前者免去了模块查找, 加载等的时间, 速度会比后者快些; 而且通过后者安装的模块会出现在指定的模块路径中, 一般以.so结尾, 而前者不会.
安装扩展
关于模块源码
php源码包ext目录下有比较常用的依赖库与原生模块, 如openssl, zlib库, 还有curl, mcrypt模块等, 也可以去模块各自的官网上下载, 不过这两种都没有模块完整的依赖库(尤其是依赖库的依赖库…), 需要事先自行安装.
区别在于, 前者没有Makefile文件, 需要使用相同版本的php环境下的phpize工具建立php的外挂模块, 即只能为已经存在的php环境"添加"模块, 后者则是可以将模块编译到php环境内部.
其实如果对依赖库没有严格的版本限制, 直接使用yum安装各种依赖包更方便一些, 其他扩展可以在需要的时候再添加入php模块路径, 再在配置文件中开启即可.