CentOS 6上编译安装LAMP

1、LAMP简介


(1)什么是LAMP?

L:linux
A:apache
M:mysql, mariadb, mongodb等存储系统
P:php, python, perl

LNMP是基于web服务搭建的一套能够让web服务响应更加快速,让传输内容更加丰富的一个框架。围绕着这个框架,可以展开更多更加庞大的集群架构以及更多丰富的架构设计。所以了解LAMP的工作机制以及配置时很有必要的。

(2)LAMP的作用

我们知道http能够传输超文本文件,在http/1.0之后,引入MIME机制从而实现支持多媒体类型传输。客户端向服务器发送请求,服务器将数据封装之后响应给客户端,这些数据从服务器端到客户端的表现形式没有发生过变化(在传输过程中编码格式可能发生了转变),这些资源就是静态资源。
现在我们访问的电商站点,接收到的数据呈现在我们面前的仍然是文本文件,但是在服务端可能就是程序文件。那么这些表现形式在服务器端与客户端不一样的资源就是动态资源。动态资源需要服务器端去执行,将执行之后的结果以文本形式的方式发送给客户端。
不管是动态请求还是静态请求,服务器端都要进行数据处理。如果直接通过加载磁盘中的文件数据进行响应的话,那么这样的效率无疑是非常慢的。那么此时就需要一个管理数据的程序。所以:
apache:响应用户的请求
php:解析动态资源
mysql:管理数据

(3)LAMP原理

httpd服务器是一个纯静态服务器,也就是说,当用户请求静态资源的时候httpd服务器能够直接加载磁盘中的数据,将数据封装之后返回给客户端。但是,如果用户请求的是一个动态资源(以.php、.phps结尾的请求),httpd程序是没有办法去解析的,此时httpd就需要与另外一个程序(以php为例)进行通信,让php程序去磁盘加载程序执行之后发送给httpd程序。所以,这就是为什么动态资源的响应时间要比静态资源响应的时间慢得多得多得多的原因。
在这个过程中,httpd的角色就相当于网关一样。用户请求动态资源,httpd程序将请求发送给php程序,php程序通过磁盘加载资源,将执行结果发送给httpd程序,httpd程序将数据封装成响应报文发送给客户端。而httpd程序与php程序之间通信的协议就是CGI。

CGI: Common Gateway Interface, 通用网关接口。不管你后端是php,python,perl甚至tomcat,只要支持CGI协议,那么就都能与httpd程序进行通信

进程间的通信有三种方式:
Message Queue: 消息队列
Shared Memory:共享内存
Socket:套接字(跨主机)

那么, 到底CGI协议是怎么工作的呢?httpd进程与php进程之间是通过哪一种通信方式进行结合的呢?
CIG协议有这样一种机制,如果httpd支持CGI协议,那么httpd进程自行解析URL,并且能够调用后端的php生成子进程,通过父子进程的方式进行通信。但是这样又出现了一个问题,web服务器要自行解析URL,生成子进程,管理子进程,通过子进程去调用php程序,将处理的结果封装成响应报文发送给客户端,这无疑对web服务器来说是一个巨大的负担。如果在一个并发量很大的网站中,web服务器毫无疑问将成为性能瓶颈。所以一般基于CIG协议进行通信很少用。

所以,为了解决这个问题, 于是将php程序独立出来,划分成一个单独的服务。httpd程序直接通过socket方式将动态资源请求发送个php服务,php将执行的结果发送给web服务。那么此时二者就要基于一种特定的应用层协议,通过网络方式进行通信,这种工作于应用层的协议就是fastcgi,简称fpm。这也是用的最多的。

不管是httpd还是php都要进行数据处理,这些数据都是放置在磁盘的文件中的。在电商网站中,每当有用户访问网站的时候,httpd进程都要对用户进行认证。这个时候就要加载装载用户数据的文件进入内存中,然后将这个文件遍历分析,对比用户名与密码是否输入正确。如果这个电商网站的用户量少还好,如果像淘宝京东这样的电商网站,用户以亿为单位,保存用户数据的文件动则几个G,那么此时将这么大的文件加载至内存中,还要遍历这个文件中几亿条数据查找用户,这是一个非常缓慢,非常消耗资源的过程。所以这个时候数据管理系统就不可或缺了。

php与mysql怎么进行交互呢?
在php程序中,会提供一个关于mysql的库,这个库中有一段程序能够将php的请求封装成mysql协议报文与mysql服务进行交互,还能接受mysql的报文进行还原。这个程序就是数据驱动。


2安装LAMP(以CentOS 6为例)

1、安装httpd-2.4.25

由于在之前的博客中详细介绍了httpd-2.4.25的安装,所以这里不一一赘述了。

详情请参考链接:
httpd-2.4编译安装详解

2、安装mariadb-5.5.56

下载地址:https://downloads.mariadb.org/interstitial/mariadb-galera-5.5.56/bintar-linux-x86_64/mariadb-galera-5.5.56-linux-x86_64.tar.gz/from/http%3A//mirrors.neusoft.edu.cn/mariadb/?serve

将mariadb解压到指定的目录/usr/local

