Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> Web 伺服器

Bash 腳本自動化部署 Apache httpd 虛擬主機:從 YUM 源配置到多站點生成

編輯:Web 伺服器

腳本功能概覽

  • 檢查 httpd 是否安裝,未安裝則透過 YUM 安裝(需預先配置本地/網路 YUM 源)。
  • 停用預設主站,啟用 NameVirtualHost。
  • 批量建立 5 個基於域名的虛擬主機目錄與測試首頁。
  • 自動生成 VirtualHost 配置區塊寫入 httpd.conf。
  • 語法檢查通過後啟動服務並設定開機自啟。

完整腳本(AutoSetWebServer.sh)

#!/bin/bash
# Author: honway
# ScriptName: AutoSetWebServer

set -euo pipefail

# 1. 配置 YUM 源(示範備份原 repo 並建立指向 FTP 的 repo)
YUM_DIR=/etc/yum.repos.d
for f in "$YUM_DIR"/*.repo; do
    [ -f "$f" ] && mv "$f" "${f}.bak"
done

cat > "$YUM_DIR/yumconf.repo" <<'EOF'
[Server]
name=Server
baseurl=ftp://172.16.0.1/pub/Server
gpgcheck=0
enabled=1

[VT]
name=VT
baseurl=ftp://172.16.0.1/pub/VT
gpgcheck=0
enabled=1

[Cluster]
name=Cluster
baseurl=ftp://172.16.0.1/pub/Cluster
gpgcheck=0
enabled=1

[ClusterStorage]
name=ClusterStorage
baseurl=ftp://172.16.0.1/pub/ClusterStorage
gpgcheck=0
enabled=1

[errata]
name=errata
baseurl=ftp://172.16.0.1/pub/errata
gpgcheck=0
enabled=0
EOF

# 2. 安裝 httpd
if ! rpm -q httpd &>/dev/null; then
    echo "Installing httpd..."
    yum -y install httpd
else
    echo "httpd already installed."
fi

# 3. 修改主配置:註解預設 DocumentRoot、啟用 NameVirtualHost
sed -i 's@^\(DocumentRoot[[:space:]]\+"\)@#\1@' /etc/httpd/conf/httpd.conf
sed -i 's@^#\(NameVirtualHost[[:space:]]\+[^[:space:]]\+:80\)@\1@' /etc/httpd/conf/httpd.conf

# 4. 建立虛擬主機目錄
mkdir -p /vhosts/{magedu,bbs,wp,pw,pma}

# 5. 批量生成 VirtualHost 區塊
FQDN=magedu.com
CONF=/etc/httpd/conf/httpd.conf

declare -A VHOSTS=(
    ["www.$FQDN"]="/vhosts/magedu"
    ["bbs.$FQDN"]="/vhosts/bbs"
    ["wp.$FQDN"]="/vhosts/wp"
    ["pw.$FQDN"]="/vhosts/pw"
    ["pma.$FQDN"]="/vhosts/pma"
)

for server_name in "${!VHOSTS[@]}"; do
    doc_root="${VHOSTS[$server_name]}"
    cat >> "$CONF" <
    ServerName $server_name
    DocumentRoot $doc_root

EOF
    echo "$server_name" > "$doc_root/index.html"
done

# 6. 語法檢查並啟動
if httpd -t; then
    chkconfig --level 345 httpd on
    service httpd start
    echo "httpd started successfully."
else
    echo "httpd configuration test failed!" >&2
    exit 1
fi

使用說明

  1. 將腳本存為 AutoSetWebServer.sh,賦予執行權限:chmod +x AutoSetWebServer.sh。
  2. 確保 YUM 源可用(腳本中 FTP 位址需替換為實際環境源)。
  3. 以 root 執行:./AutoSetWebServer.sh。
  4. 完成後,瀏覽器分別訪問 www.magedu.com、bbs.magedu.com... 驗證首頁顯示對應 FQDN。

關鍵點解析

  • set -euo pipefail:腳本嚴謹模式,變數未定義/命令失敗/管道失敗即退出。
  • declare -A 關聯陣列:Bash 4.0+ 支援,優雅映射域名與目錄。
  • sed 正則修改配置:註解預設根目錄、取消註解 NameVirtualHost。
  • httpd -t:語法檢查,避免錯誤配置導致服務無法啟動。
  • chkconfig --level 345 httpd on:設定運行級別 3/4/5 自啟(SysVinit),systemd 環境請改 systemctl enable httpd。
  • 擴充建議

    • 加入 SSL 憑證自動部署(Let's Encrypt + certbot)。
    • 整合日誌切割(logrotate)、監控(Prometheus node_exporter + apache_exporter)。
    • 納入 CI/CD 流程,實現基礎設施即代碼。]
Copyright © Windows教程網 All Rights Reserved