Ambiente DEV com Laradock

Laradock
Laradock

Certa vez precisei subir um ambiente para um projeto Laravel e para fins didáticos, decidi utilizar o Laradock. Tendo em vista as facilidades do mesmo, fui um pouco mais a fundo e percebi que poderia torná-lo meu ambiente default, não somente para projetos com Laravel.


Instalando o PHP 8.0.6

  • Faça o download do PHP 8 em formato zip na Página de Downloads do PHP.
  • Busque pela versão NTS e de acordo com a arquitetura do seu OS (x86/x64).
  • Utilize a versão Non Thread Safe, que segundo a documentação oficial é recomendada para uso em linha de comando e servidores web onde apenas uma thread é utilizada.
  • Versões Thread Safe são para quando o PHP for instalado como um módulo do Apache e utilizado para execução de Threads concorrentes.
  • Descompacte o arquivo zip em uma nova pasta, de preferência, de fácil acesso para melhor usabilidade como c:\php, por exemplo (para esse tutorial eu utilizei C:\php8.0.6).
  • Agora no Windows, vá até:
    • Painel de Controle > Sistema e Segurança > Sistema > Configurações Avançadas do Sistema > Variáveis de Ambiente
  • Nas seção de Variáveis do Sistema Adicione ao path do Windows a pasta criada para o PHP
  • Feito isso, abra um terminal e digite php -v para verificar se está acessivel e funcionando, deverá exibir algo tipo:

