一、服务器架构
1、架构图
2、服务器
IP | 主机名 | 功能 |
---|---|---|
192.168.1.6 | dns.server | 内网 DNS 解析服务器 |
192.168.1.7 | web.server | LAMP 环境 |
192.168.1.8 | nfs.server | 静态文件 NFS 服务器 |
192.168.1.9 | backup.server | 数据备份服务器 |
3、软件版本
本文所使用的安装包已打包上传至 csdn 资源库:lamp_wordpress_4.7.3.zip
软件名称 | 版本 |
---|---|
Linux | CentOS 7.9 |
Apache | httpd 2.4 |
MySQL | 5.6.31 |
PHP | 7.2.17 |
WordPress | 4.7.3 |
二、服务器标准环境配置
1、更改主机名
# 四台主机分别设置主机名
hostnamectl set-hostname dns.server
hostnamectl set-hostname web.server
hostnamectl set-hostname nfs.server
hostnamectl set-hostname backup.server
2、关闭防火墙,SELinux
systemctl stop firewalld.service && systemctl disable firewalld.service
setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config
3、配置 YUM 源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
4、基本工具安装
yum install -y vim wget net-tools bash-completion
source /usr/share/bash-completion/bash_completion
三、DNS 服务器搭建
1、安装命令
[root@dns ~]# yum install -y bind
2、修改配置
修改 /etc/named.conf
文件,添加 any;
,表示允许所有地址访问本 DNS 服务器
修改 /etc/named.rfc1912.zones
,追加以下内容,liuli.com
为自定义的域名
zone "liuli.com" IN {
type master;
file "liuli.com";
allow-update {
none; };
};
创建域名文件 liuli.com
, 该文件名必须与 /etc/named.rfc1912.zones
中 file
定义的文件名一致
[root@dns ~]# cd /var/named/
[root@dns named]# cp -p named.localhost liuli.com
在域名文件 liuli.com
追加需要解析的记录值
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
# 将 blog.liuli.com 解析到 192.168.1.7 服务器上
blog A 192.168.1.7
验证配置正确性
[root@dns named]# named-checkzone liuli.com liuli.com
zone liuli.com/IN: loaded serial 0
OK
3、启动服务
[root@dns named]# systemctl start named.service && systemctl enable named.service
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
4、window 客户端配置
DNS服务器添加自己搭建的 DNS 服务器 IP 地址
使用 nslookup
命令查看解析结果
四、NFS 服务器搭建
1、安装 nfs
[root@nfs ~]# yum install -y rpcbind nfs-utils
2、添加共享目录
创建共享目录 /nfs/share
[root@nfs ~]# mkdir -p /nfs/share
编辑配置文件 /etc/exports
,添加以下内容
/nfs/share *(rw,sync,no_root_squash)
3、启动服务
[root@nfs ~]# systemctl start rpcbind.service && systemctl enable rpcbind.service
[root@nfs ~]# systemctl start nfs.service && systemctl enable nfs.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
4、web.server 挂载 nfs
将 web.server
服务器的 /www
目录 ,挂载 nfs
分区,以保证该目录空间充足
# 先安装命令
[root@web ~]# yum install -y rpcbind nfs-utils
# 查看 nfs 服务是否正常
[root@web ~]# showmount -e 192.168.1.8
Export list for 192.168.1.8:
/nfs/share *
# 挂载命令
[root@web ~]# mkdir /www/
[root@web ~]# mount -t nfs 192.168.1.8:/nfs/share /www/
# 查看挂载后的磁盘
[root@web ~]# df -Th | grep nfs4
192.168.1.8:/nfs/share nfs4 17G 1.6G 16G 10% /www
五、LAMP 服务器搭建
1、Mysql 安装
软件版本 | 安装目录 | 数据目录 | 端口 |
---|---|---|---|
mysql-5.6.31 | /usr/local/mysql | /usr/local/mysql/data | 3306 |
- 依赖软件安装
[root@web ~]# yum install -y git gcc gcc-c++ cmake pcre-devel ncurses-devel openssl-devel libcurl-devel bison autoconf
- 创建 mysql 账号
[root@web ~]# groupadd mysql
[root@web ~]# useradd -r -g mysql -s /sbin/nologin mysql
- 解压源码包
[root@web ~]# wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.31.tar.gz
[root@web ~]# tar -zxvf mysql-5.6.31.tar.gz
[root@web ~]# cd mysql-5.6.31/
- cmake 配置
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql
参数说明
-DCMAKE_INSTALL_PREFIX // 指定安装目录
-DMYSQL_DATADIR // 数据目录
-DENABLED_LOCAL_INFILE // 开启加载外部文件,1 开启 0 关闭
-DWITH_INNOBASE_STORAGE_ENGINE // 将 InnoDB 存储引擎静态编译到服务器
-DMYSQL_TCP_PORT // 端口
-DDEFAULT_CHARSET // 字符集
-DDEFAULT_COLLATION // 字符集校验规则
-DWITH_EXTRA_CHARSETS // 拓展字符集
-DMYSQL_USER // 用户身份
- make 编译安装
[root@web mysql-5.6.31]# make && make install
- 初始化数据库
# 将目录权限赋予 mysql 用户
[root@web mysql-5.6.31]# chown -R mysql:mysql /usr/local/mysql/
[root@web mysql-5.6.31]# rm -f /etc/my.cnf
[root@web mysql-5.6.31]# cd /usr/local/mysql/
# 执行初始化脚本
[root@web mysql]# scripts/mysql_install_db --user=mysql
# 复制启动脚本
[root@web mysql]# cp support-files/mysql.server /etc/init.d/mysql.server
- 启动服务
[root@web mysql]# service mysql.server start
Starting MySQL..... SUCCESS!
- 添加环境变量
[root@web mysql]# echo 'export PATH=$PATH:/usr/local/mysql/bin/' >> ~/.bashrc
[root@web mysql]# source ~/.bashrc
- 设置数据库 root 密码
[root@web mysql]# mysqladmin -u root password '123456Aa.'
登录 mysql
[root@web mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.31 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
3、httpd 安装
版本 | 安装路径 |
---|---|
httpd-2.4.37 | /usr/local/apache2 |
- 依赖软件安装
# 安装 apr
[root@web ~]# wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
[root@web ~]# tar -zxvf apr-1.5.2.tar.gz
[root@web ~]# cd apr-1.5.2/
[root@web apr-1.5.2]# ./configure && make && make install
# 安装 apr-util
[root@web ~]# wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
[root@web ~]# tar -zxvf apr-util-1.5.4.tar.gz
[root@web ~]# cd apr-util-1.5.4/
[root@web apr-util-1.5.4]# ./configure --with-apr=/usr/local/apr/bin/apr-1-config && make && make install
- 解压源码包
[root@web ~]# wget http://archive.apache.org/dist/httpd/httpd-2.4.37.tar.gz
[root@web ~]# tar -zxvf httpd-2.4.37.tar.gz
[root@web ~]# cd httpd-2.4.37/
- configure 配置
./configure \
--enable--modules=all \
--enable--mods-shared=all \
--enable-so \
--enable-rewrite \
--with-pcre \
--enable-ssl \
--with-mpm=prefork \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config
参数说明
--enable--modules=all // 加载所有支持的模块
--enable--mods-shared=all // 共享方式加载大部分常用模块
--enable-so // 启动动态模块加载功能
--enable-rewrite // 启用 url 地址重写功能
--with-pcre // 支持正则表达式
--enable-ssl // 编译 ssl 模块,支持 https
--with-mpm=prefork // 插入并行处理模块
--with-apr=/usr/local/apr/bin/apr-1-config // 指定 apr 路径
--with-apr-util=/usr/local/apr/bin/apu-1-config // 指定 apr-util 路径
- make 编译安装
[root@web httpd-2.4.37]# make && make install
- 添加环境变量
[root@web apache2]# echo 'export PATH=$PATH:/usr/local/apache2/bin/' >> ~/.bashrc
[root@web apache2]# source ~/.bashrc
- 启动服务
# 复制启动脚本
[root@web apache2]# cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
[root@web apache2]# service httpd start
输入地址验证,出现该页面表示安装成功
4、PHP 安装
- 依赖软件安装
[root@web ~]# yum install -y libxml2-devel libjpeg-devel libpng-devel freetype-devel
- 解压源码包
[root@web ~]# wget https://www.php.net/distributions/php-7.2.17.tar.gz
[root@web ~]# tar -zxvf php-7.2.17.tar.gz
[root@web ~]# cd php-7.2.17/
- configure 配置
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-curl \
--enable-zip \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-opcache \
--enable-mbstring \
--enable-mbregex \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-calendar \
--enable-bcmath
- make 编译安装
[root@web php-7.2.17]# make && make install
查看是否生成 libphp7.so
文件,存在则安装成功
[root@web php-7.2.17]# ls /usr/local/apache2/modules/libphp7.so
/usr/local/apache2/modules/libphp7.so
5、httpd 配置
- 打开配置文件
/usr/local/apache2/conf/httpd.conf
,修改添加以下内容:
ServerName localhost:80 # 添加主机名
LoadModule negotiation_module modules/mod_negotiation.so # 此模块打开注释
Include conf/extra/httpd-languages.conf # 扩展配置文件支持
# 在 LoadModule php7_module modules/libphp7.so 行后,添加下面两行内容,开启对 php 文件支持,
AddHandler php7-script .php
AddType text/html .php
# 添加默认首页
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
- 打开配置文件
/usr/local/apache2/conf/extra/httpd-languages.conf
,修改添加以下内容:
# 将默认语言改为 zh-CN
DefaultLanguage zh-CN
# 将 zh-CN 提到第一个
LanguagePriority zh-CN en ca cs ··· ···
- 测试页面
[root@web ~]# rm -f /usr/local/apache2/htdocs/index.html
[root@web ~]# vim /usr/local/apache2/htdocs/index.php
<?php
phpinfo();
?>
- 重启服务
[root@web ~]# service httpd restart
输入地址验证,出现该页面表示安装成功
6、wordpress 部署
- 下载 wordpress 安装包
[root@web ~]# mkdir -p /www/blog
[root@web ~]# wget https://cn.wordpress.org/wordpress-4.7.3-zh_CN.tar.gz
[root@web ~]# tar -zxvf wordpress-4.7.3-zh_CN.tar.gz -C /www/blog/
[root@web ~]# chown -R daemon:daemon /www/blog/wordpress/
- 配置虚拟主机
打开配置文件 /usr/local/apache2/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# 默认配置为拒绝所有请求,修改 Require all denied 改为 Require all granted
<Directory />
AllowOverride none
Require all granted
</Directory>
打开虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,添加一个虚拟主机块
<VirtualHost *:80>
DocumentRoot "/www/blog/wordpress"
ServerName blog.liuli.com
ErrorLog "logs/blog.liuli.com-error_log"
CustomLog "logs/blog.liuli.com-access_log" common
</VirtualHost>
- 重启服务
[root@web ~]# service httpd restart
- 创建数据库
blog
mysql> create database blog default charset utf8;
Query OK, 1 row affected (0.00 sec)
- 浏览器安装博客
输入域名 http://blog.liuli.com/
,进入安装界面
六、Backup 服务器搭建
将 web.server
服务器的 /www
目录进行实时备份,以保证网站的数据安全。
1、安装 rsync、inotify工具
[root@web ~]# yum install -y rsync
[root@web ~]# yum install -y epel-release
[root@web ~]# yum install -y inotify-tools
# 备份服务器也要安装 rsync
[root@backup ~]# yum install -y rsync
2、配置免密登录
# 生成一对公/私密钥,直接按回车确认
[root@web ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:TF/lP3mkY61pyKftAloYipaKPVnJRca3WtdTdmXh/8I [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| . ..=|
| + . o+..|
| o ... ..o.o.|
| .o+...o =o|
| . = +S+. .+o=|
| B o . o. + ++|
| o = o .o E .|
|. = . .= . |
| . .oo |
+----[SHA256]-----+
# 使用命令将公钥发送到 backup.server 主机
[root@web ~]# ssh-copy-id [email protected]
配置完之后 rsync
工具可以免密码同步数据
3、同步脚本
编辑 inotify_www.sh
实时同步脚本
#! /usr/bin/env bash
# Auth: liuli
# Version: v1.0, 2021/10/25
# Sys: CentOS 7.9
# Features: 实现 /wwww/ 目录数据实时同步至 backup.server 上
inotifywait -mrq -e create,delete,modify,attrib,move /www/ | while read events
do
rsync -az --delete /www/ [email protected]:/www/
echo "`date +%F%T`:出现事件 $events" >> /var/log/rsync.log 2>&1
done
后台运行该脚本
[root@web ~]# nohup sh inotify_www.sh &