Se você trabalha com o framework PHP Laravel, sabe que instalar sua aplicação em um diretório padrão de uma conta VPS ou servidor compartilhado, sem alterações, irá obrigá-lo a executar o sistema deixando exposto o diretório raiz da aplicação, pois precisará acessar o mesmo pelo subdiretório /public. Por exemplo: http://meudominio.com.br/public

Em caso de acesso ao diretório raiz, neste exemplo, os scripts dos arquivos PHP do programa Laravel estarão expostos e acessíveis, inclusive seu arquivo de configuração de variáveis de ambiente: .env, com chaves e senhas de banco de dados e APIs de serviços.

Você tem algumas opções para resolver este problema, explicarei a seguir de acordo com o contexto do servidor onde deve realizar o deploy, isto é, a instalação.

Instalando aplicação PHP Laravel em subdiretório de servidor Linux CPanel

Esta é a opção que considero mais segura e fácil de realizar para configurar todo o ambiente de produção de sua aplicação Laravel para instalar ela em um subdiretório quando você possui acesso SSH root ao servidor Linux com CPanel (ou qualquer outro gerenciador de servidor).

O objetivo é alterar a configuração do domínio primário ou domínio principal da conta de usuário do CPanel, do arquivo conf Apache desta conta.

Siga os passos alterando nos locais corretos com o nome de usuário da conta e o domínio:

  1. Localize e abra o arquivo de configuração do Apache para o usuário da conta. No exemplo abaixo altere USERNAME pelo nome do usuário CPanel e DOMAIN.COM pelo domínio correto, no meu caso seria mazer.dev
nano /var/cpanel/userdata/USERNAME/DOMAIN.COM
  1. Após abrir o arquivo procure pela linha que especifica o caminho do documentroot. No exemplo a seguir,
documentroot: /home/USERNAME/public_html
  1. Modifique o caminho do documentroot de acordo com sua necessidade, o mais simples será seguir a estrutura da aplicação Laravel que instala seus arquivo na “raiz” e utiliza como o ponto de entrada o subdiretório /public. Neste exemplo eu alteraria para o resultado a seguir (não esqueça de salvar o arquivo):
documentroot: /home/USERNAME/public_html/public
  1. Repita os passos acima para o arquivo SSL (que configura o acesso seguro HTTPS). O nome do arquivo será o mesmo do passo 2, acrescido de _SSL, por exemplo:
nano /var/cpanel/userdata/USERNAME/DOMAIN.COM_SSL
  1. Reconstrua as conf do Apache e reinicia o serviço Apache Http:
/scripts/rebuildhttpdconf
service httpd restart

As alterações serão aplicadas imediatamente, simplesmente limpe o cache do seu navegador web e force um refresh da página!

Instalar adicionando .htaccess que aponte para subdiretório

Esta é uma solução para os casos em que você está utilizando um servidor compartilhado para web ou, por qualquer outro motivo, não possui acesso root SSH ao seu servidor para realizar as configurações de conf do Apache.

Novamente, considerando que a estrutura da aplicação Laravel instala seus arquivo na “raiz” e utiliza como o ponto de entrada o subdiretório /public, vamos adicionar um arquivo .htaccess ao raiz da aplicação, e inserir regras para que as requisições sejam redirecionadas pelo Apache automaticamente para o subdiretório /public.

Crie o arquivo .htaccess no raiz /public_html com o conteúdo a seguir:

<IfModule mod_rewrite.c> 
 RewriteEngine On 
 RewriteRule ^(.*)$ public/$1 [L] 
</IfModule> 

Desta maneira, toda requisição de um navegador ao seu domínio raiz, será redirecionada internamente pelo Apache para /public, de maneira transparente sem expor esta URL ao navegador e sem possibilitar ao cliente acessar os arquivos na raiz da aplicação Laravel.

Considerações finais

As estratégias que demonstrei neste artigo para configuração e instalação de sistema Laravel em deploy de produção para servidores VPS, proprietários ou ainda servidores compartilhados, não levam em consideração a necessidade de executar a aplicação em um subdomínio ou ainda a execução de sua aplicação em paralelo com outro sistema como, por exemplo, WordPress.

As configurações apresentadas consideram um cenário onde todo o seu “site” ou sistema executará sobre a instalação com todos os componentes de uma única aplicação Laravel.

É importante salientar que em ambas as opções apresentadas você poderá utilizar o deploy com Git a partir da raiz da aplicação, respeitando seu fluxo de versionamento de código do projeto.