約5年前、私はApache仮想ホストを自動的に生成するために次のBashスクリプトを作成しました。
#!/bin/bash
read -p "Have you created db credentials already?" yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "Please create db credentials and then comeback;";;
esac
function read_and_verify {
read -p "$1:" tmp1
read -p "$2:" tmp2
if [ "$tmp1" != "$tmp2" ]; then
echo "Values unmatched. Please try again."; return 2
else
read "$1" <<< "$tmp1"
fi
}
read_and_verify domain "Please enter the domain of your web application twice"
read_and_verify dbrootp "Please enter the app DB root password twice"
read_and_verify dbuserp "Please enter the app DB user password twice"
cat <<-EOF > /etc/apache2/sites-available/$domain_2.conf
<VirtualHost *:80>
ServerAdmin admin@"$domain_2"
ServerName ${domain_2}
ServerAlias www.${domain_2}
DocumentRoot $war/${domain_2}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF
ln -sf /etc/apache2/sites-available/"$domain_2".conf /etc/apache2/sites-enabled/
私はこれが最善のアプローチだとは思わない。まず、Apacheがそれ以降に更新された可能性があり、現在の構文が異なる可能性があり、2番目に、コードの一部が直感的ではなく(読みやすさが低い)、私が何かを持っているのか疑問に思うからです。どのプログラムでも、より標準的で効率的な方法でApache仮想ホストの作成を自動化できますが、まだBashを使用しています(私はAnsibleまたは同様のツールを使用していません)。
Bashを使用してApache仮想ホストを自動的に生成する方法は?
答え1
はい、スクリプトは正常に見えます。それでも動作するはずです – apache2は極度にその構成ファイルは比較的保守的です。
しかし、あなたの構成を見ると、必要次のようにドメインごとに構成があります。mod_vhost_alias
このモジュールを使用すると、サービスするドメインごとにサブディレクトリを作成して操作を完了できます。これらの項目はすべて基本的に同じ構成を持つようです。仮想ホスト構成、スクリプト、およびロギング設定を構成ファイルの代わりにデータベースに保存できる他のサードパーティのApacheモジュールもあります。
コードの一部が直感的ではなく(読みやすさが低い)、より標準的で効率的な方法でApache仮想ホストを自動的に生成するために使用できますが、まだBashを使用するために使用できるプログラムがあるかどうか疑問に思うからです(私はAnsibleまたはこれに似たものは使用しません)ツール)。
さて、外部ツールを呼び出す場合(必要に応じて)bashを「残す」ことができます。デフォルトでは、ansible とよく実績のある apache2 ロールの 1 つなど、他のユーザーがサーバー管理の自動化に使用するツールを使用することもできます。 bashスクリプトにすべてを直接書かなくても問題ありません!
あなたが選んだ方法は、あなたが言ったようにかなり妥当です。テンプレートファイルにテンプレートを作成し、そのファイルをストリーミングしてsed
新しいプロファイルを取得したり、jinja2
より複雑な置換を実行したりできます。
個人的には、ここでいくつかのアプリケーションセキュリティアンチパターンを見ることができます。ドメイン名とパスワードを手動で2回入力するように求められます。誰がこのようなことをしますか?私はこれらのデータベースパスワードが人々が即座に考える単語ではなく、ランダムに生成された長い文字列であることを望みます。