LAMP详解

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

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个步骤

  1. Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
  2. Parsing 语义分析,将Tokens转换成简单而有意义的表达式
  3. Compilation 将表达式编译成Opcode
  4. 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,可以访问,安装,安装成功
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值