Instalar Magento2 em Localhost sem Docker
Tags: magento, localhost, php, xampp
Published: 2022-02-27 17:19:11

Bom, instalar Magento2 em localhost, várias tentativas são necessárias e algumas lágrimas também. O Magento foi estruturado para ser montado em Adobe Cloud, porém devido ao alto valor do serviço aprender como rodar em qualquer servidor sempre é muito vantajoso e financeiramente mais rentável. Então segue abaixo uma tradução e correção de um tutorial para rodar Magento2 em localhost.

Video Tutorial
https://youtu.be/b7FVzZj8e2U

Nossos pré-requisitos são:

- [Xampp](https://www.apachefriends.org/download.html) (php >= 7.3
- [Composer](https://getcomposer.org/download/)
- [Elasticsearch](https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0) == 7.0 (Não usar a versão 8)
- [Magento2](https://magento.com/tech-resources/download) (sem o conteúdo de amostra)

Depois que fizer os downloads, instale os mesmos, seguindo os passos abaixo:

- Inicie o Apache e o MySql no painel do Xampp
- Navegue até a pasta do **htdocs** dentro da pasta do Xampp
- Então descompacte a pasta do **elasticsearch** dentro da **htdocs**, acesse a pasta elasticsearch>bin e rode o arquivo **elasticsearch.bat** para iniciar o serviço
- Confirme se o serviço foi iniciado acessando o **localhost:9200**, deverá mostrar um JSON com alguns dados do serviço
- Agora acessando **http://localhost/phpmyadmin/**, crie um banco de dados com o nome **magento** ou alguma a sua escolha guarde para mais tarde
- Novamente no **htdocs**, crie uma pasta **magento** e descompacte os arquivos baixados do magento. Pode levar algum tempo

### Modificando arquivos

Bom agora vamos modificar alguns arquivos:
- Acessando os arquivos usando VsCode ou outro editor acesse: 
**vendor\magento\framework\Image\Adapter** e abra o arquivo **Gd2.php** e vamos alterar toda a função **validateURLScheme**, talvez esteja na linha **#86**:

```
private function validateURLScheme(string $filename) : bool
{
   $allowed_schemes = ['ftp', 'ftps', 'http', 'https'];
   $url = parse_url($filename);
   if ($url && isset($url['scheme']) && !in_array($url['scheme'], $allowed_schemes) && !file_exists($filename)) 
    {
       return false;
     }
   return true; 
}
```

- Seguindo acesse a pasta **vendor\magento\framework\View\Element\Template\File** e abra o arquivo **Validator.php** vá até mais ou menos a linha **#141** e modifique a linha:
```$realPath = str_replace('\\', '/',$this->fileDriver->getRealPath($path));```

- Continuando na pasta do magento acesse **vendor\magento\framework\Interception** e abra o arquivo **PluginListGenerator.php** desça até a linha **#158**:
```$cacheId = implode('-', $this->scopePriorityScheme) . "-" . $this->cacheId;```

> OBS: Sempre verifique as aspas simples e duplas, as mesmas podem ser copiadas erradas devido a plataforma

- Agora vamos voltar no painel do Xampp e vamos editar o **php.ini** podemos descer até a linha 921 e também vamos olhar as linhas 943, 944, 945 e 949 e vamos descomentar as extenções: 

```
extension=intl
...
extension=soap
extension=sockets
extension=sodium
...
extension=xsl
```

### Partil CMD 

Bom agora vamos abrir o CMD na pasta do Magento para executar alguns comandos: 

O primeiro comando é esse aqui bem grande

```
php bin/magento setup:install --base-url=http://127.0.0.1:8082 --db-host=localhost --db-name=magento2 --db-user=root --db-password="" --admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com --admin-user=admin --admin-password=admin123 --language=en_US --currency=USD --timezone=America/Chicago --use-rewrites=1 --search-engine=elasticsearch7 --elasticsearch-host=http://localhost --elasticsearch-port=9200
```

Explicando rapidinho, estamos setando a base-url para 127.0.0.1:8082, também colocamos os dados do banco de dados e colocamos os dados do elasticsearch para melhor identificar tudo, observe que o elasticsearch está setado como 7 isso porque o magento está configurado para o mesmo.

**Execute e aguarde [Success]**

> OBS: Perceba que um nome estranho aparecerá ex: **admin_wrr7yw**, este é o link de acesso do painel. **Guarde-o bem!**

Após siga executando cada comando abaixo separadamente:

```
php bin/magento setup:di:compile

php bin/magento indexer:reindex

php bin/magento setup:upgrade

php bin/magento setup:static-content:deploy -f en_US en_GB

php bin/magento deploy:mode:set developer

php bin/magento cache:clean

php bin/magento cache:flush

php bin/magento module:disable Magento_Csp

php bin/magento module:disable Magento_TwoFactorAuth
```

Sim eu sei demora muito mas calma está quase acabando. Agora você precisa voltar ao **phpmyadmin** para rodar uma pequena query

```INSERT INTO `core_config_data`(`path`, `value`) VALUES ('dev/static/sign', 0) ON DUPLICATE KEY UPDATE `value`=0```

Após rode novamente o comando de clean cache apenas para config

```php bin/magento cache:clean config```

para finalizar rode a aplicação com o seguinte comando:
```php -S 127.0.0.1:8082 -t ./pub/ ./phpserver/router.php```

Et Voila!!! Acesse o painel admin:
`http://127.0.0.1:8082/admin_wrr7yw/`

Você deverá ver o painel do Magento, se acaso alguma coisa não deu certo, não se desespere, seja persistente que tudo vai dar certo. 

Acesse o video do youtube de seu like e se quiser me siga. Abraço e até a próxima.