A ideia por trás do nosso modelo dev-stack é permitir que qualquer desenvolvedor execute nossos projetos de maneira comum, evitando problemas de ambiente que normalmente levam muito tempo para serem resolvidos.
A Stack é composta inicialmente por uma "dev-network", um edge router (traefik) e um dnsserver.
Antes de executar a stack, você deve desabilitar qualquer serviço em execução na porta 80 (apache, nginx, caddy, iis, etc).
Para poder executar esse ambiente de desenvolvimento, você deve instalar previamente o docker e o docker-compose.
Para permitir que nossos contâineres se comuniquem, precisamos criar uma rede compartilhada, então, execute o comando abaixo:
docker network create dev-network
Para garantir que os projetos funcionem corretamente em seu computador, você deve configurar o servidor DSN primário para 127.0.0.1, então seu computador poderá reconhecer e redirecionar qualquer domínio "*.test" para nosso roteador.
Algumas distribuições Linux vem com o serviço systemd-resolve ativado, você precisa desativá-lo, pois ele se vincula à porta [53], que entrará em conflito com a porta do Dnsmasq.
Execute os seguintes comandos:
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Altere o arquivo resolv.conf:
ls -jh /etc/resolv.conf
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf
Se sua distribuição usa o NetworkManager, você deve desabilitar a configuração do dns editando o arquivo /etc/NetworkManager/NetworkManager.conf adicionando o parâmetro:
dns=none
O NetworkManager.conf final deve ser:
[main]
plugins=ifupdown,keyfile
dns=none
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
É possível que ao derrubar o serviço sua conexão tenha problemas. Nesse caso é necessário habilitar a configuração do dns editando o arquivo /etc/NetworkManager/NetworkManager.conf :
dns=default
O NetworkManager.conf default é:
[main]
plugins=ifupdown,keyfile
dns=default
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
Agora reinicie o serviço de gerenciamento de rede:
sudo systemctl restart NetworkManager
Junto dessa stack há dois scripts que podem ser executados para fazer todas as instalações e configurações necessárias. Eles foram criados para rodar a stack em um ambiente Linux. Cada máquina possui configurações únicas, então esses scripts podem não se comportar como esperado em todas as situações.
O script start-dev.sh inicia a stack e configura o Dnsserver. Já o script init-project.sh faz um clone do projeto base do git inicia um container e instala um novo laravel.
O script painel-start-dev.sh inicia a stack, o painel e configura o Dnsserver. Já o script painel-stop-dev.sh derruba os serviços.
version: '3.2'
services:
app:
image: ghcr.io/mjpinto-stefanini/php80-fpm:latest
labels:
- traefik.http.routers.app.rule=Host(`app.stefanini.test`)
volumes:
- ./src:/src
environment:
- PROJECT_WEBROOT=/src/public
networks:
default:
external:
name: dev-network