大约五年前,我创建了以下 Bash 脚本来自动创建 apache 虚拟主机。
#!/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 可能从那时起就进行了更新,现在语法可能有所不同,其次是因为部分代码不直观(可读性低)并且想知道是否有我可以使用任何程序以更标准、更高效的方式自动创建 Apache 虚拟主机,但仍使用 Bash(我不使用 Ansible 或类似工具)。
如何用Bash自动创建apache虚拟主机?
答案1
是的,你的剧本看起来很正常。应该仍然可以工作 – apache2 是极其其配置文件比较保守。
然而,看看你的配置,我什至不确定你是否需要具有每个域的配置,如mod_vhost_alias
模块可以允许您为您想要服务的每个域创建一个子目录,并完成它 - 这些似乎都具有基本相同的配置。还有大量的第三方 apache 模块,允许将虚拟主机配置、脚本和日志设置存储在数据库而不是配置文件中。
因为部分代码不直观(可读性低),并且想知道是否有任何程序可以用来以更标准和更有效的方式自动创建 Apache 虚拟主机,但仍使用 Bash(我不使用 Ansible 或类似的工具)。
好吧,如果您调用外部工具,您就可以“离开”bash(如果您愿意的话)。也可以使用其他人用于服务器管理自动化的工具,例如本地的 ansible 和经过充分验证的 apache2 角色之一。不在 bash 脚本中自己编写所有内容并没有什么问题!
至于你选择的方法,正如所说,是相当合理的。我可能会将模板写入模板文件并流式传输该文件sed
以获取新的配置文件,或者只是用于jinja2
执行更复杂的替换。
就我个人而言,我会在这里看到一些应用程序安全反模式。您要求手动输入两次域名和密码。谁这样做?我希望这些数据库密码是随机生成的长字符串,而不仅仅是人们临时想到的单词。