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

| 主机名 | IP地址 |
|---|---|
| client01 | 192.168.88.10/24 |
| web1 | 192.168.88.11/24 |
| web2 | 192.168.88.12/24 |
| web3 | 192.168.88.13/24 |
| database | 192.168.88.21/24 |
| nfs | 192.168.88.31/24 |
| haproxy01 | 192.168.88.5 |
| haproxy02 | 192.168.88.6 |
单机安装基于LNMP结构的WordPress网站
基本环境准备
- 创建虚拟机,并配置防火墙、SELINUX、主机名、IP地址、yum
- 配置ansible管理环境
虚拟机ip与名称:web1 192.168.88.11
# 1. 创建工作目录[root@pubserver ~]# mkdir -p project01/files[root@pubserver ~]# cd project01/# 2. 创建主配置文件、主机清单文件、yum配置文件[root@pubserver project01]# vim ansible.cfg [defaults]inventory = inventoryhost_key_checking = false[root@pubserver project01]# vim inventory [webservers]web1 ansible_host=192.168.88.11[all:vars]ansible_ssh_user=rootansible_ssh_pass=a[root@pubserver project01]# vim files/local88.repo [BaseOS]name = BaseOSbaseurl = ftp://192.168.88.240/dvd/BaseOSenabled = 1gpgcheck = 0[AppStream]name = AppStreambaseurl = ftp://192.168.88.240/dvd/AppStreamenabled = 1gpgcheck = 0[rpms]name = rpmsbaseurl = ftp://192.168.88.240/rpmsenabled = 1gpgcheck = 0
- 配置yum服务
[root@pubserver project01]# vim 01-upload-repo.yml ---- name: config repos.dhosts: alltasks:- name: delete repos.dfile:path: /etc/yum.repos.dstate: absent- name: create repos.dfile:path: /etc/yum.repos.dstate: directorymode: '0755'- name: upload local88copy:src: files/local88.repodest: /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 web1hosts: webserverstasks:- name: install pkgs # 安装软件包yum:name:- nginx- mysql-server- php-mysqlnd- php-fpm- php-jsonstate: present- name: start service # 循环启动多个服务service:name: "{{item}}"state: startedenabled: yesloop:- 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<?phpphpinfo();?>

- 测试完成后,删除文件
[root@web1 ~]# rm -f /usr/share/nginx/html/index.php
配置数据库服务
- 安装Wordpress网站,需要数据库,创建数据库并授权
# 1. 编写用于创建数据库和用户的脚本[root@pubserver project01]# vim files/config_mysql.sh#!/bin/bashmysql -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 mysqlhosts: web1tasks:- name: create databasescript: 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-fpmroot 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/,根据提示进行初始化








注意:注销登陆后,如果再次登陆,需访问http://192.168.88.11/wp-login.php
web与数据库服务分离
准备数据库服务器
- 初始化:配置防火墙、SELINUX、主机名、IP地址
创建虚拟机并登陆 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=rootansible_ssh_pass=a
- 配置数据库服务器
# 1. 修改yum配置[root@pubserver project01]# ansible-playbook 01-upload-repo.yml # 2. 安装数据库服务,并创建数据库及用户[root@pubserver project01]# vim files/config_mysql2.sh#!/bin/bashmysql -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 databasehosts: dbstasks:- name: install mysql # 安装数据库服务yum:name: mysql-serverstate: present- name: start service # 启动数据库服务service:name: mysqldstate: startedenabled: yes- name: create databasescript: files/config_mysql2.sh[root@pubserver project01]# ansible-playbook 04-config-database.yml
迁移数据库
- 发布停服更新通知


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

- 迁移数据库
# 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服务器
- 初始化:配置防火墙、SELINUX、主机名、IP地址
创建虚拟机并登陆 web2 192.168.88.12 web3 192.168.88.13
- 修改ansible配置
[root@pubserver project01]# vim inventory [webservers]web1 ansible_host=192.168.88.11web2 ansible_host=192.168.88.12web3 ansible_host=192.168.88.13[dbs]database ansible_host=192.168.88.21[all:vars]ansible_ssh_user=rootansible_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 webservershosts: webserverstasks:- name: install pkgs # 安装软件包yum:name:- nginx- php-mysqlnd- php-fpm- php-jsonstate: present- name: start service # 循环启动多个服务service:name: "{{item}}"state: startedenabled: yesloop:- nginx- php-fpm[root@pubserver project01]# ansible-playbook 05-config-webservers.yml
- 将web1的html目录打包并下载
[root@pubserver project01]# vim 06-fetch-web1.yml ---- name: copy webhosts: web1tasks:- name: compress html # 压缩html目录到/root下archive:path: /usr/share/nginx/htmldest: /root/html.tar.gzformat: gz- name: download html # 下载压缩文件fetch:src: /root/html.tar.gzdest: 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 web3hosts: web2,web3tasks:- name: unarchive to web # 解压文件到指定位置unarchive:src: files/html.tar.gzdest: /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/相同的页面