shell一键部署论坛服务

要求

注意:

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 "论坛配置完成"

4.在浏览器输入网址172.25.250/upload

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: etcd集群的一键部署可以使用shell脚本来实现。具体步骤如下: 1. 准备好etcd二进制文件和配置文件,可以从官网下载或自行编译。 2. 编写一个shell脚本,包含以下步骤: a. 创建etcd集群所需的目录和文件,如数据目录、日志文件等。 b. 将etcd二进制文件和配置文件复制到相应的目录中。 c. 修改配置文件中的参数,如节点名称、监听地址、集群地址等。 d. 启动etcd节点,可以使用systemd或nohup等方式。 3. 执行shell脚本,即可完成etcd集群的一键部署。 需要注意的是,etcd集群的部署需要考虑节点之间的通信和同步,以及数据的备份和恢复等问题。在实际部署过程中,需要根据实际情况进行调整和优化。 ### 回答2: ### 回答3: etcd是一个分布式的键值存储系统,可用于多种不同的用途,例如在容器编排系统Kubernetes中用作集群状态存储,以及在Docker Swarm等系统中用作服务发现。在etcd中,数据以键值对的形式存储,可以在多个节点上进行备份和复制。 要在多个节点上部署etcd集群,最好的方式可能是使用shell脚本。以下是一些步骤,可以帮助您实现etcd集群的快速部署: 1. 首先,在每个节点上安装etcd二进制文件和依赖项。您可以使用以下命令进行安装(适用于CentOS7): ``` yum install etcd -y ``` 2. 接下来,您需要设置etcd的配置文件。您可以在每个节点上创建一个名为etcd.conf的文件,其中应至少包含以下内容: ``` name = "etcd-1" # 节点名称 initial-advertise-peer-urls = "http://<node1_IP:2380>" # 节点1与其他节点通信的IP和端口 listen-peer-urls = "http://<node1_IP:2380>,http://<node2_IP:2380>,http://<node3_IP:2380>" # 节点1与其他节点通信的IP和端口 advertise-client-urls = "http://<node1_IP:2379>" # 用于客户端访问的IP和端口 listen-client-urls = "http://<node1_IP:2379>,http://<node2_IP:2379>,http://<node3_IP:2379>" # 客户端要监听哪个IP和端口 initial-cluster-token = "etcd-cluster-token" # 集群token,所有节点必须相同 initial-cluster = "etcd-1=http://<node1_IP>:2380,etcd-2=http://<node2_IP>:2380,etcd-3=http://<node3_IP>:2380" # 初始集群中的节点 initial-cluster-state = "new" # 新建集群 ``` 您需要根据您的实际设置更改IP地址和端口。 3. 现在,您可以使用以下命令来启动etcd: ``` etcd --config-file=/etc/etcd.conf ``` 或者,您可以使用shell脚本,像这样: ``` #!/bin/bash systemctl start etcd ``` 将此脚本保存为etcd.sh,然后在每个节点上运行它。 4. 最后,验证您的etcd集群是否正常工作。您可以使用以下命令: ``` etcdctl -C http://<any_node_ip>:2379 member list ``` 这将返回所有节点的信息,以及它们的状态。 以上就是一个简单的etcd集群shell一键部署过程,您可以根据实际情况进行修改。希望这对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值