当前位置: 首页 > 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;那…...

谷歌开发者大会2026:Gemini全面升级,重塑搜索与生活体验!

谷歌开发者大会2026开幕在品尝过「会前甜点」Android Show 之后&#xff0c;真正的重头戏谷歌开发者大会 Google I/O 2026 正式揭开了帷幕。不出所料&#xff0c;在时长接近两个小时的活动中&#xff0c;Gemini 占据了绝对的 C 位。除了更新基础模型和周边能力之外&#xff0c;…...

小白程序员必备:从零基础到大模型实战,这份学习路线图请收藏!

本文结合530名开发者的经验&#xff0c;为AI初学者提供从零基础到项目实战的完整学习路线。核心内容包括&#xff1a;Python编程、数学基础、机器学习、深度学习框架&#xff08;PyTorch&#xff09;、科学计算库&#xff08;NumPy&#xff09;等关键技能&#xff0c;并避开了常…...

独立开发者如何借助Taotoken管理多个AI侧项目

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken管理多个AI侧项目 作为一名独立开发者&#xff0c;同时维护多个使用大模型的小型项目是常态。你可能有…...

AI辅助开发笔记

参考文章 Visual Studio 中的 AI 辅助开发基于Ollama的本地大模型自动化编程实践指南 open-webuiollama ollama 安装 wget https://ollama.com/install.sh sh install.sh # 若网速比较慢&#xff0c;可借助洪荒之力 # proxychains wget https://ollama.com/install.sh # pr…...

【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则

目录 一、为什么需要设计原则&#xff1f; 二、单一职责原则&#xff08;Single Responsibility Principle&#xff09; 违反原则的例子 重构&#xff1a;分离职责 三、开闭原则&#xff08;Open-Closed Principle&#xff09; 违反原则的例子 重构&#xff1a;使用多态&…...

AI教材写作超强攻略:借助工具3天完成25万字,低查重有保障!

许多教材编写者常常感到遗憾&#xff0c;尽管他们花费大量时间打磨正文内容&#xff0c;但缺乏配套资源却使得教学效果受限。想要设计出有层次的课后练习&#xff0c;却常常缺少创新的想法&#xff1b;虽然希望制作直观的教学课件&#xff0c;但又缺乏相关的技术能力&#xff1…...

从2023蓝桥杯JavaB组省赛真题看算法思维与实战技巧

1. 从真题看算法思维培养 去年参加蓝桥杯省赛时&#xff0c;我对着那道阶乘求和题足足愣了十分钟。题目要求计算1!到202320232023!的和的最后9位数字&#xff0c;我第一反应就是暴力计算每个阶乘值再累加。结果刚算到20!就发现long类型溢出了&#xff0c;当时整个人都懵了。后来…...

Claude Code 上下文管理机制深度拆解:超长 Agent 任务如何不崩盘

在一个真正复杂的企业级软件设计与编码任务里,Coding Agent 面对的从来不是一句简单的“帮我写个小游戏”。 它要理解用户的原始需求,要读取项目里的既有代码,要遵守架构约束、编码规范、接口协议,还要调用各种工具、加载不同的技能和规则,甚至记住用户十分钟前随口补充的…...

告别Office风格审美疲劳:用SARibbon给你的Qt应用换个WPS范儿的清爽界面

告别Office风格审美疲劳&#xff1a;用SARibbon给你的Qt应用换个WPS范儿的清爽界面 在软件开发领域&#xff0c;界面设计往往决定了用户的第一印象。对于使用Qt框架开发桌面应用的程序员来说&#xff0c;Ribbon界面已经成为现代办公软件的标配。然而&#xff0c;传统的Office风…...

MPh 开源项目教程

MPh 开源项目教程 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 项目介绍 MPh 是一个基于 Python 的强大开源项目&#xff0c;旨在简化数学物理问题的求解过程。它结合了符号计算的灵活…...