PHP 8.0.6 (cli) (built: May 4 2021 23:31:41) ( NTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.6, Copyright (c) Zend Technologies

  • Dentro da pasta criada haverá um arquivo chamado php.ini-development faça uma cópia e renomeie, ou apenas renomeie o mesmo para php.ini e:
    • Linha 768: extension_dir => descomente (retire o “;” do início da linha) e informe em qual pasta se encontram as extensões do php. No caso do zip, já estão inclusas as extendões dentro de uma pasta chamada “ext”, apenas certifique-se de que a mesma foi descompactada
    • Nas linhas 920 a 956, temos as extensões a serem habilitadas, para o nosso caso, vamos habilitar apenas as mais comuns e necessárias para a nossa instalação, fique a vontade se necessitar habilitar mais alguma, além das citadas:
      • extension=curl
      • extension=fileinfo
      • extension=gd
      • extension=gettext
      • extension=intl
      • extension=mbstring
      • extension=mysqli
      • extension=odbc
      • extension=openssl
      • extension=pdo_mysql
      • extension=pdo_odbc

Instalando o Composer

  • Primeiramente faça o download do composer em Download Composer Setup
  • Siga os passos e insira os dados que o setup de instalação lhe solicitar em cada etapa
  • Não vou entrar em maiores detalhes aqui, pois a instalação do composer segue o famoso “next, next, next” do windows
  • E PRONTO! Na verdade a instalação do composer é a parte mais fácil da instalação do ambiente

Instalando o Laradock

Antes de continuar, reserve um tempo para ler a documentação oficial do Laradock, pois diferentes estruturas de pastas, podem exigir diferentes configurações.

  • A minha estrutura de diretórios, está da seguinte maneira:
    • www/
      • Projetos/
        • projeto-1/
        • projeto-2/
  • Então vamos até o site oficial em laradock.io
  • Vamos clonar o laradock em uma pasta dentro da pasta Projetos
  • Crie uma pasta dentro de Projetos chamada “_laradock”
  • Via terminal, vá até a pasta que criamos e clone o Laradock dentro dela com:
    • git clone https://github.com/laradock/laradock.git _laradock/
  • A estrutura de diretórios ficará da seguinte maneira:
    • www/
      • Projetos/
        • _laradock/
        • projeto-1/
        • projeto-2/

Configurando o WEB Server

  • Precisamos configurar nossos projetos para que o WEB Server faça a leitura correta das pastas
  • Dentro da pasta _laradock/nginx/sites, existem dois arquivos chamados:
    • app.conf.example
    • laravel.conf.example
  • Faça uma cópia dos dois arquivos, renomeando-os para projeto-1.conf e projeto-2.conf respectivamente
  • Em projeto-1.conf, configure o server_name para projeto-1.test e o root para /var/www/projeto-1
  • Em projeto-2.conf, configure o server_name para projeto-2.test e o root para /var/www/projeto-2/public

Observe que no projeto-2 temos public no root path, isso porque public é o ponto/pasta de partida do framework Laravel

  • Abra com o notepad o arquivo hosts (em C:\Windows\System32\drivers\etc) e adicione linhas (tanto faz onde, eu costumo adicionar no final do arquivo por questões minhas de organização):
    • 127.0.0.1 project-1.test
    • 127.0.0.1 project-2.test

Configurando os Contêineres

  • Instale o Docker Desktop Download Docker Desktop
  • Na instalação será dada a opção de selecionar entre containers Windows ou Linux. No nosso exemplo estaremos utilizando a opção Linux
  • Faça um cadastro criando um Docker ID, pois é bastante útil. Caso você crie/personalize algum container, poderá enviá-lo para a nuvem e deixá-lo disponível para futuras instalações. Caso formate a máquina ou necessite do mesmo ambiente em outro computador, poupará tempo.
  • Terminada a instalação, será solicitado para reiniciar o sistema, mas antes de reiniciar o sistema, vá até a tela de Recursos do Windows abrindo o menu iniciar e digitando “Ativar ou desativar recursos do Windows”
  • Habilite (marque) a opção Hyper-V
  • Reinicie o computador e quando retornar, abra um terminal e digite docker –version, que deverá exibir algo como:

Docker version 20.10.6, build 370c289

  • Vá até a pasta onde foi clonado o laradock (“_lardock” no nosso exemplo)
  • Faça uma cópia do arquivo .env.example e renomeie para .env
  • Abra o arquivo e busque/altere as seguintes configurações:
  ### NGINX #################################################
  
  NGINX_HOST_HTTP_PORT=30000
  NGINX_HOST_HTTPS_PORT=443
  NGINX_HOST_LOG_PATH=./logs/nginx/
  NGINX_SITES_PATH=./nginx/sites/
  NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
  NGINX_PHP_UPSTREAM_PORT=9000
  NGINX_SSL_PATH=./nginx/ssl/

  ### MYSQL #################################################
  MYSQL_VERSION=latest  
  MYSQL_DATABASE=nomedobancodedados
  MYSQL_USER=meuusuario
  MYSQL_PASSWORD=minhasenha
  MYSQL_PORT=30001
  MYSQL_ROOT_PASSWORD=minhasenharoot
  MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

  ### PHP MY ADMIN ##########################################
  
  # Accepted values: mariadb - mysql
  
  PMA_DB_ENGINE=mysql
  
  # Credentials/Port:
  
  PMA_USER=meuusuario
  PMA_PASSWORD=minhasenha
  PMA_ROOT_PASSWORD=minhasenharoot
  PMA_PORT=30002
  PMA_MAX_EXECUTION_TIME=600
  PMA_MEMORY_LIMIT=256M
  PMA_UPLOAD_LIMIT=2G

  ### WORKSPACE #############################################
  .
  .
  .
  WORKSPACE_SSH_PORT=30003

  ### PHP Version ###########################################
  
  # Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM).
  # Accepted values: 8.0 - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
  PHP_VERSION=7.3

Acima, altere o valor de PHP_VERSION para 8.0 e, via terminal, vá até a pasta do laradock e rode os seguintes comandos:

docker-compose build php-fpm
e
docker-compose build workspace

Vamos revisar as configurações do NGINX. Temos então, 3 arquivos com as seguintes configurações:

  Pasta _laradock/nginx/site        
      default.conf
          server_name localhost;
          root /var/www;
          index index.php index.html index.htm;

      projeto-1.conf
          server_name projeto-1.test;
          root /var/www/projeto-1;
          index index.php index.html index.htm;

      projeto-2.conf
          server_name projeto-2.test;
          root /var/www/projeto-2/public;
          index index.php index.html index.htm;

  • Agora vamos contruir nossas aplicações, lembrando que o projeto-1 = wordpress e o projeto-2 = laravel
    • Dentro de Projetos, coloquei um arquivo com o phpinfo() para verificar as config’s iniciais do php
    • projeto-1
      • Acesse o site do WordPress e faça o download
      • Descompacte o WP dentro da pasta projeto-1 e está pronto
      • Acesse o link projeto-1.test:30000
      • O mesmo irá exibir a tela inicial de configurações do wordpress
    • projeto-2
      • Vá até um terminal, acesse a pasta _laradock e pare os containers executando o comando docker-compose down
      • Volte um nível, acessando assim, a pasta projetos e ainda pelo terminal instale o laravel dentro de projeto-2/ com o seguinte comando:
        • composer create-project laravel/laravel projeto-2/
        • Caso exiba algum erro:
          • verifique se a pasta está vazia
          • se o usuário possui acesso a ela
          • e se a mesma possui permissão de gravação
  • Realizadas todas as configurações, vamos rodar o nosso bom e velho docker-compose:
    • Pelo terminal, navegue até a pasta _laradock
    • digite docker-compose up -d nginx mysql phpmyadmin redis workspace

OBSERVAÇÃO IMPORTANTE:
Ao iniciar os containers com o docker-compose, não esqueça de especificar quais containers você deseja utilizar, pois o laradock possui vários serviços que podem ser utilizados como, por exemplo: mssql, postgres, casandra, mongo, apache.
Caso não especifique, o docker tentará iniciar todos eles, pois não foi especificado qual você deseja.

Depois que o docker “subir” todos os containers desejados, você pode acessar suas aplicações através de:

O MySQL utiliza a porta 30001, para acessá-lo com sua IDE preferida, utilize as informações de conexão do arquivo .env ou utilize o PHPMyAdmin, conforme citado acima

Conclusão

Temos então o nosso ambiente PHP utilizando menos recursos de hardware e padronizado. Ok, mas afinal, por quê? 
Por dois reais motivos: Primeiro, como falei inicialmente, para fins didáticos. Quando se inicia em alguma empresa normalmente a estrutura de ambiente já existe, então a utilização do docker acaba se resumindo em dois ou três comandos para iniciar/finalizar/reiniciar o ambiente. Por conta própria, resolvi estudar na prática mais sobre o assunto e escrever esse tutorial.
O segundo motivo, é que houve um caso em que eu trabalhava com dois projetos diferentes, mas ambos possuiam ambientes docker distintos. Isso acabou gerando conflitos (no meu caso, conflito com portas que já estavam em uso). 
Para resolver o problema, tive a idéia de reunir todas as funcionalidades necessárias para o meu desenvolvimento em apenas um ambiente. Dessa maneira eu possuo apenas uma instância de cada serviço (WEB Server, banco, etc…), economizando recursos de hardware e padronizando o ambiente.

Referências

https://www.php.net/
https://laradock.io/
https://cyrildewit.github.io/2020/04/19/how-to-change-the-PHP-version-in-Laradock/
https://br.wordpress.org/https://laravel.com/docs/8.x

Compartilhe

Você pode gostar...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *