Este repositório contém um ambiente de desenvolvimento completo utilizando Docker, pronto para PHP 8.0 até o 8.5 (FPM), Apache, MariaDB e Node.js.
O ambiente foi configurado para ser usado com IDEs como PHPStorm ou VSCode, com Composer, NPM e Xdebug integrados.
docker/Arquivos de configuração do Dockerdocker/php/Dockerfile do PHP-FPM + Composer + Xdebugdocker/apache/Dockerfile do Apachedocker/apache/vhostsArquivo de configuração por projetodocker/node/Dockerfile do Nodedocker/mysql/Arquivo de configuraçãolaravel-maker/Arquivos do instalador do LaravellaraInstalador do Laravel.envConfigurações de ambiente (portas, usuários, senhas)docker-compose.ymlOrquestração dos serviços (PHP, Apache, MariaDB)src/Código-fonte do projeto (montado nos containers)src/my-projectPasta do projetosrc/my-project/publicPasta pública do projeto (raiz do servidor web, acessada pelo navegador)
project-root/
├─ docker/
│ ├─ php/
│ ├─ node/
│ ├─ apache/
│ ├─ apache/
│ │ └─ vhosts/
│ └─ mysql/
├─ laravel-maker/
├─ lara
├─ docker-compose.yml
├─ .env
└─ src/
└─ my-project/
└─ public/
- Docker e Docker Compose instalados
- Sistema operacional compatível (Linux, macOS ou Windows)
- Copie o arquivo
.env.examplepara.enve ajuste as variáveis conforme necessário:
# Nome base para todos os containers
CONTAINER_NAME=dev_container
# UID/GID para evitar problemas de permissão com volumes
PUID=1000
PGID=1000
# PHP
PHP_PORT=9000
PHP_VERSION=8.4
# Node
NODE_VERSION=22
NODE_PORT=3000
VITE_PORT=5173
# Apache
SERVER_PORT=8000
# MariaDB
DB_ROOT_PASSWORD=password
DB_PORT=3306- Subir o ambiente com Docker Compose:
docker compose up -d --build--buildgarante que as imagens sejam construídas caso haja alterações no Dockerfile.- O PHP-FPM estará disponível na versão definida em
PHP_VERSIONe na porta definida emPHP_PORT. - O NODE estará disponível na versão definida em
NODE_VERSIONe na porta definida emNODE_PORT. - O Apache estará disponível na porta definida em
SERVER_PORT(ex: http://localhost:8000). - O MariaDB estará disponível na porta definida em
DB_PORT. - Senha root dos containers PHP e Node é 1234.
- PHP: integrado ao container php
- Apache:
http://localhost:<SERVER_PORT> - MariaDB: host
mysql:<DB_PORT>, usuárioroote senha<DB_ROOT_PASSWORD>no arquivo.env - Node.js / NPM: dentro do container Node (node -v, npm -v)
- Composer: dentro do container PHP (composer install)
Você pode executar comandos diretamente da IDE apontando para o container PHP <CONTAINER_NAME>_php e Node <CONTAINER_NAME>_node.
- Porta configurada:
9003 - Host:
host.docker.internal - Ativado para debug remoto em IDE
- Exibição de erros do PHP está habilitada
(display_errors=On, error_reporting=E_ALL)
- Código-fonte é montado no host
/srcpara/var/www/htmldentro do container - Banco de dados MariaDB persiste em volume
db_datapara manter dados entre reinicializações
Ver logs de containers:
docker compose logs -fAcessar terminal do container PHP:
docker exec -it dev_container_php bashRodar Composer dentro do container PHP:
docker exec dev_container_php composer installAcessar terminal do container Node:
docker exec -it dev_container_node bashRodar NPM dentro do container Node:
docker exec dev_container_node npm installParar o ambiente:
docker compose down- Não é necessário instalar PHP, Composer ou Node localmente.
- Para atualizar dependências do Composer:
docker compose exec dev_container_php composer update - Para rodar scripts Node/NPM:
docker compose exec dev_container_node npm run <script>
- Dar permissão para o programa instalador
chmod +X laraAo rodar chmod +x você está dizendo ao sistema: "Este arquivo agora tem permissão para ser rodado como um programa"
- Executar o programa instalador
./laraO comando diz ao sistema: "Execute o arquivo chamado lara que está exatamente aqui nesta pasta".
- Abra o seu terminal e digite:
nano ~/.bashrc
- Adicione o seguinte trecho de código ao seu
~/.bashrc:
# Função única para PHP/Composer no container
docker_php_tools() {
local tool="$1"
shift
local container=$(docker ps --format '{{.Names}}' | grep '_php$' | head -n 1)
local folder_name=$(basename "$PWD")
if [ -n "$container" ]; then
docker exec -it -w "/var/www/html/$folder_name" "$container" "$tool" "$@"
else
echo "Nenhum container PHP em execução. Rodando '$tool' no host."
command "$tool" "$@"
fi
}
# Função única para Node/NPM no container
docker_node_tools() {
local tool="$1"
shift
local container=$(docker ps --format '{{.Names}}' | grep '_node$' | head -n 1)
local folder_name=$(basename "$PWD")
if [ -n "$container" ]; then
docker exec -it -w "/var/www/html/$folder_name" "$container" "$tool" "$@"
else
echo "Nenhum container Node em execução. Rodando '$tool' no host."
command "$tool" "$@"
fi
}
alias up='docker compose up -d'
alias down='docker compose down'
alias php='docker_php_tools php'
alias composer='docker_php_tools composer'
alias npm='docker_node_tools npm'
alias npx='docker_node_tools npx'
alias node='docker_node_tools node'
- Depois, recarregue o Bash:
source ~/.bashrcComo usar:
# Ver versão do PHP
php -v
# Instalar dependências do Composer
composer install
# Rodar scripts NPM
npm run dev
# Ver versão do Node
node -v- O comando só funciona na pasta do projeto.
- O comando detecta automaticamente o container do projeto que utiliza este repositório.
- Caso o container não esteja rodando, o comando será executado no host.
Feito para simplificar o desenvolvimento em projetos PHP modernos, integrando debug, Composer, Node e banco de dados em containers separados, mas trabalhando de forma integrada com a IDE.