DevOps

Configuração Docker Compose para Laravel

Preparar um ambiente de desenvolvimento ou produção para uma aplicação Laravel utilizando Docker Compose é uma abordagem eficiente e escalável. Com Docker Compose, podemos definir e gerenciar facilmente múltiplos contêineres que compõem nossa aplicação, incluindo o Laravel, um servidor web Nginx e um banco de dados MySQL. Este método oferece vantagens como isolamento de recursos, facilidade de implantação e consistência entre ambientes de desenvolvimento e produção.

Para começar, é necessário criar um arquivo docker-compose.yml na raiz do projeto Laravel, onde especificaremos os serviços necessários e suas configurações. Vamos dividir o processo em três partes: serviço do Laravel, serviço do Nginx e serviço do MySQL.

Serviço do Laravel:

O serviço do Laravel será responsável por executar o código da nossa aplicação. Aqui está um exemplo básico de como configurar esse serviço no arquivo docker-compose.yml:

yaml
version: '3' services: app: build: context: . dockerfile: Dockerfile volumes: - .:/var/www/html working_dir: /var/www/html

Este trecho define um serviço chamado “app” que utiliza um arquivo Dockerfile para construir a imagem do contêiner. Ele monta o diretório atual (onde está localizado o código do Laravel) dentro do contêiner em /var/www/html e define este como o diretório de trabalho.

Serviço do Nginx:

O serviço do Nginx é responsável por servir as requisições web para a nossa aplicação Laravel. Abaixo está um exemplo de como configurar este serviço no arquivo docker-compose.yml:

yaml
nginx: image: nginx:latest ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - app

Este trecho define um serviço chamado “nginx” que utiliza a imagem oficial do Nginx. Ele mapeia a porta 80 do host para a porta 80 do contêiner Nginx. Além disso, monta um arquivo de configuração personalizado nginx.conf para o diretório /etc/nginx/nginx.conf dentro do contêiner.

Serviço do MySQL:

O serviço do MySQL é responsável por fornecer o banco de dados para nossa aplicação Laravel. Veja um exemplo de configuração para este serviço no docker-compose.yml:

yaml
db: image: mysql:5.7 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: your_mysql_root_password MYSQL_DATABASE: your_database_name MYSQL_USER: your_mysql_user MYSQL_PASSWORD: your_mysql_password volumes: - ./mysql:/var/lib/mysql

Neste trecho, definimos um serviço chamado “db” que utiliza a imagem oficial do MySQL 5.7. Especificamos variáveis de ambiente para configurar a senha do usuário root, nome do banco de dados, nome do usuário e senha do MySQL. Também montamos um volume para persistir os dados do MySQL fora do contêiner.

Configuração do arquivo Nginx:

Por fim, é necessário configurar o arquivo nginx.conf para direcionar as solicitações HTTP para o serviço Laravel. Um exemplo de configuração básica é:

