-
Notifications
You must be signed in to change notification settings - Fork 0
Docker ES
Un contenedor de app (PHP-FPM), Nginx como proxy inverso, y un contenedor de base de datos (MySQL/MariaDB o PostgreSQL — elige uno en docker-compose.yml). Apache queda excluido a propósito; .htaccess ya cubre despliegues en hosting compartido.
docker compose up -d --build # usa docker-compose.override.yml automáticamente si está presente
docker compose logs -f app
docker compose down # parar
docker compose down -v # parar + borrar volúmenes (borra la base de datos)App disponible en http://localhost:8050 (ajusta el puerto en el servicio nginx si hace falta).
El contenedor db arranca vacío — crea las tablas manualmente la primera vez, dentro del contenedor:
# MySQL/MariaDB
docker compose exec db mysql -u root -p"${DB_ROOT_PASSWORD:-changeme}" "${DB_NAME:-tanuki_db}"
# PostgreSQL
docker compose exec db psql -U "${DB_USER:-tanuki}" -d "${DB_NAME:-tanuki_db}"Luego ejecuta tus sentencias CREATE TABLE como siempre. Alternativa: monta un docker/init.sql en /docker-entrypoint-initdb.d/init.sql en el servicio db — se ejecuta automáticamente la primera vez que el volumen de datos está vacío.
DB_HOST=db # nombre del servicio, no "localhost" — los contenedores se resuelven entre sí por nombredocker-compose.override.yml se carga automáticamente junto a docker-compose.yml y añade PHPUnit + Xdebug (INSTALL_DEV_DEPS=true, APP_DEBUG=true). Para producción, exclúyelo:
docker compose -f docker-compose.yml up -d --builddocker compose exec app ./vendor/bin/phpunitA diferencia de Xdebug local, tu editor corre en el host, no en el contenedor — Xdebug necesita "salir" hacia fuera.
Ya configurado vía docker-compose.override.yml:
environment:
- XDEBUG_MODE=debug
- XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003
extra_hosts:
- "host.docker.internal:host-gateway"launch.json necesita pathMappings aquí (a diferencia del desarrollo local), ya que la ruta del proyecto en el contenedor difiere de la de tu host:
{
"configurations": [{
"name": "Escuchar Xdebug",
"type": "php", "request": "launch", "port": 9003,
"pathMappings": { "/var/www/html": "${workspaceFolder}" }
}]
}Solución de problemas: docker compose exec app getent hosts host.docker.internal — si falla, en Docker Engine antiguo (Linux, sin Docker Desktop) usa la IP del puente docker0 (ip addr show docker0) como client_host en su lugar.