O propósito deste tutorial é para aplicar o docker em um projeto Laravel para ambiente de desenvolvimento local. Não recomendo aplicação para produção. O fato de não recomendar é mais por falta de testes e experiência em produção com essa configuração mesmo. Mas em todos projetos Laravel que eu apliquei este passo a passo funcionou.
Lembrando que este tutorial é uma sugestão baseado na minha experiência e que funcionou comigo. Ainda não tenho suficiente experiência para afirmar que este é o melhor método, mas certamente serviu ao propósito para entender melhor o funcionamento do docker. :)
Após esta configuração, a criação do ambiente de desenvolvimento ficou incrivelmente mais rápido pra mim. Não é mais necessário utilizar Wampp, Xampp ou derivados, basta clonar o repositório do github, instalar docker e seguir o passo a passo a partir da inicialização do container. Principalmente quando se trabalha com projetos de versões diferentes de PHP ou outras dependências.
...
INICIO:
Primeiro instalar o Docker e o Docker-compose (você pode seguir os diversos tutoriais existentes na web e principalmente a própria documentação, não vou entrar em detalhe neste passo).
No diretório raiz do projeto deletar a pasta vendor para excluir as dependências. Isso serve para evitar alguns bugs que já tive anteriormente em outras tentativas, mas não se preocupe, elas serão instaladas novamente a partir do container mais pra frente.
Na raiz do projeto criar o arquivo docker-compose.yaml com o seguinte conteúdo:
version: '3'
services:
nginx:
build: .
container_name: nginx
ports:
- "8080:80"
volumes:
- ./:/usr/share/nginx
networks:
- app-network
mysql:
image: mysql:5.7.22
container_name: mysql
ports:
- "3300:3306"
volumes:
- .docker/dbdata:/var/lib/mysql
environment:
MYSQL_DATABASE: banco_meuprojeto
MYSQL_ROOT_PASSWORD: senha_poderosa
networks:
- app-network
networks:
app-network:
driver: bridge
- Ainda na raiz do projeto criar outro arquivo chamado Dockerfile (atentar para a primeira letra maiúscula) com o conteúdo abaixo. Um detalhe importante, a primeira linha estou sugerindo carregar o php 7.0 porque é o que utilizo no projeto que usei como exemplo, porém você pode alterar para a versão que utiliza.
FROM wyveo/nginx-php-fpm:php70
#instalando e limpando cache das dependências linux
RUN apt-get update && apt-get install -y \
vim \
curl
RUN apt-get clean && rm -Rf /var/lib/apt/lists/*
#Copia configuração do nginx
RUN rm -Rf /etc/nginx/conf.d/default.conf
COPY ./.docker/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
#enviando arquivos para diretórios html e ajustando permissões
RUN rm -rf /usr/share/nginx/html
COPY . /usr/share/nginx
RUN chmod -R 775 /usr/share/nginx/storage/*
#link simbólico para funcionamento do nginx
RUN ln -s /usr/share/nginx/public /usr/share/nginx/html
Também na raiz do projeto criar um diretório chamado .docker (com ponto no começo mesmo) e depois dentro dele outro diretório chamado dbdata.
Dentro do diretório dbdata adicionar um arquivo chamado .gitignore com apenas um asterisco ( sim, esse cara aqui: * ) dentro dele. Serve apenas para não guardarmos o banco de dados no github.
Alterar o arquivo .env que está na raiz do projeto ajustando a conexão do banco de dados alterando os parâmetros conforme abaixo (atenção para a porta):
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3300
DB_DATABASE= banco_meuprojeto
DB_USERNAME=root
DB_PASSWORD=senha_poderosa
- Dentro do diretório .docker crie o diretório nginx e dentro dele o conf.d. Dentro deste último crie o arquivo default.conf com o conteúdo abaixo (vai ficar assim: .docker/nginx/conf.d/default.conf):
server {
listen 80;
index index.php index.html;
root /usr/share/nginx/public;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
- Agora vamos inicializar os containers. Na raiz do projeto abra o terminal e execute o comando:
docker-compose up -d
- Agora acesse o container nginx:
docker exec -it nginx bash
- Já dentro do contêiner do nginx navegue até o diretório e instale as dependências do projeto com os dois comandos abaixo:
cd /usr/share/nginx/
composer install
- Agora basta rodar as migrations do seu projeto para criação das tabelas do banco de dados ou se não tiver migrations pode acessar o banco de dados utilizando algum SGBD (MySQL Workbench mesmo ou Heidi por exemplo) usando as mesmas configurações do .env (atenção pra porta) e criar as tabelas e carregar os dados necessários (neste caso poderia ser exportado o banco de dados legado em um arquivo sql e importado pelo seu SGBD). Uma observação: como estamos falando de projetos legados pode não existir migrations mas é extremamente recomendável tê-las, aliás, é essencial para vida útil da aplicação.
Pronto agora sua aplicação pode ser utilizada a partir da uri http://localhost:8080
Utilizei algumas vezes essa sugestão de processo e tinha ela documentada aqui, então resolvi compartilhar. Espero que seja útil.
Top comments (0)