> ## Documentation Index
> Fetch the complete documentation index at: https://docs.saninternet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# cPanel & Laravel

> Neste tutorial você conhecerá uma abordagem de como fazer a publicação do seu projeto Laravel utilizando o cPanel.

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/cpanel-laravel-san-1.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=3b8fc7b3166a60a149cb728e074bc2ac" alt="cPanel + Laravel" fetchPriority="high" width="673" height="175" data-path="wp-content/uploads/2024/06/cpanel-laravel-san-1.png" />

## 📋 Requisitos

Para conseguir prosseguir com sucesso no tutorial, é fundamental que você conheça minimamente sobre:

* Sistema de arquivos Linux
* Desenvolvimento Web
* PHP
* Laravel

Além disso precisará de acesso SSH à hospedagem para criação dos links simbólicos, os quais não podem ser criados via Gerenciador de Arquivos do cPanel.

* [Conectar via SFTP com o FileZilla](/conectar-via-sftp-com-o-filezilla)
* [Acesso via SSH com PuTTY](/acesso-via-ssh-com-putty)

## 🌱 Criando o projeto

Primeiramente, crie um projeto em Laravel em seu ambiente de desenvolvimento (normalmente o seu computador local), com o código abaixo.

```
composer create-project laravel/laravel example-app
```

Com o projeto criado, você deverá ter uma estrutura de pastas semelhante a esta:

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/estrutura-de-pastas-laravel-1.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=abc69810d634b45d9029b94e5be4c718" alt="Laravel - Arquivos" width="303" height="408" data-path="wp-content/uploads/2024/06/estrutura-de-pastas-laravel-1.png" />

Você também consegue executar o servidor de desenvolvimento, na raiz do projeto, para se certificar de que está funcionando normalmente, através do comando:

```
php artisan serve
```