[root@ling ~]# tar xf mariadb-5.5.56-linux-x86_64 -C /usr/local

切换到该目录,并将mariadb目录链接到mysql

[root@ling local]# cd /usr/local/
[root@ling local]# ln -sv mariadb-5.5.56-linux-x86_64 mysql

将mariadb中的所有文件的属主修改为root,属组修改为mysql

[root@ling local]# cd mysql
[root@ling mysql]# chown -R root:mysql ./*

由于是在虚拟机做的实验,所以这里就临时创建一个单独的目录,用来存储数据

[root@ling mysql]# mkdir /mysql/data

并将用来存储数据文件的目录属主属组修改为mysql,不然mysql用户和mysql组没有权限存储或者读取数据

[root@ling mysql]# chown -R mysql:mysql /mysql/data 

通过脚本来生成mysql的元数据库。mysql比较特殊,在安装目录下有一个程序,能够自行生成元数据库

[root@ling mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
--user: 指明用户
--datadir: 指明数据存储位置

为myslq配置服务脚本 .mysql的服务脚本就在myslq生成的目录下

[root@ling mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
添加开机自启
[root@ling mysql]# chkconfig --add mysqld
[root@ling mysql]# chkconfig --level 3 mysqld on

为mysql准备配置文件

mysql的搜索路径:/etc/my.cnf –> /etc/mysql/my.cnf –> /usr/etc/my.cnf –> ~/.my.cnf
注意:mysql在搜索的时候从左往右依次搜索。但是mysql并不会因为搜索到文件而停下来,而是继续搜索直到搜索完所有的配置文件,最后一个搜索到的文件生效。也就是说,如果两个配置文件都配置了相同的属性,不同的参数,那么,谁最后一个被搜索到,谁就生效。这里以/etc/mysql/my.cnf为例

[root@ling mysql]# ls support-files/
binary-configure  my-innodb-heavy-4G.cnf  my-small.cnf         mysql.server
magic             my-large.cnf            mysqld_multi.server  SELinux
my-huge.cnf       my-medium.cnf           mysql-log-rotate

这个目录下所有以.cnf结尾的文件就是mysql的配置文件:

my-innodb-heavy-4G.cnf.sh:系统4G内存
my-huge.cnf.sh:超大内存
my-large.cnf.sh:系统512M内存
my-medium.cnf.sh:系统256M内存
my-small.cnf.sh:系统64M内存

mysql的配置文件叫法很独特,它是根据系统的内存大小来命名的。因为早期mysql对于资源的占用量很小

[root@ling mysql]# cp -a support-files/my-large.cnf /etc/mysql/my.cnf

修改配置文件

[root@ling mysql]# vim /etc/mysql/my.conf
添加三个选项:
datadir = /mydata/data          //存放数据的路径
innodb_file_per_table = on      //每个innodb表都使用单个表空间
skip_name_resolve = on          //跳过名称解析

启动mysql

在启动过程中会出现这个问题:
Starting MySQL.170719 13:04:47 mysqld_safe Logging to '/var/log/mysqld.log'.
170719 13:04:48 mysqld_safe Starting mysqld daemon with databases from /mysql/data
/usr/local/mysql/bin/mysqld_safe_helper: Can't create/write to file '/var/log/mysqld.log' (Errcode: 13)
ERROR!
mysql不能创建或者写入/var/log/mysqld.log

手动创建该目录并修改属主属组为mysql

[root@ling mysql]# touch /var/log/mysqld.log
[root@ling mysql]# chown mysql.mysql /var/log/myqld.log

再次启动服务

[root@ling mysql]# service mysqld start

查看监听的端口

[root@ling mysql]# ss -tnl 
LISTEN      0      50                                   *:3306                                *:* 

3306端口被监听,表示启动成功

将mysql启动进程配置到系统环境变量

[root@ling mysql]# vim /etc/profile
在末尾添加以下内容
exprot PATH=/usr/local/mysql/bin:$PATH

重读配置文件
[root@ling mysql]# . /etc/profile

查看是否添加成功
[root@ling mysql]# echo $PATH
/usr/local/apache/bin:/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

如果这里面有/usr/local/mysql/bin则表示添加成功

启动mysql

[root@ling mysql]# mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

出现以上内容则表示成功

初始化mysql,让mysql启动更加安全

[root@ling mysql]# bin/mysql_secure_installation   
Enter current password for root(输入之前的root用户密码,一般为空):直接回车
Set root password? [Y/n] y(设置root的登录密码)
Remove anonymous users? [Y/n](是否删除匿名用户) y
Disallow root login remotely? [Y/n](是否禁止使用root用户远程登录) y
Remove test database and access to it? [Y/n](是否删除测试数据库) 可以留着,直接回车
Reload privilege tables now? [Y/n](是否重读一下授权表,一般修改密码之后都要重载,相当于flush) y

再次登录mysql

[root@ling mysql]# mysql -uroot -p
Enter password:             //这个时候就要输入密码
-u:表示用户名,由于第一次登录,直接用root
-p:为了安全一般都不明文输入密码,直接回车

3、安装php-5.5.38

注意:由于php程序要跟httpd程序进行交互,又要跟mysql进行交互,所以在编译安装的时候会将mysql的路径编译进去。同时会在httpd的配置文件中生成event模式的模块,所以要在最后编译安装php

httpd与php结合有三种方式:

modules:php编译成模块时,httpd有三种工作模式,每种模式编译的模块都不相同
(1) prefork: 当httpd工作于prefork模式下,那么就是依赖php的libphp5.so模块
(2) woker and event: 当httpd工作于event或者worker模式下,那么就是依赖php的libphp5-zts.so模块

以下两种方式没有prefork模式,都是多线程模型

cgi: 当httpd工作于event或者worker模式下,那么就是依赖php的libphp5-zts.so模块

fpm(fastcgi): 这个模式表示php作为一个独立的服务,当用户请求动态资源的时候web服务器会生成一个子进程通过fastcig协议向php服务器通过socket发起请求

php与mysql结合的方式:

只要在编译的时候指定mysql的安装路径即可

php的配置文件
php安装完成之后会在/etc/httpd/conf.d/路径下生成php.conf文件,这个文件是php为httpd提供模块服务而生成的配置文件,而不是php自己的主配置文件。php自己的主配置文件后php-common提供,后缀名为.ini的配置文件

/etc/php.ini, /etc/php.d/*.ini //通过yum安装生成的php配置文件

解决php依赖关系
php的安装依赖于bzip2-devel,libxml2-devel,libmcrypt-devel,前两者可以使用yum进行安装,但是libmcrypt-devel这个包在yum中没有,要自己手动安装

[root@ling ~]# yum install -y bzip2-devel libxml2-devel
[root@ling ~]# wget http://dl.fedoraproject.org/pub/epel/6/x86_64//libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
[root@ling ~]# http://dl.fedoraproject.org/pub/epel/6/x86_64//libmcrypt-2.5.8-9.el6.x86_64.rpm
[root@ling ~]# rpm -ivh libmcrypt-2.5.8-9.el6.x86_64.rpm 
[root@ling ~]# rpm -ivh libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

php下载地
http://php.net/get/php-5.5.38.tar.bz2/from/this/mirror

解压并编译安装

[root@ling ~]# tar xf php-5.5.38.tar.bz2
[root@ling ~]# cd php-5.5.38
[root@ling php-5.5.38]# ./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

--with-mysql:使用mysql的特定路径,如果没有特定路径就不需要使用--with
--with-openssl: 使用ssl
--with-mysqli: 跟mysql交互的另外一个接口
--enable-mbstring: 支持中文字符串
--with-freetype-dir: 指明多种字体格式
--with-jpeg-dir: 支持jpeg的图片格式
--with-png-dir: 
--with-zlib: 支持zlib压缩格式
--with-libxml-dir: 支持处理xml文档
--enable-xml: 启用xml
--enable-sockets:启用php支持sockets通信
--with-apxs2:支持将php编译成模块
--with-mcrypt:加密解密库
--with-config-file-path:php配置文件
--with-config-file-scan-dir:其他配置文件
--with-bz2:支持bz2格式
--enable-maintainer-zts:上面说到httpd启用event或者worker模式必须用到libphp5-zts模块,所以如果httpd使用的是event或者worker模式必须要加上这个选项,如果不用,可以不加

[root@ling php-5.5.38]# make && make install

为php提供配置文件:
php的配置文件就在解压的目录下,production表示生产环境下的配置文件,将此文件复制到/etc/php.ini 即可
[root@ling php-5.5.38]# cp php.ini-production /etc/php.ini

修改httpd配置文件
编译安装完成之后,httpd默认是不支持php格式的文件的,所以需要在httpd的配置文件中添加如下内容

# vim /etc/httpd24/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

让httpd的主页能够显示php内容,也是在主配置文件中修改
DirectoryIndex index.php index.html

安装完成之后,由于是将php编译成模块,所以会在httpd的配置文件中增加一条模块

LoadModule php5_module modules/libphp5.so

同时,启动web服务查看httpd动态加载的模块

[root@ling php-5.5.38]# service httpd24 restart
[root@ling php-5.5.38]# httpd -M
php5_module (shared)    //增加的event模块

注意:如果httpd启动发生错误,可能是在主配置文件中的pid路径发生错误。编译安装的默认路径在/usr/local/apache/logs,编辑主配置文件修改pid,或者将pid移动到主配置文件中的路径下

修改服务配置文件

vim /etc/rc.d/init.d/httd24
pidfile=${PIDFILE-/var/run/httpd/httpd24.pid}
修改为
pidfile=${PIDFILE-/etc/local/apache/logs/httpd.pid}

编译安装默认主页文件放置在/usr/local/apache/htdocs下,将增加idnex.php

# cd /usr/local/apache/htdocs/
# vim index.php
<?php
        $conn=mysql_connect('127.0.0.1','root','123456');
        if ($conn)
            echo "ok";
        else
            echo "fail";

        phpinfo();
?>
登录浏览器,输入虚拟机ip,则会显示php的测试信息与mysql是否成功连接信息

谢谢浏览!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值