Simular o ambiente de produção usando Virtual Hosts no Apache
Quando se constroem aplicações web, é normalmente uma boa prática configurar-se o ambiente de desenvolvimento de forma a que seja o mais semelhante possível ao ambiente de produção.
Uma das configurações que se faz antes de se iniciar o desenvolvimento do projecto, é a criação de um virtual host cuja configuração seja o mais idêntica possível à configuração do servidor onde o projecto estiver alojado.
Entre outras configurações, a mais importante é a estrutura de directorias, que em desenvolvimento é diferente da estrutura em produção.
Regra geral, quando se trata de uma aplicação com backend e um backoffice nós costumamos organizar o nosso ambiente de desenvolvimento desta forma:
\projectos\projecto
\projectos\projecto\frontend
\projectos\projecto\frontend\bin-debug (binários da aplicação)
\projectos\projecto\frontend\src
\projectos\projecto\frontend\[...]
\projectos\projecto\backoffice
\projectos\projecto\backoffice\bin-debug (binários do backoffice)
\projectos\projecto\backoffice\src
\projectos\projecto\backend (backend, por exemplo em php)
\projectos\projecto\mm (imagens, e outros recursos multimédia)
Quando corremos a aplicação localmente, sem os virtual hosts, vamos obter algo como http://localhost/projecto/bin-debug/index.swf .
Para que a aplicação possa comunicar com o backend, o path para o gateway será por exemplo algo como ../../backend/gateway.php .
Para que a aplicação possa aceder aos recursos multimédia (imagens, etc) o caminho será algo como ../../mm/imagem1.jpg .
Estes caminhos não batem certo com os caminhos na versão de produção:
www.projecto.pt (binários da aplicação)
www.projecto.pt/backoffice (binários do backoffice)
www.projecto.pt/backend (backend, por exemplo em php)
www.projecto.pt/mm (imagens e recursos multimédia)
Vemos que na versão de produção a aplicação para aceder ao backend vai fazer o caminho backend/gateway.php - enquanto que na versão de desenvolvimento, fazia o caminho ../../backend/gateway.php . O mesmo se aplica para as restantes directorias.
Há muita gente que trabalha com a estrutura de directorias e caminhos do ambiente de desenvolvimento, e quando chega a altura de alojar o projecto, mudam os caminhos no source code (ou num ficheiro de configuração) e recompilam - má prática.
Solução: criar um virtual host
O Apache permite que se associe um ambiente com configurações específicas a um determinado domínio. Ou seja, se o Apache receber um pedido de acesso ao dominio www.projecto.dev , e houver um virtual host para esse dominio, podemos configurá-lo para devolver a nossa própria estrutura de directorias (e não só).
O que gostariamos era de escrever no browser www.projecto.dev , e ser-nos exposto o nosso projecto com a estrutura de directorias igual à estrutura que vamos obter no servidor.
Vamos começar por configurar o apache editando o ficheiro httpd.conf na directoria conf do apache. No final do ficheiro, basta adicionar as seguintes linhas:
NameVirtualHost 127.0.0.1
Include conf/vhosts/*.conf
A primeira linha permite que o apache possa associar os nomes dos domínios pedidos aos virtual hosts que vamos configurar (mais info aqui).
A segunda linha indica ao Apache para carregar e executar todos os ficheiros de configuração com a extensão .conf na directoria vhosts. Isto fará com que criar um novo virtual host seja algo como criar um novo ficheiro .conf na directoria vhosts.
Vamos agora à directoria vhosts, e vamos criar um ficheiro chamado projecto.conf .
Nesse ficheiro, vamos colocar o seguinte:
<VirtualHost 127.0.0.1:80>
DocumentRoot "D:\OsMeusProjectos\projecto\frontend\bin-debug"
ServerName www.projecto.dev
<Directory "D:\OsMeusProjectos\projecto\frontend\bin-debug">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Alias /backend "D:\OsMeusProjectos\projecto\backend"
Alias /backoffice "D:\OsMeusProjectos\projecto\backoffice\bin-debug"
Alias /mm "D:\OsMeusProjectos\projecto\mm"
</VirtualHost>
Isto vai indicar ao Apache que os pedidos recebidos na porta 80, máquina 127.0.0.1 relativos ao domínio www.projecto.dev irão ter a directoria bin-debug do frontend como a directoria de raíz do projecto. Os Aliases permitem que o Apache exponha o backend, backoffice e mm em directorias específicas, resultando assim num ambiente igual ao de produção.
Depois de feita a alteração acima, é preciso reiniciar o Apache.
Falta conseguirmos fazer com que pedidos para www.projecto.dev vão parar ao Apache. Para isso, vamos mexer no ficheiro "hosts" do Windows para forçarmos o redireccionamento de pedidos para www.projecto.dev para a nossa máquina local.
Basta para isso editar o ficheiro hosts (mais info no wikipedia), na directoria c:\windows\system32\drivers\etc . Recordo que no Windows Vista, será preciso abrir um editor de texto com permissões de administrador, e depois fazer o File > Open e procurar o ficheiro no disco - caso contrário não será possível editá-lo.
Neste ficheiro, bastará colocar o seguinte:
127.0.0.1 www.projecto.dev
A linha acima vai indicar o sistema operativo que todos os pedidos feitos para o domínio www.projecto.dev vão ser reencaminhados para 127.0.0.1 - a nossa máquina local. Como estamos a fazer os pedidos dentro de um web-browser, a porta por defeito será a 80. O resto é fácil de adivinhar: pedidos para a nossa máquina local na porta 80 vão ser entregues a quem? Ao nosso amigo Apache! Que ao receber um pedido destinado ao domínio www.projecto.dev, vai procurar o Virtual Host respectivo e expô-lo com a estrutura que definimos.
Obviamente, isto abre-nos as portas para fazer configurações mais radicais (i.e. configurar o Apache para que o Virtual Host seja igualzinho ao do servidor final).
This entry was written by