LAMP架构详解+构建LAMP平台之Discuz论坛
LAMP架构详解+构建LAMP平台之Discuz论坛
- 1、LAPM架构简介
- 1.1动态资源与语言
- 1.2LAPM架构得组成
- 1.3LAPM架构说明
- 1.4CGI和astcgi
- 1.4.1CGI
- 1.4.2fastcgi
- 1.4.3CGI和fastcgi比较
- 2、搭建LAMP平台
- 2.1编译安装apache httpd
- 2.2编译安装mysql
- 2.3编译安装php
- 2.4安装论坛
1、LAPM架构简介
1.1动态资源与语言
WEB资源类型:
- 静态资源:原始形式与响应内容一致,在客户端浏览器执行
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
范例:静态资源
vim test.html
#客户端主机现在的时间:
<script type="text/javascript">
document.write(new Date());
</script>
1.2LAPM架构得组成
- L:linux
- A:apache (httpd)
- M:mysql, mariadb
- P:php, perl, python
1.3LAPM架构说明
工作过程:
1、当客户端请求的是静态资源时,web服务器会直接把静态资源返回给客户端
2、当客户端请求的是动态资源时,http的php模块会进行相应的动态资源运算,如果此过程还需要数据的数据作为运算参数时,php会连接mysql取得数据然后进行运算,运算结果转为静态资源由web服务器返回到客户端。
apache主要实现如下功能:
- 第一:处理http的请求、构建响应报文等自身服务;
- 第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
- 第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。
mysql 主要实现如下功能:
- 第一:提供PHP程序对数据的存储;
- 第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。
php主要实现如下功能:
- 第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
- 第二:提供PHP程序的解释器;
- 第三:提供mysql数据库的连接函数的基本环境。
1.4CGI和astcgi
1.4.1CGI
CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
请求流程:
Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql
1.4.2fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出
请求流程:
Client – (http协议) --> httpd – (fastcgi协议) --> fastcgi服务器 – (mysql协议) --> mysql
1.4.3CGI和fastcgi比较
CGI: 兼职, 一次性的过河拆桥式的服务
FASTCGI: 专职,全周期的持续式的服务
2、搭建LAMP平台
2.1编译安装apache httpd
关闭防火墙
systemctl disable --now firewalld #开机自动关闭防火墙
setenforce 0
安装环境依赖包
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre //安装依赖环境包
拷贝软件包
[root@localhost /]# cd data
[root@localhost data]#
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# rz -E
rz waiting to receive.
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
解压软件包
[root@localhost data]# tar xf apr-1.6.2.tar.gz
[root@localhost data]# tar xf apr-util-1.6.0.tar.gz
[root@localhost data]# tar xf httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中
[root@localhost data]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@localhost data]#
[root@localhost data]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29 httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# cd httpd-2.4.29
[root@localhost httpd-2.4.29]#
编译安装
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make -j2&&make install
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
//将文件拷入/etc/init.d/httpd
ln -s /usr/local/httpd/conf/httpd.conf /etc/
//建立配置文件软连接放入etc目录下
ln -s /usr/local/httpd/bin/* /usr/local/bin/
//将启动文件放入/usr/local/bin/目录下可以直接使用
添加httpd系统服务
vim /etc/init.d/httpd //进入配置文件
在开头行加入
# chkconfig: 35 85 21 //35级别自动运行 第85个启动 第21个关闭
chkconfig --add httpd //将httpd加入service管理器
vim /usr/local/httpd/conf/httpd.conf //#修改主机地址
service httpd start //启动httpd服务
在浏览器输入ip地址,发现http启动成功
2.2编译安装mysql
解压安装包
[root@localhost httpd-2.4.29]# cd /data
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29 httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# rz -E
rz waiting to receive.
[root@localhost data]# ls
apr-1.6.2.tar.gz httpd-2.4.29 mysql-boost-5.7.20.tar.gz
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]# tar xf mysql-boost-5.7.20.tar.gz
[root@localhost data]# ls
apr-1.6.2.tar.gz httpd-2.4.29 mysql-5.7.20
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 mysql-boost-5.7.20.tar.gz
[root@localhost data]#
[root@localhost data]#
安装依赖包
yum install -y ncurses-devel autoconf cmake
[root@localhost data]# cd mysql-5.7.20/
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]# ls
boost dbug libmysql rapid testclients
BUILD Docs libmysqld README unittest
client Doxyfile-perfschema libservices regex VERSION
cmake extra man scripts vio
CMakeLists.txt include mysql-test sql win
cmd-line-utils INSTALL mysys sql-common zlib
config.h.cmake libbinlogevents mysys_ssl storage
configure.cmake libbinlogstandalone packaging strings
COPYING libevent plugin support-files
[root@localhost mysql-5.7.20]#
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
//配置编译选项
make -j2 && make install
[root@localhost mysql-5.7.20]# useradd -s /sbin/nologin mysql
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql/
vim /etc/my.cnf[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf
[root@localhost mysql-5.7.20]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile //加入PATH中,使其可以补全
[root@localhost mysql-5.7.20]# echo 'export PATH' >> /etc/profile //声明这个变量为全局变量
[root@localhost mysql-5.7.20]# cd /usr/local/mysql/
[root@localhost mysql]#
[root@localhost mysql]#
[root@localhost mysql]# bin/mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
[root@localhost mysql]# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@localhost mysql]#
[root@localhost mysql]# systemctl daemon-reload
[root@localhost mysql]#
[root@localhost mysql]#
[root@localhost mysql]# systemctl start mysqld.service
[root@localhost mysql]#
[root@localhost mysql]# netstat -anpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 77743/mysqld
mysqladmin -u root -p password "abc123" //刚开始没密码是空的直接回车,然后输入密码abc123,在此确认abc123,这是在root账户下运行的
quit; //退出
2.3编译安装php
安装依赖环境
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
配置软件模块
cd /data
tar xf php-7.1.10.tar.bz2
cd /opt/php-7.1.10/./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
make -j2 && make install //编译与安装
cp /data/php-7.1.10/php.ini-development /usr/local/php7/php.ini
//复制模版文件作为PHP 的主配置文件,并进行修改
vim /usr/local/php7/php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock --1170行--修改 1170 G,大写的G,直接跳转
date.timezone = Asia/Shanghai --939行
ln -s /usr/local/php7/bin/* /usr/local/bin/
把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别
php -m //查看PHP 加载了哪些模块
vim /etc/httpd.conf //修改httpd 服务的配置文件,让apache支持PHP
AddType application/x-httpd-php .php --393行--插入以下内容(插在下面,原行不删)
AddType application/x-httpd-php-source .phps ##这里的点前面空格一定要加,否则报错
DirectoryIndex index.html index.php --255行--修改首页文件名设置
验证PHP 测试页
vim /usr/local/httpd/htdocs/index.php //进入配置文件
添加
<?php
phpinfo();
?>
systemctl restart httpd
2.4安装论坛
[root@localhost data]# mysql -u root -p
Enter password:
mysql> CREATE DATABASE bbs; //创建一个数据库//mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; //把bbs数据库里面所有表的权限授予给bbsuser,并设置密码//
show databases;//查看是否创建成功
select user,host from mysql.user;
unzip /opt/Discuz_X3.4_SC_UTF8.zip
cp -r upload/ /usr/local/httpd/htdocs/bbscd /usr/local/httpd/htdocs/bbschown -R daemon ./config
chown -R daemon ./data
chown -R daemon ./uc_client
chown -R daemon ./uc_server/data
在浏览器输入192.168.190.254/bbs
相关文章:

LAMP架构详解+构建LAMP平台之Discuz论坛
LAMP架构详解构建LAMP平台之Discuz论坛 1、LAPM架构简介1.1动态资源与语言1.2LAPM架构得组成1.3LAPM架构说明1.4CGI和astcgi1.4.1CGI1.4.2fastcgi1.4.3CGI和fastcgi比较 2、搭建LAMP平台2.1编译安装apache httpd2.2编译安装mysql2.3编译安装php2.4安装论坛 1、LAPM架构简介 1.…...

如何使用腾讯云服务器搭建网站?新手建站教程
使用腾讯云服务器搭建网站全流程,包括轻量应用服务器和云服务器CVM建站教程,轻量可以使用应用镜像一键建站,云服务器CVM可以通过安装宝塔面板的方式来搭建网站,腾讯云服务器网分享使用腾讯云服务器建站教程,新手站长搭…...
mybatis plus 控制台和日志文件中打印sql配置
1 控制台输出sql 配置mybatis-plus的日志实现类为StdOutImpl,该实现类中打印日志是通过System.out.println(s)的方式来打印日志的 mybatis-plus:configuration:log-impl: org.apache.imbatis.logging.stdout.StdOutImpl2 日志文件中写入sql 日志文件中输入sql需要…...

苍穹外卖总结
前言 1、软件开发流程 瀑布模型需求分析//需求规格说明书、产品原型↓ 设计 //UI设计、数据库设计、接口设计↓编码 //项目代码、单元测试↓ 测试 //测试用例、测试报告↓上线运维 //软件环境安装、配置第一阶段:需求分析需求规格说明书、产品原型一般来说…...
Git 删除已经合并的本地分支
在使用 Git 的开发流程中,经常会创建很多的 Git 分支,包括功能分支(features/*)、发布分支(release/*)和 hotfix 分支(hotfix/*)。在开发了一段时间之后,本地就会有出现很…...

递归算法应用(Python版)
文章目录 递归递归定义递归调用的实现递归应用数列求和任意进制转换汉诺塔探索迷宫找零兑换-递归找零兑换-动态规划 递归可视化简单螺旋图分形树:自相似递归图像谢尔宾斯基三角 分治策略优化问题和贪心策略 递归 递归定义 递归是一种解决问题的方法,其精…...

有什么react进阶的项目推荐的?
前言 整理了一些react相关的项目,可以选择自己需要的练习,希望对你有帮助~ 1.ant-design Star:87.1k 阿里开源的react项目,作为一个UI库,省去重复造轮子的时间 仓库地址:https://github.com/ant-design/…...

基于串口透传模块,单片机无线串口空中下载测试
基于串口透传模块,单片机无线串口空中下载测试 ✨无线串口下载,其本质还是串口下载方式,只不过省去了单片机和ISP上位机工具之间的物理有线连接,中间的数据通过无线串口透传模块进行数据中转,传递到单片机串口上。串口…...

研磨设计模式day11代理模式
目录 场景 代码实现 编辑 解析 定义 代理模式调用示意图 代理模式的特点 本质 编辑何时选用 场景 我有一个订单类,包含订单数、用户名和商品名,有一个订单接口包含了对订单类的getter和setter 现在有一个需求,a创建的订单只…...

vue2 路由进阶,VueCli 自定义创建项目
一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…...

《C语言编程环境搭建》工欲善其事 必先利其器
C语言编译器 GCC 系列 GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,常被认为是跨平台编译器的事实标准。原名是:GNU C语言编译器(GNU C Compiler)。 MinGW 又称mingw32 ,…...

蓝蓝设计ui设计公司作品案例-中节能现金流抗压测试软件交互及界面设计
中国节能是以节能环保为主业的中央企业。中国节能以生态文明建设为己任,长期致力于让天更蓝、山更绿、水更清,让生活更美好。经过多年发展,中国节能已构建起以节能、环保、清洁能源、健康和节能环保综合服务为主业的41产业格局,成…...

汽车制造业外发文件时 如何阻断泄密风险?
汽车制造业是我国国民经济发展的支柱产业之一,具有产业链长、关联度高、就业面广、消费拉动大等特性。汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。 汽车制造业产业链长,关联度高,汽车制造上游行业主要为钢铁、化工…...

怎么对App进行功能测试
测试人员常被看作是bug的寻找者,但你曾想过他们实际是如何开展测试的吗?你是否好奇他们究竟都做些什么,以及他们如何在一个典型的技术项目中体现价值?本文将带你经历测试人员的思维过程,探讨他们测试app时的各种考虑. …...
数字流的秩、单词频率(哈希实现)
题目1:数字流的秩 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法…...

【洛谷】P2678 跳石头
原题链接:https://www.luogu.com.cn/problem/P2678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。(使用二分需要满足两个条件。一个是有界,一个是单调。 这题的题面:使得选手们在比赛过程中…...

Elasticsearch配置优化
以下的优化基础是安装的 Elasticsearch 版本为 7.17.7,同时jdk版本为 1.8.321 1、jvm参数优化 这里说的jvm参数调优,是指elasticsearch安装目录下的jvm.options配置,如下图所示: 这里调整的内容主要是调整垃圾回收的收集器&#…...
Springboot整合minio组件-分布式文件存储
一、快速开始 Minlo说明: Minio是Apcche旗下的一款开源的轻量级文件服务器,基于对象存储,协议是基于Apache License v2.0,开源可用于商务。Minio主要用来存储非结构化的数据,类似文件,图片,照…...

多态/虚函数/虚函数表
OVERVIEW 多态/虚函数/虚函数表1.虚函数引入后类发生的变化?2.虚函数表的生成时机和生成原因?3.虚函数表指针赋值的时机?4.类对象在内存中的布局?5.虚函数的工作原理和多态性的体现?6.其他问题 多态/虚函数/虚函数表 n…...

QT中按钮的基类QAbstractButton
QT中按钮的基类QAbstractButton 关于控件类的学习方法继承关系信号槽函数标题和图标按钮的 Check 属性 关于控件类的学习方法 控件类很多,API更多,但是不需要记忆知道控件对应的类名,通过帮助文档随用随查优先看帮助文档中控件对应的信号和槽…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...