我正在开发一个主机托管控制面板与代码点火器。到现在为止,一直都还不错。:)
现在我正在研究一个创建虚拟主机的解决方案。创建虚拟主机的shell脚本可以工作,所以我的第一个想法是每隔15分钟在cronjob中启动该脚本。那应该管用。
但不是每15分钟就有一个新的虚拟主机要创建。所以,我认为每15分钟重新加载Apache配置非常重要。
顺便说一句,在CodeIgniter方面,它只是生成一个简单的文本文件,其中包含该新虚拟主机所属的值。
那么,是否有一个节省的解决方案来实时进行呢?我的猜测是,这是实时使用shell_exec()的唯一方法,但这不是一种节省方法。
我必须说我的shell scipting非常新手,所以可能有一种方法可以触发if或else语句来选择创建虚拟主机或什么都不做。但我该怎么做呢?那我就不需要实时做了。
这是我的shell脚本:
#!/bin/bashvhroot='/etc/apache2/sites-available/'
NEW_DOMAINS="/home/domain.txt"
cat ${NEW_DOMAINS} | \
while read domain user email
do
echo"
ServerName "$domain"
ServerAlias www."$domain"
ServerAdmin"$email"
DocumentRoot /home/"$user"/domains/"$domain"/public_html
"> $vhroot/$domain
#mkdir /home/$user/domains/domain#mkdir /home/$user/domains/$domain/public_html#chown -R $user.$user /home/$user/domains/$domain
echo"111.21.111.111 $domain">> host.txt
#a2ensite $hostnamedone
echo""> /home/domain.txt
# /etc/init.d/apache2 reload
我希望有人能为这个问题找到一个简单但有效的解决办法。
非常有用。我做了一个新版本的脚本,它也删除了vhost,查找另一个.txt文件。文档根文件夹存储在/var/www/html/websites中。根据需要进行更改。脚本还检查变量$DOMAIN是否为空,以确保脚本不会在域名出错时运行。
#!/bin/bashvhroot='/etc/apache2/sites-available/'
NEW_DOMAINS="adddomain.txt"
has_new_domains=false #No new domains by default = do not reload the apache config.
cat ${NEW_DOMAINS} | \
while read domain
do
if [ ! -z"$domain" ];
then
has_new_domains=true #true = at least one new domain = reload apache config echo"
ServerName "$domain"
ServerAlias www."$domain"
ServerAdmin postmaster@"$domain"
DocumentRoot /var/www/html/websites/"$domain"
"> $vhroot/"$domain".conf #.conf extension needed to make a2ensite work in apache -debian mkdir /var/www/html/websites/
mkdir /var/www/html/websites/$domain
chown -R root:www-data /var/www/html/websites
chmod -R 755 /var/www/html/websites
#create index.html file echo"
Welcome to nginx on Debian!
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
Welcome to"$domain"
If you see this page, the Apache web server is successfully installed and working.
You can start building your website
">/var/www/html/websites/$domain/index.html
#echo"111.21.111.111 $domain">> host.txt a2ensite"$domain".conf
else echo 'No new domains'
fi
done
> adddomain.txt # with echo"" an empty line is still present in fileDEL_DOMAINS="deldomain.txt"
cat ${DEL_DOMAINS} | \
while read deldomain
do
has_new_domains=true #true = at least one new domain = reload apache config #Make sure we don't delete all parent directory , in case variable is empty if [ ! -z"$deldomain" ]; then
a2dissite"$deldomain".conf
echo"dominio"$deldomain" eliminado"
rm -r /var/www/html/websites/$deldomain
rm $vhroot/"$deldomain".conf
fi
done
> deldomain.txt
if $has_new_domains ; then #only reload the apache config if there is at least one new domain /etc/init.d/apache2 reload
fi
您可以向脚本中添加一个bool变量,并且仅在添加了新的vhost时重新启动Web服务器。
未经测试的:
#!/bin/bashvhroot='/etc/apache2/sites-available/'
NEW_DOMAINS="/home/domain.txt"
has_new_domains=false #No new domains by default = do not reload the apache config.
cat ${NEW_DOMAINS} | \
while read domain user email
do
has_new_domains=true #true = at least one new domain = reload apache config echo"
ServerName "$domain"
ServerAlias www."$domain"
ServerAdmin"$email"
DocumentRoot /home/"$user"/domains/"$domain"/public_html
"> $vhroot/$domain
#mkdir /home/$user/domains/domain #mkdir /home/$user/domains/$domain/public_html #chown -R $user.$user /home/$user/domains/$domain
echo"111.21.111.111 $domain">> host.txt
#a2ensite $hostnamedone
echo""> /home/domain.txt
if $has_new_domains ; then #only reload the apache config if there is at least one new domain /etc/init.d/apache2 reload
fi
顺便说一句:我希望$user和$domain中的所有东西都是安全的,不能用来将vhost以外的东西注入配置中。:)