要求
注意:
172.25.250.101-172.25.250.105 共 5 个 IP 地址由servera.exam.com服务器进行提供。 172.25.250.106 由 serverb.exam.com 服务器进行提供。
项目需求:
1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com Web站点,该站点在任何路由可达 的主机上被访问,页面内容显示为 "Hello,Welcome to www.exam.com !",并提供 content.exam.com/yum/AppStream和content.exam.com/yum/BaseOS URL 作为网络仓库供所 有主机使用。
2. 172.25.250.102 主机提供基于Chronyd 的 NTP 服务将本主机作为时间服务器,对外提供 NTP 服 务,并设置本服务器为 3 层。
3. 172.25.250.103 主机提供的MySQL 数据库服务,要求使用需求1中提供的仓库进行安装,并将数据 库密码设定为 redhat。创建名称为 bbs 的数据库提供给论坛服务使用。
4. 172.25.250.104 主机提供 NFS 服务,该服务将导出本地的 /bbs 目录作为论坛数据目录,该导出指 定只能论坛所在主机使用,并且开机自动挂载。
5. 172.25.250.105 主机提供 DNS 服务,该服务需要提供对项目中所有主机名的正向和反向解析,并 要求所有服务器的 DNS 配置为该 DNS 服务器。
6. 172.25.250.106 主机提供基于 Discuz 的论坛服务,该论坛服务使用 172.25.250.103 主机提供的数 据库 bbs,使用 172.25.250.104 主机提供的 NFS 作为论坛数据目录,并开机挂载。并使用 172.25.250.101 主机提供的网络仓库,172.25.250.102 主机提供的 NTP 服务,172.25.250.105 主 机提供的 DNS 服务。
7. 所有服务器的防火墙服务和 SELinux 服务必须开启。
8. 所有服务器提供的网络服务必须在系统重启后仍然可以正常提供服务。
9. 根据所有服务的相关代码,编写一键部署shell脚本,最基础的功能为 通过执行该脚本实现所有上面 所有需求,要求脚本必须在 servera.exam.com 主机上运行,并支持多次运行。
1.配置环境
准备两台虚拟机
server主机IP:172.25.250.101、网关:172.25.250.2、dns:172.25.250.105
node主机IP:172.25.250.106、网关:172.25.250.2、dns:172.25.250.105
两台机器之配置ssh免密登录
[root@server ~]# ssh-keygen
[root@server ~]# ssh-copy-id root@172.25.250.106
2.将Discuz_X3.5_SC_UTF8_20230520.zip用xftp拖到node主机的家目录下
3.编写shell脚本(完整代码)
#!/bin/bash
#ip配置
nmcli connection modify ens160 ipv4.method manual ipv4.address 172.25.250.101/24 ipv4.gateway 172.25.250.2 ipv4.dns 172.25.250.105
nmcli connection modify ens160 +ipv4.addresses 172.25.250.102/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.103/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.104/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.105/24
nmcli c up ens160
if [ $? -eq 0 ]; then
echo "网络配置成功"
else
echo "网络配置失败"
fi
#配置172.25.250.101主机上的仓库
cat <<EOF > /etc/yum.repos.d/rpm.repo
[baseos]
name=miaoshubaseos
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=miaoshuappsteam
baseurl=file:///mnt/AppStream
gpgcheck=0
EOF
mount /dev/sr0 /mnt
#配置172.25.250.106主机上的网络仓库
target_host="172.25.250.106"
ssh $target_host '
cat <<EOF > /etc/yum.repos.d/rpm.repo
[baseos]
name=miaoshubaseos
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=miaoshuappsteam
baseurl=file:///mnt/AppStream
gpgcheck=0
EOF
mount /dev/sr0 /mnt
'
# 安装所需软件包
yum install -y httpd chrony nfs-utils bind vim > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "软件安装成功"
else
echo "软件安装失败"
fi
# 配置防火墙规则
firewall-cmd --permanent --add-service=http > /dev/null 2>&1
firewall-cmd --permanent --add-service=dns > /dev/null 2>&1
firewall-cmd --reload > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "防火墙已放行"
else
echo "防火墙放行操作失败"
fi
# 配置 SELinux
setsebool -P httpd_can_network_connect_db 1
# 配置Web 服务
cat > /etc/httpd/conf.d/vhost.conf <<EOF
<directory /www>
allowoverride none
require all granted
</directory>
<virtualhost 172.25.250.101:80>
documentroot /www/exam
servername www.exam.com
</virtualhost>
EOF
mkdir /www/exam -p
echo "Hello,Welcome to www.exam.com!" > /www/exam/index.html
chcon -t httpd_sys_content_t /www/exam/index.html -R
cp /etc/hosts /etc/hosts.bak
original_content=$(cat /etc/hosts)
# 拼接新的内容
new_content="$original_content
172.25.250.101 www.exam.com
172.25.250.101 content.exam.com"
# 将新内容写入文件
echo "$new_content" > /etc/hosts
systemctl enable httpd
systemctl restart httpd
result=$(curl -s "www.exam.com")
if [[ $result == *"Hello,Welcome to www.exam.com!"* ]]; then
echo "web 服务配置成功"
else
echo "web 服务配置失败"
fi
#配置网络仓库
cp /etc/yum.repos.d/rpm.repo /etc/yum.repos.d/rpm.repo.bak # 备份原文件
> /etc/yum.repos.d/rpm.repo # 删除原文件内容
#配置172.25.250.101主机上的网络仓库
cat <<EOF > /etc/yum.repos.d/rpm.repo
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[baseos2]
name=baseos2
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF
#配置172.25.250.106主机上的网络仓库
target_host="172.25.250.106"
ssh $target_host '
cat <<EOF > /etc/yum.repos.d/rpm.repo
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[baseos2]
name=baseos2
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF
mkdir -p /www/exam # 创建目录
mkdir -p /www/exam/yum
mount /dev/sr0 /www/exam/yum > /dev/null 2>&1 # 执行挂载
'
mkdir -p /www/exam # 创建目录
mkdir -p /www/exam/yum
mount /dev/sr0 /www/exam/yum > /dev/null 2>&1 # 执行挂载
echo "网络仓库配置成功"
# 配置DNS 服务
cat <<EOF > /etc/named.conf
options {
listen-on port 53 { 172.25.250.105; };
directory "/var/named";
};
zone "exam.com" IN {
type master;
file "named.exam";
};
zone "250.25.172.in-addr.arpa" IN {
type master;
file "fanxiang";
};
EOF
cat <<EOF > /var/named/named.exam
\$TTL 1d
@ IN SOA @ admin.exam.com. (
0
5
3
10
15 )
IN NS dns.exam.com.
www IN A 172.25.250.101
content IN A 172.25.250.101
ntp IN A 172.25.250.102
mysql IN A 172.25.250.103
nfs IN A 172.25.250.104
dns IN A 172.25.250.105
bbs IN A 172.25.250.106
EOF
cat <<EOF > /var/named/fanxiang
\$TTL 1d
@ IN SOA @ admin.exam.com. (
0
5
3
10
15 )
IN NS dns.exam.com.
www IN A 172.25.250.101
content IN A 172.25.250.101
ntp IN A 172.25.250.102
mysql IN A 172.25.250.103
nfs IN A 172.25.250.104
dns IN A 172.25.250.105
bbs IN A 172.25.250.106
EOF
systemctl enable named
systemctl restart named
result=$(dig -t A www.exam.com )
if [[ $result == *"NOERROR"* ]]; then
echo "DNS服务配置成功"
else
echo "DNS服务配置失败"
fi
# 配置Chrony 服务
cp /etc/chrony.conf /etc/chrony.conf.bak > /dev/null 2>&1
sed -i '/^#\(allow 192.168.0.0/16)/\1/' /etc/chrony.conf > /dev/null 2>&1
sed -i '/^#\(local stratum 10)/\1/' /etc/chrony.conf > /dev/null 2>&1
sed -i '/^#\(log measurements statistics tracking)/\1/' /etc/chrony.conf > /dev/null 2>&1
sed -i '/allow 192.168.0.0/16/allow 172.25.250.0/24/' /etc/chrony.conf > /dev/null 2>&1
sed -i '/local stratum 10/local stratum 3/' /etc/chrony.conf > /dev/null 2>&1
sed -i '/log measurements statistics tracking/log measurements statistics tracking/' /etc/chrony.conf > /dev/null 2>&1
systemctl enable chronyd
systemctl restart chronyd
#进入172.25.250.106主机配置chrony服务
target_host="172.25.250.106"
ssh $target_host '
cp /etc/chrony.conf /etc/chrony.conf.bak
sudo sed -i "s/pool 2.rhel.pool.ntp.org iburst/server ntp.exam.com iburst/" /etc/chrony.conf > /dev/null 2>&1
systemctl enable chronyd
systemctl restart chronyd
firewall-cmd --permanent --add-service=ntp > /dev/null 2>&1
firewall-cmd --reload > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "chrony 配置成功"
else
echo "chrony 配置失败"
fi
'
#配置数据库服务
yum install mysql-server -y > /dev/null 2>&1
firewall-cmd --permanent --add-service=mysql > /dev/null 2>&1
firewall-cmd --reload > /dev/null 2>&1
systemctl start mysqld
rpm -qa | grep mysql-server & >> /dev/null
mysql -u root &>> /dev/null <<EOF
alter user 'root'@'localhost' identified by 'redhat';
create database bbs;
update mysql.user set host="%" where mysql.user.User="root";
flush privileges;
EOF
systemctl restart mysqld
systemctl enable mysqld > /dev/null 2>&1
#172.25.250.106配置MySQL
target_host="172.25.250.106"
ssh $target_host '
yum install mysql-server -y > /dev/null 2>&1
echo "MySQL配置完成"
'
#配置NFS服务器
yum install nfs-utils -y &>> /dev/null
systemctl status nfs-server | grep Active | awk 'print $2' &>> /dev/null
systemctl enable --now nfs-utils &>> /dev/null
mkdir /bbs -p
chmod 777 /bbs
echo "/bbs 172.25.250.106(rw)" > /etc/exports
#防火墙放行NFS
firewall-cmd --permanent --add-service=nfs &>> /dev/null
firewall-cmd --permanent --add-service=mountd &>> /dev/null
firewall-cmd --permanent --add-service=rpc-bind &>> /dev/null
firewall-cmd --reload &>> /dev/null
exportfs -r
#重启服务
systemctl restart nfs-server
systemctl enable --now nfs-server &>> /dev/null
echo "nfs配置完成"
#106主机配置自动挂载
ssh root@172.25.250.106 &>> /dev/null << EOF
yum install nfs-utils -y &>> /dev/null
yum install httpd -y &>> /dev/null
yum install autofs -y &>> /dev/null
echo 'grep ^/var/www/html /etc/auto.master &>> /dev/null
if [ \$? != 0 ]
then
echo "/var/www/ /etc/auto.bbs" >> /etc/auto.master
echo "html nfs.exam.com:/bbs" > /etc/auto.bbs
fi' > xixi.sh
bash xixi.sh
systemctl restart autofs
systemctl enable --now autofs
EOF
echo "106自动挂载完成"
#配置论坛服务
ssh root@172.25.250.106 &>> /dev/null << EOF
yum install httpd php* -y &>> /dev/null
cp Discuz_X3.5_SC_UTF8_20230520.zip /var/www/html
yum install unzip -y &>> /dev/null
cd /var/www/html
unzip Discuz_X3.5_SC_UTF8_20230520.zip &>> /dev/null
cd /var/www/html/upload
chmod 777 data/ uc_server/ uc_client/ config/ -R
setsebool -P httpd_use_nfs 1
setsebool -P httpd_can_network_connect_db 1
systemctl start --now httpd
systemctl enable --now httpd
firewall-cmd --permanent --add-service=http &>> /dev/null
firewall-cmd --reload &>> /dev/null
systemctl restart httpd
EOF
echo "论坛配置完成"