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!