Se tudo ocorreu bem, a página padrão do framework deverá aparecer em [http://localhost:8000](http://localhost:8000)

<img src="https://mintcdn.com/san-internet/H0SzJLmfk8eSuQa1/wp-content/uploads/2024/06/pagina-padrao-laravel-localhost-1.png?fit=max&auto=format&n=H0SzJLmfk8eSuQa1&q=85&s=a9bf8e1c65dd02a3b80067bcece5fcc3" alt="Laravel - Site" width="952" height="690" data-path="wp-content/uploads/2024/06/pagina-padrao-laravel-localhost-1.png" />

## 🔨 Compilando

Agora com o projeto instalado e funcional, podemos entender melhor a parte da compilação ou "build". Esta fase do projeto consiste em prepararmos o projeto para que opere da forma mais eficiente possível para um ambiente de produção.

No caso do Laravel, precisamos antes instalar somente as dependências de produção, excluindo as dependências de desenvolvimento, com o comando abaixo:

```
composer install --optimize-autoloader --no-dev
```

Feita a instalação das dependências de produção, agora podemos fazer a compactação do projeto e subir o arquivo para hospedagem.

## 🚀 Publicação

Agora, com o site gerado podemos prosseguir para a parte de publicação para o site ficar acessível publicamente em seu domínio!

Existem diversas formas de fazer o deploy. Focaremos na forma manual para que você entenda os fundamentos e saiba o que é necessário para automatizar este fluxo caso desejar.

Primeiramente, pensando na segurança das variáveis de ambiente que são carregadas pelo framework, precisamos manter o projeto fora de `public_html`, portanto, neste exemplo aqui, foi optado por criar uma pasta `sites` no diretório home (`/home/user`) do usuário, onde nesta pasta ficarão todos os projetos desenvolvidos em Laravel.

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/diretorio-sites-cpanel-1.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=8ae18daf42d1abdaa907081703e45d83" alt="Laravel - Pastas" width="265" height="392" data-path="wp-content/uploads/2024/06/diretorio-sites-cpanel-1.png" />

Criado o diretório, agora podemos criar os links simbólicos que apontarão para os arquivos de entrada do site, no caso da estrutura do Laravel, estes ficam dentro do diretório `public` na raiz do projeto. Para criá-los foi aberto o terminal, entrado no diretório `sites` e executado os comandos abaixo:

```
ln -s ./example-app/public/index.php index.php

ln -s ./example-app/public/favicon.ico favicon.ico

ln -s ./example-app/public/robots.txt robots.txt
```

Estes links simbólicos serão criados em `public_html` (levando em conta que estaremos fazendo para o site principal e que o nome do projeto é `example-app`) e estarão apontando para seus respectivos nomes dentro do projeto ficando da seguinte forma:

<img src="https://mintcdn.com/san-internet/H0SzJLmfk8eSuQa1/wp-content/uploads/2024/06/terminal-symlinks-criados-1.png?fit=max&auto=format&n=H0SzJLmfk8eSuQa1&q=85&s=27269419be45cc30a98d1350917b3bd7" alt="Laravel - Links simbólicos" width="514" height="47" data-path="wp-content/uploads/2024/06/terminal-symlinks-criados-1.png" />

Criados os links, poderemos fazer o upload do projeto em `sites`.

Para fazermos o upload do projeto, precisarás antes compactar o diretório do projeto. Neste caso será usado o próprio gerenciador de arquivos do Windows para facilitar o entendimento, mas também poderia ser utilizado o terminal para isso.

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/compactar-arquivo-windows.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=21b2eb2235733f3f1aee024143c49575" alt="Gerar arquivo ZIP" width="700" height="469" data-path="wp-content/uploads/2024/06/compactar-arquivo-windows.png" />

Feita a compressão, abra o diretório `sites`, que foi criado no passo anterior, e faça o upload do arquivo e logo em seguida a sua extração, no mesmo local. No final, o diretório deverá ficar dessa forma (também poderá remover o arquivo compactado se desejar):

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/diretorio-sites-formato-1.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=c318b0a3e3f1a19f8573cec590d35504" alt="Laravel - Pasta" width="657" height="678" data-path="wp-content/uploads/2024/06/diretorio-sites-formato-1.png" />

Agora com o projeto na hospedagem, abra um terminal e abra o diretório do projeto dentro de `sites`, e execute o comando de otimização para criar o cache dos arquivos para deixar o projeto mais performático.

```
php artisan optimize
```

<img src="https://mintcdn.com/san-internet/H0SzJLmfk8eSuQa1/wp-content/uploads/2024/06/terminal-comando-artisan-optimize.png?fit=max&auto=format&n=H0SzJLmfk8eSuQa1&q=85&s=eb517795af9cc2a7818c502e32ddeffc" alt="Artisan optimize" width="922" height="111" data-path="wp-content/uploads/2024/06/terminal-comando-artisan-optimize.png" />

Por último, faça a movimentação do arquivo .htaccess que está no diretório public do seu projeto laravel, para o diretório raiz que é apontado pelo domínio (no mesmo lugar onde estão os link simbólicos criados anteriormente), no final ao conferir o diretório raiz do domínio você terá estes arquivos.

<img src="https://mintcdn.com/san-internet/sXr9tLnaLYaLg1XK/wp-content/uploads/2024/06/arquivos-final-laravel.png?fit=max&auto=format&n=sXr9tLnaLYaLg1XK&q=85&s=dff85defa5671f8179b448da786df570" alt="Laravel - Public_html" width="460" height="77" data-path="wp-content/uploads/2024/06/arquivos-final-laravel.png" />

E finalmente você poderá abrir o site e ver o projeto em Laravel sendo executado em produção. 🚀

<img src="https://mintcdn.com/san-internet/H0SzJLmfk8eSuQa1/wp-content/uploads/2024/06/pagina-padrao-laravel-production.png?fit=max&auto=format&n=H0SzJLmfk8eSuQa1&q=85&s=b30093a66573a309a6ba41c0dce14d54" alt="Laravel - Site" width="1079" height="738" data-path="wp-content/uploads/2024/06/pagina-padrao-laravel-production.png" />

***

*Disclaimer: todos os comandos utilizados neste tutorial foram utilizados com base em versões específicas da documentação oficial das tecnologias utilizadas (PHP 8.1, Composer 2.7.7, Laravel v10), portanto, consulte a documentação oficial para ter as informações mais atualizadas.*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.