GNU make funciona bem
Você pode usar o GNU make 1 , onde criar um novo host virtual é tão simples quanto executar make example.com
Curto e simples: um modelo estático
Primeiro, crie /etc/apache2/sites-available/Makefile contendo:
% :
printf '%s\n' \
'<VirtualHost *:80>' \
' DocumentRoot "/var/www/html/$@"' \
' ServerName www.$@' \
' <Directory "/var/www/html/$@">' \
' Options +SymLinksIfOwnerMatch' \
' Require all granted' \
' </Directory>' \
' ServerAlias www.$@' \
'</VirtualHost>' \
> "$@"
a2ensite "$@"
systemctl restart apache2.service
Observe que cada linha após % : começa com uma guia, não com espaços. Observe também que a maioria disso é efetivamente seu arquivo de modelo, mas com d.t substituído por $@ .
Depois disso, você pode criar um novo host virtual chamado domain.tld :
cd /etc/apache2/sites-available
make domain.tld
Adicionando opções: vários modelos
Essa foi uma das maneiras mais simples de usar make . Para uma configuração um pouco mais complexa, suponha que você tenha dois (ou mais) modelos. Eu mostrarei um aqui, que chamei de basic.template , como um padrão:
<VirtualHost *:80>
DocumentRoot "/var/www/html/$domain$"
ServerName www.$domain$
<Directory "/var/www/html/$domain$">
Options +SymLinksIfOwnerMatch
Require all granted
</Directory>
ServerAlias www.$domain$
</VirtualHost>
Você poderia então modificar (simplificar!) o seu Makefile :
% :
sed 's/\$$domain\$$/$@/g' < "$<" > "$@"
a2ensite "$@"
systemctl restart apache2.service
.PHONY : all
all :
@true
Aqui, a receita envolve o uso de sed para substituir uma variável do formulário $domain$ pelo nome de domínio pretendido. Além disso, adicionei uma meta PHONY chamada all , cujo uso logo se tornará aparente.
Para criar um host virtual agora, você terá que especificar o modelo which a ser usado. Para mim, parece melhor envolver isso em um script.
#!/bin/sh
# File update-makefile
# Call as:
# ./update-makefile domain.tld basic.template
sed '/^all :/s/$/ '"$1"'/' < Makefile > Makefile.new
printf '%s\n' "$1 : $2" >> Makefile.new
mv Makefile.new Makefile
Note que isto tem um passo adicional de adicionar 2 o novo host virtual ao Makefile. Isso permite que make veja qual modelo domain.tld depende . Então você poderia fazer:
cd /etc/apache2/sites-available
./update-makefile domain.tld basic.template && make
Com essa configuração, o site todos será atualizado se o modelo correspondente tiver sido alterado.
É importante que all seja o primeiro alvo . Isso torna o padrão quando make é chamado sem argumentos. O script update-makefile adiciona o novo domínio como uma dependência de all , portanto make irá recriá-lo se ficar desatualizado em relação à sua própria dependência, o arquivo de modelo.
1 make é uma ferramenta que é usada para criar arquivos de destino de um conjunto de receitas e dependências que estão documentados em Makefile . Na sintaxe do GNU,
% :
# do stuff
é uma regra padrão . Afirma que um arquivo com qualquer nome ( % ) pode ser criado como um destino e que não possui dependências. O # do stuff é a receita (qualquer script de shell), recuado por uma guia. Existem variáveis que você pode usar para se referir ao nome do destino ( $@ ), à primeira dependência ( $< ) ou a todas as dependências ( $^ ), entre outras. Para mais informações, consulte Wikipedia .
Seu sistema pode não ter make instalado. Nesse caso, você teria que instalá-lo por conta própria. Além disso, alguns sistemas usam uma variante BSD de make . Os conceitos são os mesmos, mas a sintaxe das regras é um pouco diferente das versões GNU.
2 Certifique-se de usar >> para acrescentar ao invés de > para sobrescrever!