环境拓扑结构主机环境描述
需求描述
项目需求:
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
主机上运行,并支持多次运行。
准备工作
servera
nmcli connection modify ens160 ipv4.addresses 172.25.250.101/24
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 modify ens160 ipv4.gateway 172.25.250.102
nmcli connection modify ens160 ipv4.dns 172.25.250.102
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
severb
nmcli connection modify ens160 ipv4.addresses 172.25.250.106
nmcli connection modidy ens160 ipv4.gateway 172.25.250.102
nmcli connection modify ens160 ipv4.dns 172.25.25.105
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
配置ssh免密
servera
ssh-keygen
ssh-copy-id root@172.25.250.106
ssh-copy-id root@172.25.250.101
serverb
ssh-keygen
ssh-copy-id root@172.25.25.101
ssh-copy-id root@172.25.25.106
简单的脚本
#!/bin/bash
mount /dev/sr0 /mnt
dnf install bind -y
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
systemctl start named
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 << EOF > /var/named/named.exam
\$TTL 1D
@ IN SOA @ admin.exam.com. (
0
1
1
1
1 )
IN NS ns.exam.com.
ns IN A 172.25.250.101
dns IN A 172.25.250.105
content IN A 172.25.250.101
www 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
echo '$TTL 1D
@ IN SOA @ admin.exam.com. (
2024070602
1
1
1
1 )
IN NS ns.exam.com.
101 IN PTR content.exam.com.
101 IN PTR www.exam.com.
102 IN PTR ntp.exam.com.
103 IN PTR mysql.exam.com.
104 IN PTR nfs.exam.com.
105 IN PTR dns.exam.com.' > /var/named/named.fanxiang
systemctl restart named
systemctl enable named
dnf install httpd -y
systemctl start httpd
umount /mnt
mkdir -p /www/yum
mount /dev/sr0 /www/yum
echo '
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0 ' > /etc/yum.repos.d/rpm.repo
sed -i '/^#.#ServerName/c\ServerName www.example.com:80' /etc/httpd/conf/httpd.conf
echo "Hello,Welcome to www.exam.com!" > /www/index.html
echo '<directory /www>
options indexes followsymlinks
allowoverride none
require all granted
</directory>
<virtualhost 172.25.250.101:80>
ServerName www.exam.com
documentroot /www
</virtualhost> ' > /etc/httpd/conf.d/host.conf
chcon -t httpd_sys_content_t /www/*
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
systemctl restart httpd
curl www.exam.com
dnf install chrony -y
sed -i '/^#allow 192.168.0.0\/16$/c\allow 172.25.250.0/24' /etc/chrony.conf
sed -i '/^#local stratum 10$/c\local stratum 3' /etc/chrony.conf
sed -i '/leapsectz right\/UTC/d' /etc/chrony.conf
sed -i '/^#log measurements statistics tracking/c\log measurements statistics tracking' /etc/chrony.conf
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload
systemctl restart chronyd
systemctl enable chronyd
ssh root@172.25.250.106 &>> /dev/null << over
sed -i '/pool 2.rhel.pool.ntp.org iburst/c\\server ntp.exam.com iburst' /etc/chrony.conf
systemctl restart chronyd
chronyc sources
over
df -h | grep /mnt &>>/dev/null
if [ $? -eq 0 ];then
umount /mnt
fi
mount /dev/sr0 /www/yum &>> /dev/null
grep iso9660 /etc/fstab &>> /dev/null
if [ $? != 0 ];then
echo "/dev/sr0 /www/yum iso9660 defaults 0 0" >> /etc/fstab
fi
scp /etc/yum.repos.d/rpm.repo 172.25.250.106:/etc/yum.repos.d/rpm.repo
dnf install mysql -y
dnf install mysql-server -y
systemctl start mysqld
mysql -u root -p <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhat';
update mysql.user set host='%' where user='root';
CREATE DATABASE bbs;
flush privileges;
EOF
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
setsebool -P httpd_use_nfs 1
systemctl enable mysqld &>> /dev/null
dnf install nfs-utils -y
mkdir /bbs
chmod 777 /bbs/
echo '/bbs bbs.exam.com(rw)' >>/etc/exports
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
systemctl restart named
ssh root@172.25.250.106 &>> /dev/null << over
yum install nfs-utils autofs httpd -y
cat << EOF > /etc/httpd/conf.d/vhost.conf
<directory /www/bbs>
allowoverride none
require all granted
</directory>
<virtualhost 172.25.250.106:80>
documentroot /www/bbs
servername 172.25.250.106
</virtualhost>
EOF
mkdir -p /www
mkdir -p /www/bbs
mount nfs.exam.com:/bbs /www/bbs
echo "/www /etc/auto.nfs" >> /etc/auto.master
echo "bbs nfs.exam.com:/bbs" >> /etc/auto.nfs
systemctl restart autofs
systemctl enable autofs-now &>> /dev/null
over
#配置论坛服务器
echo "客户端正在创建论坛"
ssh root@172.25.250.106 &>> /dev/null << overd
yum install mysql-server -y &>> /dev/null
yum install php php-mysqlnd -y &>> /dev/null
yum install unzip -y &>> /dev/null
cp Discuz_X3.5_SC_UTF8_20230520.zip /www/bbs
cd /www/bbs
unzip Discuz_X3.5_SC_UTF8_20230520.zip
cd /www/bbs/upload
chmod 777 data/ uc_server/ uc_client/ config/ -R &> /dev/null
setsebool -P httpd_use_nfs 1
setsebool -P httpd_can_network_connect_db on
systemctl restart httpd
firewall-cmd --permanent --add-service=http &>> /dev/null
firewall-cmd --reload &>> /dev/null
overd
echo "论坛创建成功,请在windows浏览器输入:172.25.250.106/upload"