LAMP
初识LAMP
LAMP:
- L:linux
- A:apache (httpd)
- M:mysql, mariadb
- P:php, perl, python
理解LAMP之前
1,web资源类型
- 静态资源:原始形式与响应内容一致,在客户端浏览器执行
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
2,web语言
- 客户端技术: html,javascript,css,jpg
- 服务器端技术:php, jsp,python,asp
3,php
(1)概念
PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生AndiGutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用
(2)Zend Engine & opcode
Zend Engine的出现将PHP代码的处理过程分成了两个阶段:
首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),并将其存储于内存中
第二阶段是使用ZendEngine去执行这些转换后的Opcode
PHP的语言引擎Zend执行PHP脚本代码一般会经过如下4个步骤
- Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
- Parsing 语义分析,将Tokens转换成简单而有意义的表达式
- Compilation 将表达式编译成Opcode
- Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
即:扫描–>分析–>编译–>执行
(3)php语言格式
php语言的两种使用格式
格式一
<?php
echo "<h1>Hello world!</h1>"
?>
格式二
<h1>
<?php echo "Hello world!" ?>
</h1>
php测试代码
<?php
echo date("Y/m/d H:i:s");
phpinfo();
?>
注释符:
以#开头,纯粹的注释信息
以 ; 开头,用于注释可启用的directive
提示:较新的版本中,已经完全使用 “ ; ” 进行注释
(4)centos上安装php
- 模块方式安装
[root@localhost conf.d]# yum install php -y #依赖httpd包,会自动安装httpd
安装后可以看到php在httpd的目录下生成了三个文件
生成了libphp5.so的模块,并且生成了一个10-php.conf的配置文件来启用这个模块。
php.conf,里面定义了.php后缀的文件转交给php处理以及添加了.php为apache可识别的文档类型,并将主页面修改为index.php,最后定义了session存放的路径
[root@localhost conf.d]# rpm -ql php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib64/httpd/modules/libphp5.so
/usr/share/httpd/icons/php.gif
/var/lib/php/session
[root@localhost conf.d]# cat /etc/httpd/conf.modules.d/10-php.conf
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
[root@localhost conf.d]# cat /etc/httpd/conf.d/php.conf
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
AddType text/html .php
DirectoryIndex index.php
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
- fastcgi方式
[root@localhost conf.d]# yum install php-fpm -y
(5)php配置
php.ini核心配置选项
php的配置文件:/etc/php.ini,/etc/php.d/*.ini
对配置文件的修改生效方法
- Modules:重启httpd服务
- FastCGI:重启php-fpm服务
/etc/php.ini配置文件格式:
- [foo]:Section Header
- directive = value
php常见配置:
- max_execution_time= 30 最长执行时间30s
- memory_limit=128M 生产不够,可调大
- display_errors=off 调试使用,不要打开,否则可能暴露重要信息
- display_startup_errors=off 建议关闭
- post_max_size=8M 最大上传数据大小,生产可能调大,比下面项大
- upload_max_filesize =2M 最大上传文件,生产可能要调大
- max_file_uploads = 20 同时上传最多文件数
- date.timezone =Asia/Shanghai 指定时区
- short_open_tag=on 开启短标签
再识LAMP
LAMP架构说明
LAMP架构实现
- 静态资源:
Client – http --> httpd - 动态资源:
Client – http --> httpd --> libphp5.so () – mysql --> MySQL server
或
Client – http --> httpd -->fastcgi-- mysql --> MySQL server
CGI & fastcgi
CGI:Common Gateway Interface 公共网关接口
CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序(或bash,perl脚本等), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
请求流程:
Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql
fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出
CGI和fastcgi 比较
php-mysql or php-mysqlnd
php-mysql和php-mysqlnd都是用php用来连接mysql工具,php-mysql是centos7的,php-mysqlnd是centos8的
安装php-mysql
[root@localhost html]# yum install php-mysql -y
安装后可以看到生成了三个模块和三个配置文件,三个模块是三种不同的php连接mysql的方式,三个配置文件是用来调用这三个模块的,建议使用pdo_mysql.so
[root@localhost html]# rpm -ql php-mysql
/etc/php.d/mysql.ini
/etc/php.d/mysqli.ini
/etc/php.d/pdo_mysql.ini
/usr/lib64/php/modules/mysql.so
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/pdo_mysql.so
LAMP的具体实现
所有服务都在一台机器上的情况
1,利用rpm包实现LAMP安装部署
centos8
dnf install httpd mariadb-server php php-mysqlnd
dnf install httpd mariadb-server php-fpm php-mysqlnd
以上两种方式,不管你是安装php还是php-fpm最后centos8都会是fastcgi方式。如果要使用模块方式,需要改变些配置,centos8默认的mpm模式是event,所以你要先将mpm模式改为prefork,因为只有prefork才支持模块方式。但仅仅是这样还不够,你要将配置文件/etc/httpd/conf.d/php.conf启用“socket”的那几行注释掉
[root@wyhcentos8 php-fpm.d]# vi /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
vi /etc/httpd/conf.d/php.conf
#<IfModule !mod_php5.c>
# <IfModule !mod_php7.c>
# # Enable http authorization headers
# SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
# <FilesMatch \.(php|phar)$>
# SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
# </FilesMatch>
# </IfModule>
#</IfModule>
centos7
- Module 模块方式
yum install httpd php php-mysql mariadb-server
- FastCGI 方式
yum install httpd php-fpm php-mysql mariadb-server
centos6(centos6仅支持module方式)
yum install httpd, php, php-mysql, mysql-server
注意:基于module实现,httpd 需要 使用prefork模型
2,php连接数据库的方式
(1)使用mysql扩展连接数据库
使用mysql扩展模块mysql.so连接数据,此方式已经在php 7版后淘汰
范例:php使用mysql扩展连接数据库的测试代码
<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>
(2)使用mysqli扩展连接数据库
使用mysqli扩展模块mysqli.so连接数据,此方式只能连接MySQL数据库,不支持其它数据库
范例:php使用mysqli扩展连接数据库的测试代码
<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
} e
cho "OK";
$mysqli->close();
?>
(3)使用PDO(PHP Data Object)扩展连接数据库
使用PDO扩展模块pdo_mysql.so连接数据库,此方式可以支持连接MySQL,Oracle等多种数据库
范例:php使用pdo扩展连接数据库的测试代码1
<?php
$dsn='mysql:host=mysqlhost;dbname=mysql';
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
范例:php使用pdo扩展连接数据库的测试代码2
<?php
try {
$user='root';
$pass='magedu';
$dbh = new PDO('mysql:host=mysqlhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
} $
dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
实战案例-centos7上以模块实现LAMP
安装软件
[root@localhost ~]# yum install httpd php php-mysql mariadb-server -y
因为我们是采用module模式实现动态页面,所以确认一下mpm模式为prefork(centos7一般默认是prefork模式)
[root@localhost ~]# httpd -M | grep mpm
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
mpm_prefork_module (shared)
启动服务
[root@localhost conf.d]# systemctl start httpd mariadb
在/var/www/html下创建f1.php文件来测试动态页面是否实现
[root@localhost conf.d]# cd /var/www/html
[root@localhost html]# vi f1.php
<?php
echo date("Y/m/d H:i:s");
phpinfo();
?>
访问f1.php,可以看到时间和php信息
下面我们在/var/www/html下创建pdo.php文件来测试php是否能够与mysql交互了
[root@localhost html]# vi pdo.php
<?php
$dsn='mysql:host=localhost;dbname=mysql'; #因为数据库在同一台机器上,所以host为localhost
$username='root';
$passwd=''; #mysql未设密码
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
访问pdo.php,成功
总结:其实搭建LAMP架构只需两步,安装软件包,启动服务
实战案例-centos7上以php-fpm实现LAMP(待补充)
常见LAMP应用
常见LAMP应用介绍
- PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
- WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用
- PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团
- Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
- PowerDNS 是一个跨平台的开源DNS服务组件,它是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可从MySQL,Oracle,PostgreSQL等的数据库读取数据。PowerDNS安装了Poweradmin(基于php实现),能实现Web管理DNS记录,非常方便
- ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0
PhpMyAdmin的实现
phpmyadmin官网
从官网下载最新版的phpmyadmin4.9.2
从官网可看到(Current version compatible with PHP 5.5 to 7.4 and MySQL 5.5 and newer)phpmyadmin4.9.2支持php5.5-7.4的版本,而centos7yum安装的是php5.4的版本
所以我们可以去清华yum源下载更高的php yum源
清华大学软件镜像站
从清华大学软件镜像站直接安装php yum源,会生成许多repo文件,有php5.4的,php7.1的,php7.2的等等
[root@localhost ~]# yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm -y
[root@localhost ~]# rpm -ql remi-release.noarch
/etc/pki/rpm-gpg/RPM-GPG-KEY-remi
/etc/pki/rpm-gpg/RPM-GPG-KEY-remi2017
/etc/pki/rpm-gpg/RPM-GPG-KEY-remi2018
/etc/pki/rpm-gpg/RPM-GPG-KEY-remi2019
/etc/yum.repos.d/remi-glpi91.repo
/etc/yum.repos.d/remi-glpi92.repo
/etc/yum.repos.d/remi-glpi93.repo
/etc/yum.repos.d/remi-glpi94.repo
/etc/yum.repos.d/remi-modular.repo
/etc/yum.repos.d/remi-php54.repo
/etc/yum.repos.d/remi-php70.repo
/etc/yum.repos.d/remi-php71.repo
/etc/yum.repos.d/remi-php72.repo
/etc/yum.repos.d/remi-php73.repo
/etc/yum.repos.d/remi-php74.repo
/etc/yum.repos.d/remi-safe.repo
/etc/yum.repos.d/remi.repo
安装php72-php,php72-php-msyqlnd(php7.2的php连接mysql的包是mysqlnd),mariadb-server(httpd会因为依赖性自动安装上)
[root@localhost ~]# yum install php72-php php72-php-mysqlnd mariadb-server -y
启动服务
[root@localhost ~]# systemctl start httpd mariadb
下载phpmyadmin4.9.2,并解压缩
[root@localhost ~]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
[root@localhost ~]# unzip phpMyAdmin-4.9.2-all-languages.zip
[root@localhost ~]# ls
anaconda-ks.cfg original-ks.cfg phpMyAdmin-4.9.2-all-languages phpMyAdmin-4.9.2-all-languages.zip
将解压缩后的phpmyadmin4.9.2移动到/var/www/html下并重命名为pma
[root@localhost ~]# mv phpMyAdmin-4.9.2-all-languages /var/www/html/pma
[root@localhost ~]# ls /var/www/html
pma
访问192.168.39.11/pma/,可以访问
用msql的用户名密码登录(不允许空密码登录)
登录成功,这样我们就可以用图形化界面管理mysql了
WordPress的实现
wordpress中文官网 需科学上网
部署LAMP
[root@localhost ~]# yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm -y
[root@localhost ~]# yum install php72-php php72-php-mysqlnd mariadb-server -y
[root@localhost ~]# systemctl restart httpd mariadb
进入mysql创建数据库wordpress以及用户wordpress并给其授权
[root@localhost ~]# mysql
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on wordpress.* to wordpress@"localhost" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)
下载wordpress5.3.1(下载的时候需要"科学上网",太慢了,这里我直接下载到windows再拉进centos了),然后解压到/var/www/html下
[root@localhost ~]# wget https://wordpress.org/latest.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg original-ks.cfg wordpress-5.3-zh_CN.tar.gz
[root@localhost ~]# tar -xvf wordpress-5.3-zh_CN.tar.gz -C /var/www/html/
将wordpress目录权限赋予apache
[root@localhost ~]# chown -R apache.apache /var/www/html/wordpress
修改配置文件wp-config.php,写入数据库名,连接数据库用的数据库用户和密码
[root@localhost ~]# cd /var/www/html/wordpress/
[root@localhost wordpress]# mv wp-config-sample.php wp-config.php
[root@localhost wordpress]# vi wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' );
/** MySQL数据库用户名 */
define( 'DB_USER', 'wordpress' );
/** MySQL数据库密码 */
define( 'DB_PASSWORD', '123.com' );
/** MySQL主机 */
define( 'DB_HOST', 'localhost' );
访问192.168.39.11/wordpress,访问成功
安装wordpress
安装成功,登录
至此,wordpress已经部署完成,现在你拥有了个人的博客站点
Discuz!的实现
部署LAMP
[root@localhost ~]# yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm -y
[root@localhost ~]# yum install php72-php php72-php-mysqlnd mariadb-server -y
[root@localhost ~]# systemctl restart httpd mariadb
创建数据库forum以及用户forum并给其授权
[root@localhost forum]# mysql
MariaDB [(none)]> create database forum;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on forum.* to forum@"localhost" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)
从码云下载Discuz,并解压缩
[root@localhost ~]# ls
anaconda-ks.cfg Discuz_X3.4_SC_UTF8【20191201】.zip original-ks.cfg
[root@localhost ~]# unzip Discuz_X3.4_SC_UTF8【20191201】.zip -d /var/www/html/forum
将forum目录权限赋予apache
[root@localhost forum]# chown -R apache.apache /var/www/html/forum
访问192.168.39.11/forum/upload,访问成功,开始安装
安装过程提示错误,是因为缺少php72-php-xml包,安装一下这个包就好了
[root@localhost forum]# yum install php72-php-xml -y
[root@localhost forum]# systemctl restart httpd
继续安装
安装完成了
重新访问192.168.39.11/forum/upload,ok了,你已经有你的论坛了
PowerDNS的实现(待补充)
ECShop的实现(待补充)
php加速器
xcache加速php5.x(待补充)
opcache加速php7.x
用ab命令测试安装好wordpress的性能,发现Requests per second: 仅为8.83
[root@localhost forum]# ab -c 10 -n 100 http://192.168.39.11/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.39.11 (be patient).....done
Server Software: Apache/2.4.6
Server Hostname: 192.168.39.11
Server Port: 80
Document Path: /wordpress/
Document Length: 27555 bytes
Concurrency Level: 10
Time taken for tests: 11.325 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2782300 bytes
HTML transferred: 2755500 bytes
Requests per second: 8.83 [#/sec] (mean)
Time per request: 1132.484 [ms] (mean)
Time per request: 113.248 [ms] (mean, across all concurrent requests)
Transfer rate: 239.92 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 299 1111 137.1 1113 1421
Waiting: 110 1017 133.6 1021 1288
Total: 299 1111 137.1 1113 1421
Percentage of the requests served within a certain time (ms)
50% 1113
66% 1147
75% 1167
80% 1180
90% 1274
95% 1311
98% 1391
99% 1421
100% 1421 (longest request)
安装php72-php-opcache,安装后重启httpd
[root@localhost html]# yum install php72-php-opcache -y
[root@localhost html]# systemctl restart httpd
确认下opcache是否设置启动了
[root@localhost html]# rpm -ql php72-php-opcache
/etc/opt/remi/php72/php.d/10-opcache.ini
/etc/opt/remi/php72/php.d/opcache-default.blacklist
/opt/remi/php72/root/usr/lib64/php/modules/opcache.so
[root@localhost html]# vi /etc/opt/remi/php72/php.d/10-opcache.ini
; Enable Zend OPcache extension module
zend_extension=opcache
; Determines if Zend OPCache is enabled
opcache.enable=1
在/var/www/html下创建test.php,用来查看opcache是否已经生效,可以看到开启了
[root@localhost forum]# cd /var/www/html
[root@localhost html]# vi test.php
<?php
phpinfo();
?>
再用ab命令测试下性能,发现Requests per second值为28.96,提高了数倍
[root@localhost html]# ab -c 10 -n 100 http://192.168.39.11/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.39.11 (be patient).....done
Server Software: Apache/2.4.6
Server Hostname: 192.168.39.11
Server Port: 80
Document Path: /wordpress/
Document Length: 27555 bytes
Concurrency Level: 10
Time taken for tests: 3.453 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2782300 bytes
HTML transferred: 2755500 bytes
Requests per second: 28.96 [#/sec] (mean)
Time per request: 345.312 [ms] (mean)
Time per request: 34.531 [ms] (mean, across all concurrent requests)
Transfer rate: 786.85 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 89 230 112.3 215 1264
Waiting: 46 180 112.8 170 1237
Total: 89 230 112.3 215 1264
Percentage of the requests served within a certain time (ms)
50% 215
66% 223
75% 232
80% 246
90% 280
95% 308
98% 352
99% 1264
100% 1264 (longest request)
实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
准备:
- 两台centos7机器:websrv(httpd+php-fastcgi),mysql
- 软件包:
mariadb-10.2.29-linux-x86_64.tar.gz
apr-1.7.0.tar.bz2
apr-util-1.6.1.tar.bz2
httpd-2.4.41.tar.gz
php-7.3.10.tar.xz
Discuz_X3.4_SC_UTF8【20191201】.zip
wordpress-5.3-zh_CN.tar.gz
开始
一,二进制安装mariadb-10.2
一些准备工作:
libaio软件没装的话装一下
添加mysql用户
创建mysql的数据存放目录并设置授权给mysql
[root@mysql ~]# yum install libaio -y
[root@mysql ~]# useradd -s /sbin/nologin -r mysql
[root@mysql ~]# mkdir /data/mysql
[root@mysql ~]# chown mysql.mysql /data/mysql
解压mariadb10.2二进制包,为了方便创建一个软链接,设置一下解压后包的权限,不设也行
[root@mysql ~]# tar -xvf mariadb-10.2.29-linux-x86_64.tar.gz -C /usr/local/
[root@mysql local]# ln -s mariadb-10.2.29-linux-x86_64 mysql
[root@mysql local]# chown -R root.root /usr/local/mysql/
配置mysql配置文件
[root@mysql local]# cd mysql
[root@mysql mysql]# cp support-files/my-huge.cnf /etc/my.cnf -b
[root@mysql mysql]# vim /etc/my.cnf
datadir = /data/mysql
初始化数据库
[root@mysql mysql]# ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
添加path变量,设置mysql的启动服务,并启动mysql
[root@mysql mysql]# echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
[root@mysql mysql]# . /etc/profile.d/mysql.sh
[root@mysql mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mysql mysql]# chkconfig --add mysqld
[root@mysql mysql]# service mysqld start
Starting mysqld (via systemctl): [ OK ]
创建wordpress和discuz数据库,并创建对应的用户,授权相应的权限
[root@mysql mysql]# mysql
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database discuz;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on wordpress.* to wordpress@"192.168.39.%" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on discuz.* to discuz@"192.168.39.%" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)
二,编译安装httpd-2.4
解压httpd,apr,apr-util这三个包,并将apr和aprutil包整合到http包里
[root@websrv ~]# tar -xf httpd-2.4.41.tar.gz
[root@websrv ~]# tar -xf apr-1.7.0.tar.bz2
[root@websrv ~]# tar -xf apr-util-1.6.1.tar.bz2
[root@websrv ~]# mv apr-1.7.0 httpd-2.4.41/srclib/apr/
[root@websrv ~]# mv apr-util-1.6.1 httpd-2.4.41/srclib/apr-util/
安装编译依赖的包
[root@websrv ~]# yum install gcc make pcre-devel openssl-devel expat-devel apr-util -y
编译安装
[root@websrv ~]# cd httpd-2.4.41
[root@websrv httpd-2.4.41]# ./configure --prefix=/data/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
[root@websrv httpd-2.4.41]# make && make install
添加path变量
[root@websrv ~]# echo "PATH=/data/httpd24/bin:$PATH" > /etc/profile.d/lamp.sh
[root@websrv ~]# . /etc/profile.d/lamp.sh
添加apache用户
[root@websrv ~]# useradd -s /sbin/nologin -r -u 88 apache
修改httpd用户和组为apache,mpm改为event
[root@websrv ~]# vim /data/httpd24/conf/httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
User apache
Group apache
[root@websrv ~]# httpd -M |grep mpm
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe73:a0a9%eth0. Set the 'ServerName' directive globally to suppress this message
mpm_event_module (shared)
启动apache
[root@websrv ~]# apachectl start
[root@websrv ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
三,编译安装fastcgi方式的php7.3
安装编译过程所需依赖包,如果时php7.4还需安装sqlite-devel和oniguruma-devel这两个包
[root@websrv ~]# yum install libxml2-devel bzip2-devel libmcrypt-devel -y
解压php包,切换php包目录下,编译安装(如果时php7.4,–with-freetype-dir,–with-jpeg-dir,–with-png-dir这三项就不用了)
[root@websrv php-7.3.10]# tar -xf php-7.3.10.tar.xz
[root@websrv php-7.3.10]# cd php-7.3.10
[root@websrv php-7.3.10]# ./configure --prefix=/data/php73 \
> --enable-mysqlnd \
> --with-mysqli=mysqlnd \
> --with-pdo-mysql=mysqlnd \
> --with-openssl \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib \
> --with-libxml-dir=/usr \
> --with-config-file-path=/etc \
> --with-config-file-scan-dir=/etc/php.d \
> --enable-mbstring \
> --enable-xml \
> --enable-sockets \
> --enable-fpm \
> --enable-maintainer-zts \
> --disable-fileinfo
[root@websrv php-7.3.10]# echo $?
0
[root@websrv php-7.3.10]# make && make install
添加PATH变量
[root@websrv php-7.3.10]# echo "PATH=/data/php73/bin:$PATH" >>/etc/profile.d/lamp.sh
[root@websrv php-7.3.10]# . /etc/profile.d/lamp.sh
copy配置文件
[root@websrv php-7.3.10]# cp php.ini-production /etc/php-ini
[root@websrv php-7.3.10]# cd /data/php73/etc
[root@websrv etc]# cp php-fpm.conf.default php-fpm.conf
[root@websrv etc]# cd php-fpm.d/
[root@websrv php-fpm.d]# cp www.conf.default www.conf
修改配置文件–修改进程所有者,支持status和ping
[root@websrv php-fpm.d]# vim www.conf
user = apache
group = apache
pm.status_path = /status
ping.path = /ping
支持opcache加速
[root@websrv php-fpm.d]# mkdir /etc/php.d
[root@websrv php-fpm.d]# vim /etc/php.d/opcache.ini
zend_extension=opcache.so
opcache.enable=1
copy启动服务,并启动服务
[root@websrv php-fpm.d]# cp /root/php-7.3.10/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@websrv php-fpm.d]# systemctl daemon-reload
[root@websrv php-fpm.d]# systemctl enable --now php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
[root@websrv php-fpm.d]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-12-16 10:08:52 CST; 53s ago
Main PID: 42523 (php-fpm)
CGroup: /system.slice/php-fpm.service
├─42523 php-fpm: master process (/data/php73/etc/php-fpm.conf)
├─42524 php-fpm: pool www
└─42525 php-fpm: pool www
Dec 16 10:08:52 websrv systemd[1]: Started The PHP FastCGI Process Manager.
四,修改配置httpd支持php-fpm
修改httpd配置文件
[root@websrv php-fpm.d]# vim /data/httpd24/conf/httpd.conf
#取消注释以下两行
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#添加index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
#配置wordpress的虚拟主机
<virtualhost *:80>
servername wordpress.rookiewyh.org
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
#实现status和ping页面
ProxyPassMatch ^/(status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
#配置discuz的虚拟主机
<virtualhost *:80>
servername discuz.rookiewyh.org
documentroot /data/discuz
<directory /data/discuz/>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
CustomLog "logs/access_discuz_log" common
</virtualhost>
在/data下创建wordpress和discuz目录,重启apache服务
[root@websrv php-fpm.d]# mkdir /data/{wordpress,discuz}
[root@websrv php-fpm.d]# ls /data
discuz httpd24 php73 wordpress
[root@websrv php-fpm.d]# apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe73:a0a9%eth0. Set the 'ServerName' directive globally to suppress this message
五,准备wordpress和discuz! 相关文件
准备wordpress文件
[root@websrv php-fpm.d]# cd /root
[root@websrv ~]# tar -xf wordpress-5.3-zh_CN.tar.gz
[root@websrv ~]# mv wordpress/* /data/wordpress
[root@websrv ~]# chown -R apache.apache /data/wordpress
准备discuz文件
[root@websrv ~]# unzip Discuz_X3.4_SC_UTF8【20191201】.zip
[root@websrv ~]# mv upload/* /data/discuz/
[root@websrv ~]# chown -R apache.apache /data/discuz
六,测试访问
在物理机c盘:windows/system32/drivers/etc下找到hosts文件,添加本地域名解析
访问 wordpress.rookiewyh.org,可以访问,安装,安装成功
访问 discuz.rookiewyh.org,可以访问,安装,安装成功