LAMP安装

前面我们我们介绍了 LAMP 的原理部分,本节我们就来实践,搭建一个 LAMP。
1. php 配置
1.1 httpd 与 php 结合方式
前面我们介绍 LAMP 的基本原理时提到过,httpd 与 php 有三种结合方式
- CGI: 由 httpd 服务创建子进程来加载和执行 php 脚本
 
- fpm(FastCGI Process Manager): php 进程管里器,将 php 的解析执行作为独立的应用程序服务器
 
- modules: 将 php编译成为 httpd 的模块,httpd 既是 web 服务器也是应用程序服务器
prefork MPM 下需要加载 libphp5.so 模块 
event, worker MPM 下需要加载 libphp5-zts.so 模块 
 
modules
将 php 作为 http 的 modules 由 php 包提供
1
2
3
4
5
6
7
8
  | 
$ yum info php
$ rpm -ql php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib64/httpd/modules/libphp5.so    # prefork MPM 的 php 所需模块
/usr/share/httpd/icons/php.gif
/var/lib/php/session
  | 
 
fpm
fpm 由 php-fpm 包提供
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  | 
$ yum info php-fpm
$ rpm -ql php-fpm
/etc/logrotate.d/php-fpm
/etc/php-fpm.conf       # php-fpm 服务的配置文件
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
/run/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/lib/tmpfiles.d/php-fpm.conf
/usr/sbin/php-fpm
  | 
 
1.2 php 相关包
与 php 相关的 rpm 包有如下几个:
php: 实现 php 作为 httpd 的一个模块 
php-fpm: fpm 
php-common: php 的核心文件 
php-mysql: php 的 mysql 驱动模块 
php-xcache: php 的加速器 
1.3 php核心文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  | 
$ rpm -ql php-common
/etc/php.ini            # 配置文件
/etc/php.d
/etc/php.d/curl.ini
/etc/php.d/fileinfo.ini
/etc/php.d/json.ini
/etc/php.d/phar.ini
/etc/php.d/zip.ini
/usr/lib64/php
/usr/share/php
/var/lib/php
  | 
 
php 的所有核心文件均由 php-common 包提供,配置文件为:
/etc/php.ini 
/etc/php.d/*.ini 
php 的配置文件在 php 启动时被读取一次
- 对于服务器模块存在的 php 仅在web 服务器启动时读取一次
- Modules:重启httpd服务生效;
 
- FastCGI:重启php-fpm服务生效;
 
 
- 对于cgi 和 cli 版本,每次调用都会读取
 
php.ini
php 的文档参考如下:
1
2
3
4
  | 
# 配置方式类似 yum.respo.d, 采用分段进行
# ;(分号) 表示注释符
[foo]:Section Header
directive = value
  | 
 
1.3 php xcache 加速器
1
2
3
4
5
  | 
# 安装
yum install php-xcache
# 配置
/etc/php.d/xcache.ini
  | 
 
2. modules 模式的 LAMP 安装
首先我们来介绍将 php 作为 httpd 的一作模块这种模式下 LAMP 的安装配置。安装完成后 php 的配置文件位于 /etc/httpd/conf.d/php.conf
2.1 Centos 6
Centos 下需要安装 httpd, php, php-mysql, mysql-server,然后启动 httpd 和 mysql 服务
1
2
3
  | 
yum install -y httpd php php-mysql mysql-server
service httpd start
service mysqld star
  | 
 
2.2 Centos 7
Centos7 下需要安装 httpd, php, php-mysql, mariadb-server。需要注意的是 php 在不同的 MPM 下安装的方式不一样,默认 yum install php 安装要求 httpd 使用 prefork MPM。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  | 
# 1. 安装 LAMP
yum install http  php php-mysql  mariadb-server
systemctl start httpd
systemctl start mariadb
# 2. php 的配置
$ rpm -ql php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib64/httpd/modules/libphp5.so    # prefork MPM 的 php 所需模块
/usr/share/httpd/icons/php.gif
/var/lib/php/session
  | 
 
2.3 测试
php 程序执行环境
php 与mysql 通信
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
  | 
# vim DocumentRoot/a.php
<?php
    $con=mysql_connect('127.0.0.1','','');
    if ($con)
        echo "OK";
    else
        echo "faile";
    mysql_close();
    phpinfo();
?>
  | 
 
3. fpm 的 LAMP 安装
3.1 Centos6
- PHP-5.3.2:默认不支持fpm机制;需要自行打补丁并编译安装;
 
- httpd-2.2:默认不支持fcgi协议,需要自行编译此模块;
 
- 解决方案:编译安装httpd-2.4, php-5.3.3+;
 
3.2 Centos7
- httpd-2.4:rpm包默认编译支持了fcgi模块;
 
- php-fpm包:专用于将php运行于fpm模式;
 
安装 msyql
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  | 
# 1. 安装 msyql
yum isntall -y  mariadb-server
vim /etc/my.cnf.d/server.cnf
  [mysqld]
  skip_name_resolve=ON
  innodb_file_per_table=ON
# 安全初始化
mysql_secure_installation
# 创建普通登陆用户
# mysql -uroot -p
mysql> grant all on testdb.* to 'myuser'@'172.16.0.%' indentified by "mypass"
mysql> flush priviledges
  | 
 
安装 php-fpm
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  | 
# 2. 安装 php-fpm,最好不要与 php 包同时安装
yum install php-fpm php-mysql php-mbstring
$ rpm -ql php-fpm
/etc/logrotate.d/php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
# 配置 php-fpm
vim /etc/php-fpm.conf
vim /etc/php-fpm.d/www.conf
  pm = static|dynamic
    # - static:固定数量的子进程;
    #   - pm.max_children;
    # - dynamic:子进程数据以动态模式管理;
    #   - pm.start_servers
    #   - pm.min_spare_servers
    #   - pm.max_spare_servers
    #   - ;pm.max_requests = 500
# 创建session目录,并确保运行php-fpm进程的用户对此目录有读写权限;
mkdir  /var/lib/php/session
chown apache.apache /var/lib/php/session
  | 
 
配置 httpd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  | 
# 1. 确定是否启用httpd的相关模块
httpd -M|grep proxy_module
# 未启用则启用代理模块
vim /etc/httpd/httpd.conf  
    > LoadModule proxy_module modules/mod_proxy.so
    > LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 2. 配置虚拟主机支持使用fcgi
# 在相应的虚拟主机中添加类似如下两行。
    > ProxyRequests Off
    > ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
# ProxyRequests Off:关闭正向代理
# ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
# 虚拟主机配置示例
DirectoryIndex index.php
<VirtualHost *:80>
    ServerName www.b.net
    DocumentRoot /apps/vhosts/b.net
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/apps/vhosts/b.net/$1
    <Directory "/apps/vhosts/b.net">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>  
  | 
 
安装 php xcache
1
2
3
4
5
  | 
yum install -y php-xcache
$ rpm -ql php-xcache
/etc/php.d/xcache.ini
/usr/lib64/php/modules/xcache.so
  |