写在前面:

搭建 LAMP 环境有非常多种方法,最简单的莫过于传说中的“一键安装 LAMP”。CentOS 发行版也可以使用 yum 命令安装,然而,通过 yum 安装的 Apache 版本只有 2.2,PHP 版本只有已经停止维护的 5.3。所以,一般情况下,为了使用最新版本的 Apache、MySQL 和 PHP,都是通过编译安装的方法搭建 LAMP 环境。

网上有数不胜数的关于编译安装 LAMP 环境的教程,我现在再来写这个,也不会是完全的多此一举,我权当这个是我的一个学习笔记。

之前从来没有接触过 Linux,也搞不清 Linux 的各种发行版之间的区别,而我第一个接触的 Linux 是带桌面的 Ubuntu,命令行第一个接触的是 CentOS。之所以用 CentOS,只是因为当时觉得名字好记吧╮( ̄▽ ̄)╭,于是后面我选择的系统一直都是 CentOS。

所以说,这篇教程是适用于 CentOS 6.x 的,CentOS 的其他版本就不一定按照这样编译了,至于其他发行版,大概 Redhat 和 Fedora 也适用吧。

教程里会有很多说明,不想看说明的话,可以直接看 shell 命令,重要的话我也会特别注明的,也可以直接复制 shell 使用。

 

一、用 root 用户连接上主机

 

二、禁用 SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#在 /etc/selinux/config 文件里把 SELINUX=enforcing 替换为 SELINUX=disabled,重启生效
setenforce 0
#临时把 SElinux 关闭,不需要重启

SELinux 是“增强式 Linux” 的简称,关于 SELinux,可以访问中文维基百度百科

注:SELinux 会影响 Apache 的安装和使用,所以把它禁用,但并不是一定要禁用 SELinux 才能安装 Apache,只是不禁用需要另外配置 SELinux 才能使用。

可以使用 getenforce 命令查看 SELinux 是否已经被禁用,显示 Disabled 表示已经被禁用,显示 Enforcing 表示已启用,显示 Permissive 表示被临时禁用。

 

三、安装前准备

这里博主建议用新安装的系统来编译安装 LAMP,不然因为一些残留文件/服务之类的东西会发生奇怪的事。

虽然建议用新安装的系统,但是还是使用下面的命令清理掉一些东西,并且更新下通过 yum 命令安装的程序。

rpm -e --nodeps httpd
rpm -e --nodeps mysql
rpm -e --nodeps php
#用 rpm 卸载以上3个包,-e 表示卸载,--nodeps 表示忽略检查依赖性
yum -y remove httpd
yum -y remove mysql
yum -y remove php
#用 yum 卸载以上3个包,-y 表示默认通过询问
yum -y update
#更新所有使用 yum 安装的包

yum -y install \
wget kernel-devel autoconf automake \
bison bzip2 bzip2-devel \
curl curl-devel cmake cpp crontabs diffutils elinks e2fsprogs-devel expat-devel \
file flex flex-devel freetype freetype-devel \
gcc gcc-c++ gd glibc glibc-devel glib2 glib2-devel gettext gettext-devel gmp gmp-devel \
icu libaio libaio-devel libtool-libs \
libjpeg-devel libpng-devel libxslt libxslt-devel libxml2 libxml2-devel \
libidn-devel libcap-devel libtool-ltdl-devel libc-client-devel libicu libicu-devel \
lynx make mlocate ncurses-devel openldap openldap-devel openssl openssl-devel \
patch pam-devel pcre pcre-devel perl-DBD-MySQL readline readline-devel \
sendmail unzip vim vim-minimal zip zlib zlib-devel
#安装必须的环境

 

四、安装 PCRE

PCRE(Perl Compatible Regular Expressions) 是一个 Perl 库,包括 perl 兼容的正则表达式库。

注意:编译安装的时候请使用 PCRE,而不是 PCRE2,否则在编译 Apache 的时候会报错的。

可以在 PCRE 的 sourceforge 下载最新版 PCRE,文件格式为 pcre-版本.tar.gz。本文以 pcre-8.40 为例,使用时请使用最新版,命令只要替换版本号就行了。

cd /usr/local/src
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
tar -zxf pcre-8.40.tar.gz
cd pcre-8.40
./configure --prefix=/usr/local/pcre
make
make install

通过 ./configure --help 可以查看更多编译选项。

 

五、下载编译安装 Apache 2.4

Apache 2.4 版本和 Apache 2.2 版本的编译安装不太一样,Apache 2.4 需要两个依赖包:aprapr-util,而 Apache 2.2 则不需要。

