Adicionando e Removendo Servidores Virtuais no Ubuntu

02/02/2020 às 11:36 Bruno Couty

Aqui vai uma dica muito prática para desenvolvedores amadores ou profissionais. Para fins práticos, imagine que você possua um VPS e deseje hospedar um ou, principalmente, mais sites ou API's dentro deste VPS. Aparentemente, uma tarefa simples, desde que realizemos as configurações corretas e nosso VPS. Vamos começar?!

Criando / Adicionando um Virtual Host

Primeiro, precisamos criar uma pasta para hospedar os arquivos do novo site e adicionar as devidas permissões de acesso a esta pasta.

sudo mkdir -p /var/www/example.com/public_html
# Aqui, lembre-se que o "-R" representa "recursividade", ou seja, o comando se replica para pastas e arquivos dentro do diretório
sudo chown -R $USER:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com

Os arquivos do site devem estar na pasta criada acima.

Agora, vamos criar o arquivo que será responsável por configurar o vHost:

sudo vim /etc/apache2/sites-available/example.com.conf

Aqui, está um exemplo básico, mas efetivo, do arquivo de configuração. Você deve fazer os ajustes adequados para seu projeto, ok.

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName example.com
  ServerAlias www.example.com

  DocumentRoot /var/www/example.com/public_html
  <Directory /var/www/example.com/public_html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

O próximo passo é habilitar o novo vHost e reiniciar o apache:

sudo a2ensite example.com.conf
sudo service apache2 restart

Removendo um Virtual Host

Para remover uma entrada que não é mais utilizada, devemos, primeiramente, remover o vHost e reiniciar o apache:

sudo rm /etc/apache2/sites-available-example.com.conf
sudo rm -Rf /var/www/example.com

Agora, o vHost já não está mais acessível e é seguro excluir os arquivos, tanto de configuração quanto os arquivos de fonte do projeto.

sudo rm /etc/apache2/sites-available/example.com.conf
sudo rm -Rf /var/www/example.com

Automação

Aqui está um arquivo BASTANTE SIMPLES para automatizar este processo. Criamos o /usr/local/bin/site-add e adicionamos o seguinte conteúdo:

#!/bin/bash

green=`tput setaf 2`
reset=`tput sgr0`

echo "|- Start ----------------------------------|"
echo ""
echo "|- Creating the site folder ---------------|"
mkdir -p /var/www/$1
echo "[ ${green}OK${reset} ]"
echo "|- Setting Permission ---------------------|"
chown -R $USER:www-data /var/www/$1
chmod -R 755 /var/www
chown -R www-data:www-data /var/www/$1
echo "[ ${green}OK${reset} ]"
echo "|- Creating Virtual Host ------------------|"
touch /etc/apache2/sites-available/$1.conf
echo "
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName $1
    ServerAlias www.$1
    DocumentRoot /var/www/$1/public
    <Directory /var/www/$1/public/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>" > /etc/apache2/sites-available/$1.conf
echo "[ ${green}OK${reset} ]"
echo "|- Enable the new Virtual Host ------------|"
a2ensite $1.conf
echo "[ ${green}OK${reset} ]"
echo "|- Restarting Apache ----------------------|"
service apache2 restart
echo "[ ${green}OK${reset} ]"
echo "|- Editing Local Host File ----------------|"
echo "111.111.111.111 $1" >> /etc/hosts
echo "| - Enable Laravel Routes -----------------|"
a2enmod rewrite
echo "[ ${green}OK${reset} ]"
echo "|- Restarting Apache ----------------------|"
service apache2 restart
echo "[ ${green}OK${reset} ]"
echo "|- END ------------------------------------|"

Dê ao arquivo permissão de execução (chmod +x /usr/local/bin/site-add).

Para rodar, de modo a automatizar todas as instruções de criação do vHost, execute:

site-add seusite.com

Remover Sites

Da mesma forma, crie um arquivo para a remoção, com o seguinte conteúdo:

#!/bin/bash

green=`tput setaf 2`
reset=`tput sgr0`
# echo "${red}red text ${green}green text${reset}"

echo "|- Start ----------------------------------|"
echo ""
echo |- Disable site ----------------------------|"
sudo a2dissite $1
rm /etc/apache2/sites-available/$1.conf
tar czf $1.tar.gz $1
rm -rf /var/www/$1 
echo "[ ${green}OK${reset} ]"
echo "|- END ------------------------------------|"

Pronto! Curtiu a dica?