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

服务器硬件、部署LNMP动态网站、部署wordpress、配置web与数据库服务分离、配置额外的web服务器

day01

day01项目实战目标单机安装基于LNMP结构的WordPress网站基本环境准备配置nginx配置数据库服务部署wordpressweb与数据库服务分离准备数据库服务器迁移数据库配置额外的web服务器

项目实战目标

 

image-20230103162040585

主机名IP地址
client01192.168.88.10/24
web1192.168.88.11/24
web2192.168.88.12/24
web3192.168.88.13/24
database192.168.88.21/24
nfs192.168.88.31/24
haproxy01192.168.88.5
haproxy02192.168.88.6

单机安装基于LNMP结构的WordPress网站

基本环境准备

  • 创建虚拟机,并配置防火墙、SELINUX、主机名、IP地址、yum
[root@myhost ~]# vm clone web1    # 克隆一台虚拟机
[root@myhost ~]# vm setip web1 192.168.88.11   # 设置ip地址
  • 配置ansible管理环境
# 1. 创建工作目录
[root@pubserver ~]# mkdir -p project01/files
[root@pubserver ~]# cd project01/
 
# 2. 创建主配置文件、主机清单文件、yum配置文件
[root@pubserver project01]# vim ansible.cfg 
[defaults]
inventory = inventory
host_key_checking = false
 
[root@pubserver project01]# vim inventory 
[webservers]
web1 ansible_host=192.168.88.11
 
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a
 
[root@pubserver project01]# vim files/local88.repo 
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0
 