Apache 可移植运行时( Apache Portable Runtime,简称APR)是 Apache HTTP 服务器的支持库,提供了一组映射到下层操作系统的 API。如果操作系统不支持某个特定的功能,APR 将提供一个模拟的实现。更多关于 APR 的详情,可以访问中文维基

 

在 apr 的官网可以下载最新版 aprapr-util,文件格式为 apr-版本.tar.gzapr-util-版本.tar.gz,在 httpd 的官网可以下载最新版 Apache HTTP 服务器,文件格式为 httpd-版本.tar.gz,官网下不动可以选择镜像下载。

本文以 apr-1.5.2、apr-util-1.5.4 和 httpd-2.4.25 为例,使用时请使用最新版,命令只要替换版本号就行了。本文 Apache 安装在 /usr/local/apache 目录下。

cd /usr/local/src
wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz
wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.25.tar.gz
tar -zxf apr-1.5.2.tar.gz
tar -zxf apr-util-1.5.4.tar.gz
tar -zxf httpd-2.4.25.tar.gz
mv apr-1.5.2 httpd-2.4.25/srclib/apr
mv apr-util-1.5.4 httpd-2.4.25/srclib/apr-util
cd httpd-2.4.25
./configure \
--prefix=/usr/local/apache \
--with-pcre=/usr/local/pcre \
--with-mpm=prefork \
--with-included-apr \
--enable-so \
--enable-ssl \
--enable-modules=all \
--enable-mods-shared=all
make
make install

shared 表示动态加载这些模块,如果没有 --enable-mods-shared=all,那么这些模块就是静态加载的。静态加载的模块是通过 <ifmodule></ifmodule> 来配置,动态使用 LoadMoule 来加载。动态加载的模块只要去除配置文件前面的注释符就能启用相应模块,所以说动态加载更加方便,但是官方说会有大约 5% 的性能损失。

可以使用 ./configure --help | grep disable 来查看哪些模块是默认会加载的,默认会加载的可以不用在 ./configure 指定。

要查看编译的参数,请点此进入官方 Apache 2.4 的手册,手册的内容比较容易,通过 Google 翻译一般都看得懂(=・ω・=)

 

六、设置 Apache

经过第五步已经把 Apache 安装完成了,接下来要把 Apache 的文件复制到 /etc/init.d/ 中注册成服务、设置开机自启动、编辑 Apache 的配置文件、设置 Apache 目录等。本文中网站的默认目录是 /data/www/default/

cp -f /usr/local/apache/bin/apachectl /etc/init.d/httpd
#拷贝文件到init.d里
sed -i '2a # chkconfig: - 85 15' /etc/init.d/httpd
sed -i '3a # description: Apache is a World Wide Web server. It is used to server' /etc/init.d/httpd
#想要将Apache作为服务启动必须要这两句,不要问为什么,它就是这样的
chkconfig --add httpd
#将httpd设置为服务
chkconfig httpd on
#将httpd的2、3、4、5运行级设置为On,即开机启动

rm -rf /etc/httpd
ln -s /usr/local/apache/ /etc/httpd
#/etc/httpd为运行目录
cd /usr/sbin/
ln -fs /usr/local/apache/bin/httpd
ln -fs /usr/local/apache/bin/apachectl
#将这两个文件链接过来,以适应init.d脚本
cd /var/log
rm -rf httpd/
ln -s /usr/local/apache/logs httpd
#将日志链接到log目录

groupadd apache
useradd -g apache -s /sbin/nologin apache
#添加apache组和apache用户

mkdir -p /data/www/default/
chmod -R 755 /data/www/default/
#创建apache的默认目录,并设置权限

 

接下来就是配置 Apache 的配置文件 httpd.conf 了。

注:以下配置 shell 亲测有效,全复制下来黏贴就行,请不要多次运行

