LAMP搭建

实现lamp框架有两种方案,一是将php作为Apache的一个模块使用,另一个是将php作为一个单独的守护进程,请求静态资源时,由Apache提供服务,请求动态资源时,由Apache通过fastcgi转发给php处理。这两种方式在centos7默认都支持,在不能同时使用,只能使用其中一种方式。

使用yum安装的方式搭建lamp

使用php模块化方式搭建lamp

安装php,mariadb,httpd

1
$ yum -y install php mariadb httpd

php安装包携带文件

1
2
3
4
5
6
[root@apache conf.d]#rpm -ql php
/etc/httpd/conf.d/php.conf #php模块配置文件
/etc/httpd/conf.modules.d/10-php.conf #配置加载php模块
/usr/lib64/httpd/modules/libphp5.so #php模块存放位置
/usr/share/httpd/icons/php.gif #php图标存放位置
/var/lib/php/session

配置php模块

1
2
3
4
5
6
7
8
[root@apache conf.d]#egrep -v "^#|^$" /etc/httpd/conf.d/php.conf  
<FilesMatch \.php$>
SetHandler application/x-httpd-php #将以.php结尾的请求转发给x-httpd-php处理
</FilesMatch>
AddType text/html .php #增加php文件的匹配
DirectoryIndex index.php #配置默认主页,可重复使用
php_value session.save_handler "files" #配置php保存会话
php_value session.save_path "/var/lib/php/session" #会话保存路径

php模块加载文件

1
2
3
4
[root@apache conf.d]#grep -v "^#" ../conf.modules.d/10-php.conf 
<IfModule prefork.c> #当httpd运行在prefork模式下时才启用php模块
LoadModule php5_module modules/libphp5.so
</IfModule>

重启httpd后就可以使用php模块了

1
[root@apache conf.d]#systemctl restart httpd

生成php测试文件

1
2
3
4
[root@apache conf.d]#cat /var/www/html/index.php
<?php
phpinfo() #可以查看php的环境信息
?>

此时,在浏览器访问该服务器,就可以看到php信息,说明php模块已经正常工作。
安装php-mysql模块,以使php和mysql可以建立连接

1
$ yum -y install php-mysql

生成php-mysql连接测试文件

1
2
3
4
5
6
7
8
9
10
[root@apache html]#cat conn.php 
<?php
$conn = mysql_connect('192.168.34.102','test','centos');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

此时在浏览器中访问该文件,如果出现OK,则表明php已经可以和mariadb正常连接。

lamp结合第三方工具的应用

lamp+wordpress搭建个人站点

本次实验以/data/blog/目录为站点根目录进行;以A(192.168.34.108)作为lap主机,以(192.168.34.102)作为数据库服务器。
下载WordPress

1
$ wget https://wordpress.org/latest.tar.gz

解压文件并将解压后的文件夹放入httpd指定的站点主目录下

1
$ tar xf latest.tar.gz

在B服务器创建专用数据库,并授权专有用户进行管理

1
2
MariaDB [(none)]> create database wpdb;
MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'192.168.34.%' identified by 'centos';

编辑WordPress配置文件指向数据库

1
2
3
4
5
[root@apache htdocs]#vi wp-config.php
define('DB_NAME', 'wpdb');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'centos');
define('DB_HOST', '192.168.34.102');

之后按步骤创建站点,就可以拥有自己的个人网站了。

php-fpm模式搭建web应用

安装php-fpm、mariadb-server、httpd

1
$ yum -y install php-fpm mariadb-server httpd

