Puesta en marcha¶
Para poder trabajar con un entorno de desarrollo local, hemos de preparar nuestro entorno de desarrollo con las herramientas comentadas. A lo largo del curso, vamos a utilizar la versión 8.X de PHP.
XAMPP¶
XAMPP es una distribución compuesta con el software necesario para desarrollar en entorno servidor. Se compone de las siguientes herramientas en base a sus siglas:
- X para el sistema operativo (de ahí que se conozca también como LAMP o WAMP o MAMP, si hablamos de Linux, Windows o macOS).
- A para Apache.
- M para MySQL / MariaDB. También incluye phpMyAdmin para la administración de la base de datos desde un interfaz web.
- P para PHP.
- la última P para Perl.
Desde la propia página se puede descargar el archivo ejecutable para el sistema operativo de nuestro ordenador. Se recomienda leer la FAQ de cada sistema operativo con instrucciones para su puesta en marcha.
XAMPP en Windows
Si vas a trabajar con tu propio ordenador, XAMPP es una solución más sencilla que Docker, sobre todo si trabajas con Windows como sistema operativo.
Docker¶
Docker es un gestor de contenedores, considerando un contenedor como un método de virtualización del sistema operativo.
El uso de contenedores requiere menos recursos que una máquina virtual, por lo tanto, su lanzamiento y detención son más rápidos que las máquinas virtuales.
Así pues, Docker permite crear, probar e implementar aplicaciones rápidamente, a partir de una serie de plantillas que se conocen como imágenes de Docker.
Para ello es necesario tener instalado Docker Desktop en nuestros entornos de desarrollo (el cual ya incluye en núcleo de Docker y la herramienta docker compose).
Versiones
A lo largo del curso vamos a usar PHP 8.3
. Respecto a Docker, para escribir los apuntes hemos utilizado la version 27
y la version 2.29.3
de docker compose. Finalmente, la versión de Docker Desktop que hemos utilizado es la 4.34.2
.
Plantilla Servidor Web + PHP¶
Docker se basa en el uso de imágenes para crear contenedores. Docker Compose simplifica el trabajo con múltiples contenedores, y por ello, para facilitar el arranque, nos centraremos en Docker Compose utilizando una plantilla que únicamente va a contener como servicios Apache/Nginx y PHP.
Para ello, vamos a rellenar el archivo docker-compose.yaml
con:
# Services
services:
# Apache + PHP
apache_php:
image: php:8-apache
# Preparamos un volumen para almacenar nuestro código
volumes:
- ./src/:/var/www/html
expose:
- 80
ports:
- 80:80
# Services
services:
nginx:
image: nginx:1.19
ports:
- 80:80
volumes:
- ./src:/var/www/php
- ./.docker/nginx/conf.d:/etc/nginx/conf.d # cargamos la configuración de un fichero externo
depends_on:
- php # enlazamos nginx con php
php:
image: php:8.0-fpm
working_dir: /var/www/php
volumes:
- ./src:/var/www/php
Dentro de la carpeta que contenga dicho archivo, hemos de crear una carpeta src
donde colocaremos nuestro código fuente. Para facilitar la puesta en marcha, tenéis la plantilla de Apache/PHP (versión 2 con a2enmod rewrite
) o Nginx/PHP disponible para su descarga.
Cuando estemos listos, lanzaremos el servicio mediante:
docker-compose up -d
Si queremos ver el contenido de los archivos de log del servicio utilizaremos:
docker-compose logs -f
Finalmente, si queremos acceder a un terminal interactivo dentro del contenedor:
docker exec -it nombreContenedor bash
Otros comandos que podemos llegar a utilizar son:
docker ps
: Ver los contenedores que se están ejecutandodocker ps -a
: Ver todos los contenedoresdocker start nombreContenedor
: Arrancar un contenedordocker images
: Ver las imágenes que tenemos descargadas
Otra forma más sencilla para lanzar de nuevo los contenedores y gestionarlos una vez creados es utilizar el interfaz gráfico que ofrece Docker Desktop.
Docker stack
Existen diversas opciones mediante Docker que ofrecen soluciones completas y empaquetas para todo el stack de desarrollo. En posteriores sesiones utilizaremos tanto Devilbox como Laradock
Pero quiero saber cómo funciona...
En el módulo de Despliegue de Aplicaciones Web estudiaréis en profundidad, además de Docker, Apache y otros servicios que nos servirán de ayuda para el desarrollo en entorno servidor.
Entorno de desarrollo¶
En este curso vamos a emplear Visual Studio Code como entorno de desarrollo (IDE). Existen otras alternativas, siendo PhpStorm la más conocida pero siendo de pago. Otra posibilidad es utilizar Eclipse, aunque es un entorno bastante pesado.
VSCode es un editor de código fuente que se complementa mediante extensiones. Para facilitar el trabajo a lo largo del curso vamos a utilizar las siguientes extensiones:
En la siguiente sesión comenzaremos a utilizar Intelephense pero en esta sesión nos vamos a centrar en Docker (más adelante instalaremos nuevas extensiones).
Por ejemplo, si abrimos la extensión de Docker, podréis visualizar tanto los contenedores como las imágenes de vuestro sistema. Desde cada contenedor, mediante clic derecho, podemos iniciar/detener/reiniciar cada contenedor, así como ver su contenido o abrir un terminal dentro del mismo.
Hola Mundo¶
Y como no, nuestro primer ejemplo será un Hola Mundo en PHP.
Si nombramos el archivo como index.php
, al acceder a http://localhost
automáticamente cargará el resultado:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hola Mundo</title>
</head>
<body>
<?php
echo "Hola Mundo";
?>
</body>
</html>
Actividades¶
-
AC 103. (RA1 / CE1c CE1e / IC1 / 3p) El Departamento de infraestructuras ha contratado un servidor web para desplegar la aplicación. El DevOps1 a cargo del proyecto nos solicita que configuremos un entorno de desarrollo local con PHP. No olvidéis que debemos mostrar el proceso y las principales características.
-
AP 104. (RA1 / CE1c CE1e / IC1 / 3p) Como parte de la documentación que debemos generar para el proyecto que nos han solicitado, debéis mostrar y comentae las principales variables que aparecen en el fichero
php.ini
del servidor que se ha configurado para trabajar en local.
-
DevOps es un enfoque de desarrollo de software que integra prácticas de desarrollo (Dev) y operaciones (Ops) para mejorar la colaboración, la automatización y la entrega continua de aplicaciones, facilitando así un ciclo de vida del software más ágil y eficiente. ↩