Este ambiente de desenvolvimento permite executar aplicações Laravel, dando suporte para:
- Varias versões do php
- Diversos plugins do php, como GD,imagick, redis, mongod e xdebug
- MySQL 8
O ambiente está dividido em pastas contendo versões do PHP, seguindo o padrão:
php-"versao"-"sistema-operacional"
-
Clone o repositório, escolha a versão do php que quer usar, e copie a pasta docker e docker-compose.yaml para a raiz do projeto laravel
-
Em seguida configure no .env as credenciais do banco de dados. Lembrando que o host deve ser o nome do serviço docker responsável pelo banco, neste caso é db. As credenciais podem ser encontradas no docker-compose.yaml
-
Em seguida, na raiz do ambiente, execute o comando:
# para garantir que a pasta com os entrypoints e demais infos tenha permissões de leitura/execução sudo chmod 777 -R ./docker docker-compose up -d
-
Acesse o projeto na URL:
- Adicione no seu .gitignore os seguintes itens:
- docker/dbdata: local onde estão os arquivos gerados pelo mysql
- .composer: cache gerado pelo composer 2
...suas pasta do laravel
docker/
docker-compose.yaml
O docker compose e a pasta docker devem estar na raiz do projeto
O ambiente foi dividido em 2 principais containers e 5 containers opcionais
-
modphp: O PHP e o Apache em execução com modphp(modulo do apache para php), com os plugins e o XDEBUG . Este container também permite a personalização do php.ini, através de um arquivo custom.ini montado via bind volume.
-
mysql8: Container com o DB e script de inicialização
Caso queira usar o php-fpm, existe o container do php fpm e dois servers (podendo escolher qual utilizar)
-
phpfpm: O php fpm para uso de fast-cgi
-
nginx: Se comunica com o PHP-FPM via FAST-CGI
-
apachefpm: Se comunica com o PHP-FPM via FAST-CGI
Principais ferramentas usadas internamente nos containers:
-
Foi aplicada a utilização da biblioteca dockerize nos containers, para permitir que os containers respeitem a ordem correta de inicialização. Ex. Container do php inicializar somente após o MySQL estiver respondendo.
-
O container do PHP espera o container de banco iniciar.
-
O container do nginx/apache, espera o PHP estar inicializado
Por padrão está configurado o APACHE com MODPHP, porém no docker-compose.yaml há um setup comentado contendo o Apache e Nginx, para uso do PHP-FPM.
A configuração dos servidores está dessa forma:
O apache com mod php: ./docker/modphp/vhost.conf
O NGINX está em ./docker/nginx/nginx.conf
O APACHEFPM está em:
-
./docker/apache/httpd.conf
-
./docker/apache/httpd-vhosts.conf
Para evitar quaisquer problemas de permissões de usuário entre os containers e o host que está executando o ambiente, os containers(php e mysql) foram configurados para executarem com um usuário específico, contendo o ID de usuário 1000, o mesmo ID utilizado por muitas distribuições Linux para o usuário padrão.
Com essa personalização, não haverá conflitos de permissões em arquivos gerados pelos containers.
O Xdebug está configurado na porta 9001, para evitar conflitos com o PHP-FPM.
PHPSTORM
Nota-se que o name e host são de acordo com o server_name do nginx.conf
VSCODE
A configuração é a com nome de "XDEBUG-DOCKER"