INSTALAÇÃO E CONFIGURAÇÕES DO APACHE
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 .httpsaccess 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 “https://meusite.com.br”, redirecione a requisição pra pasta “meusite/”;
- Se o usuário indicar a URL “https://projeto.com.br”, redirecione, então, para “projeto/public”;
- Se o usuário indicar a URL “https://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: httpss://httpsd.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:
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.
DIRETRIZES DO APACHE, VIRTUALHOST
Dentre todas as diretrizes disponíveis, vamos nos atentar à VirtualHost, apresentada anteriormente, e à Directory, que é usada para determinar configurações em um diretório específico.
A diretriz ‘VirtualHost’ deve usada sempre que for referenciar um endereço de site, ou seja, um endereço DNS. Para cada configuração de site é necessário criar um arquivo de configuração para o mesmo. “Mas, Lucas, não só ‘jogar’ a pasta lá em ‘/var/www/html’ e acessar usando ‘ip/site’?” Isso funciona e dependendo da ocasião, isso atende bem, mas, em nosso caso, só adicionar as pastas não bastaria.
Continuando, precisamos criar os arquivos ‘biblioteca.conf’ e ‘panificadora.conf’, ambos no diretório ‘/etc/apache2/sites-available’, assim como o arquivo de configuração default mostrado anteriormente. Um detalhe aqui é que os arquivos não precisam ter o nome do projeto que ele referencia, mas será muito mais fácil dar suporte e manutenção se estes receberem o mesmo nome que o seu site/sistema, tendo em vista que você pode configurar quantos sites o hardware do seu servidor suportar processar. Criados os arquivos, o conteúdo destes deverá ficar assim:
biblioteca.conf:
ServerName biblioteca.empresa.local
<Directory /var/www/html/biblioteca/public>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
panificadora.conf:
<VirtualHost *:80>
ServerName panificadora.empresa.local
<Directory /var/www/html/panificadora>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Onde:
- ServerName -> Nome do site/sistema, que pode ser o mesmo nome do servidor. Aqui é configurado o DNS que vai referenciar o servidor na URL;
- panificadora.empresa.local / biblioteca.empresa.local -> DNS que será usado;
- <Directory /var/www/html/biblioteca> ou <Directory /var/www/html/panificadora> -> É a diretriz que referencia qual é o diretório do site/sistema. Nela devem conter as ‘regras’ para aquele diretório;
- AllowOverride -> Diretriz que possibilita a reescrita de configurações para o diretório especificado usando, por exemplo, um arquivo ‘.httpsaccess’ na raiz do diretório em questão.
Obs.: o DNS informado deve estar devidamente registrado para o IP do servidor.
Feito isto, precisamos habilitar estas configurações, tendo em vista que isto não é feito automaticamente. Para tal, precisamos usar os comandos:
# a2ensite biblioteca.conf
# a2ensite panificadora.conf
Você será notificado se tudo correu bem e, neste caso, será orientado a recarregar o serviço do Apache usando o comando
# service apache2 reload
Obs.: caso queira desabilitar uma configuração de site use o comando ‘a2dissite arquivo_de_configuração’, por exemplo: ‘a2dissite biblioteca.conf’. Da mesma forma, o serviço do Apache deverá ser recarregado.
Um detalhe bem interessante sobre o funcionamento da ferramenta pode ser observado agora. Se você listar os arquivos contidos no diretório ‘/etc/apache2/sites-enabled’, verá links para os arquivos de configuração criados em ‘/etc/apache2/sites-available’. “Lucas, consigo fazer esse processo manualmente então?” Sim, como boa parte das coisas que podemos fazer no Linux.
Neste ponto, parte da solução já foi implementada. Já é possível acessar os sites de acordo com o endereço informado conforme o exemplo:
- Se o usuário indicar ‘https://bliblioteca.empresa.local’, acessará o site/sistema ‘biblioteca’ em ‘/var/www/html/biblioteca/public’;
- Se o usuário indicar ‘https://panificadora.empresa.local’, acessará, de forma semelhante, ‘panificadora’ em ‘/var/www/html/panificadora’.
Mas, por exemplo, se eu quiser acessar ainda, um outro site/sistema ou um subsistema do meu projeto referenciando com ‘/subsistema’ no final de uma URL específica? Exemplificando pra ficar mais claro:
Temos os sites ‘biblioteca’ e ‘panificadora’, mas também tenho instalado o PhpMyAdmin no servidor e quero acessar ele usando “caminhos” distintos para o sistema ‘biblioteca’, até para não usar o padrão ‘/phpmyadmin’.
Estes “caminhos” podem ser referenciados nos arquivos de configuração usando a diretriz ‘Alias’ do Apache. Sua implementação é extremamente simples. Ainda no exemplo, adotemos que para acessar o PhpMyAdmin usando o endereço do site biblioteca eu queria usar o alias “bibliotecaAdm”, o arquivo de configuração deverá ficar assim:
biblioteca.conf:
ServerName biblioteca.empresa.local
Alias /bibliotecaAdm /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
AllowOverride All
</Directory>
<Directory /var/www/html/biblioteca/public>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Desta forma, após salvar o arquivo e recarregar novamente o serviço do Apache, será possível acessar a ferramenta PHPMyAdmin usando o endereço ‘httpss://biblioteca.empresa.local/bibliotecaAdm’. Fácil, não?
Obs.: neste caso específico da ferramenta PHPMyAdmin também é possível alterar essa configuração de alias em ‘/etc/apache2/config-enabled/phpmyadmin.conf’, porém, muito cuidado!
CONCLUSÃO
Este artigo é mais um que descreve uma das várias formas de se administrar recursos e ferramentas no Linux e é bem provável que seja possível realizar as mesmas configurações de forma diferente e até, implementando soluções diferentes, como mencionado no início do artigo.
A minha apreciação por programação assim como a liberdade prevista pela “Filosofia do Software Livre” se dá pelo infinito número de possibilidades para solucionar e facilitar tarefas cotidianas.
Esta foi a forma mais simples que encontrei – com algumas horas de pesquisa – para solucionar o “problema” relatado no início do artigo. Se você conhece uma solução melhor ou notou que esqueci algum detalhe, deixe seu comentário, colabore!
O conhecimento cria oportunidades e jamais deve ser desprezado!!!
Até logo!