推荐Ansible Playbook方案,因其具备幂等性、模块化和YAML可读性,能自动处理依赖判断、配置分发与服务校验,适用于中大型异构集群,支持版本控制与回滚追溯。

如果您需要在多台Linux服务器上统一部署并维护Apache HTTP服务器,则可能面临配置不一致、重复操作耗时、手动执行易出错等问题。以下是两种主流的自动化部署方案:基于Shell脚本的直接命令组合与基于Ansible Playbook的声明式编排。两者均可实现安装、配置替换、服务启停与开机自启等核心任务,但实现逻辑、可维护性与扩展性存在显著差异。
一、Shell脚本部署方案
该方案通过编写可执行的Bash脚本,将所有操作步骤按顺序固化为线性命令流,依赖目标主机已预装yum及SSH免密登录环境。其优势在于轻量、无额外依赖,适合小规模、同构环境下的快速交付。
1、创建部署脚本文件deploy_apache.sh,并赋予执行权限:
chmod +x deploy_apache.sh
2、在脚本中写入以下内容:
#!/bin/bash
yum install -y httpd
cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
cp /tmp/vhosts.conf /etc/httpd/conf.d/vhosts.conf
systemctl start httpd
systemctl enable httpd
3、将配置文件httpd.conf与vhosts.conf提前上传至各目标主机的/tmp目录下
4、通过SSH批量执行该脚本:
for host in 192.168.10.10 192.168.10.11 192.168.10.12; do scp deploy_apache.sh $host:/tmp/; ssh $host "sh /tmp/deploy_apache.sh"; done
二、Ansible Playbook部署方案
该方案利用Ansible的幂等性、模块化与YAML可读性,将部署过程抽象为“目标状态描述”,无需关心执行路径。Playbook自动处理依赖判断、配置分发、服务校验等环节,适用于中大型异构集群,且支持版本控制与回滚追溯。
1、确保控制节点已安装Ansible并完成SSH免密认证配置
2、编辑主机清单文件/etc/ansible/hosts,添加Web服务器组:
[web]
192.168.10.10
192.168.10.11
192.168.10.12
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
3、创建playbook文件apache_deploy.yml,内容如下:
---
- name: Deploy Apache on Web Servers
hosts: web
become: yes
tasks:
- name: Install httpd package
yum:
name: httpd
state: latest
- name: Copy main configuration file
copy:
src: ./httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: '0644'
- name: Copy virtual host configuration
copy:
src: ./vhosts.conf
dest: /etc/httpd/conf.d/vhosts.conf
owner: root
group: root
mode: '0644'
- name: Start and enable httpd service
service:
name: httpd
state: started
enabled: yes
4、执行Playbook:
ansible-playbook -i /etc/ansible/hosts apache_deploy.yml
三、混合部署方案(Shell + Ansible)
该方案结合Shell脚本的灵活性与Ansible的调度能力,以Shell完成前置环境准备(如密钥分发、本地源配置),再交由Ansible执行核心部署任务,形成闭环流程。适用于需定制化初始化步骤且后续配置需强一致性的场景。
1、编写初始化脚本init_env.sh,用于在控制节点执行:
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
for host in $(cat hosts_list); do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$host; done
2、在Ansible项目根目录下创建main.sh作为统一入口:
#!/bin/bash
./init_env.sh
ansible-playbook -i inventory/hosts apache_deploy.yml
3、运行该脚本启动全链路部署:
bash main.sh
4、验证部署结果,使用Ansible内置ping模块确认节点连通性:
ansible web -m ping










