LAMP架构由Linux、apache(httpd)、MySQL/MariaDB和php/perl/python四部分组成,其工作过程为:当客户端请求的是静态资源时,web服务器会直接把静态资源返回给客户端;当客户端请求的是动态资源时,httpd的php模块会进行相应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,php会连接MySQL取得数据然后进行运算,运算的结果转为静态资源由web服务器返回给客户端(如下图)。
在上一篇中我们已经了解了FastCGI模式的工作原理,此篇通过编译安装基于FastCGI模式来实现多虚拟主机的wordpress和discuz的LAMP架构。笔者这边准备了两台主机,其中CentOS7主机作为httpd+php服务器,取名为web-server;CentOS8主机作为数据库服务器,取名db-sever;客户端在Windows的浏览器中查看效果。
- 编译安装MariaDB10.7.3
1.1 下载MariaDB10.7.3
MariaDB目前已更新到10.9.0版本,考虑到最新版可能不太稳定,笔者这边通过官网(下载选择界面:https://mariadb.org/download/)下载10.7.3版本进行演示,注意选择的时候要选择source,同时镜像站点选择阿里云,下载会比较快。
下载完毕,将压缩包解压到想要存放的目录下,一般为/usr/local目录。
1.2 下载依赖包
编译安装所需的依赖包较多,具体如下图。
1.3 创建用户、组和相关目录
根据使用习惯,来创建MariaDB服务的专用账号mysql用户和组;创建数据存放路径/data/mysql,将权限交给mysql;创建程序安装路径/usr/local/mysql。
1.4 编译、安装
进入已解压的/usr/local/mariadb-10.7.3目录下,利用cmake进行读取源文件,并生成相关Makefile文件。
cmake环节不出问题的话即可开始进行编译、安装,中间环节如果报错,需要删除掉CMakeCache.txt文件重新进行编译。
1.5 启动脚本文件和配置文件
拷贝support-files/目录下的mysql.server文件至/etc/init.d/目录下,取名为mysqld作为启动脚本文件,并给予执行权限。
CentOS8在进行编译安装时是没有参考配置文件的,因此需自己手动创建一个,配置文件中需写明服务的程序存放路径和数据存放路径,也可以加入server-id等。
1.6 数据库初始化及更改相关权限
利用/usr/local/mysql/scripts/目录下的mariadb-install-db文件进行数据初始化,并指定数据存放路径为/data/mysql。
此时还需将/usr/local/mysql的权限改为root,将/data/mysql目录下的文件权限改为mysql。
1.7 启动服务和安全初始化
在完成上述的操作后,MariaDB已经可以启动。接下来可以进行安全初始化操作,安全初始化环节,可以设置是否允许数据库远程登录、是否删除测试数据库和更换密*码等。
1.8 生成PATH变量
为了方便MariaDB服务的开启、关闭等操作,可将PATH变量写入到脚本中,并通过source命令使其生效。此时我们就可以直接使用mysql +用户名+密*码进行登录。
1.9 创建数据库及用户
根据规划,需创建wordpress和discuz的数据库,可以将两种服务的数据库放在一起,但是为了方便管理,建议针对不同的服务创建各自的数据库,同时需创建对应的授权账号。
- 编译安装httpd2.4.53
2.1 下载相关包
由于笔者的http服务是放在CentOS7主机上安装,部分依赖包可直接通过yum下载,但apr和apr-util版本过旧,可能会导致编译受影响,需通过官网(下载选择界面:https://dlcdn.apache.org/apr/)下载较新的版本。
Apache部分,笔者就选择最新的2.4.53(下载选择界面:https://dlcdn.apache.org/httpd/)。
依赖包部分主要有gcc、pcre-devel、openssl-devel和expat-devel四个。
2.2 解压及改名
将下载的三个压缩包进行解压,同时将解压后的apr和apr-util包移动到解压后httpd包目录下。
2.3 执行configure脚本
进入到解压过的httpd目录下,利用configure脚本来进行编译安装的第一步,选项部分可指定文件安装的位置、支持哪些模块等。
2.4 编译、安装
在configure脚本不出错的情况下,编译、安装一般不会出错,执行make命令进行编译,如果要使用多核编译,可以使用-j,编译完成后,执行 make install 命令进行安装。
2.5 PATH变量及配置文件
为了省去每次启动服务都要写全路径,可将路径写入脚本中,此时已经可以开启服务。笔者这边在执行configure脚本的时候,指定了文件安装位置在/apps/httpd目录下,而/apps/httpd/conf/httpd.conf配置文件中还需做如下修改:
①默认用户和组是daemon,可以改成apache,如果没有apache的用户则需创建;
②取消“LoadModule proxy_module modules/mod_proxy.so”和“LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so”两行的注释;
③在“DirectoryIndex index.html ”中间添加index.php作为默认页面;
④添加“AddType application/x-httpd-php .php”和“ProxyRequests Off”,让服务支持php后缀文件,并开启反向代理功能;
⑤添加wordpress和discuz两个网站的信息。
重启服务后,已经能通过浏览器查看网页。
- 编译安装FastCGI方式的php7.3.10
3.1 下载
CentOS7中的php版本为5.4,有点过旧,官方目前已更新到8.1.4版本,不过笔者这边有些依赖包下载不了,故选择下载7.3.10版本(下载选择界面:https://www.php.net/releases/)。
3.2 下载依赖包
php7.3.10版本的编译安装需要gcc、libxml2-devel和bzip2-devel三个依赖包,部分7.3版本可能需要安装libmcrypt-devel包。
3.3 编译安装
对已下载的php压缩包进行解压,进入已解压的包目录下,执行configure脚本指定文件安装位置等,在无报错的情况下根据主机的CPU核数来适当调大进行更快速地编译安装。
3.4 PATH变量、启动文件和配置文件
与大多数服务相同,为了方便开启或关闭服务等,建议将PATH变量写入到脚本中,因笔者这边是将FastCGI和http服务器放在同一台主机上,可以将两者的PATH变量写到同一个脚本,以便使用。
拷贝php.ini-production文件至/etc目录下,并取名为php.ini;同时将sapi/fpm/目录下的php-fpm.service文件拷贝至/usr/lib/systemd/system目录下作为启动文件。
进入到/apps/php/etc目录下,拷贝php-fpm.conf.default文件并命名为php-fpm.conf作为配置文件,将配置文件中的服务属主和属组改为apache,将pm.status_path改为fpm_status,启用此行和ping.path = /ping一行。
如果想提升php性能,省去每次加载和解析php的开销,可以创建一个opcache文件来进行加速。
3.5 开启服务
重新加载服务配置文件后即可开启php服务。
- wordpress和discuz
在准备wordpress和discuz之前,可以先创建两个目录用来存放解压后所需的文件。
此外,如果想要让浏览器中的主机ip以域名形式展现,可以在电脑C:\Windows\System32\drivers\etc目录下找到hosts文件,将对应的主机ip和想要使用的域名绑定起来即可。
4.1 下载压缩包
wordpress和discuz压缩包可通过官网进行下载,一般无版本要求,只要php不是过旧,选择最新版本即可。
(官网下载地址:https://cn.wordpress.org/download/)
(官网首页选择版本:https://www.discuz.net/)
4.2 解压并移动至指定文件夹
wordpress下载最新版通常名为latest-zh_CN.tar.gz,解压后只有一个wordpress文件夹,将文件夹下的文件全部移动至/data/blog即可;discuz一般要用unzip进行解压,解压后会产生很多文件,只需将upload目录下的文件移动至/data/forum即可。移动完需修改文件属性,将属主和属组改为apache。
4.3 安装wordpress和discuz
只要前面的设置不出错,wordpress和discuz的安装基本不会失败,具体安装过程如下:
wordpress
discuz
4.4 检查数据库
由于MariaDB在安装后只是针对不同的网站规划创建了各自的数据库,里面并不存在表等信息,在电脑客户端安装完wordpress和discuz后,登录数据库,可以发现两个网站的数据库中都自动生成了大量的表,从而验证了基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构实现。