当前位置: 首页 > java >正文

LNMP搭建discuz论坛

一、前导原理

浏览器在访问网页时,会发起静态请求,之后请求会转发到Nginx服务器,最终将静态数据响应给用户浏览器,但如果接收的是动态请求,会通过后端tomcta或者php-fpm服务,进行动态数据请求的处理,两者之间采用的协议是fastcgi协议,如果此时还有动态数据变化的话,那么就必须接触到数据持久层的业务了,这里与数据库打交道的话,通常会接触到数据库驱动(php-redis,php-mysqlnd)来将数据返回给后端,最终后端数据将被打到前端Nginx服务处理

二、前置环境准备

10.0.0.5Nginx配置
10.0.0.6php-fpm、MYSQL(主机)
10.0.0..7php-fpm、MYSQL(从机)

三、实验操作

  • 运行环境准备

## 数据库程序的安装(前置准备yum源已完成配置)
yum -y install mysql-server mysql## php搭建工作
yum -y install php-fpm php-mysqlnd## Nginx安装
yum -y install nginx
  • mysql主从复制

若主库已经打开了二进制日志,首先需要在从库打开start slave,此时从库会自动打开I/O线程,记录二进制日志的名称和position点位情况,slave节点接受到数据之后会将二进制日志数据和更新的position位置更新到slave的relay_log日志的末端,当slave节点i/o线程检测到数据库文件信息发生更改之后,relay_log在master中接收到的数据会在slave数据中进行同步

## 确定主库增加log-bin日志和server信息
vim /etc/my.cnf.d/mysql-server.cnf## 加入主库配置信息
server-id=6
log-bin=mysql-bin## 加入从库配置信息
server-id=7## 重启mysql服务
systemctl start mysqld 配置主节点    
CHANGE MASTER TO
MASTER_HOST='10.0.0.6',
MASTER_USER='jfedu',
MASTER_PASSWORD='aaaAAA111.',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=899;

  • 修改Nginx配置文件

## 修改配置文件信息
vim /etc/nginx/nginx.conf.default## 用模板配置文件覆盖原配置文件
cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf## 测试是否报错
nginx -t##启动服务
systemctl start nginx.service
systemctl start php-fpm## 检查端口是否暂用服务
netstat -tnlp | grep 9000##在php-fpm端添加一个配置文件
cat info.php 
<?php
phpinfo();
?>

nginx.conf配置文件需要修改的地方

完成了初步的搭建

【注意】目前在php目录和nginx的html目录下有相同的配置文件,作用上使用的是不同情况下的动静分离效果

如果要使用php文件,就要放到后端php-fpm中,并且php配置文件信息的修改也要进行修改(两处地方都要进行修改)

vim /etc/php-fpm.d/www.conf;!sys;

当浏览器访问出现了如下页面即完成了LNMP的搭建

【注意】:其实html的公用路径也可以通过/usr/share/nginx/html也可以放在nfs机器上统一实现版本发布

具体实现步骤如下

# 安装nfs安装插件
[root@localhost ~]# yum -y install nfs-utils
# 创建文件共享目录(将html源码文件放到此目录)
[root@localhost ~]# mkdir -p /data/discuz/
# 对外共享文件
vim /etc/exports
/data/discuz *(rw,sync,no_root_squash)
# 重启nfs服务
systemctl restart nfs
# 将nfs共享目录进行挂载(客户端需要安装nfs-util)
mount -t nfs 10.0.0.5:/data/discuz /usr/share/nginx/html/

完成redis部署

## 下载并解压PHP-redis压缩包
tar -zxvf phpredis-6.0.2.tar.gz## 有与源码编译使用了.configure------->phpize
yum provides phpize
yum -y install php-cli## 使用phpize还会报错--->缺乏依赖
yum -y install php php-devel## 执行phpize
./configure --help | more
./configure --with-php-config=/usr/bin/php-config --enable-redis## 编译
make -j4 install## 在php.ini末尾加入以下内容(只是php与redis服务连接的接口)
extension="/usr/lib64/php/modules/redis.so"## 重启服务
systemctl restart php-fpm

redis完成安装后的部署图

导入论坛源码文件

