案例:分布式LAMP架构搭建Discuz论坛(编译安装)

 

目录

 前言:

Apache在LAMP里主要实现的功能:

 Mysql在LAMP里实现的作用:

PHP在LAMP里的功能:

php 的工作模式

FastCGI 方式安装 php(192.168.10.6主机)

Mysql的编译安装(192.168.10.4主机)

apache的编译安装:(192.168.10.3主机)

测试 LAMP 环境

测试访问 php 测试页

部署Discuz论坛


Apache在LAMP里主要实现的功能:

  1. 处理http请求,构建响应的报文等自身服务
  2. 配置让apache支持php程序响应
  3. 配置Apache具体处理php程序的方法,例:通过反向代理将php程序交给fcgi处理

 Mysql在LAMP里实现的作用:

  1. 提供php程序对数据的存储
  2. 提供php程序对数据的读取

PHP在LAMP里的功能:

  1. 提供Apache访问接口,CGI或FastCGI
  2. 提供php程序的解释器
  3. 提供mysql数据库的连接函数的基本环境

php 的工作模式

 
 
php lamp 环境下共有三种工作模式:CGI 模式、apache 模块、FastCGI 模式。
 
三者区别如下:
 
CGI 模式下 ,即通用网管接口服务器有多少个连接请求就有多少个cgi子进程,运行 PHP ,性能低下。

 

FastCGI 方式 PHP 是一处独立的进程,所有 PHP 子进程都由 PHP 的一个叫作 php-fpm 的组件负责管理;
 
apache 模块化方 式运行的 PHP ,则是 apache 负责调用 PHP 完成工作。性能比fastcgi差很多
 
FastCGI 工作机制:
 
首先客户端发起请求,请求分为 2 种,一种是静态请求它可以直接由 Apache 直接响应返回;
另一种是动态的请求,如其中包含中 php 或者 Perl 这种脚本解释性语言,则由 Apache 服务
器通过 fastcgi 协议调用 php 服务器执行并返回给 Apache Apache 返回解释执行后的结果,
如果这个过程中涉及到对数据的操作,此时 php 服务器还会还会通过 mysql 协议调用 mysql
服务器。
 
 
案例:分布式LAMP架构搭建Discuz论坛(编译安装)_第1张图片

 

主机规划

至少 3 台主机,操作系统都是 centos7.2. 网段在 192.168.10.0/24 网关 192.168.10.254
 
分配如下:
1 httpd 服务器( 192.168.10.3
1 php 服务器( 192.168.10.6
1 mysql 服务器( 192.168.10.4
编译安装php
编译安装 apache

编译安装 mysql

安装 php(192.168.10.6主机)

脚本如下

#!/bin/bash
#name:auto_install_php
#date 2019年12月21日11:32:59
echo '安装前提软件...'
yum -y install libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel
echo '解压编译libmcrypt...'
cd /usr/src
tar zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure --prefix=/usr/local/libmcrypt && make && make install
echo '安装php...'
cd /usr/src
tar zxf php-5.6.27.tar.gz 
cd 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
#提供 php 配置文件
cp /usr/src/php-5.6.27/php.ini-production /etc/php.ini
#为 php-fpm 提供脚本并设置开机自启
cd /usr/src/php-5.6.27/

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chmod +x /etc/init.d/php-fpm 
chkconfig --add php-fpm
chkconfig php-fpm on

#提供 php-fpm 配置文件并编辑
cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
sed -i  's:;pid = run/php-fpm.pid:pid = run/php-fpm.pid:'  /usr/local/php5.6/etc/php-fpm.conf
sed -i 's/listen = 127.0.0.1:9000/listen = 192.168.10.6:9000/' /usr/local/php5.6/etc/php-fpm.conf
sed -i 's/pm.max_children = 5/pm.max_children = 100/' /usr/local/php5.6/etc/php-fpm.conf
sed -i 's/pm.start_servers = 2/pm.start_servers = 10/' /usr/local/php5.6/etc/php-fpm.conf
sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 10/' /usr/local/php5.6/etc/php-fpm.conf
sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 50/' /usr/local/php5.6/etc/php-fpm.conf

#启动php-fpm服务
service php-fpm start
netstat -anpt | grep php-fpm    //手动查看一下php-fpm是否启用
 
防火墙开放端口:
 
[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp
success
[root@phpserver ~]# firewall-cmd --reload
Success
 
在该主机上新建虚拟主机目录用于存放网页文件
 
[root@phpserver ~]# mkdir -p /var/www/benet

 

 

Mysql的编译安装(192.168.10.4主机)

脚本如下:

 

#!/bin/bash
#date 2019年12月22日18:08:51
#named:auto_install_mysql
#由于没有下载mysql源码包,所以提前准备好
echo '正在下载资源包...'
yum -y install ncurses-devel gcc gcc-c++ wget make 

read -p '你想要的Cmake版本:' VER
wget https://github.com/Kitware/CMake/releases/download/v$VER/cmake-$VER.tar.gz
tar zxf cmake-$VER.tar.gz -C /usr/src
cd /usr/src/cmake-$VER
echo '正在编译安装...'
./configure &> /dev/null
gmake && gmake install &> /dev/null

#创建mysql的用户和组
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql

cd /usr/src
tar zxf /mysql-5.6.36.tar.gz 
cd mysql-5.6.36/
echo '预编译中...'
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all &> /dev/null
echo  '正在编译安装...'
make -j8 && make install -j8 &> /dev/null


echo  '对数据库目录进行授权:'
chown -R mysql:mysql /usr/local/mysql
echo  '建立配置文件:'
rm -rf /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
#echo '安装Perl模块...'
#如果提示初始化数据库失败,自己手动去掉注释,删掉已安装的软件包,再运行一边脚本
#yum -y install perl-Data-Dumper &> /dev/null
echo '初始化数据库...'
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
echo '设置环境变量:'
echo "PATH=$PATH://usr/local/mysql/bin" >> /etc/profile
. /etc/profile
#mysql 的启动和关闭:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start

#/etc/init.d/mysqld是一个shell脚本,在启动过程中会调用mysqld_safe脚本,最后调用mysqld服务启动mysql,如下所示.
#$bindir/mysql_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 
netstat -anpt | grep 3306
cat << EOF

****************************************
* Mysql  has been installed successfully. *
****************************************

EOF
 

apache的编译安装:(192.168.10.3主机)

 

#!/bin/bash
yum -y install zlib-* make gcc gcc-c++ m4 ncurses-devel kernel-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 ..
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
mv /usr/bin/openssl /usr/bin/openssl.1.0.1e
ln -s /usr/local/openssl//bin/openssl /usr/bin/openssl

cd /usr/src
tar zxf httpd-2.4.25.tar.gz
cd 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
#优化httpd路径
ln -s /usr/local/httpd/bin/* /usr/local/bin
#添加系统服务
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
sed -i '2a\# chkconfig: 35 85 15\n#' /etc/init.d/httpd
chkconfig --add httpd
systemctl start httpd
systemctl enable httpd
netstat -anpt | grep httpd
cat << EOF

******************************************************
* Httpd has been installed and started successfully. *
******************************************************

EOF


 
apache通过fastcgi调用php
 
Apache2.4 以后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so
它其实是作为 mod_proxy.so 模块的扩充,因此,这两个模块都要加载启用,通过修改httpd.conf主配置文件。
 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

 

 
建立一个目录作为虚拟主机的家目录
 
[root@www ~]# mkdir -p /var/www/benet
 
编辑主配置文件 httpd.conf ,开启虚拟主机
 
启用 Include conf/extra/httpd-vhosts.conf        //这一步千万不能忘

同时定位 AddType;添加下面两行:让 apache 能识别 php 格式的页面

 
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
并且定位至 DirectoryIndex:支持 php 格式的主页
 
DirectoryIndex index.php index.html #添加 index.php(最好添加在最前面)

开启虚拟主机支持使用fcgi,编辑httpd-vhosts.conf

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf

 ServerAdmin [email protected]
 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.10.6:9000/var/www/benet/$1   //把以.php 结尾的文件请求发送到 php-fpm 进程
 #
 # ProxyPass fcgi://192.168.10.6:9000/var/www/benet  //通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到PHP-FPM 监听的端口。
 #
   //添加用户访问权限
 Options FollowSymLinks
 AllowOverride None
 Require all granted

测试 LAMP 环境

 

mysql 主机上创建用于 php 服务器连接的 mysql 账户
 
mysql> grant all on *.* to testuser@'%' identified by '123456’;

注意:防火墙要允许 mysql 连接

 

php 服务器上的/var/www/benet 目录下创建.php 的测试页:
 
[root@phpserver ~]# cat /var/www/benet/index.php
[root@phpserver ~]# cat /var/www/benet/test.php

测试访问 php 测试页

案例:分布式LAMP架构搭建Discuz论坛(编译安装)_第2张图片

案例:分布式LAMP架构搭建Discuz论坛(编译安装)_第3张图片

看到上面两个测试页说明 apachephpmysql 之间可以协同工作了。

部署Discuz论坛

 复制Discuz包到apache和php服务器的/var/www/benet目录,解压并赋权(步骤一样)

unzip Discuz_7.0.0_FULL_SC_UTF8.zip
mv upload/ /var/www/benet/bbs
chmod -R 777 /var/www/benet/bbs
修改 php.ini 文件,重启服务
short_open_tag = On

保存退出

service php-fpm restart

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

mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'%' identified by 'pwd@123';
mysql> exit

访问Apache,安装discuz论坛 

案例:分布式LAMP架构搭建Discuz论坛(编译安装)_第4张图片

 
 
注意:安装过程,除了数据库的名和用户名、密码,其他一概下一步。
 
 
完结!!!
。。。
 
 
 
 
 
 
 
 
 

 

 

 

你可能感兴趣的:(LAMP/LNMP架构)