DDEV
- Virtualizacion
- PHP
- Docker
- Get Started with DDEV - DDEV Docs
- middleware de apache
- dev env
Qué es DDEV
DDEV es una herramienta de desarrollo local basada en Docker que permite crear entornos reproducibles y estandarizados para aplicaciones web (especialmente PHP, Drupal, TYPO3, WordPress, Laravel o Symfony).
Simplifica la configuración del entorno y automatiza la gestión de contenedores, facilitando la colaboración entre equipos y evitando el clásico “funciona en mi máquina”.
Características principales
- Basado en contenedores: Utiliza Docker para aislar servicios como base de datos, servidor web y PHP.
- Configuración rápida: Un solo comando (
ddev start) levanta el entorno completo. - Soporte multisitio: Permite manejar varios proyectos simultáneamente.
- Certificados HTTPS automáticos generados mediante mkcert.
- Integración con herramientas de desarrollo como Xdebug, MailHog, phpMyAdmin y Redis.
- Persistencia de datos: Las bases de datos se conservan entre reinicios de los contenedores.
- Extensible: Soporta custom commands y hooks en
config.yaml.
Arquitectura y componentes
- Web container: Basado en Apache o Nginx según configuración.
- PHP container: Ejecuta el intérprete PHP y proporciona acceso a Composer, Xdebug, etc.
- DB container: Generalmente usa MariaDB o MySQL, aunque se puede configurar PostgreSQL.
- Router container: Gestiona el enrutamiento y los certificados SSL locales.
- CLI tools: Permiten ejecutar comandos como
composer,npm, odrushdentro del entorno.
Flujo de trabajo básico
- Instalar DDEV (
brew install ddevo binario directo). - Inicializar un proyecto:
ddev config
```
3. Levantar el entorno:
```bash
ddev start
```
4. Acceder al proyecto en el navegador:
```bash
ddev launch
```
5. Ejecutar comandos dentro del contenedor:
```bash
ddev ssh
```
6. Detener el entorno:
```bash
ddev stop
```
---
## Configuración (`.ddev/config.yaml`)
El archivo principal de configuración define el entorno y sus servicios:
```yaml
name: mi-proyecto
type: php
docroot: web
php_version: "8.2"
router_http_port: "8080"
router_https_port: "8443"
webserver_type: apache-fpm
database:
type: mariadb
version: "10.11"
xdebug_enabled: true
`
name: Nombre del proyecto.type: Tipo de proyecto (php, drupal, typo3, etc.).docroot: Carpeta pública del proyecto.php_version: Versión de PHP a usar.webserver_type: Servidor web (apache-fpm o nginx-fpm).
Integración con Docker
DDEV no reemplaza a Docker, sino que lo abstrae:
- Cada proyecto corre en una red separada de Docker.
- Los contenedores se definen dinámicamente a partir de plantillas de DDEV.
- Los volúmenes de datos se montan para persistencia (
db,uploads, etc.). - Se pueden usar imágenes personalizadas o extender servicios con
docker-compose.*.yaml.
Ejemplo de extensión personalizada:
# .ddev/docker-compose.redis.yaml
services:
redis:
image: redis:7
container_name: ddev-${DDEV_SITENAME}-redis
ports:
- "6379"
Comandos útiles
| Comando | Descripción |
|---|---|
ddev start |
Inicia los contenedores del proyecto |
ddev stop |
Detiene los contenedores |
ddev restart |
Reinicia los contenedores |
ddev delete |
Elimina contenedores y volúmenes |
ddev ssh |
Abre una shell dentro del contenedor web |
ddev exec <cmd> |
Ejecuta un comando dentro del contenedor |
ddev import-db --src=db.sql.gz |
Importa una base de datos |
ddev export-db --file=backup.sql.gz |
Exporta la base de datos |
ddev logs |
Muestra los logs de los contenedores |
ddev describe |
Detalla la configuración y servicios del entorno |
Personalización avanzada
- Hooks: Automatiza acciones al iniciar o detener DDEV.
hooks:
post-start:
- exec: composer install
- Custom Commands: Crea comandos personalizados en
.ddev/commands/host/.
# .ddev/commands/host/clear-cache
#!/bin/bash
ddev exec drush cr
- Extensiones: Añade herramientas externas como Solr, Redis, Elasticsearch, MailHog, o Node.js.
Casos de uso comunes
- Desarrollo local de CMS (Drupal, WordPress, TYPO3).
- Proyectos PHP modernos (Laravel, Symfony, CraftCMS).
- Testing y CI/CD local antes del despliegue.
- Clonación de entornos productivos para debugging.
Comparativa con otras herramientas
| Herramienta | Base | Config | Ecosistema | Ideal para |
|---|---|---|---|---|
| DDEV | Docker | YAML | Fuerte (PHP) | CMS, PHP apps |
| Lando | Docker | YAML | Amplio (JS, Python) | Fullstack local envs |
| Docker Compose | Docker | YAML | Genérico | DevOps, infra |
| Vagrant | VM | Ruby | Limitado | Legacy o sistemas no containerizados |
Buenas prácticas
- Versionar
.ddev/config.yamlpero no los archivos generados. - Usar
.envoconfig.local.yamlpara variables sensibles. - Mantener versiones consistentes de PHP y DB entre entornos.
- Hacer
ddev restarttras cambios en configuración. - Limpiar contenedores antiguos con
ddev delete --omit-snapshot.
Recursos
- 📘 Get Started with DDEV - DDEV Docs
- 🧰 Get Started with DDEV
- 🐙 Repositorio oficial en GitHub
- 🎓 Drupal + DDEV Local Dev
DDEV — conceptos avanzados y prácticas extendidas
- Virtualizacion
- PHP
- Docker
- apache
- desarrollo local
- CI/CD
- DevOps
Integración con entornos externos
Sincronización con entornos remotos
DDEV permite clonar y sincronizar entornos productivos o de staging para depuración o desarrollo local:
ddev pull database
ddev pull files
`
Estas operaciones dependen de providers configurados en .ddev/providers/, como platform.sh, pantheon, o acquia.
Esto automatiza la descarga de la base de datos y archivos del servidor remoto hacia el entorno local.
Despliegue inverso
Con ddev push, es posible enviar datos locales hacia un entorno remoto, útil en flujos controlados de staging.
Integración con herramientas de desarrollo
- Xdebug y Blackfire: se habilitan fácilmente con
ddev xdebug ono configurando enconfig.yaml. Permiten profiling, debugging remoto y trazas de rendimiento. - MailHog: intercepta correos salientes en desarrollo (
ddev launch -m). - phpMyAdmin y Adminer: se pueden habilitar para administrar bases de datos gráficamente.
- Node.js y frontend builds: se puede instalar dentro del contenedor o usar una extensión:
ddev get ddev/ddev-nodejs
Integración con CI/CD
DDEV puede formar parte de pipelines de integración continua, utilizando contenedores efímeros que replican el entorno local. Ejemplo con GitHub Actions:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install DDEV
run: curl -fsSL https://ddev.com/install.sh | bash
- name: Start DDEV
run: ddev start
- name: Run Tests
run: ddev exec phpunit
Esto garantiza entornos consistentes entre desarrollo local y CI.
Rendimiento y optimización
mutagen: sincroniza archivos entre host y contenedor para mejorar el rendimiento en macOS y Windows. Se activa con:
ddev mutagen enable
- Caching: se pueden usar volúmenes persistentes para Composer, npm, y bases de datos.
nfsobind mounts: opcionalmente se pueden usar para mejorar la velocidad de E/S.
Extensiones y add-ons
DDEV permite instalar add-ons comunitarios directamente:
ddev get <github-repo>
Ejemplos:
ddev/ddev-redis→ añade Redis.ddev/ddev-drupal-solr→ añade Apache Solr para búsquedas.ddev/ddev-xhprof→ profiling de rendimiento.ddev/ddev-nodejs→ integra Node.js y npm dentro del contenedor.
Los add-ons se almacenan en .ddev/addons y pueden versionarse junto al proyecto.
Seguridad y redes
- Certificados SSL locales generados automáticamente con mkcert.
- Red privada interna: cada proyecto tiene su propia red Docker aislada.
- Autenticación local: se pueden definir credenciales personalizadas en variables de entorno.
- Firewall del host: se recomienda mantener bloqueos de puertos externos y exponer solo los necesarios (
router_http_port,router_https_port).
Migración de proyectos existentes
Para adaptar un proyecto ya existente:
- Mover el código fuente al directorio deseado.
- Ejecutar
ddev configy seleccionar el tipo de proyecto. - Ajustar
docroot,php_versionydatabasesegún el entorno original. - Importar base de datos:
ddev import-db --src=backup.sql.gz
- Iniciar el entorno con
ddev start.
Esto permite replicar entornos de servidores legacy o proyectos heredados sin conflictos de dependencias.
DDEV en equipos y colaboración
- Cada desarrollador puede usar su propio sistema operativo sin diferencias de entorno.
- Los archivos
.ddevse versionan para mantener configuración común. - Los datos sensibles se gestionan con
.ddev/config.local.yaml(no versionado). - Se puede compartir el entorno local con
ddev share, generando una URL temporal víangrok.
Troubleshooting y debugging
Logs
ddev logs
ddev logs -s web
Permiten inspeccionar errores de Apache, PHP o la base de datos.
Comandos de diagnóstico
ddev describe
ddev debug info
ddev poweroff
Sirven para depurar errores de configuración o conflictos de red.
Limpieza
ddev stop --remove-data
ddev delete --omit-snapshot
Útil para reiniciar entornos corruptos o liberar espacio en disco.
Integración con otros entornos
- Lando: DDEV puede coexistir en sistemas donde ya se usen otros frameworks locales.
- Docker Compose: los archivos adicionales se integran automáticamente.
- Vagrant / Multipass: se pueden combinar en entornos híbridos o para pruebas comparativas.
- Kubernetes (DDEV-Local-K8s): existen experimentos para desplegar entornos DDEV dentro de clústeres de desarrollo.
Conceptos internos
- Router: gestiona el tráfico HTTP(S) entre proyectos, implementando balanceo simple.
- Named volumes: almacenan datos persistentes (base de datos, uploads, configuración).
- Overlay configuration: los archivos
config.*.yamlse combinan para formar la configuración final. - Snapshotting: guarda instantáneas automáticas del estado de la base de datos antes de borrar o reiniciar.
Recursos complementarios
¿Te gusta este contenido? Suscríbete vía RSS