Gerenciar hosts virtuais do Apache
Publicado por Diogo Alexsander Cavilha (última atualização em 16/09/2015)
[ Hits: 4.551 ]
Homepage: https://github.com/diogocavilha
Download 1426732092.vhost.sh (versão 2)
Download 1441248482.vhost.sh (versão 3)
Boa noite, pessoal.
Essa é o meu primeiro compartilhamento aqui na comunidade. Espero que seja útil para muitos de vocês.
Sou desenvolvedor web e muitas vezes me deparei com a situação de criar hosts virtuais para rodar projetos.
Pois bem, depois de tanto tempo tendo que fazer o trabalho manual, resolvi fazer um script para tomar conta dessa tarefa por mim.
Antes de resolver criá-lo eu fiz uma breve pesquisa pra ver se o que eu queria já não tinha sido desenvolvido por outra pessoa. Encontrei muitos scripts que faziam o que eu queria, mas não faziam da forma que eu imaginava, todos funcionavam como um gatilho para gerar os arquivos sem que houvesse qualquer tipo de interação com o usuário. Confesso que não me empenhei muito na pesquisa porque eu realmente estava com vontade de fazer meu próprio script =D
Então, como a vontade de criar algo de forma diferente foi maior, acabei desenvolvendo meu próprio gerenciador de hosts virtuais.
P.S.: Não sou um profundo conhecedor de shell script, então esse projetinho acabou sendo também como um laboratório pra mim.
Caso alguém se interesse e queira contribuir para melhorar o script, é só acessar o repositório no bitbucket:
https://bitbucket.org/diogocavilha/vhost/src/207b0814e947bfbf0e4e55a3308df3dfb91df216/?at=apache2
Lá no repositório também tem uma branch com a versão do script para o servidor nginx.
Toda ajuda é bem vinda.
É isso. Espero ter facilitado a vida de alguém com esse script :)
Versão 2 - Enviado por Diogo Alexsander Cavilha em 18/03/2015
Changelog: Melhoria na expressão regular que remove o server name do arquivo /etc/hosts.
Versão 3 - Enviado por Diogo Alexsander Cavilha em 02/09/2015
Changelog: - Criação de menus. Interatividade na execução.
- Gerenciamento de host do Apache e do Nginx.
- Menu para selecionar o servidor desejado.
- Listagem de hosts habilitados e desabilitados
- Confirmação para ações de gerenciamento.
P.S: Projeto movido para: https://github.com/diogocavilha/vhost
#!/bin/bash
#==================================================================#
# Autor: Diogo Alexsander Cavilha <diogocavilha@gmail.com>
# Data: 06/05/2014
#
# Descrição:
# Cria a configuração de virtual host.
# Gera o link simbólico para /etc/apache2/sites-enabled
# Adiciona IP e Server name no arquivo /etc/hosts
# Reinicia o servidor Apache
#==================================================================#
#. config.ini
VERSION="2.0"
HOSTS_FILE="/etc/hosts"
SITES_AVAILABLE="/etc/apache2/sites-available"
SITES_ENABLED="/etc/apache2/sites-enabled"
IP_ADDRESS="127.0.0.1"
SERVER_NAME="Apache"
#. messages
messageRed()
{
echo -e "\033[0;31m$1\033[0m"
sleep 1
}
messageYellow()
{
echo -e "\033[1;33m$1\033[0m"
}
messageBlue()
{
echo -e "\033[0;34m$1\033[0m"
sleep 1
}
messageGreen()
{
echo -e "\033[0;32m$1\033[0m"
sleep 1
}
environmentVars=""
#------------------------------------------------------------------#
# This function checks whether or not the user who is running this
# script is root.
#------------------------------------------------------------------#
requireRoot()
{
if [ ! "$USER" == "root" ]; then
messageRed "\nVocê precisa estar logado como root.\n"
exit 1
fi
}
#------------------------------------------------------------------#
# This function receives a file name in order to check whether or
# not it exists.
# Returned value:
# 0 - File does not exist.
# 1 - File exists.
#------------------------------------------------------------------#
fileExists()
{
if [ -e "$1" ]; then
return 1
else
return 0
fi
}
#------------------------------------------------------------------#
# This function receives a directory name in order to check whether
# or not it exists.
# Returned value:
# 0 - Diretory does not exist.
# 1 - Diretory exists.
#------------------------------------------------------------------#
folderExists()
{
if [ -d "$1" ]; then
return 1
else
return 0
fi
}
#------------------------------------------------------------------#
# This function receives a port number in order to check whether
# or not it is available.
# Returned value:
# 0 - This port number is available.
# 1 - This port number is not available.
#------------------------------------------------------------------#
isUsedPort()
{
$(nc -z -w5 $IP_ADDRESS $1)
if [ $? -eq 0 ]; then
return 1
else
return 0
fi
}
#------------------------------------------------------------------#
# This function requests the environment variable name.
#------------------------------------------------------------------#
requireEnvironmentVarName()
{
echo -n " Nome: "
read evName
if [ -z $evName ]; then
requireEnvironmentVarName
fi
}
#------------------------------------------------------------------#
# This function requests the environment variable value.
#------------------------------------------------------------------#
requireEnvironmentVarValue()
{
echo -n " Valor: "
read evValue
if [ -z $evValue ]; then
requireEnvironmentVarValue
fi
}
#------------------------------------------------------------------#
# This function joins all environment variables to a single string.
#------------------------------------------------------------------#
appendEnvironmentVars()
{
requireEnvironmentVarName
requireEnvironmentVarValue
environmentVars+="\tSetEnv $evName \"$evValue\"\n"
echo -e -n "\n Adicionar mais uma? [S/N]: "
read oneMore
case $oneMore in
"s"|"S") appendEnvironmentVars;;
*) ;;
esac
}
#------------------------------------------------------------------#
# This function requests the file name that will be created
# in order to store the configuration code.
#------------------------------------------------------------------#
requireFileName()
{
echo -n -e "\n Nome do arquivo que conterá a configuração do host: "
read vhFileName
if [ ! -z $vhFileName ]; then
vhFileName+=".conf"
$(fileExists "$SITES_AVAILABLE/$vhFileName")
if [ $? -eq 1 ]; then
messageRed "\n [$SITES_AVAILABLE/$vhFileName] Arquivo já existe.\n"
requireFileName
fi
else
requireFileName
fi
}
#------------------------------------------------------------------#
# This function requests the application directory.
#------------------------------------------------------------------#
requireApplicationFolder()
{
echo -n " Caminho da aplicação (Ex: /diretorio/contendo/aplicacao): "
read vhPath
if [ ! -z $vhPath ]; then
$(folderExists "$vhPath")
if [ $? -eq 0 ]; then
messageRed "\n [$vhPath] O diretório não existe.\n"
requireApplicationFolder
fi
else
requireApplicationFolder
fi
}
#------------------------------------------------------------------#
# This function requires the port number on which the
# application will run.
#------------------------------------------------------------------#
requireApplicationPort()
{
echo -n " Porta: "
read vhPort
if [ ! -z $vhPort ]; then
$(isUsedPort "$vhPort")
if [ $? -eq 1 ]; then
messageRed "\n [$vhPort] Esta porta já está sendo utilizada.\n"
requireApplicationPort
fi
fi
}
#------------------------------------------------------------------#
# This function requires the application's server name.
#------------------------------------------------------------------#
requireApplicationServerName()
{
echo -n " Server Name: "
read vhServerName
if [ -z $vhServerName ]; then
requireApplicationServerName
fi
}
#------------------------------------------------------------------#
# This function writes the host configuration code on its
# correspondent file.
#------------------------------------------------------------------#
writeConfiguration()
{
vhPort=$1
vhServerName=$2
if [ -z $vhPort ]; then
`echo "<VirtualHost *:80>" >> $SITES_AVAILABLE/$vhFileName`
else
`echo "Listen $vhPort" >> $SITES_AVAILABLE/$vhFileName`
`echo "<VirtualHost *:$vhPort>" >> $SITES_AVAILABLE/$vhFileName`
fi
`echo -e "\tDocumentRoot $vhPath" >> $SITES_AVAILABLE/$vhFileName`
if [ ! -z $vhServerName ]; then
`echo -e "\tServerName $vhServerName" >> $SITES_AVAILABLE/$vhFileName`
`echo "" >> $SITES_AVAILABLE/$vhFileName`
else
`echo -e "\t#ServerName $vhFileName.local" >> $SITES_AVAILABLE/$vhFileName`
fi
if [ ${#environmentVars} -gt 0 ]; then
`echo -e $environmentVars >> $SITES_AVAILABLE/$vhFileName`
else
`echo -e "\t#SetEnv VAR_NAME\t\"value\"" >> $SITES_AVAILABLE/$vhFileName`
fi
`echo -e "\t<Directory $vhPath/>" >> $SITES_AVAILABLE/$vhFileName`
`echo -e "\t\tOptions Indexes FollowSymLinks MultiViews" >> $SITES_AVAILABLE/$vhFileName`
`echo -e "\t\tAllowOverride All" >> $SITES_AVAILABLE/$vhFileName`
`echo -e "\t\tOrder allow,deny" >> $SITES_AVAILABLE/$vhFileName`
`echo -e "\t\tallow from all" >> $SITES_AVAILABLE/$vhFileName`
`echo -e "\t</Directory>" >> $SITES_AVAILABLE/$vhFileName`
`echo "</VirtualHost>" >> $SITES_AVAILABLE/$vhFileName`
}
restartApache()
{
messageBlue " * Reiniciando o apache..."
service apache2 restart
}
#------------------------------------------------------------------#
# This function creates the files within sites-enabled and
# sites-available folders.
#------------------------------------------------------------------#
addHost()
{
requireRoot
requireFileName
requireApplicationFolder
requireApplicationPort
if [ ${#vhPort} -eq 0 ]; then
requireApplicationServerName
fi
echo -e -n "\n Deseja adicionar variáveis de ambiente? [S/N]: "
read addEnvironmentVar
case $addEnvironmentVar in
"s"|"S") appendEnvironmentVars;;
*) ;;
esac
messageBlue "\n * Criando host..."
touch $SITES_AVAILABLE/$vhFileName
writeConfiguration "$vhPort" "$vhServerName"
messageBlue " * Habilitando host..."
a2ensite $vhFileName
if [ ${#vhServerName} -gt 0 ]; then
messageBlue "\n * Fazendo backup do arquivo $HOSTS_FILE"
cp /etc/hosts /etc/hosts.backup
messageBlue " * Adicionando entrada no arquivo $HOSTS_FILE"
`echo -e "$IP_ADDRESS $vhServerName" >> $HOSTS_FILE`
fi
restartApache
address="http://"
if [ ${#vhPort} -gt 0 ]; then
address+="$IP_ADDRESS:$vhPort"
else
if [ ${#vhServerName} -gt 0 ]; then
address+="$vhServerName"
fi
fi
messageBlue " Host criado com sucesso --> [$address]"
}
#------------------------------------------------------------------#
# This function receives the file name and remove it from
# sites-enabled and sites-available folders.
#------------------------------------------------------------------#
removeHost()
{
requireRoot
host=$1
exists=0
serverName=$(grep ServerName $SITES_ENABLED/$host | awk '{print $2}')
documentRoot=$(grep DocumentRoot $SITES_ENABLED/$host | awk '{print $2}')
messageBlue "\n * Removendo entrada do arquivo /etc/hosts"
sed "s/$IP_ADDRESS $serverName//" /etc/hosts > /etc/hosts2
mv -f /etc/hosts2 /etc/hosts
if [ ${#host} -gt 0 ]; then
if [ -e "$SITES_ENABLED/$host" ]; then
messageBlue " * Removendo link..."
rm "$SITES_ENABLED/$host"
exists=1
fi
if [ -e "$SITES_AVAILABLE/$host" ]; then
messageBlue " * Removendo host..."
rm "$SITES_AVAILABLE/$host"
exists=1
fi
if [ $exists -eq 0 ]; then
messageRed "\n Este host não existe.\n"
else
restartApache
fi
else
messageRed "\n Host não informado."
fi
}
#------------------------------------------------------------------#
# This function shows an available and enabled hosts list.
#------------------------------------------------------------------#
listHosts()
{
echo ""
messageYellow "[ $SITES_AVAILABLE ]\n"
for hostName in $(ls $SITES_AVAILABLE); do
echo -e "\t$SITES_AVAILABLE/\033[1;33m$hostName\033[0m"
done
echo ""
messageYellow "[ $SITES_ENABLED ]\n"
for hostName in $(ls $SITES_ENABLED); do
echo -e "\t$SITES_AVAILABLE/\033[1;33m$hostName\033[0m"
done
echo ""
}
#------------------------------------------------------------------#
# This function shows the script version.
#------------------------------------------------------------------#
showVersion()
{
echo -e VirtualHostAutomat v.$VERSION"\n"
}
#------------------------------------------------------------------#
# This function shows the script help.
#------------------------------------------------------------------#
helpScript()
{
echo "Modo de usar: vhost [opções]"
echo ""
echo "Opções:"
echo -e " -a, --add\t\t\t Adiciona/Cria um host de forma interativa."
echo -e " -d, -r, --delete, --remove <nome do host>\t Deleta um host."
echo -e " -l, --list\t\t\t Exibe uma lista dos hosts criados."
echo -e " -h, --help\t\t\t Exibe este help ;)"
echo -e " -v, --version\t\t\t Exibe a versão do script."
echo ""
}
#------------------------------------------------------------------#
# This function manages this script call.
#------------------------------------------------------------------#
case $1 in
"-a"|"--add") addHost;;
"-d"|"-r"|"--delete"|"--remove") removeHost "$2";;
"-l"|"--list") listHosts;;
"-h"|"--help") helpScript;;
"-v"|"--version") showVersion;;
esac
Zwifi - Conectar em rede Wi-Fi via terminal
Screenshot com contagem regressiva e mensagens
Script para preparar o pc para receber e gerenciar celular MOTOROLA (refeito o script)
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Opções secretas em tema do Cinnamon
Como mapear unidade de rede no Linux
Como quebrar senha usando john the ripper
Não consigo instalar distro antiga no virtualbox nem direto no hd (25)
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)









