基于LAMP的discuz论坛实现

1、lamp介绍:

简介:
LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:

  • Linux,操作系统
  • Apache,网页服务器
  • MariaDB或MySQL,数据库管理系统(或者数据库服务器)
  • PHP、Perl或Python,脚本语言
  • 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的"解决方案包"(Solution Packages)。其他的方案包有苹果的WebObjects(最初是应用服务器),Java/J2EE和微软的.NET架构。
  • "LAMP包"的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。
  • Michael Kunze在一篇为德国计算机杂志《c’t》(1998,第12期,230页)而写的文章中使用了缩略语"LAMP"。这篇文章意在展示一系列的自由软件成为了商业包的替换物。由于IT世界众所周知的对缩写的爱好,Kunze提出"LAMP"这一容易被市场接受的术语来普及自由软件的使用。

2、web服务器工作流程

  • 2.1、 web服务器的资源分为两种,静态资源和动态资源
  • 静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源
    动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端
  • web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求 如下图所示

在这里插入图片描述

如上图所示
阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行
阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互

  • 2.2、 cgi与fastcgi ##上图提到过 cgi与fastcgi,在这里说明一下
  • CGI(Common Gateway Interface,通用网关接口),CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  • FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而FastCGI则是通过master-worker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master会从worker进程中选择一个去处理请求,这样就避免了重复的生成和杀死进程带来的频繁cpu上下文切换而导致耗时

2.3、httpd与php结合的方式

  • httpd与php结合的方式有以下三种:

  • modules:php将以httpd的扩展模块形式存在,需要加载动态资源时,httpd可以直接通过php模块来加工资源并返回给客户端

  • httpd prefork:libphp5.so(多进程模型的php)

  • httpd event or worker:libphp5-zts.so(线程模型的php)

  • CGI:httpd需要加载动态资源时,通过CGI与php解释器联系,获得php执行的结果,此时httpd负责与php连接的建立和断开等

  • FastCGI:利用php-fpm机制,启动为服务进程,php自行运行为一个服务,https通过socket与php通信

  • 2.3、web工作流程

  • 通过下面的图说明一下web的工作流程:

  • 客户端通过http协议请求web服务器资源

  • web服务器收到请求后判断客户端请求的资源是静态资源或是动态资源

  • 若是静态资源则直接从本地文件系统取之返回给客户端。
    否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。

在这里插入图片描述

3、lamp平台搭建

环境说明:

服务IP
lamp192.168.20.10
LAMP平台软件安装顺序:Apache -->mysql-->PHP
  • 3.1、源码安装Apache
[root@lpj1 ~]#  yum -y install gcc gcc-c++ expat-devel pcre-devel
[root@lpj1 ~]# tar -zxf apr-1.7.0.tar.gz 
[root@lpj1 ~]#  cd apr-1.7.0
[root@lpj1 apr-1.7.0]#  ./configure --prefix=/usr/local/apr
[root@lpj1 apr-1.7.0]#  make && make install
[root@lpj1 ~]# tar -zxf apr-util-1.6.1.tar.gz 
[root@lpj1 ~]# cd apr-util-1.6.1/
[root@lpj1 apr-util-1.6.1]#  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@lpj1 apr-util-1.6.1]#  make && make install
[root@lpj1 ~]# tar -zxf httpd-2.4.43.tar.gz 
[root@lpj1 ~]# cd httpd-2.4.43/
[root@lpj1 httpd-2.4.43]# 
[root@lpj1 httpd-2.4.43]#  ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
[root@lpj1 httpd-2.4.43]#  make && make install
启动服务测试源码安庄的httpd是否成功
[root@lpj1 httpd-2.4.43]# /usr/local/httpd/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe47:d185%ens33. Set the 'ServerName' directive globally to suppress this message
[root@lpj1 httpd-2.4.43]# netstat -anput | grep LISTEN | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      39277/httpd         
[root@lpj1 httpd-2.4.43]# curl http://192.168.20.10
<html><body><h1>It works!</h1></body></html>  ##成功
[root@lpj1 ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@lpj1 ~]# tar -zxf php-7.2.0.tar.gz 
[root@lpj1 ~]# cd php-7.2.0/
[root@lpj1 php-7.2.0]#  ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring
[root@lpj1 php-7.2.0]#make -j8 && make install
[root@lpj1 php-7.2.0]#cp php.ini-development /usr/local/php/php.ini

  • 3.4、结合web和PHP页面
[root@lpj1 php-7.2.0]#vim /usr/local/httpd/conf/httpd.conf
389     AddType application/x-gzip .gz .tgz #在此行下添加一行内容
390     AddType application/x-httpd-php .php
252     DirectoryIndex index.php index.html
  • 3.5、 编辑php页面 进行验证
[root@lpj1 php-7.2.0]# cd /usr/local/httpd/htdocs/
[root@lpj1 htdocs]# vim index1.php
[root@lpj1 htdocs]# cat index1.php 
<?php
phpinfo();
?>
[root@lpj1 htdocs]# vim index2.php
[root@lpj1 htdocs]# cat index2.php 
<?php
$con = new mysqli('127.0.0.1','root','123456');
if(!$con)
  die("connect error:".mysqli_connect_error());
else
  echo "connet mysql server ok!\n";
?>
[root@lpj1 htdocs]# 
查看httpd和mysql是否启动 如果已经启动 重启服务(httpd重启 建议先stop 再start) 如果没有启动 直接启动服务
[root@lpj1 ~]# /usr/local/httpd/bin/apachectl restart ##更改完后先重启一遍
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe47:d185%ens33. Set the 'ServerName' directive globally to suppress this message

[root@lpj1 htdocs]# netstat -anput | grep LISTEN | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      39277/httpd         
[root@lpj1 htdocs]# netstat -anput | grep LISTEN | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      7970/mysqld      

访问验证
http://192.168.20.10/index1.php
在这里插入图片描述http://192.168.20.10/index2.php
在这里插入图片描述
如上 验证两个都OK 就可以部署网络应用了

4、部署discuz论坛
[root@lpj1 ~]# ls ComsenzDiscuz-DiscuzX-master.zip 
ComsenzDiscuz-DiscuzX-master.zip
[root@lpj1 ~]#unzip ComsenzDiscuz-DiscuzX-master.zip 
[root@lpj1 ~]#cp -r DiscuzX/upload/* /usr/local/httpd/htdocs/
[root@lpj1 ~]#chmod -R 777 /usr/local/httpd/htdocs/
访问以下url 进行论坛安装
firefox http://192.168.20.133/install/index.php

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述安装Discuz的异常处理
在这里插入图片描述如上图 如果提醒已安装 可以删除安装锁 重新安装

[root@lpj1 ~]#rm -rf /usr/local/httpd/htdocs/data/install.lock
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值