Lo básico para cualquier desarrollador en PHP es tener un ambiente de desarrollo local con las mismas versiones del servidor de producción.
Existen herramientas como MAMP o XAMPP para este trabajo pero dependen del sistema operativo utilizado, sólo permiten una versión de los servicios esto genera problemas de compatibilidad.
Docker al rescate
La forma más sencilla de crear ambientes de desarrollo es con Docker, donde utilizamos el archivo docker-compose.yml para configurar las características (versiones, puertos, variables de entorno, etc) de los servicios que necesitamos.
Los contenedores se crean con el comando:
docker-compose up -d
Los contenedores se manejas con los comandos:
docker-compose start # Iniciar los contenedores
docker-compose stop # Detener los contenedores
docker-compose down # Detener y eliminar los contenedores
Si aún no conoces acerca de Docker te recomiendo leer Simplifica el uso de contenedores con Docker Compose.
Implementando los Servicios
La implementación del ambiente de desarrollo consiste en crear un archivo docker-compose.yml donde vamos a configurar dos servicios:
- mysql: será el servidor de base de datos MySQL.
- php: será el servidor web con PHP
Servidor de Base de Datos
Creamos un servidor de base de datos con la imagen de MySQL 5.7, le asignamos el nombre docker-mysql y exponemos el puerto 3306.
version: '3'
services:
mysql:
image: mysql:5.6
container_name: docker-mysql
environment:
MYSQL_DATABASE: database_name
MYSQL_USER: my_username
MYSQL_PASSWORD: my_password
MYSQL_ROOT_PASSWORD: my_password
ports:
- "3306:3306"
restart: always
Hemos usado el parámetro environment
para configurar: base de datos, usuario y clave del servidor de base de datos.
Servidor PHP con Apache
Creamos un servidor web con la imagen de PHP 7.3 con Apache, le asignamos el nombre docker-php y exponemos el puerto 80.
version: '3'
services:
web:
image: php:7.3-apache
container-name: docker-php
ports:
- "80:80"
volumes:
- ./www:/var/www/html
Hemos usado el parámetro volumes
para exponer la carpeta de publicación de apache a la carpeta local www/.
Uniendo los servicios
El paso final es unir y enlazar estos servicios, donde agregamos un nuevo parámetro llamado links
donde se permite el acceso desde el servicio web hacía el servicio mysql.
version: '3'
services:
mysql:
image: mysql:5.6
container_name: docker-mysql
environment:
MYSQL_DATABASE: database_name
MYSQL_USER: my_username
MYSQL_PASSWORD: my_password
MYSQL_ROOT_PASSWORD: my_password
ports:
- "3306:3306"
restart: always
web:
image: php:7.3-apache
container_name: docker-php
ports:
- "80:80"
volumes:
- ./www:/var/www/html
links:
- mysql
Ahora creamos el ambiente de desarrollo con el siguiente comando:
docker-compose up -d
Para acceder al servidor web utiliza la ruta http://localhost donde verás el contenido de la carpeta www/. Para acceder al servidor de base de datos puedes usar las credenciales creadas previamente y el dominio localhost si usas un cliente externo o mysql si te conectas desde el servidor web.
Mejoras finales
Es posible mejorar esta instalación agregando extensiones adicionales de PHP (mysql, pdo, pdo_mysql) o habilitando módulos extras de Apache (rewrite) o incluso usar un archivo de configuración global.
Compartimos un proyecto llamado Docker: PHP & MySQL para crear ambientes de desarrollo local, configurable y con buena documentación.
Comentarios