php-fpm相关配置文件
/etc/php-fpm.conf
/etc/php-fpm.d/* .conf

配置php

修改php-fpm配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@apache ~]#vi /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000 #监听主机的哪个网卡的9000端口,可按需修改
listen.allowed_clients = 127.0.0.1 #允许哪些主机进行访问,默认只允许本机访问,可按处修改,可修改为网段,如172.18.0.0/16或0.0.0.0
user = apache #程序运行的用户
group = apache #程序运行的用户组
pm = dynamic #程序以什么方式运行,dynamic表示以动态方式运行;static表示以静态方式运行
pm.max_children = 50 #最大子进程数
pm.start_servers = 5 #初始生成的子进程数
pm.min_spare_servers = 5 #最小空闲进程 仅dynamic模式有效
pm.max_spare_serevrs = 35 #最大空闲进程树 仅dynamic模式有效
pm.max_requwsts = 500 #每个子进程最大服务的请求书,在此数值到达时,该子进程将关闭
ping.path = /ping #存活性探测
ping.response = pong #存活性探测时期望得到的恢复
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误日志存放位置
php_value[session.save_handler] = files #php会话管理方式
php_value[session.save_path] = /var/lib/php/session #php会话存放目录,默认没有需手动创建

创建php会话存放目录

1
2
[root@apache ~]#mkdir /var/lib/php/session
[root@apache ~]#chown apache.apache /var/lib/php/session/

启动php服务

1
[root@apache ~]#systemctl start php-fpm.service

配置apache

这里以虚拟主机的方式配置

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@apache /data/blog/htdocs]#vi /etc/httpd/conf.d/blog.conf
<VirtualHost *:80>
DocumentRoot "/data/blog/htdocs"
ServerName blog.msq.com
DirectoryIndex index.php
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/blog/htdocs/$1
<Directory "/data/blog/htdocs">
Options followsymlinks
AllowOverride none
require all granted
</Directory>
</VirtualHost>

此时,以fastcgi方式运行的lamp架构已经搭建完成

phpMyadmin使用

下载phpMyadmin并解压到站点主目录下。
配置phpMyadmin

1
2
[root@apache htdocs]#cp config.sample.inc.php config.inc.php
$cfg['blowfish_secret'] = 'a8bsajcnsjkdbc7c6d'; #将此行的随机数换一个,不要使用默认的,其余的设置可保持不变

安装php-mbstring,php-mysql模块

1
[root@apache htdocs]#yum -y install php-mbstring php-mysql

使用编译安装的方式搭建lamp架构

编译安装httpd

安装相关包组
Development Tools #开发相关包组
Server Platform Development #老版本需要安装,7.5已经集成到Development Tools中
pcre-devel #purl扩展的正则表达式
apr-devel #apache portable runtime Apache的可移植环境
apr-util-devel #apr工具
openssl-devel #实现http加密

1
2
[root@apache htdocs]#yum -y install  pcre-devel apr-devel apr-util-devel openssl-devel
[root@apache htdocs]#yum groupinstall "development tools"

开始安装httpd,请自行下载如下所示相关软件包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@apache tools]#ls
apr-1.5.0 httpd-2.4.37
apr-1.5.0.tar.bz2 httpd-2.4.37.tar.bz2
apr-util-1.6.1 phpMyAdmin-4.0.10.20-all-languages.tar.gz
apr-util-1.6.1.tar.gz phpMyAdmin-4.7.1-all-languages.zip
[root@apache tools]#mv apr-1.5.0 httpd-2.4.37/srclib/apr
[root@apache tools]#mv apr-util-1.6.1 httpd-2.4.37/srclib/apr-util
[root@apache tools]#cd httpd-2.4.37/
[root@apache httpd-2.4.37]# ./configure --prefix=/app/httpd24 \ #指定默认安装目录
--enable-so \ #启用模块功能
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \ #结合zlib库,在传输过程中压缩
--with-pcre \
--enable-modules=most \
--enable-mpms-shared=all \ #把所有的mpm编译进来
--with-mpm=prefork \ #默认启用prefork
--with-included-apr
$ make #make是一个项目管理工具,解决项目件的依赖关系。gcc是编译器
$make install

如果想开启本地帮助页面需要修改配置文件,打开以下两项

1
2
3
$ vi /app/httpd/conf/httpd.conf 
Include conf/extra/httpd-manual.conf
LoadModule negotiation_module modules/mod_negotiation.so

编译安装php(php-7.1.7)

安装相关依赖包

1
[root@apache php-7.1.18]#yum install libxml2-devel bzip2-devel libmcrypt-devel

到官方站点下载php源码包之后解压

1
2
$ tar tar xf php-7.1.18.tar.bz2
$ cd php-7.1.18

编译安装php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ ./configure --prefix=/app/php \ #安装目录
--enable-mysqlnd \ #启用MySQL
--with-mysqli=mysqlnd \ #连接mysql的方式
--with-openssl \ #开启openssl加密
--with-pdo-mysql=mysqlnd \ #
--enable-mbstring \ #支持中文字符集
--withfreetype-dir \ #字体相关库
--with-jpeg-dir \ #图形相关库
--with-png-dir \
--with-zlib \ #压缩和解压缩相关库
--with-libxmldir=/usr \ #
--enable-xml \
--enable-sockets \
--withapxs2=/app/httpd24/bin/apxs \ #使用该扩展编译httpd
--with-config-file-path=/etc \
--withconfig-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \ #如果mpm为prefork不能启用该选项,如果是worker或event则必须启用该选项
--disable-fileinfo #禁止显示file信息
$ make && make install

注意:php-7.0以上版本使用–enable-mysqlnd –with-mysqli=mysqlnd ,
原–with-mysql不再支持

配置php
编译安装php后,默认不生成配置文件,需要手动copy一个配置文件到指定位置(/etc)

1
[root@apache php-7.1.18]#cp php.ini-production /etc/php.ini

修改httpd配置文件使其支持php,需更改如下三项

1
2
3
4
$ vi /app/httpd/conf/httpd.conf 
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
为DirectoryIndex index.php index.html

此时httpd和php已经可以正常工作。

生成如下测试文件,在浏览器输入服务器地址,如果出现php信息页面内,说明安装成功。

1
2
3
4
[root@apache httpd]#cat /app/httpd/htdocs/index.php 
<?php
phpinfo()
?>

编译安装mariadb

先安装mariadb的相关依赖包

1
[root@ansible ~]#yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boostdeve

创建相关用户和数据目录

1
2
3
[root@ansible ~]#uaeradd -r -s /sbin/nologin -d /data/mysql mysql
[root@ansible ~]#mkdir /data/mysql
[root@ansible ~]#chown mysql.mysql /data/mysql

到官方网站下载mariadb源码包

1
[root@ansible ~]#wget -p tools/ https://downloads.mariadb.org/interstitial/mariadb-10.3.11/source/mariadb-10.3.11.tar.gz/from/http%3A//mirrors.neusoft.edu.cn/mariadb/mariadb-10.2.19.tar.gz

解压源码包

1
2
3
[root@ansible ~]#cd tools/
[root@ansible ~]#tar xf mariadb-10.2.19.tar.gz
[root@ansible ~]#cd mariadb-10.2.19

执行编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@ansible mriadb-10.2.19]#cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
1
[root@ansible mriadb-10.2.19]#make && make install

准备环境变量

1
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

生成数据库文件

1
2
[root@ansible ~]#cd /app/mysql
[root@ansible mysql]#./scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

准备配置文件

1
[root@ansible mysql]#cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf

准备启动脚本

1
[root@ansible mysql]#cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld

启动服务

1
[root@ansible mysql]#chkconfig --add mysqld ;service mysqld start

此时,mariadb编译安装已经完成。

生成php-mysql连接测试文件并测试

1
2
3
4
5
6
7
8
9
10
11
$ vi /app/httpd/htdocs/conn.php
<?php
$mysql = new mysqli();
$mysql->connect('192.168.34.102','root','centos');
if($mysql){
echo "连接成功了!";
}else{
echo "连接挂掉了";
}
phpinfo();
?>

在浏览器输入服务器ip/conn.php即可测试。

以fpm的方式编译安装php

使用fpm编译安装pph时,需要加上–enable-fpm选项,并去掉–enable-maintainer-zts和–with-apxs2=/app/httpd24/bin/apxs。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@apache tools]#tar xf php-7.1.18.tar.bz2 
[root@apache tools]#cd php-7.1.18/
[root@apache php-7.1.18]#./configure --prefix=/app/php-fpm-7.1.18 \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo

配置php-fpm(注意:以下路径php代表php的安装路径,php-7.1.18代表php源码包解压后的路径)

1
2
3
4
5
6
7
8
[root@apache php]#cd /app/php/etc/
[root@apache etc]#cp php-fpm.conf{.default,}
[root@apache etc]#vi php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
[root@apache php]#cp /root/tools/php-7.1.18/php.ini-production /etc/php.ini
[root@apache php-7.1.18]#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@apache php-7.1.18]#cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

采用php-fpm方式结合httpd时,httpd的配置有一定变化,如下

1
2
3
4
5
6
7
8
9
10
11
vi /app/httpd/conf/httpd.conf 
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_module modules/mod_proxy.so
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd/htdocs/$1
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

对编译安装的php使用xcache加速,php7不可用

到官方网站下载xcache源码包,之后解压进入该目录,以上面安装的php-fpm为例演示。

1
2
3
4
5
[root@apache xcache-3.2.0]#/app/php/bin/phpize
[root@apache xcache-3.2.0]#./configure --enable-xcache --with-php-config=/app/php/bin/php-config
[root@apache xcache-3.2.0]#make && make install
[root@apache xcache-3.2.0]#cp xcache.ini /app/php/php.d/
[root@apache xcache-3.2.0]#vi /app/php/php.d/xcache.ini