为什么要源码编译
- 一般来说,我们软件的安装方式有 yum (rpm),和源码编译两种方式,那么为什么我们需要源码编译安装一部分软件?选择源码编译安装软件有以下几个原因:
- 满足不同的运行平台,我们Linux发型版本众多,但是每个版本采用的软件或者内核版本都不一样,而我们的二进制包所依赖的环境不一定能够正常运行,所以大部分软件直接提供源码!
- 方便定制,满足不同的需求,很多时候我们所需要的软件都是可以定制的,我需要什么就安装什么,大多数二进制代码都是一键装全,所以自由度并不高!
- 方便运维、开发人员维护,我们的源码是可以打包二进制的,但是对于这个软件的打包都会有一份代价不小的额外工作,包括维护,所以如果是源码的话,软件产商会直接维护,但是如果是二进制的话,一般都是Linux发行商提供!
什么是 LAMP
- LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 这些软件都是开源免费的软件,几个程序各自是独立的,经常为了达到我们需要的效果而协同工作,组成了我们常见的LAMP架构平台!LAMP是世界上最流行的组合,当然同时也有Nginx,也就是LNMP。LAMP 相对于 NGINX 来说较为安全,但是Nginx处理高并发比Apache要强,NGINX 相对于 LAMP 来说安全较为差一点,同样的配制环境负载远远高于 LAMP,像国内的一些大公司,淘宝、新浪都在用这一些 NGINX,向那么大的公司网站需要用到服务器群用LAMP搭建环境成本远远大于NGINX。打个比方本来1000000W访问量需要 10台LAMP环境服务器才能完成,但是使用NGINX也许只需要5、6台这样一来对于这样的公司来说就大大的节约了成本。
- 从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案,在以前这句话没有错,但是在现在,这句话有待证实!!!因为在以后的过程中,会发现我们会使用的架构是Nginx和Apache结合使用:使用Nginx可以做集群等相关配置,可以和apache一起使用,有的会用apache去跑php,然后用nginx做反向代理,比如apache运行在8080端口,nginx在80端口,访问php文件时,反向代理到apache,静态页通过nginx处理。nginx支持高并发,apache对php的运行比较稳定。
- 常见的网页类型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等。Apache本来只处理静态页面,处理动态页面需要使用libphp5.so这个模块去工作,编译php也其实是将一个至关重要的模块打入到apache内部,然后apache收到php请求,将请求交给这个模块来处理!
Apache 工作原理
-
Apache本身只处理html静态语言页面,当客户端需要访问php页面的时候,Apache会调用libphp5.so这个模块去工作,这个模块会把php页面转换成html静态页面,让Apache处理,Apache处理过,会返回给客户端。
LAMP 相关网站
-
Apache=http://httpd.apache.org/ httpd主程序包
-
MySQL=http://dev.mysql.com/downloads/mysql/ mysql主程序包
-
PHP=http://php.net/downloads.php php主程序包
-
apr=http://apr.apache.org/ apr是httpd的依赖包
-
apr-util=http://apr.apache.org/ apr-util是httpd的第二个依赖包
-
apr和apr-util 这个两个软件是对后端服务软件进行优化的
-
apr-util只是在apr的基础上提供了更多的数据结构和操作系统封装接口而已
-
pcre=http://pcre.org/pcre pcre是httpd的第三个依赖包
PCRE(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用C语言编写的正则表达式函数库,PCRE被广泛使用在许多开源软件之中,最著名的莫过于Apache HTTP服务器和PHP脚本语言、R脚本语言,此外,正如从其名字所能看到的,PCRE也是perl语言的缺省正则库。
对应源码编译的版本
编译安装LAMP所需要及其所使用的源码版本:
-
httpd version:httpd-2.4.16
-
apr version:apr-1.5.2
-
pcre version:pcre-8.37
-
apr-util version:apr-util-1.5.4
-
mysql version:mysql-5.6.26
-
php version:php-5.6.13
安装之前需要注意:
LAMP源码编译的基础环境
[root@python ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.4.1708 (Core)
Release: 7.4.1708
Codename: Core
[root@python ~]# uname -a
Linux python 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
确保系统是干净的,不要和现在源码编译安装的软件冲突
不要在一个系统上同时存在 RPM-Apache + 源码-Apache
建议在编译之前,把开发包组安装上:
[root@python LAMP软件包]# yum groupinstall "Development Tools" "Development Libraries" -y
[root@python LAMP软件包]# yum install gcc gcc-c++ openssl-devel -y
所需的软件:
[root@python LAMP软件包]# ls
apr-1.5.2.tar.gz httpd-2.4.16.tar.bz2 nginx-1.8.1.tar.gz php-5.6.13.tar.bz2
apr-util-1.5.4.tar.bz2 mysql-5.6.26.tar.gz pcre-8.37.tar.bz2
apr 和 apr-util 依赖
[root@python LAMP软件包]# tar xf apr-1.5.2.tar.gz -C /usr/local/src/ && tar xf apr-util-1.5.4.tar.bz2 -C /usr/local/src/
[root@python apr-1.5.2]# cd /usr/local/src/apr-1.5.2/ && ./configure --prefix=/usr/local/apr && make && make install
[root@python apr-util-1.5.4]# cd ../apr-util-1.5.4/ && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
[root@python LAMP软件包]# tar xf pcre-8.37.tar.bz2 -C /usr/local/src/
cd /usr/local/src/pcre-8.37/ && ./configure --prefix=/usr/local/pcre && make && make install
Apache 源码编译
- 依赖环境安装完成,开始编译安装apache
[root@python LAMP软件包]# tar xvf httpd-2.4.16.tar.bz2 -C /usr/local/src/ && cd /usr/local/src/httpd-2.4.16
[root@python httpd-2.4.16]# ./configure --prefix=/usr/local/apache2.4 --enable-so --enable-rewrite --enable-ssl --with-pcre=/usr/local/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=/usr/local/apache2.4 #安装路径
- --enable-so #支持动态加载模块
- --enable-rewrite #支持网站地址重写
- --enable-ssl #支持SSL加密
- --with-pcre=/usr/local/pcre # pcre 路径
- --with-apr=/usr/local/apr #apr 路径
- --with-apr-util=/usr/local/apr-util #apr-util 路径
一共有三种稳定的 MPM (Multi-Processing Module,多进程处理模块)模式。它们分别是 prefork,worker 和 event ,它们同时也代表这 Apache 的演变和发展。
配置 Apache 的启动脚本
[root@python bin]# cp /usr/local/apache2.4/bin/apachectl /etc/init.d/apache2.4
如果安装的是桌面,那么需要关掉 httpd 服务
[root@python ~]# cp /usr/local/apache2.4/bin/apachectl /etc/init.d/apache2.4
[root@python ~]# vim /etc/init.d/apache2.4
#!/bin/sh
# chkconfig: 2345 64 36
#这个是启动级别的服务,2345是指那些级别启动,64是开启顺序,应该在network服务的后面,36是关闭顺序,应该在network的前面,这里并不是注释
#默认network的是:2345 10 90
# description: Apache2.4.16 start script #描述字段,有了这两个字段,就可以用chkconfig命令控制
[root@python ~]# service apache2.4 start
如启动报错 请查看 https://blog.csdn.net/Qevery678/article/details/93162867
[root@python ~]# chkconfig apache2.4 on
Apache安装完成需要注意的地方:
[root@python ~]# ps -ef | grep apache #源码编译apache 运行用户为 daemon
root 104162 1 0 09:47 ? 00:00:00 /usr/local/apache2.4/bin/httpd -k start
daemon 104163 104162 0 09:47 ? 00:00:00 /usr/local/apache2.4/bin/httpd -k start
daemon 104164 104162 0 09:47 ? 00:00:00 /usr/local/apache2.4/bin/httpd -k start
daemon 104165 104162 0 09:47 ? 00:00:00 /usr/local/apache2.4/bin/httpd -k start
root 104509 55510 0 10:03 pts/5 00:00:00 grep --color=auto apache
[root@python ~]# id daemon
uid=2(daemon) gid=2(daemon) 组=2(daemon)
[root@python ~]# useradd -M -s /sbin/nologin apache #创建一个用户用来运行 apache
[root@python ~]# vim /usr/local/apache2.4/conf/httpd.conf
User apache #运行用户
Group apache #运行组,创建apache的时候已经即时创建了apache这个组
[root@python ~]# chown -R apache:apache /usr/local/apache2.4/