Script de criação de Virtual Hosts no Apache 2.4 (Linux)

Para quem leu meu post sobre criação de virtual host no Apache 2.4 executando no Linux, aqui vai um ShellScript que automatiza a criação.

#!/usr/bin/php
<?php

//testa se o usuário que executou o script é ROOT
exec ('id -u', $uid);
$uid = join("", $uid);
settype($uid, 'integer');

echo "UID do usuário de execução é $uid".PHP_EOL;

if($uid !== 0){
	exit("Usuário não é ROOT ($uid)".PHP_EOL);
}else{
	echo "Executando comandos como ROOt ($uid)".PHP_EOL;
}

$etc = '/etc/apache2/sites-available';//caminho para a configuração de vhost no Apache 2.4. Não colocar barra ao final
$htdocs = '/home/everton/Documentos/www';//caminho para o diretório onde ficará o DocumentRoot, sem barra oa final
$user = 'everton';//usuário normal
$group = 'everton';//grupo do usuário normal

//verifica se o nome do vhost foi passado
if(key_exists(1, $argv) && strlen($argv[1]) > 0){
	$vhost = (string) $argv[1];
	echo "Iniciando criação de $vhost", PHP_EOL;
}else{
	die("VHOST não definido.");
}

//cria o diretório para o vhost e um diretório public
if(mkdir("$htdocs/$vhost", 0755)){
	echo "Diretório $htdocs/$vhost criado", PHP_EOL;
}else{
	die("Erro ao tentar criar diretório $htdocs/$vhost");
}

if(mkdir("$htdocs/$vhost/public", 0755)){
	echo "Diretório $htdocs/$vhost/public criado", PHP_EOL;
}else{
	die("Erro ao tentar criar diretório $htdocs/$vhost/public");
}

//cria um index.php padrão
$index = <<<INDEX
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>$vhost</title>  
    </head>
    <body>
        <p>Hello world $vhost!</p>
    </body>
</html>
INDEX;
if(file_put_contents("$htdocs/$vhost/public/index.php", $index)){
	echo "index.php criado para $vhost", PHP_EOL;
}else{
		echo "Erro ao index.php para $vhost", PHP_EOL;
		echo "A falta de um index irá retornar erro 403 Forbidden, mas o Virtual Host irá funcionar mesmo assim.", PHP_EOL;
}

//configura proprietário e grupo para o diretório base
if(chown("$htdocs/$vhost", "everton")){
	echo "Proprietário de $vhost configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar proprietário de  $vhost");
}

if(chown("$htdocs/$vhost/public", "everton")){
	echo "Proprietário de $vhost/public configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar proprietário de  $vhost/public");
}

if(chown("$htdocs/$vhost/public/index.php", "everton")){
	echo "Proprietário de $vhost/public/index.php configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar proprietário de  $vhost/public/index.php");
}


if(chgrp("$htdocs/$vhost", "everton")){
	echo "Grupo de $vhost configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar grupo de  $vhost");
}

if(chgrp("$htdocs/$vhost/public", "everton")){
	echo "Grupo de $vhost/public configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar grupo de  $vhost/public");
}

if(chgrp("$htdocs/$vhost/public/index.php", "everton")){
	echo "Grupo de $vhost/public/index.php configurado", PHP_EOL;
}else{
	die("Erro ao tentar configurar grupo de  $vhost/public/index.php");
}

//cria o arquivo de configuração
$default = <<<HEREDOC
# Cria um virtual host para http://$vhost:80
<VirtualHost $vhost:80>
	# Nome e apelido para o virtualhost
	ServerName $vhost
	ServerAlias www.$vhost
	
	# e-mail do administrador
	ServerAdmin everton@localhost

	# Caminho para a raiz do virtualhost
	DocumentRoot $htdocs/$vhost/public
	
	# Arquivos de log personalizados
	ErrorLog \${APACHE_LOG_DIR}/$vhost.error.log
	CustomLog \${APACHE_LOG_DIR}/$vhost.access.log combined

	# Diretivas de acesso à raiz do virtualhost
	<Directory $htdocs/$vhost/public>
		# Permite o acesso (a partir do Apache 2.4)
		Require all granted
	</Directory>
</VirtualHost>
HEREDOC;

if(file_put_contents("$etc/$vhost.conf", $default)){
	echo "Configuração do Apache criada", PHP_EOL;
}else{
	die("Falha ao criar a configuração do Apache");
}

//ativa o vhost
echo "Ativando $vhost no Apache", PHP_EOL;

passthru("a2ensite $vhost.conf", $result);

//reinicia o apache
echo "Reiniciando o Apache", PHP_EOL;

if($result === 0){
	passthru("service apache2 restart");
}else{
	die("Não foi possível concluir");
}

echo "$vhost deve estar funcionando.", PHP_EOL;
echo "Acesse http://$vhost para testar.", PHP_EOL;

(Atualizado para corrigir permissões do index.php)

(Atualizado para incluir verificação de execução como ROOT)

Para utilizar, basta rodar o seguinte comando no terminal:

sudo create-vhost.php myvhostname

create-vhost.php é o nome do script e myvhostname é o nome do virtual host.

Observe que ele deve ser executado como sudo em virtude das permissões de acesso ao diretório de configuração do apache.

A linha #!/usr/bin/php colocada no início do script faz com que ele seja executado pelo PHP, então é preciso que o PHP esteja instalado na máquina, além do Apache 2.4.

Não esqueça de colocar permissão de execução no arquivo create-vhost.php




Everton da Rosa

Contador de profissão e programador de vocação. Autodidata em PHP e linguagens Web.

1 Comentário

Deixe uma resposta

%d blogueiros gostam disto: