Hace unos años, montar un entorno de desarrollo para una aplicación web PHP era una verdadera molestia:
Primero era necesario instalar Apache, luego MySQL, después configurar todo para que el Apache pudiera procesar correctamente los archivos PHP y generar la salida esperada, pasando en el medio por la configuración de MySQL y rogar que todo funcionara bien.
Y así pasábamos los días hasta que llegó XAMPP.
Qué es XAMPP
XAMPP fue, en su día, una verdadera revolución: un paquete único que contenía todo lo que podíamos necesitar para desarrollar cómodamente: click aquí, click allí y listo, a programar se ha dicho!
Si bien XAMPP simplicaba, y mucho, el montaje de un entorno local, en el fondo no se trataba de algo esencialmente diferente de lo que veníamos haciendo hasta el momento… sólo que mucho más rápido y cómodo.
El problema empezó cuando muchos programadores comenzaron a usarlo como si se tratara de una solución mágica y dejaron de lado comprender qué es lo que estaba ocurriendo tras bambalinas.
Craso error.
Error que se hace patente a la hora de subir el sitio al hosting. Es entonces cuando empiezan los problemas como:
Tengo este código que en localhost funciona perfectamente, que recibe los datos enviados mediante un formulario y saca los resultados mediante una tabla que se rellena automáticamente según los datos enviados. Resulta que cuando lo subo al servidor (hosting) no funciona y no da ningún tipo de error, simplemente no dibuja la tabla.
O:
tengo una pagina en php, en el servidor local funciona bien, es un login que al ingresar los datos dirige a una parte especifica de la web dependiendo el perfil, ahora si subo esto a mi hosting funciona perfectamente, pero si subo la web a otro dominio al ingresar los datos del login se queda la página en blanco. Ya intente que mostrara errores pero no me sale nada.
Hace algunos años habría recomendado usar máquinas virtuales para desarrollar. Hoy por hoy, existiendo Docker hay un nuevo ganador.
Qué es Docker
Docker es, ante todo, una plataforma de ejecución de aplicaciones basada en el concepto de contenedor.
La idea, muy resumida, es tener una única unidad (un paquete) que contenga en sí mismo todo lo necesario para ejecutar una aplicación.
De este modo, nos olvidamos de las pequeñas sorpresas que pueden encontrarse al llevar a un hosting un proyecto desarrollado en forma local.
¿Puede usarse Docker para desarrollos PHP?
¡Claro que sí!
Existen varias formas diferentes de usar Docker en proyectos PHP. En general, lo que se necesitará será una imagen que incluya el intérprete de PHP y, si se trata de una aplicación web, también un servidor.
XAMPP vs. Docker
Recapitulando un poco, como para que quede claro: XAMPP es un paquete de software específicamente diseñado para PHP, mientras que Docker es un sistema de manejo de contenedores genérico, es decir, no sólo puede usarse para PHP si no para cualquier lenguaje.
Por otro lado, con Docker es sumamente sencillo tener, en una misma máquina física, muchos procesos PHP corriendo diferentes versiones. Te reto a que intentes eso con XAMPP.
La desventaja, por llamarle de algún modo, de usar Docker en lugar de XAMPP es su dificultad para montarlo. Claro que, una vez que lo domines ésta desaparecerá.
¿Cómo reemplazar XAMPP por Docker?
Para reemplazar XAMPP por Docker se requiere contar con una configuración de Docker que incluya los servicios que XAMPP contiene (Además del propio Docker instalado localmente, claro).
En principio se trata de:
- Apache
- PHP
- MariaDB
- PHPMyAdmin
Esto supone crear 4 contenedores diferentes, los cuales tendrán que estar en sincronía.
Suena complicado, ¿no? Bueno… no es para tanto.
Usando docker-compose
es posible lograrlo con poco esfuerzo.
Por ejemplo, si tenemos un proyecto donde tenemos un archivo llamado index.php
que contiene lo siguiente:
<?php echo "Viva PHP!";
Se puede:
- Crear un archivo
docker-compose.yml
en el mismo directorio con este contenido:
version: '3.8' services: mariadb: image: 'mariadb:11.0' volumes: - 'database-data:/var/lib/mysql' environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=my_app - MYSQL_USER=my_user - MYSQL_PASSWORD=my_pwd ports: - '29003:3306' restart: always webserver: image: 'php:7.4-apache' working_dir: '/var/www/html' volumes: - '.:/var/www/html' ports: - '29000:80' restart: always pma: image: 'phpmyadmin:latest' ports: - '29005:80' links: - 'mariadb:db' environment: - PMA_ARBITRARY=1 volumes: database-data: {}
- Darle al
docker-compose up -d
- Abrir el navegador en
http://localhost:29000
y voilá:
Luego, si se quiere entrar al PhpMyAdmin basta con abrir una nueva ventana en http://localhost:29005,
ingresar las credenciales y se verá esto:
Y poco más…
A partir de aquí es posible hacer todo lo que se hacía con XAMPP, con la diferencia de que luego subir todo al hosting será mucho más sencillo.
- Cómo usar PHPUnit - 03/12/2024
- ¿Cómo instalar extensiones PHP en Docker? - 26/11/2024
- Cómo agregar una página de error 500 en un proyecto PHP - 31/10/2024