[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0
 
[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0
  • 配置yum服务
[root@pubserver project01]# vim 01-upload-repo.yml 
---
- name: config repos.d
  hosts: all
  tasks:
    - name: delete repos.d
      file:
        path: /etc/yum.repos.d
        state: absent
 
    - name: create repos.d
      file:
        path: /etc/yum.repos.d
        state: directory
        mode: '0755'
 
    - name: upload local88
      copy:
        src: files/local88.repo
        dest: /etc/yum.repos.d/
 
[root@pubserver project01]# ansible-playbook 01-upload-repo.yml 

配置nginx

  • 配置web1服务
[root@pubserver project01]# vim 02-config-web1.yml 
---
- name: config web1
  hosts: webservers
  tasks:
    - name: install pkgs   # 安装软件包
      yum:
        name:
          - nginx
          - mysql-server
          - php-mysqlnd
          - php-fpm
          - php-json
        state: present
 
    - name: start service   # 循环启动多个服务
      service:
        name: "{{item}}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm
        - mysqld
[root@pubserver project01]# ansible-playbook 02-config-web1.yml
  • 编写php文件,并访问http://192.168.88.11/测试
 
[root@web1 ~]# vim /usr/share/nginx/html/index.php
<?php
    phpinfo();
?>

image-20230103103651841

  • 测试完成后,删除文件

 

[root@web1 ~]# rm -f /usr/share/nginx/html/index.php 

配置数据库服务

  • 安装Wordpress网站,需要数据库,创建数据库并授权
# 1. 编写用于创建数据库和用户的脚本
[root@pubserver project01]# vim files/config_mysql.sh
#!/bin/bash
 
mysql -e "create database wordpress character set utf8mb4"
mysql -e "create user wpuser01@localhost identified by 'wordpress'"
mysql -e "grant all privileges on wordpress.* to wpuser01@localhost"
 
# 2. 通过ansible的script模块执行脚本
[root@pubserver project01]# vim 03-config-mysql.yml 
---
- name: config mysql
  hosts: web1
  tasks:
    - name: create database
      script: files/config_mysql.sh
 
[root@pubserver project01]# ansible-playbook 03-config-mysql.yml
 
# 3. 测试账号,如果可以成功登陆mysql,则数据库和用户创建正确
[root@web1 ~]# mysql -uwpuser01 -pwordpress -hlocalhost wordpress

部署wordpress

  • 复制程序文件到nginx工作目录
# 1. 拷贝wordpress到web1
[root@myhost ~]# scp /linux-soft/s2/zzg/project01_soft/wordpress-6.1.1-zh_CN.tar.gz 192.168.88.11:/root/
 
# 2. 解压并复制文件到nginx文档目录
[root@web1 ~]# tar xf wordpress-6.1.1-zh_CN.tar.gz  
[root@web1 ~]# cp -r wordpress/* /usr/share/nginx/html/
 
# 3. php程序是由php-fpm处理的,php-fpm以apache身份运行
[root@web1 ~]# ps aux | grep php-fpm
root        5655  0.0  0.4 395620 19056 ?        Ss   12:13   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache      5670  0.0  0.3 412108 13812 ?        S    12:13   0:00 php-fpm: pool www
 
# 4. 为了让php-fpm程序能对html目录进行读写操作,需要为他授予权限
[root@web1 ~]# chown -R apache:apache /usr/share/nginx/html/
  • 访问http://192.168.88.11/,根据提示进行初始化

 

 

image-20230103153931380

image-20230103154001992

image-20230103154016347

image-20230103154107770

image-20230103154125935

image-20230103154154974

image-20230103154228838

image-20230103154255291

注意:注销登陆后,如果再次登陆,需访问http://192.168.88.11/wp-login.php

 

web与数据库服务分离

准备数据库服务器

  • 初始化:配置防火墙、SELINUX、主机名、IP地址

 

# 1. 创建虚拟机并登陆
[root@myhost ~]# vm clone database
[root@myhost ~]# vm setip database 192.168.88.21
  • 修改ansible配置环境
 
[root@pubserver project01]# vim inventory 
[webservers]
web1 ansible_host=192.168.88.11
 
[dbs]
database ansible_host=192.168.88.21
 
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a
  • 配置数据库服务器
# 1. 修改yum配置
[root@pubserver project01]# ansible-playbook 01-upload-repo.yml 
 
# 2. 安装数据库服务,并创建数据库及用户
[root@pubserver project01]# vim files/config_mysql2.sh
#!/bin/bash
  
mysql -e "create database wordpress character set utf8mb4"
mysql -e "create user wpuser01@'%' identified by 'wordpress'"
mysql -e "grant all privileges on wordpress.* to wpuser01@'%'"
 
[root@pubserver project01]# vim 04-config-database.yml
---
- name: config database
  hosts: dbs
  tasks:
    - name: install mysql    # 安装数据库服务
      yum:
        name: mysql-server
        state: present
 
    - name: start service    # 启动数据库服务
      service:
        name: mysqld
        state: started
        enabled: yes
 
    - name: create database
      script: files/config_mysql2.sh
 
[root@pubserver project01]# ansible-playbook 04-config-database.yml 

迁移数据库

  • 发布停服更新通知

image-20230103160710188

image-20230103160840729

  • 注意:默认的wordpress对中文标题支持有bug,需要修改源码修复bug。或者更改【固定链接】配置,如下:

 

image-20230104112708594

  • 迁移数据库

 

# 1. 在源服务器上备份数据库中的数据。备份数据库wordpress中的数据到wordpress.sql文件
[root@web1 ~]# mysqldump wordpress > wordpress.sql
 
# 2. 将备份文件拷贝到新数据库服务器
[root@web1 ~]# scp wordpress.sql 192.168.88.21:/root/
 
# 3. 在新数据库服务器上,导入数据。将wordpress.sql中的数据导入到wordpress数据库中
[root@database ~]# mysql wordpress < wordpress.sql 
 
# 4. 修改php网站,将数据库服务器地址,指向新数据库服务器
[root@web1 ~]# vim /usr/share/nginx/html/wp-config.php 
...略...
 31 /** Database hostname */
 32 define( 'DB_HOST', '192.168.88.21' );
...略...
# 5. 停止web1上的数据库服务,wordpress网站仍然可以访问
[root@web1 ~]# systemctl stop mysqld
[root@web1 ~]# yum remove -y mysql-server
 
# 6. 停止database上的数据库服务,wordpress将不能访问
  • 查询数据库中的内容
[root@database ~]# mysql   # 打开mysql命令行
mysql> show databases;     # 查看有哪些数据库
mysql> use wordpress;      # 切换到wordpress数据库
mysql> show tables;        # 查看wordpress库中有哪些表
mysql> select * from wp_posts\G  # 查看wp_posts表中的内容

配置额外的web服务器

  • 初始化
[root@myhost ~]# vm clone web{2..3}
[root@myhost ~]# vm setip web2 192.168.88.12
[root@myhost ~]# vm setip web3 192.168.88.13
  • 修改ansible配置
[root@pubserver project01]# vim inventory 
[webservers]
web1 ansible_host=192.168.88.11
web2 ansible_host=192.168.88.12
web3 ansible_host=192.168.88.13
 
[dbs]
database ansible_host=192.168.88.21
 
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a
  • 配置web服务
# 1. 配置yum
[root@pubserver project01]# ansible-playbook 01-upload-repo.yml 
 
# 2. 配置web服务器
[root@pubserver project01]# vim 05-config-webservers.yml 
---
- name: config webservers
  hosts: webservers
  tasks:
    - name: install pkgs    # 安装软件包
      yum:
        name:
          - nginx
          - php-mysqlnd
          - php-fpm
          - php-json
        state: present
 
    - name: start service   # 循环启动多个服务
      service:
        name: "{{item}}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm
 
 [root@pubserver project01]# ansible-playbook 05-config-webservers.yml
  • 将web1的html目录打包并下载
 

 
[root@pubserver project01]# vim 06-fetch-web1.yml 
---
- name: copy web
  hosts: web1
  tasks:
    - name: compress html    # 压缩html目录到/root下
      archive:
        path: /usr/share/nginx/html
        dest: /root/html.tar.gz
        format: gz
 
    - name: download html    # 下载压缩文件
      fetch:
        src: /root/html.tar.gz
        dest: files/
        flat: yes
 
[root@pubserver project01]# ansible-playbook 06-copy-web.yml 
  • 释放html压缩包到web2和web3上
 

 
[root@pubserver project01]# vim 07-deploy-web23.yml
---
- name: deploy web2 and web3
  hosts: web2,web3
  tasks:
    - name: unarchive to web    # 解压文件到指定位置
      unarchive:
        src: files/html.tar.gz
        dest: /usr/share/nginx/
 
[root@pubserver project01]# ansible-playbook 07-deploy-web23.yml
  • 访问http://192.168.88.12/和http://192.168.88.13/将会得到与http://192.168.88.11/相同的页面

相关文章:

服务器硬件、部署LNMP动态网站、部署wordpress、配置web与数据库服务分离、配置额外的web服务器

day01 day01项目实战目标单机安装基于LNMP结构的WordPress网站基本环境准备配置nginx配置数据库服务部署wordpressweb与数据库服务分离准备数据库服务器迁移数据库配置额外的web服务器 项目实战目标 主机名IP地址client01192.168.88.10/24web1192.168.88.11/24web2192.168.88…...

面试总被问高并发负载测试,你真的会么?

本文将介绍使用50K并发用户测试轻松运行负载测试所需的步骤&#xff08;以及最多200万用户的更大测试&#xff09;。 ❶ 写你的剧本 ❷ 使用JMeter在本地测试 ❸ BlazeMeter SandBox测试 ❹ 使用一个控制台和一个引擎设置每引擎用户数量 ❺ 设置和测试群集&#xff08;一个…...

ARP协议请求

文章目录 作用请求与应答流程数据包ARP协议以太网帧协议具体应用 作用 通过 IP地址 查找 MAC地址。 请求与应答流程 A&#xff1a;数据发送主机 B&#xff1a;目标主机 目前只知道目标主机IP地址&#xff0c;想把数据发送过去&#xff0c;需要查询到目标主机的MAC地址&#x…...

前端小练-仿掘金导航栏

文章目录 前言项目结构导航实现创作中心移动小球消息提示 完整代码 前言 闲的&#xff0c;你信嘛&#xff0c;还得开发一个基本的门户社区网站&#xff0c;来给到Hlang,不然我怕说工作量不够。那么这个的话&#xff0c;其实也很好办&#xff0c;主要是这个门户网站的UI写起来麻…...

PDF.js实现搜索关键词高亮显示效果

在static\PDF\web\viewer.js找到定义setInitialView方法 大约是在1202行&#xff0c;不同的pdf.js版本不同 在方法体最后面添加如下代码&#xff1a; // 高亮显示关键词---------------------------------------- var keyword new URL(decodeURIComponent(location)).searchP…...

Linux服务器安装JDK20

一、下载安装包 访问官网&#xff0c;找到JDK20&#xff0c;复制下载链接 我复制的链接是&#xff1a;JDK20 二、Linux服务器操作 1.服务器根目录下创建一个新的文件夹 cd /mkdir jdkscd /jdks2.将下载好的jdk-20上传到jdks下 3.解压缩 tar -zxvf jdk-20_linux-x64_bin.tar…...

vue强制刷新的方法

前言 在开发过程中,有时候会遇到这么一种情况&#xff1a; 1.切换页面页面没有更新 2.通过动态的赋值,但是dom没有及时更新,能够获取到动态赋的值,但是无法获取到双向绑定的dom节点, 这就需要我们手动进行强制刷新组件,下面这篇文章主要给大家介绍了关于vue组件强制刷新的方案…...

Linux下TCP网络服务器与客户端通信程序入门

文章目录 目标服务器与客户端通信流程TCP服务器代码TCP客户端代码 目标 实现客户端连接服务器&#xff0c;通过终端窗口发送信息给服务器端&#xff0c;服务器接收到信息后对信息数据进行回传&#xff0c;客户端读取回传信息并返回。 服务器与客户端通信流程 TCP服务器代码 …...

第九章:SSM整合

第九章&#xff1a;SSM整合 9.1&#xff1a;ContextLoaderListener ​ Spring提供了监听器ContextLoaderListener&#xff0c;实现ServletContextListener接口&#xff0c;可监听ServletContext的状态&#xff0c;在web服务器的启动&#xff0c;读取Spring的配置文件&#xf…...

shell脚本部署springboot

#!/bin/bashecho "$1 jar包名称&#xff0c;$2 运行环境 " echo "reload jar: $1 env: $2 " if [ -z $1 ];thenecho "请输入jar包名称......." elseecho "停止开始......."IDps -ef | grep "$1" | grep -v "grep"…...

每日一道面试题之Iterator 和 ListIterator 有什么区别?

Iterator 和 ListIterator 都是 Java 集合框架中用于遍历集合元素的接口&#xff0c;但它们有一些区别: 使用的范围&#xff1a;Iterator可以迭代所有集合,而ListIterator 只能用于List及其子类。 继承关系&#xff1a;ListIterator 继承 Iterator&#xff0c;并且ListIterat…...

基于图像形态学处理的停车位检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 图像预处理 4.2. 车辆定位 4.3. 停车位检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ......................................…...

【网络编程】同步IO/异步IO

同步IO的特点&#xff1a; 同步IO指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪。 同步IO的执行者是IO操作的发起者。 同步IO需要发起者进行内核态到用户态的数据拷贝过程&#xff0c;所以这里必须阻塞 异步IO的特点&#xff1a; 异步IO是指用户进程触发I/O…...

五分钟理解NIO与BIO

java NIO与BIO的区别&#xff1f; BIO -- Blocking IO 即阻塞式 IO。NIO -- Non-Blocking IO, 即非阻塞式 IO 或异步 IO。 BIO 基于字节流和字符流进行操作&#xff0c;数据的读取写入必须阻塞在一个线程内等待其完成。 NIO 主要有三大核心部分&#xff1a; Channel (通道)…...

Python数据可视化工具——Pyecharts

目录 1 简介绘图前先导包 2 折线图3 饼图4 柱状图/条形图5 散点图6 箱线图7 热力图8 漏斗图9 3D柱状图10 其他&#xff1a;配置项 1 简介 Pyecharts是一款将python与echarts结合的强大的数据可视化工具 Pyecharts是一个用于生成echarts图表的类库。echarts是百度开源的一个数据…...

cjson常用API使用总结

json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于前后端数据传输和存储。在C语言中&#xff0c;我们可以使用cjson库来处理JSON数据。本问总结了在使用cjson库中各个常用API的用法&#xff0c;包括组装JSON&#x…...

Shell脚本学习-case语句开发rsync服务的脚本

利用case语句开发类似系统启动rsync启动服务的脚本。&#xff08;可以参考系统rpcbind、nfs的脚本&#xff09;。 例如&#xff1a; /etc/init.d/rsyncd {start | stop | restart } rsync --daemon pkill rsync [rootvm1 scripts]# cat start_rsync.sh #!/bin/bash #[ -f /…...

使用docker部署一个jar项目

简介: 通过docker镜像, docker可以在服务器上运行包含项目所需运行环境的docker容器, 在线仓库里有很多各个软件公司官方发布的镜像, 或者第三方的镜像. 如果我们需要使用docker把我们的应用程序打包成镜像, 别的机器上只要安装了docker, 就可以直接运行镜像, 而不需要再安装应…...

【Linux命令200例】tee将输入内容输出到屏幕和文件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…...

使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思

前言 本文给大家分享三个具有过渡效果的汉堡图标&#xff0c;当点击汉堡图标时&#xff0c;过渡为叉号图标。这种具有过渡特效的图标挺炫酷的&#xff0c;感觉一下子给网页增加一点新颖特色。早在2015年左右&#xff0c;国外挺多优秀门户网站都有使用类似的图标&#xff0c;那…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...