Ambiente de desenvolvimento em Docker para quem alterna entre várias linguagens e não quer instalar PHP, Node, Python, Go, Ruby e três bancos direto na máquina. Um docker-compose.yml com profiles decide o que sobe, e um script ./dev esconde os comandos longos do Compose.
Os projetos ficam em projects/. O ./dev up olha a pasta definida em PROJECT_DIR (.env) e detecta a linguagem pelo arquivo de manifesto:
| Encontrou | Sobe |
|---|---|
composer.json |
PHP 8.3-FPM + Nginx + MySQL + Redis |
package.json |
Node |
requirements.txt / pyproject.toml |
Python |
go.mod |
Go |
Gemfile |
Ruby |
| nada reconhecido | Nginx + PHP 8.3 (modo lite) |
Cada serviço opcional pertence a um ou mais profiles do Compose (php, node, mysql, postgres, full...), então só o necessário consome RAM. UID/GID do host são repassados aos containers para os arquivos criados em volume não ficarem com dono root.
| Serviço | Imagem / versão | Porta |
|---|---|---|
| Nginx | 1.27-alpine | 80 / 443 |
| PHP-FPM | 8.3 (padrão) e 8.1 | — |
| Node | 22 | 3000 (+5173 HMR) |
| Python | 3.12 | 8000 |
| Go / Ruby | — | — |
| MySQL + phpMyAdmin | 8.0 | 3306 / 8081 |
| PostgreSQL + pgAdmin | 16-alpine | 5432 / 8082 |
| Redis | 7-alpine | 6379 |
| Mailpit | — | 8025 (UI) / 1025 (SMTP) |
cp .env.example .env
./dev up # detecta a linguagem do projeto
./dev up:lite # só Nginx + PHP
./dev up:full # tudo
./dev shell [serviço] # shell dentro do container (padrão: php83)
./dev db:mysql | db:psql | db:redis
./dev logs [serviço]
./dev downCriar projeto novo já dentro do ambiente:
./dev new:laravel minha-api
./dev new:vite meu-front
./dev new:fastapi servico # também: next, django, gin, rails