perl
server { listen 80; server_name localhost; location / { proxy_pass http://app:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

Neste exemplo, as solicitações HTTP recebidas pelo Nginx são encaminhadas para o serviço do Laravel definido como “app” no Docker Compose.

Executando a aplicação:

Após configurar o docker-compose.yml e o arquivo de configuração do Nginx, você pode executar sua aplicação Laravel usando o seguinte comando na raiz do projeto:

bash
docker-compose up --build

Este comando irá construir as imagens dos contêineres e iniciar todos os serviços definidos no arquivo docker-compose.yml. Uma vez que todos os serviços estejam em execução, você pode acessar sua aplicação Laravel em http://localhost.

Em resumo, o uso do Docker Compose para configurar um ambiente de desenvolvimento ou produção para uma aplicação Laravel com um servidor Nginx e um banco de dados MySQL oferece uma solução conveniente e escalável, permitindo uma fácil implantação e gerenciamento dos contêineres que compõem a aplicação. Este método promove a consistência entre ambientes de desenvolvimento e produção, além de proporcionar isolamento de recursos e facilitar a colaboração em equipe.

“Mais Informações”

Claro! Vamos aprofundar um pouco mais em cada aspecto do processo de configuração de um ambiente Docker Compose para uma aplicação Laravel, incluindo detalhes sobre a estrutura do projeto, a configuração dos serviços e algumas práticas recomendadas.

Estrutura do Projeto:

Antes de mais nada, é importante organizar o projeto Laravel de forma adequada. O Docker Compose espera encontrar um arquivo docker-compose.yml na raiz do projeto, então certifique-se de que seu projeto Laravel está estruturado dessa forma. Além disso, é recomendável criar um diretório nginx para armazenar o arquivo de configuração do Nginx (por exemplo, nginx.conf) e um diretório mysql para armazenar os dados do banco de dados MySQL, ambos na raiz do projeto.

Configuração dos Serviços:

  1. Serviço do Laravel (app):

    • O Dockerfile para o serviço Laravel geralmente é bastante simples e consiste em instalar as dependências PHP necessárias, copiar o código-fonte da aplicação para o contêiner e expor a porta necessária para o servidor web interno do Laravel (geralmente a porta 80).
    • Além disso, é comum instalar as dependências do Composer durante o processo de construção do contêiner para evitar problemas de compatibilidade ou dependências ausentes.
  2. Serviço do Nginx (nginx):

    • O Nginx é configurado para encaminhar as solicitações HTTP para o servidor web interno do Laravel. No arquivo nginx.conf, é necessário definir uma configuração de proxy reverso para encaminhar as solicitações para o serviço Laravel definido no Docker Compose.
    • É importante configurar o Nginx para servir os arquivos estáticos da aplicação (como imagens, CSS e JavaScript) diretamente, enquanto as solicitações dinâmicas são encaminhadas para o Laravel.
  3. Serviço do MySQL (db):

    • No serviço do MySQL, é necessário configurar variáveis de ambiente para definir a senha do usuário root, o nome do banco de dados, o nome de usuário e a senha do MySQL.
    • Além disso, é recomendável montar um volume para persistir os dados do MySQL fora do contêiner, garantindo que os dados não sejam perdidos quando o contêiner for reiniciado.

Práticas Recomendadas:

  1. Utilize Imagens Oficiais:

    • Sempre que possível, utilize imagens oficiais do Docker Hub para garantir a confiabilidade e a segurança das imagens utilizadas em seu ambiente Docker Compose. Por exemplo, para o MySQL, utilize a imagem oficial mysql, e para o Nginx, utilize a imagem oficial nginx.
  2. Gerenciamento de Variáveis de Ambiente:

    • Evite armazenar informações sensíveis, como senhas e chaves de API, diretamente no arquivo docker-compose.yml. Em vez disso, utilize variáveis de ambiente para configurar essas informações de forma segura e flexível.
  3. Separar Ambientes:

    • É comum ter diferentes arquivos docker-compose.yml para diferentes ambientes, como desenvolvimento, teste e produção. Cada arquivo pode conter configurações específicas para o ambiente correspondente, como senhas diferentes para o banco de dados ou configurações de depuração habilitadas no ambiente de desenvolvimento.
  4. Monitoramento e Logs:

    • Configure ferramentas de monitoramento e registro de logs para os contêineres Docker, como Prometheus e Grafana, para acompanhar o desempenho da aplicação e diagnosticar problemas de forma proativa.
  5. Orquestração de Contêineres:

    • Considere o uso de ferramentas de orquestração de contêineres, como Kubernetes, para gerenciar e dimensionar aplicativos Docker Compose em ambientes de produção.

Ao seguir estas práticas recomendadas e compreender a estrutura e configuração dos serviços em um ambiente Docker Compose para uma aplicação Laravel, você estará bem posicionado para criar um ambiente de desenvolvimento ou produção eficiente, escalável e confiável para sua aplicação.

Botão Voltar ao Topo