lamp分布式(FGCI)部署+discuz论坛

发布时间 2023-04-18 09:56:50作者: 乱七八糟博客备份

环境:

主机名 IP地址 部署服务
root@httpd 192.168.1.61 httpd网站服务
root@mysql 192.168.1.62 mysql数据库
root@php 192.168.1.63 php动态页面

一.搭建httpd服务(192.168.1.61)

参考博文:web服务1 web服务2
1.准备需要下载的源码包并将源码包复制到httpd服务器上
httpd提取码0fid

[root@httpd ~]# cd /usr/src/
[root@httpd src]# ls //把源码包放在了/usr/sre下
apr-1.5.2.tar.gz       httpd-2.4.25.tar.gz    pcre-8.39.tar.gz
apr-util-1.5.4.tar.gz  openssl-1.0.1u.tar.gz  zlib-1.2.8.tar.gz

2.编写http依赖包安装脚本

[root@httpd src]# cd
[root@httpd ~]# mkdir sh
[root@httpd ~]# cd sh/
[root@httpd sh]# vim yilai.sh  //编辑脚本
#!/bin/bash
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
#如果编译安装无法执行,可能是开发软件工具没有安装,需要先安装开发软件

cd /usr/src
tar zxf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install

cd ..
tar zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

cd ..
yum -y install zlib-*

tar zxf pcre-8.39.tar.gz
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install

cd ..
tar zxf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
[root@httpd sh]# bash yilai.sh  //执行脚本
//需要注意的是,http的依赖源码包位置,和依赖包版本需要和脚本中对应。

3.编译安装httpd

[root@httpd ~]# cd /usr/src/
[root@httpd src]# tar zxf httpd-2.4.25.tar.gz 
[root@httpd src]# cd httpd-2.4.25/
[root@httpd httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-cgi--enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install

相关参数解释:
--enable-so:支持动态共享模块(即打开 DSO 支持)
--enable-rewrite:支持 url 重写
--enable-ssl:支持 ssl
--with-ssl=/usr/local/openssl:指定 ssl 安装位置
--enable-cgi:启用 cgi
--enable-cgid:MPM 使用的是 event 或 worker 要启用 cgid
--enable-modules=most:明确指明要静态编译到 httpd 二进制文件的模块,为 空格分隔的模块名列表、all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模 块
--enable-mods-shared=most:明确指明要以 DSO 方式编译的模块,为空格分隔 的模块名列表、all 或者 most,all 表示包含所有模 块,most 表示包含大部分模块
--enable-mpms-shared=all:启用 MPM 所有支持的模式,这样 event、worker、prefork 就会以 模块化的方式安装,要用哪个就在 httpd.conf 里配置就好了。
--with-mpm=event:指定启用的 mpm 模式,默认使用 enevt 模式,在 apache 的早期版本 2.0 默认 prefork,2.2 版本是 worker,2.4 版本是 event.
--with-pcre=/usr/local/pcre:支持 pcre
--with-z=/usr/local/zlib:使用 zlib 压缩库
--with-apr=/usr/local/apr:指定 apr 的安装路径
--with-apr-util=/usr/local/apr-util:指定 apr-util 的安装路径
--enable-expires:激活或通过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容,即 对网站图片、js、css 等内容,提供客户端浏览器缓存的设置。这个是 apache 调优的一个重 要选项之一。
--enable-deflate:提供对内容的压缩传输编码支持,一般是 html、js、css 等内容的站点。使 用此参数会打打提高传输速度,提升访问者访问的体验。在生产环境中,这是 apache 调优 的一个重要选项之一。

4.优化链接

[root@httpd ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/

5.添加为系统服务

[root@httpd ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@httpd ~]# vim /etc/init.d/httpd 
添加下面内容,注意前面有#号
# chkconfig: 35 85 15   
\\声明服务启动级别,开机启动顺序,关机关闭顺序
# description: apache 2.4.25	
\\服务声明,简要信息

[root@httpd ~]# chkconfig --add httpd 
//添加httpd为系统服务
[root@httpd ~]# chkconfig httpd on
//设置httpd开机自启
[root@httpd ~]# systemctl start httpd
//开启服务

6.查看httpd端口是否开启

[root@httpd ~]# netstat -anput | grep httpd

二.搭建MySQL数据库(192.168.1.62)

参考博文:mysql
需要的源码包:提取码ftq3
1.将源码包复制到mysql服务器中

[root@mysql ~]# cd /usr/src/
[root@mysql src]# ls
cmake-2.8.6.tar.gz  mysql-5.6.36.tar.gz

2.安装环境需要的软件

[root@mysql ~]# yum -y install ncurses-devel gcc gcc-c++ 

3.添加mysql程序用户组

[root@mysql ~]# groupadd mysql
[root@mysql ~]# useradd -M -s /sbin/nologin mysql -g mysql

4.mysql需要cmake编译安装,所以先安装cmake包

[root@mysql ~]# cd /usr/src/
[root@mysql src]# tar zxf cmake-2.8.6.tar.gz 
[root@mysql src]# cd cmake-2.8.6/
[root@mysql cmake-2.8.6]# ./configure gmake && gmake install

5.编译安装mysql

[root@mysql ~]# cd /usr/src/
[root@mysql src]# tar zxf mysql-5.6.36.tar.gz 
[root@mysql src]# cd mysql-5.6.36/
[root@mysql mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
[root@mysql mysql-5.6.36]# make && make install

相关参数解释

-DSYSCONFDIR=/etc 指定初始化参数文件目录
-DDEFAULT_CHARSET=utf8 指定默认使用字符集 -DDEFAULT_COLLATION=utf8_general_ci 指定默认字符集校对规则 -DWITH_EXTRA_CHARSETS=all 指定额外支持其他字符集

6.赋权

[root@mysql ~]# chown -R mysql:mysql /usr/local/mysql/

7.centos7系统默认支持的是MariaDB数据库,所以系统默认的/etc/my.cnf配置文件是MariaDB的配置文件,而MySQL默认样本配置文件在,MySQL源码包目录中的support-files文件夹下my-default.cnf,再启动之前替换MySQL提供的配置文件内容。

[root@mysql mysql-5.6.36]# rm -rf /etc/my.cnf
[root@mysql mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
[root@mysql mysql-5.6.36]# yum -y install perl-Data-Dumper
//安装perl模块 

8.初始化数据库

[root@mysql mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

9.设置变量

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile #立即生效
或者
[root@localhost ~]# ln -s /usr/local/mysql/bin/* /usr/local/bin/

10.开启服务

[root@mysql mysql-5.6.36]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysql mysql-5.6.36]# chmod +x /etc/init.d/mysqld 
[root@mysql mysql-5.6.36]# /etc/init.d/mysqld start

11.优化路径

[root@mysql bin]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin
[root@mysql bin]# ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin

12.验证mysql是否开启

[root@mysql ~]# netstat -anput | grep mysqld

三.搭建php(192.168.1.63)

需要的源码包 :提取码4qw4

1.安装前提软件

[root@php ~]# yum -y install epel-release.noarch 
//可能有些包yum没有,所以安装epel扩展源
[root@php ~]# yum -y install gcc gcc-c++ libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel

2.复制libmcrpt和php包到php服务器中
安装libmcrypt加密工具

[root@php ~]# tar zxf libmcrypt-2.5.7.tar.gz 
[root@php ~]# cd libmcrypt-2.5.7/
[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install

3.编译安装php

[root@php ~]# tar zxf php-5.6.27.tar.gz 
[root@php ~]# cd php-5.6.27/
[root@php php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install

相关选项的解释:
--prefix=/usr/local/php5.6//安装位置
--with-mysql=mysqlnd //支持 mysql
--with-pdo-mysql=mysqlnd //支持 pdo 模块
--with-mysqli=mysqlnd //支持 mysqli 模块

注:上面的三选项的作用:数据库与 php 不在一个服务器上,指定此种方式,安装数据库连接驱动

--with-openssl//支持 openssl 模块--enable-fpm//支持 fpm 模式--enable-sockets//启用 socket 支持--enable-sysvshm//启用系统共享内存支持

--enable-mbstring//多字节字串、像我们的中文就是多字节字串--with-freetype-dir//支持 freetype、就要装 freetype-devel、跟字体相关的、字体解析工具 --with-jpeg-dir

--with-png-dir

注:上面的二选项的作用:处理 jpeg、png 图片的、php 可以动态生成 jpeg
图片--with-zlib//是个压缩库、在互联网传输时用来压缩传输的

--with-libxml-dir=/usr//这个 libxml 是用来解析 xml 的、指定/usr 下 --enable-xml //支持 xml 的

--with-mhash//支持 mhash

--with-mcrypt=/usr/local/libmcrypt //libmcrypt-devel 这个程序包所指定的 --with-config-file-path=/etc //指定配置文件的存放路径的 --with-config-file-scan-dir=/etc/php.d //配置文件扫描路径

--with-bz2 //支持 BZip2

为了支持 apache 的 worker 或 event 这两个 MPM,编译时使用了--enable-
maintainer-zts 选项

如果使用 PHP5.3 以上版本,为了链接 MySQL 数据库,可以指定 mysqlnd,这样在本机就不需要先安装 MySQL 或
MySQL 开发包了。mysqlnd 从 php 5.3 开始可用,可以编译时绑定到它(而不用和具体的 MySQL
客户端库绑定形成依赖),但从 PHP 5.4 开始它就是默认设置了

4.提供php配置文件

[root@php php-5.6.27]# cp php.ini-production /etc/php.ini

5.为 php-fpm 提供脚本

[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d//php-fpm
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@php php-5.6.27]# chkconfig --add php-fpm
//添加为系统服务
[root@php php-5.6.27]# chkconfig php-fpm on

6.提供 php-fpm 配置文件并编辑

[root@php php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
修改如下
pid = run/php-fpm.pid
listen = 192.168.1.63:9000 //监听地址及端口
pm.max_children = 50  //开机准备线程
pm.start_servers = 5   //开机准备进程
pm.min_spare_servers = 5 //空闲5
pm.max_spare_servers = 35 //最大35

[root@php php-5.6.27]# systemctl start php-fpm

7.验证php是否开启

[root@php php-5.6.27]# netstat -anput | grep php

四.测试Apache与php的静/动分离

1.启用Apache服务的代理转发
配置 apache 通过 fastcgi 协议调用 到php
在 Apache2.4 以后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so,
它其实是作为 mod_proxy.so 模块的扩充,因此,这两个模块都要加载

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf 
//加载下面两个模块,找到把#去掉即可
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Include conf/extra/httpd-vhosts.conf  //开启虚拟主机

//定位 AddType;添加下面两行:让 apache 能识别 php 格式的页面
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

//定位至 DirectoryIndex,添加index.php(支持 php 格式的主页) 
DirectoryIndex index.php index.html 
[root@httpd ~]# systemctl restart httpd

2.配置虚拟主机支持使用 fcgi

[root@httpd ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf  //添加下面内容
<VirtualHost *:80>
 ServerAdmin webmaster@benet.com
 DocumentRoot "/var/www/benet"   //根目录
 ServerName www.benet.com
 ServerAlias benet.com
 ErrorLog "logs/benet.com-error_log"
 CustomLog "logs/benet.com-access_log" common
 ProxyRequests Off     //关闭正向代理
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.1.63:9000/var/www/benet/$1 //填写php主机地址
 #<LocationMatch "^(.*\.php(/.*)?)$">  
 # ProxyPass fcgi://192.168.1.63:9000/var/www/benet
 #</LocationMatch>
<Directory "/var/www/benet">
 Options FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>
</VirtualHost>
[root@httpd ~]# systemctl restart httpd

其中:
ProxyRequests off #关闭正向代理

ProxyPassMatch:把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和URI,所以这里直接在 fcgi://192.168.1.63:9000 后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so 进行了封装,不需要手动指定。

特别注意的是,红色字体部分需要与中的 DocumentRoot 后的路一致 ProxyPassMatch。

只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(..php(/.)?)$ 从网站(虚拟主机的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后紧跟一个 /再跟别的内容的路径。

^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束

( )括号里的内容可以用 $1 来表示,以方便后面引用它。 fcgi:// 192.168.163:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到 PHP-FPM 监听的端口。

/path/to/your/documentroot/

非常重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操作系统中的绝对路径。否则会找不到文件。

$1可以从原始请求扩展成整个请求路径的变量,这里指代前面( ) 里面匹配的那个路径(uri)

充:Apache httpd 2.4 以前的版本中,要么把 PHP 作为 Apache 的模块运行,要么添加一个第三方模块支持PHP-FPM 实现。

3.测试
登入mysql服务器创建测试用户

[root@mysql ~]# mysql
mysql> grant all on *.* to testuser@'%' identified by '123456' ;

在 php 服务器上的/var/www/benet 目录下创建.php 的测试页:

[root@php ~]# mkdir -p /var/www/benet
[root@php ~]# vim /var/www/benet/index.php
<?php
phpinfo();
?>
[root@php ~]# vim /var/www/benet/test.php
<?php
$link=mysql_connect('192.168.1.62','testuser','123456');
if ($link)echo "connection success......";
mysql_close();
?>

访问测试php
在这里插入图片描述测试访问数据库
在这里插入图片描述
看到上面两个测试页说明 apache、php、mysql 之间可以协同工作了

五.部署Discuz论坛

下载discuz源码:提取码mgl9
1.复制Discuz包到apache和php服务器的/var/www/benet目录。
配置http服务器

[root@httpd ~]# mkdir -p /var/www/benet
[root@httpd benet]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@httpd benet]# mv upload/ /var/www/benet/bbs
[root@httpd benet]# chmod -R 777 /var/www/benet/bbs

配置php服务器(和http配置几乎一致)

[root@php benet]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@php benet]# mv upload/ /var/www/benet/bbs
[root@php benet]# chmod -R 777 /var/www/benet/bbs

2.在php服务器修改配置文件,重启服务

[root@php ~]# vim /etc/php.ini
找到下行并改为:
short_open_tag = On
[root@php ~]# systemctl restart php-fpm

3.mysql服务器上创建bbs数据库及用户

[root@mysql ~]# mysql
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'%' identified by 'pwd@123';

4.安装discuz论坛
http://192.168.1.61/bbs/
在这里插入图片描述访问discuz管理后台
http://192.168.1.61/bbs/admin.php