Recentemente me deparei com uma necessidade incomum em minha breve, mas ativa, carreira de desenvolvedor/suporte. Eu estava envolvido em alguns projetos distintos que precisavam ser disponibilizados para testes antes do uso efetivo das ferramentas, todos na mesma época e usando estruturas de pastas diferentes entre si.
A princípio, a resolução deste "problema" é simples, hospedar estes projetos em servidores diferentes ou jogar todos estes projetos no Document Root do Apache e referenciar os diretórios pela URL. Ok, funcionaria, mas, na ocasião, era necessário informar domínios diferentes para cada projeto.
Então, para que fique mais claro, o cenário era o seguinte:
- Apenas um servidor para hospedar os projetos;
- Projetos com estrutura de pastas diferentes;
- Necessidade de uso de domínios diferentes para acessar cada projeto.
Na época encontrei diversas dicas como "crie um arquivo .httpaccess na raiz do seu projeto...", "altere o arquivo do framework X, caso seu projeto use esse framework...", alguns como "crie um arquivo PHP com essa classe aqui..." e alguns engenhosos recomendando o cadastro regras de NAT do IPTables para usar portas diferentes e passar o link especificando a porta. Todas estas sugestões funcionariam? Sim, algumas demandando mais tempo, outras menos, mas, em minha opinião, nenhuma era a ideal.
Então, como resolver? A maioria das pessoas que conheço -me incluo aqui-, talvez pela facilidade de instalação e uso básico do Apache ou mesmo por ser uma situação incomum em ambientes pequenos, configurar mais de um site por servidor, "lê" guias de instalação do Apache e não se dão conta de que é possível hospedar diversos sites usando uma única instalação do Apache.
Basicamente, o que faremos é fazer com o que o Apache "leia" a URL e decida o que fazer de acordo com o endereço informado. Por exemplo:
- Se o usuário indicar a URL "http://meusite.com.br", redirecione a requisição pra pasta "meusite/";
- Se o usuário indicar a URL "http://projeto.com.br", redirecione, então, para "projeto/public";
- Se o usuário indicar a URL "http://projeto.com.br/admdb", redirecione para o diretório do PHPMyAdmin, que não tem nada a ver com o diretório "projeto".
Primeiro passo: entender minimamente o funcionamento do Apache e realizar sua instalação.
A documentação da versão 2.4 do Apache, última versão disponível no momento de edição do artigo, pode ser encontrada aqui:
https://httpd.apache.org/docs/2.4/
Quanto a instalação da ferramenta, usando Debian 9, por mero exemplo, basta usar o comando:
# apt-get install apache2
Este deve ser executado com permissões administrativas.
Após concluído o processo de instalação, navegue até o diretório '/var/www/html/', este é o diretório padrão do Apache, o famoso "DocumentRoot" da ferramenta. Os diretórios de projetos serão adicionados aqui para fins didáticos, mas fique a vontade para configurar seu ambiente como bem entender.
Copiados os diretórios para o DocumentRoot default do Apache, teremos então a seguinte estrutura:
/var/www/html/biblioteca
/var/www/html/biblioteca/public
/var/www/html/biblioteca/public/css/style.css
/var/www/html/biblioteca/public/js/js.js
/var/www/html/biblioteca/public/imagens/foto.png
/var/www/html/biblioteca/documentos
/var/www/html/biblioteca/documentos/readme.md
/var/www/html/panificadora
/var/www/html/panificadora/foto.jpg
/var/www/html/panificadora/js.js
/var/www/html/panificadora/index.html
/var/www/html/panificadora/login.html
/var/www/html/panificadora/style.css
Dito isto, vamos nos atentar agora às configurações do Apache:
Atenção aqui! Em '/etc' há o diretório de configuração do Apache, '/etc/apache2'.
Vamos nos atentar somente a uma pasta, a 'sites-available'. Dentro dela, por padrão, haverá um arquivo de configuração de site nomeado '000-default.conf'. Se você abri-lo para leitura ou edição, se deparará com este conteúdo, que, excluindo os comentários, é o seguinte:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Estas são as configurações do site '000-default', sendo:
- <VirtualHost *:80> -> Referencia o VirtualHost do site em questão, ou seja, uma referência de configurações para as informações de site contidas nesta diretiva;
- ServerAdmin -> Diretiva que serve para informação do administrador/dono do site;
- DocumentRoot -> Diretiva que referencia a raiz do site, ou seja, onde os arquivos referentes ao site estão armazenados no servidor;
- ErrorLog e CustomLog-> São diretivas que informam quais serão os arquivos de log referente ao site em questão;
- ${APACHE_LOG_DIR} -> É uma variável de ambiente que referencia o diretório de logs do Apache.
Diante deste arquivo de configuração já fica fácil deduzir a resolução do problema. Falaremos dela na próxima página.