#先配置/usr/local/apache/conf/httpd.conf文件
cp -f /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
sed -i 's@^#LoadModule\(.*\)mod_socache_shmcb.so@LoadModule\1mod_socache_shmcb.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_deflate.so@LoadModule\1mod_deflate.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_deflate.so@LoadModule\1mod_deflate.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_expires.so@LoadModule\1mod_expires.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_ssl.so@LoadModule\1mod_ssl.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#LoadModule\(.*\)mod_rewrite.so@LoadModule\1mod_rewrite.so@' /usr/local/apache/conf/httpd.conf
sed -i 's@^User daemon@User apache@' /usr/local/apache/conf/httpd.conf
sed -i 's@^Group daemon@Group apache@' /usr/local/apache/conf/httpd.conf
sed -i 's/^ServerAdmin you@example.com/ServerAdmin administrator@ttionya.com/' /usr/local/apache/conf/httpd.conf
sed -i 's@^#ServerName www.example.com:80@ServerName localhost@' /usr/local/apache/conf/httpd.conf
sed -i '/^<Directory \/>/a\
    Options FollowSymLinks\
    AllowOverride None\
delttionya' /usr/local/apache/conf/httpd.conf
sed -i '/delttionya/,+2d' /usr/local/apache/conf/httpd.conf
sed -i "s@^DocumentRoot.*@DocumentRoot \"/data/www/default\"@" /usr/local/apache/conf/httpd.conf
sed -i "s@^<Directory \"/usr/local/apache/htdocs\">@<Directory \"/data/www/default\">@" /usr/local/apache/conf/httpd.conf
sed -i 's@Options Indexes FollowSymLinks@Options +Includes -Indexes@' /usr/local/apache/conf/httpd.conf
sed -i 's@DirectoryIndex index.html@DirectoryIndex index.php index.html@' /usr/local/apache/conf/httpd.conf
sed -i 's@^ErrorLog \"logs/error_log\"@ErrorLog \"| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log_%Y%m%d.log 86400\"@' /usr/local/apache/conf/httpd.conf
sed -i 's@CustomLog \"logs/access_log\" common@#CustomLog \"logs/access_log\" common@' /usr/local/apache/conf/httpd.conf
sed -i 's@#CustomLog \"logs/access_log\" combined@CustomLog \"| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_%Y%m%d.log 86400\" combined@' /usr/local/apache/conf/httpd.conf
sed -i "s@AddType\(.*\)Z@AddType\1Z\n    AddType application/x-httpd-php .php .phtml\n    AddType application/x-httpd-php-source .phps@" /usr/local/apache/conf/httpd.conf
sed -i 's@^#Include conf/extra/httpd-mpm.conf@Include conf/extra/httpd-mpm.conf@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@' /usr/local/apache/conf/httpd.conf
sed -i 's@^#Include conf/extra/httpd-default.conf@Include conf/extra/httpd-default.conf@' /usr/local/apache/conf/httpd.conf
cat >> /usr/local/apache/conf/httpd.conf << EOF
ServerTokens ProductOnly
ServerSignature Off
EOF

#接下来配置/usr/local/apache/conf/extra/httpd-vhosts.conf文件
rm -f /usr/local/apache/conf/extra/httpd-vhosts.conf
cat > /usr/local/apache/conf/extra/httpd-vhosts.conf << EOF
<VirtualHost *:80>
    DocumentRoot "/data/www/default/"
    ServerName localhost
    DirectoryIndex index.php index.html
    <Directory "/data/www/default/">
        Options +Includes -Indexes
        Require all granted
        AllowOverride All
    </Directory>
</VirtualHost>
EOF

#再配置/usr/local/apache/conf/extra/httpd-default.conf文件
sed -i 's@Timeout 60@Timeout 120@' /usr/local/apache/conf/extra/httpd-default.conf
sed -i 's@MaxKeepAliveRequests 100@MaxKeepAliveRequests 1024@' /usr/local/apache/conf/extra/httpd-default.conf

更多Apache配置文件内容请见官网

 

七、启动,测试 Apache

Apache 的启动、关闭、重启命令:/etc/init.d/httpd (start|stop|restart)

/data/www/default/ 创建一个 index.html 文件,写上一段话,开启 httpd 服务,如果能显示这段话,那么表示 Apache 安装启动成功。

cat > /data/www/default/index.html << EOF
<html><head><title>测试</title></head><body>Success!</body></html>
EOF
#写一个HTML页面

/etc/init.d/httpd start
#启动Apache

sed -i '/^-A INPUT\(.*\) 22 \(.*\)/a\
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT' /etc/sysconfig/iptables
/etc/init.d/iptables restart
#对80端口添加防火墙规则,上面的22表示在ssh的22端口下面添加这条规则,如果改变了ssh端口,请把22改成你的ssh端口,不然会无法添加

 

注:为避免出现没有添加到防火墙规则的情况出现,这里执行完以后请再执行一下 cat /etc/sysconfig/iptables 命令,看里面有没有 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 这句规则,若没有,请使用 vim /etc/sysconfig/iptables 命令进入 vim,另起一行添加 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 这条规则。

 

访问网站 IP,如果出现 Success! 字样,表示安装启动成功。

 

相关文章:《编译安装LAMP:MySQL篇》《编译安装LAMP:PHP篇》

本文的安装方法借鉴了 http://teddysun.com/lamp 的方法。


原创文章,转载请以链接形式注明出处:https://blog.ttionya.com/article-433.html