## 准备日期文件,做好时间同步
yum -y install ntpdate
ntpdate pool.ntp.org
mkdir `date +%F`
unzip Discuz_X3.5_SC_UTF8_20231001.zip ## 将静态文件放在nginx的html目录,动态文件放在php的html目录下
## 将upload目录到html目录
\cp * /usr/share/nginx/html/ -a
scp -r /usr/share/nginx/html/upload/* 10.0.0.6:/usr/share/nginx/html/## 文件权限操作
chown -R apache.apache config/  data/ uc_*## 缺乏php-fpm库存
yum -y install php-xml## 在主库中创建用户
create user jfedu@'%' identified by 'aaaAAA111.';
grant all on *.* to jfedu@'%';
flush privileges;

论坛页面信息的填写

访问进去之后出现了css资源无法访问问题

原因分析由于Nginx负载均衡原因,当去均衡池中去取数据时,会依据其轮询的原理来均分去取机器,这样就导致数据在另一台均衡机器不能写入,通常情况下会使用ip_hash来保持会话原则

解决方案:scp -r /usr/share/nginx/html/data/cache/* 10.0.0.5:/usr/share/nginx/html/data/cache/

注意:三台机器都要有该静态文件(主要.5设备处理静态数据)

安装完成后的效果如下:

退出后数据长时间加载不出来(data目录缺少权限)

chown -R apache /usr/share/nginx/html/data/ 

在nginx.conf文件中配置的均衡池中配置ip_hash,即可防止nginx设备轮询跳转。

加入之后图片就能够正常显示了

LNMP+Redis环境结合部署

  • 工作原理

当用户通过浏览器输入用户名和密码访问我们的Lnmp网页时,默认情况下redis不会进行数据的缓存,而是通过php-fpm进行mysql数据的存储,但是之后再同样输入用户名和密码就直接会在redis去找键值对,然而就能更快获取数据,不会再次经过mysql了,从而就能减轻后台数据库的访问压力了

  • 准备工作

关于LNMP网站中存入Redis,需要有redis服务器、redis连接驱动、配置修改操作

LNMP服务器10.0.0.5
Redis主库10.0.0.7
Redis从库10.0.0.6
  • 实验步骤
## 由于redis.so仅仅是php与redis服务连接的端口
## 所以这里还应当安装redis服务端## yum安装redis[root@localhost html]# yum -y install redis## 重启redis服务[root@localhost html]# service redis start## 检查redis进程
ps -ef | grep redis## 修改redis配置文件
vim /etc/redis.conf
bind 0.0.0.0## 配置主从库
## 从库加入配置信息(replicaof 10.0.0.6 6379),然后进行测试
redis-cli
  • 修改redis.conf配置

  • php-redis配置文件修改

重启redis服务

nohup /usr/bin/redis-server /etc/redis.conf &

此时redis已经能与php-fpm后端正常建立连接了

Redis主从模式搭建

【原理】:Redis进行主从复制时,当用户往master端写入数据时,会通过Redis-Sync机制往slave数据文件中发送数据,slave也会以相同的方式往数据库中存入数据,同时slave中还可以开启二级slave、三级slave从库,具体原理图如下:

修改Maste和Slaver主配置文件

## 主库信息添加
bind 0.0.0.0
protected-mode no## 从库一定要加入主库信息
replicaof 10.0.0.7 6379

http://www.xdnf.cn/news/14849.html

相关文章:

  • 力扣 hot100 Day36
  • 系统架构设计师论文分享-论软件体系结构的演化
  • C++ 模板宏相关
  • 力扣网编程45题:跳跃游戏II之正向查找方法(中等)
  • 容声W60以光水离子科技实现食材“主动养鲜”
  • 爬虫-协议基础
  • XHTML 简介
  • 使用LIMIT + OFFSET 分页时,数据重复的风险
  • Spring Bean 控制销毁顺序的方法总结
  • stm32的三种开发方式
  • js游戏简单修改
  • 【每天一个知识点】子空间聚类(Subspace Clustering)
  • SpringCloud系列(50)--SpringCloud Stream消息驱动之实现消费者
  • Python Async/Await 异步编程详解
  • <script setup>中的setup作用以及和不带的区别对比
  • 【UnityAssetBundle】异步加载
  • 【ESP32-IDF笔记】09-UART配置和使用
  • 基于大模型的领域知识图谱构建--python语言实现
  • Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
  • 二叉树题解——二叉搜索树中第 K 小的元素【LeetCode】使用外部变量ans记录答案
  • MyChrome.exe与Selenium联动避坑指南:User Data目录冲突解决方案
  • 60天python训练营打卡day52
  • Python gmssl.SM4使用案例
  • 动手学深度学习-学习笔记(总)
  • IDEA中application.yml配置文件不自动提示解决办法
  • 运算方法和运算器补充
  • 【AI大模型面试八股文】大模型训练中如何应对灾难性遗忘问题?
  • Swagger 安装使用教程
  • RabbitMQ 4.1.1初体验
  • 一个简单的分布式追踪系统