一、实验内容
1、环境拓扑结构
2、主机环境描述
主机名 | 主机地址 | 需要提供的服务 |
---|---|---|
content.exam.com | 172.25.250.101 | 提供基于 httpd/nginx 的 YUM仓库服务 |
ntp.exam.com | 172.25.250.102 | 提供基于Chronyd 的 NTP 服务 |
mysql.exam.com | 172.25.250.103 | 提供基于 MySQL 的数据库服务 |
nfs.exam.com | 172.25.250.104 | 提供基于 NFS 的网络文件系统服务 |
dns.exam.com | 172.25.250.105 | 提供基于 bind 的 DNS 服务 |
bbs.exam.com | 172.25.250.106 | 提供基于 Discuz 的论坛服务 |
注意:
- 172.25.250.101-172.25.250.105 共 5 个 IP 地址由servera.exam.com服务器进行提供。
- 172.25.250.106 由 serverb.exam.com 服务器进行提供。
3、需求描述
项目需求:
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、更改主机名
2、修改IP地址
2.1 代码部分
2.2 检验部分
3、挂载
4、下载工具
5、web服务搭建
5.1 代码部分
5.2 检验部分
6、配置网络仓库
7、 NTP时间服务器搭建
7.1 代码部分
7.2 检验部分
8、 数据库服务搭建
9、DNS服务搭建
9.1 代码部分
9.1.1 服务开启和开机启动
9.1.2 正向解析文件
9.1.3 反向解析文件
9.1.4 DNS配置文件
9.1.5 DNS域名解析文件
9.1.6 防火墙放行和重启服务
9.2 检验部分
9.2.1 正向解析检验
9.2.2 反向解析检验
10、NFS共享服务
10.1 代码部分
10.2 检验部分
11、论坛服务搭建
11.1 代码部分
11.1.1 挂载和工具下载
11.1.2 论坛解压和权限更改、web服务配置
11.1.3 防火墙方向和服务重启
三、代码部分
#!/bin/bash
#更改主机名
hostnamectl set-hostname servera.exam.com
ssh root@172.25.250.106 << ALLEOF
hostnamectl set-hostname serverb.exam.com
ALLEOF
#配置IP地址
nmcli connection modify ens160 ipv4.addresses 172.25.250.101/24
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 connection.autoconnect yes
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 connection up ens160
#挂载
rm -rf /etc/yum.repos.d/*
cat << EOF > /etc/yum.repos.d/base.repo
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
enabled=1
gpgcheck=0
[Appstream]
name=AppStream
baseurl=/mnt/AppStream
enabled=1
gpgcheck=0
EOF
mount /dev/sr0 /mnt
#下载工具
dnf install httpd yum chrony mysql-server nfs-utils bind bind-utils -y
#web服务
systemctl start httpd
systemctl enable httpd
mkdir /www
mkdir /www/exam
echo "Hello,Welcom to www.exam.com!" > /www/exam/index.html
cat << EOF > /etc/httpd/conf.d/vhost.conf
<directory /www>
allowoverride none
require all granted
</directory>
<virtualhost 172.25.250.101:80>
documentroot /www/exam
servername www.exam.com
</virtualhost>
EOF
insert_content="172.25.250.101 www.exam.com"
if grep -q "$insert_content" /etc/hosts; then
echo "hosts文件已存在www.exam.com本地解析"
else
sudo sed -i '$a'"$insert_content" /etc/hosts
echo "hosts文件已创建www.exam.com本地解析"
fi
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
semanage port -a -t http_port_t -p tcp 80
chcon -t httpd_sys_content_t /www/exam/index.html
systemctl restart httpd
#配置网络仓库
base="/etc/yum.repos.d/rpm.repo"
cat > $base << EOF
[BaseOS]
name=BaseOS
baseurl=http://content.exam.com/yum/BaseOS
enabled=1
gpgcheck=0
[Appstream]
name=AppStream
baseurl=http://content.exam.com/yum/AppStream
enabled=1
gpgcheck=0
EOF
#NTP时间服务器
if grep -q '^#pool 2.rhel.pool.ntp.org iburst' /etc/chrony.conf; then
echo "时间服务器——pool 2.rhel.pool.ntp.org iburst已被注释,无需修改"
else
sudo sed -i '/pool 2.rhel.pool.ntp.org iburst/s/^/#/' /etc/chrony.conf
echo "时间服务器——已成功注释pool 2.rhel.pool.ntp.org iburst"
fi
chrony_server="server 172.25.250.102 iburst"
if grep -q "$chrony_server" /etc/chrony.conf; then
echo "时间服务器——server 172.25.250.102 iburst已存在,无需添加!"
else
sudo sed -i '$a'"$chrony_server" /etc/chrony.conf
echo "时间服务器——server 172.25.250.102 iburst已成功添加!"
fi
chrony_allow="allow 172.25.250.0/24"
if grep -q "$chrony_allow" /etc/chrony.conf; then
echo "时间服务器——allow 172.25.250.0/24已存在,无需添加!"
else
sudo sed -i '$a'"$chrony_allow" /etc/chrony.conf
echo "时间服务器——allow 172.25.250.0/24已成功添加!"
fi
chrony_stratum="local stratum 3"
if grep -q "$chrony_stratum" /etc/chrony.conf; then
echo "时间服务器——local stratum 3已存在,无需添加!"
else
sudo sed -i '$a'"$chrony_stratum" /etc/chrony.conf
echo "时间服务器——local stratum 3已成功添加!"
fi
sudo sed -i '/^#log measurements statistics tracking/s/^#//' /etc/chrony.conf
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
ssh root@172.25.250.106 << ALLEOF
if grep -q '^#pool 2.rhel.pool.ntp.org iburst' /etc/chrony.conf; then
echo "时间服务器——pool 2.rhel.pool.ntp.org iburst已被注释,无需修改"
else
sudo sed -i '/pool 2.rhel.pool.ntp.org iburst/s/^/#/' /etc/chrony.conf
echo "时间服务器——已成功注释pool 2.rhel.pool.ntp.org iburst"
fi
chrony_server="server 172.25.250.102 iburst"
if grep -q "\$chrony_server" /etc/chrony.conf; then
echo "时间服务器——server 172.25.250.102 iburst已存在,无需添加!"
else
sudo sed -i '\$a'"\$chrony_server" /etc/chrony.conf
echo "时间服务器——server 172.25.250.102 iburst已成功添加!"
fi
sudo sed -i '/^#log measurements statistics tracking/s/^#//' /etc/chrony.conf
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload
ALLEOF
#数据库服务
systemctl start mysqld
systemctl enable mysqld
mysqladmin -u root password "redhat"
mysql -u root -predhat << EOF
create database bbs;
update mysql.user set host='%' where user='root';
create user 'root'@'%' identified by 'redhat';
FLUSH PRIVILEGES;
EOF
firewall-cmd --permanent --add-service=mysql
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
#DNS服务
systemctl start named
systemctl enable named
cat << EOF > /var/named/named.exam
\$TTL 1D
@ IN SOA @ admin.exam.com. (2024072201
1
1
1
1)
IN NS dns.exam.com.
dns IN A 172.25.250.105
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
bbs IN A 172.25.250.106
EOF
cat << EOF > /var/named/named.fanxiang
\$TTL 1D
@ IN SOA @ admin.exam.com. (2024072201
1
1
1
1)
IN NS dns.exam.com.
105 IN PTR dns.exam.com.
101 IN PTR www.exam.com.
101 IN PTR content.exam.com.
102 IN PTR ntp.exam.com.
103 IN PTR mysql.exam.com.
104 IN PTR nfs.exam.com.
106 IN PTR bbs.exam.com.
EOF
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 "named.fanxiang";
};
EOF
cat >> /etc/resolv.conf << EOF
search localdomain
nameserver 172.25.250.105
EOF
firewall-cmd --permanent --add-server=dns
firewall-cmd --reload
systemctl restart named
#NFS服务
systemctl start nfs-server
systemctl enable nfs-server
mkdir /bbs
chmod 777 /bbs/
cat << EOF > /etc/exports
/bbs 172.25.250.106(rw)
EOF
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
systemctl restart nfs-server
#论坛服务
ssh root@172.25.250.106 << ALLEOF
rm -rf /etc/yum.repos.d/*
cat << EOFA > /etc/yum.repos.d/base.repo
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
enabled=1
gpgcheck=0
[Appstream]
name=AppStream
baseurl=/mnt/AppStream
enabled=1
gpgcheck=0
EOFA
mount /dev/sr0 /mnt
dnf install chrony nfs-utils httpd bind bind-utils php* unzip -y
systemctl start httpd
systemctl enable httpd
mkdir -p /var/www/html/bbs
umount /var/www/html/bbs
mount 172.25.250.104:/bbs /var/www/html/bbs
echo '172.25.250.104:/bbs /var/www/html/bbs nfs defaults 0 0' >> /etc/fstab
mount -a
systemctl restart nfs-server
cd /var/www/html/bbs
if [ -d "upload" ]; then
echo "Discuz压缩包已解压"
else
rm -rf *
unzip /root/Discuz_X3.5_SC_UTF8_20230520.zip
cd
chmod -R 777 /var/www/html/bbs
fi
cat > /etc/httpd/conf.d/vhost.conf << EOFB
<Directory /var/www/html/bbs>
AllowOverride All
Require all granted
</Directory>
<VirtualHost 172.25.250.106:80>
DocumentRoot /var/www/html/bbs
ServerName bbs.example.com
</VirtualHost>
EOFB
cat >> /etc/resolv.conf << EOFC
search localdomain
nameserver 172.25.250.105
EOFC
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
setsebool -P httpd_use_nfs 1
setsebool -P httpd_can_network_connect_db 1
systemctl restart httpd
ALLEOF