Contenido
1. Presentación del proyecto
En esta actividad vamos a implantar Loot Figures, una tienda web de figuras de plástico inspiradas en personajes de videojuegos.
La aplicación ya está desarrollada. Nuestro trabajo consistirá en examinar sus archivos, preparar los entornos necesarios, configurar la base de datos y conseguir que funcione en dos instalaciones diferentes:
- En nuestro ordenador, utilizando XAMPP.
- En la máquina virtual Ubuntu Server que hemos preparado en clase.
Además de conseguir que la tienda se abra en el navegador, tendremos que comprobar sus funciones y documentar el procedimiento.
Implantar una aplicación no consiste únicamente en copiar archivos. También debemos identificar sus requisitos, configurar los servicios, preparar la base de datos, ajustar permisos y comprobar que todo funciona correctamente.
2. Objetivos de aprendizaje
Al terminar esta primera parte, deberás ser capaz de:
- Identificar los archivos y las carpetas de una aplicación PHP.
- Abrir un proyecto completo en VS Code o PhpStorm.
- Reconocer la función de los modelos, los DAO y los archivos que reciben datos.
- Diferenciar el código PHP del código que ejecuta el navegador.
- Preparar un entorno con Apache, PHP y MySQL o MariaDB.
- Crear una base de datos e importar su estructura.
- Configurar la conexión entre PHP y la base de datos.
- Ejecutar un script de carga de datos.
- Configurar Apache para servir la carpeta pública del proyecto.
- Implantar la misma aplicación en Windows y Ubuntu Server.
- Comprobar su funcionamiento y resolver incidencias.
- Elaborar documentación técnica que permita repetir la instalación.
3. Material necesario
Para realizar la actividad necesitarás:
- El archivo del proyecto:
loot-figures-php-clase.zip. - Un ordenador con XAMPP.
- VS Code o PhpStorm.
- Un navegador web.
- La máquina virtual Ubuntu Server utilizada en clase.
- Un usuario de Ubuntu con permisos para ejecutar
sudo. - Conexión entre tu ordenador y la máquina virtual.
La aplicación utiliza PHP 8.x, una base de datos MySQL o MariaDB y las extensiones PHP necesarias para trabajar con mysqli, sesiones y archivos.
En esta primera parte no utilizaremos Docker. Vamos a preparar los servicios directamente para comprender qué necesita la aplicación.
4. Resultado que debes conseguir
Al finalizar, tendrás dos instalaciones independientes:
| Entorno | Aplicación | Base de datos | Acceso |
|---|---|---|---|
| Ordenador con XAMPP | Copia local del proyecto | Base de datos de XAMPP | http://localhost:8080 |
| Máquina virtual Ubuntu Server | Copia del proyecto en el servidor | Base de datos de Ubuntu | http://IP_DEL_SERVIDOR:8080 |
Cada instalación tendrá su propia base de datos.
Los cambios realizados en una instalación no aparecerán automáticamente en la otra.
Utilizaremos el puerto 8080 para la tienda. De esta forma, podemos conservar las páginas o servicios que ya estén utilizando el puerto 80.
Bloque A. Examinar el proyecto antes de instalarlo
5. Descargar y descomprimir los archivos
Descarga el ZIP proporcionado por el profesor y descomprímelo.
La carpeta principal del proyecto se llama:
loot-figures-clase
Comprueba que dentro aparecen, entre otras, estas carpetas:
app
config
database
docs
public
scripts
No comiences modificando archivos. Primero vamos a identificar qué contiene el proyecto.
6. Abrir el proyecto en VS Code o PhpStorm
Opción A: VS Code
- Abre VS Code.
- Selecciona Archivo → Abrir carpeta.
- Elige la carpeta principal
loot-figures-clase. - Comprueba que aparecen todas las carpetas del proyecto en el explorador lateral.
- Abre el archivo
README.md.
Opción B: PhpStorm
- Abre PhpStorm.
- Selecciona Open / Abrir.
- Elige la carpeta principal
loot-figures-clase. - Espera a que termine de analizar el proyecto.
- Abre el archivo
README.md.
Debes abrir la carpeta completa, no únicamente un archivo PHP ni solo la carpeta public.
El editor nos permite consultar y modificar el código. Para ejecutar la aplicación necesitaremos un servidor PHP.
7. Reconocer las carpetas del proyecto
Examina la estructura y completa una tabla como esta en tu documentación:
| Carpeta o archivo | ¿Para qué sirve? |
|---|---|
app/modelos | Clases que representan clientes, productos, pedidos y mensajes |
app/dao | Clases que realizan las consultas a la base de datos |
app/Conexion.php | Código que abre la conexión con MySQL mediante mysqli |
config | Configuración de la aplicación |
database/schema.sql | Instrucciones SQL para crear las tablas |
public | Archivos que debe servir Apache al navegador |
public/api | Archivos PHP que reciben peticiones y devuelven datos |
public/partials | Partes comunes: cabecera, navegación y pie |
public/assets | JavaScript, CSS, logo e imágenes |
public/uploads | Imágenes subidas desde la administración |
scripts/seed.php | Script que introduce los datos de ejemplo |
docs | Documentación del proyecto |
Preguntas que debes responder
- ¿Qué diferencia hay entre
app/modelosyapp/dao? - ¿Qué archivo contiene la configuración de la base de datos?
- ¿Qué carpeta debe publicar Apache?
- ¿Por qué la configuración y los scripts de instalación no deben quedar dentro del directorio público?
- ¿Qué diferencia hay entre un archivo PHP y un archivo JavaScript?
- ¿Qué función tienen
header.php,nav.phpyfooter.php?
8. Seguir una operación sencilla
Abre estos archivos:
public/api/contacto.php
app/modelos/Mensaje.php
app/dao/MensajeDAO.php
Localiza el recorrido de los datos:
- Se reciben los datos del formulario.
- Se validan.
- Se crea un objeto
Mensaje. - Se crea el DAO.
- El DAO inserta el mensaje en la base de datos.
- PHP devuelve una respuesta JSON.
Identifica estas instrucciones:
$mensaje = new Mensaje(0, $nombre, $email, $texto);
$dao = new MensajeDAO($conexion);
$dao->insertar($mensaje);
No es necesario comprender todavía todo el proyecto. En esta fase debes poder explicar qué responsabilidad tiene cada archivo.
Evidencia: incluye una captura del proyecto abierto en el editor y una explicación breve de este recorrido.
Bloque B. Implantación local con XAMPP
9. Preparar XAMPP
Si todavía no tienes XAMPP, descárgalo desde su web oficial:
Las instrucciones siguientes utilizan una instalación de Windows situada en:
C:\xampp
Si tu instalación está en otra ubicación, adapta las rutas.
Abre el panel de control de XAMPP e inicia:
- Apache.
- MySQL.
Aunque el panel muestre el nombre MySQL, XAMPP puede incluir MariaDB como motor de base de datos.
Comprueba estas direcciones:
http://localhost
http://localhost/phpmyadmin
phpMyAdmin nos permitirá gestionar la base de datos de esta instalación. En la configuración básica de XAMPP se accede a él desde el propio equipo. apachefriends.org
Evidencia: captura del panel con Apache y MySQL iniciados.
10. Colocar el proyecto
Crea esta carpeta:
C:\proyectos
Coloca dentro el proyecto descomprimido:
C:\proyectos\loot-figures-clase
Comprueba que existe:
C:\proyectos\loot-figures-clase\public\index.php
La carpeta del proyecto estará fuera de htdocs. Configuraremos Apache para que publique únicamente su carpeta public.
Después, abre esta ubicación definitiva en VS Code o PhpStorm.
11. Configurar Apache para la tienda
11.1. Revisar la carga de VirtualHosts
Abre este archivo:
C:\xampp\apache\conf\httpd.conf
Busca la línea:
Include conf/extra/httpd-vhosts.conf
Si aparece comentada con #, elimina ese carácter.
Guarda el archivo.
11.2. Añadir la configuración
Abre:
C:\xampp\apache\conf\extra\httpd-vhosts.conf
Añade al final:
Listen 8080
<VirtualHost *:8080>
ServerName localhost
DocumentRoot "C:/proyectos/loot-figures-clase/public"
<Directory "C:/proyectos/loot-figures-clase/public">
Options -Indexes
AllowOverride All
Require local
</Directory>
</VirtualHost>
Importante: si ya existe una instrucción Listen 8080 en la configuración de Apache, no la añadas otra vez.
En la configuración de Apache hemos escrito las rutas con /.
¿Qué significa esta configuración?
| Instrucción | Función |
|---|---|
Listen 8080 | Apache escucha también en el puerto 8080 |
VirtualHost *:8080 | Define el sitio que responderá en ese puerto |
DocumentRoot | Indica la carpeta pública de la aplicación |
AllowOverride All | Permite aplicar las instrucciones de .htaccess |
Require local | Permite el acceso desde el propio ordenador |
Detén y vuelve a iniciar Apache desde XAMPP.
Si no arranca, revisa los mensajes y registros del servicio antes de continuar.
12. Crear la base de datos
Abre:
http://localhost/phpmyadmin
Selecciona la pestaña SQL y ejecuta:
CREATE DATABASE loot_figures
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'loot_app'@'localhost'
IDENTIFIED BY 'CambiaEstaClaveBD!';
GRANT SELECT, INSERT, UPDATE, DELETE
ON loot_figures.*
TO 'loot_app'@'localhost';
Hemos creado:
- La base de datos
loot_figures. - El usuario
loot_app. - Los permisos necesarios para las operaciones de la tienda.
La aplicación utilizará este usuario, no la cuenta root.
Si la base o el usuario ya existen por un intento anterior, revisa lo que has creado antes de repetir las instrucciones. No elimines bases de datos para resolver un error sin comprobar su contenido.
13. Importar las tablas
En phpMyAdmin:
- Selecciona la base de datos
loot_figures. - Abre la pestaña Importar.
- Selecciona el archivo:
C:\proyectos\loot-figures-clase\database\schema.sql
- Ejecuta la importación.
- Comprueba que aparecen estas tablas:
users
products
orders
order_items
messages
login_attempts
La importación debe realizarse con la cuenta de administración de la base de datos, porque crea las tablas.
No vuelvas a importar el esquema sobre una instalación que ya tiene sus tablas.
Evidencia: captura de la base de datos con las tablas creadas.
14. Crear el archivo de configuración
Dentro de config, copia:
config.example.php
y llama a la copia:
config.php
Puedes hacerlo desde el editor o el explorador de archivos.
Edita config.php y utiliza estos valores:
<?php
return [
'db' => [
'host' => 'localhost',
'port' => 3306,
'name' => 'loot_figures',
'user' => 'loot_app',
'password' => 'CambiaEstaClaveBD!'
],
'secure_cookie' => false,
'debug' => false
];
Si tu servicio de base de datos utiliza otro puerto, debes cambiar el valor port.
En esta práctica trabajamos con HTTP local, por eso secure_cookie permanece en false.
No copies config.docker.php: esa configuración corresponde a otro entorno.
15. Comprobar PHP y cargar los datos de ejemplo
Abre una terminal de PowerShell.
Comprueba el PHP de XAMPP:
& "C:\xampp\php\php.exe" -v
Después, sitúate en el proyecto:
Set-Location "C:\proyectos\loot-figures-clase"
Ejecuta:
& "C:\xampp\php\php.exe" scripts/seed.php
El script creará los usuarios y productos de demostración.
Si aparece un error, comprueba:
- Que MySQL está iniciado.
- Que existe
config/config.php. - Que la contraseña y el puerto son correctos.
- Que has importado las tablas.
El archivo seed.php se ejecuta desde la terminal. No tienes que abrirlo mediante una URL.
16. Abrir la tienda en localhost
Abre:
http://localhost:8080
La tienda debería mostrar la home, el logo, las imágenes y los productos.
No abras index.php haciendo doble clic. Tampoco utilices Live Server para ejecutar esta aplicación PHP. Debes acceder mediante Apache.
Cuentas de demostración
| Rol | Correo | Contraseña |
|---|---|---|
| Administrador | admin@loot.local | AdminDemo!2026 |
| Cliente | cliente@loot.local | ClienteDemo!2026 |
Estas cuentas utilizan direcciones ficticias. No necesitas disponer de esos correos.
17. Comprobar el funcionamiento local
Realiza estas pruebas:
Zona pública
- Abre la home.
- Accede al catálogo.
- Busca una figura.
- Filtra por rareza.
- Cambia el orden de los productos.
- Abre el detalle de una figura.
Registro y cuenta
- Crea una cuenta con datos ficticios.
- Cierra sesión.
- Vuelve a entrar.
- Accede a tu perfil.
- Cambia el teléfono y comprueba que se guarda.
Carrito y compra
- Entra como cliente.
- Añade una figura al carrito.
- Cambia la cantidad.
- Añade otra figura.
- Elimina una línea.
- Introduce una dirección ficticia.
- Confirma el pedido.
- Comprueba que aparece en el historial.
La compra es una simulación y no realiza ningún cobro.
Administración
- Entra como administrador.
- Accede al listado de productos.
- Modifica el nombre, precio o stock de una figura.
- Comprueba el resultado en el catálogo.
- Crea un usuario de prueba.
- Modifica sus datos.
- Cambia su contraseña.
- Comprueba que puede iniciar sesión con la nueva contraseña.
- Sube una fotografía a un producto.
Contacto
- Envía un mensaje desde la página de contacto.
- Entra como administrador.
- Comprueba que el mensaje aparece en el panel.
El mensaje se guarda en la base de datos. No se envía un correo electrónico.
18. Observar una petición JSON
Abre las herramientas de desarrollo del navegador y selecciona la pestaña Red / Network.
Recarga el catálogo y localiza la petición a:
api/listar_productos.php
Examina su respuesta.
Responde:
- ¿Qué información contiene el JSON?
- ¿Qué campos identifican el nombre y el precio del producto?
- ¿El navegador recibe el código fuente PHP?
- ¿Qué archivo JavaScript utiliza esos datos para construir las tarjetas?
Después, visita:
http://localhost:8080/ejemplo_clase.php
Este formulario permite observar un envío clásico por POST.
Utiliza otra cuenta ficticia para probarlo. Después del envío verás la respuesta JSON directamente en el navegador.
Explica la diferencia entre este formulario y el registro habitual de la tienda.
Bloque C. Implantación en Ubuntu Server
19. Preparar la máquina virtual
Utiliza la máquina virtual creada en clase.
Antes de comenzar:
- Comprueba que puedes iniciar sesión.
- Identifica tu usuario.
- Comprueba que puedes ejecutar
sudo. - Anota la versión de Ubuntu.
- Comprueba la dirección IP.
- Realiza una instantánea si el programa de virtualización lo permite.
Ejecuta:
whoami
cat /etc/os-release
ip -br a
También puedes consultar:
hostname -I
En los siguientes ejemplos utilizaremos:
192.168.1.50
Es una IP de ejemplo. Debes sustituirla por la dirección real de tu servidor.
20. Comprobar la comunicación con la máquina virtual
Desde tu ordenador, intenta acceder por SSH si ya lo configuraste en clase:
ssh alumno@192.168.1.50
Sustituye alumno por tu usuario real.
Si la máquina utiliza NAT
Puede ser necesario configurar una redirección de puertos en el programa de virtualización.
Por ejemplo:
| Puerto del ordenador | Puerto de Ubuntu | Uso |
|---|---|---|
| 2222 | 22 | SSH |
| 8081 | 8080 | Tienda |
Con esa configuración, SSH se utilizaría así:
ssh -p 2222 alumno@127.0.0.1
Y la tienda de Ubuntu se abriría desde el ordenador mediante:
http://localhost:8081
Si utilizas una red en la que el ordenador puede acceder directamente a la IP de Ubuntu, no necesitas esas redirecciones.
Documenta el modo de red que estás utilizando.
21. Instalar los servicios necesarios
En Ubuntu Server ejecuta:
sudo apt update
Después:
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-cli unzip
Apache atenderá las peticiones web; PHP ejecutará el código del servidor; MySQL almacenará los datos. La documentación de Ubuntu recoge la instalación de Apache y de PHP con su módulo para Apache. Ubuntu Server documentation
Si algunos paquetes ya estaban instalados, revisa el resultado del comando: no es necesario reinstalarlos manualmente.
Activa los servicios:
sudo systemctl enable --now apache2
sudo systemctl enable --now mysql
Comprueba su estado:
systemctl status apache2 --no-pager
systemctl status mysql --no-pager
Ambos deben aparecer activos.
Evidencia: captura de los servicios funcionando.
22. Comprobar la versión y las extensiones de PHP
Ejecuta:
php -v
Después:
php -m
Comprueba que aparecen:
mysqli
mysqlnd
fileinfo
session
Anota la versión de PHP de Ubuntu y compárala con la de XAMPP.
23. Transferir el proyecto al servidor
Para esta instalación, utiliza el ZIP original entregado por el profesor. Crearemos una base de datos nueva en Ubuntu.
Puedes transferir el archivo mediante SFTP o con scp.
Ejemplo, ejecutado desde tu ordenador y desde la carpeta donde está el ZIP:
scp loot-figures-php-clase.zip alumno@192.168.1.50:~/
Si utilizas la redirección SSH del ejemplo anterior:
scp -P 2222 loot-figures-php-clase.zip alumno@127.0.0.1:~/
Observa que scp utiliza -P mayúscula para indicar el puerto.
En Ubuntu comprueba que ha llegado:
ls -lh ~/loot-figures-php-clase.zip
Descomprime:
cd ~
unzip loot-figures-php-clase.zip
Comprueba:
ls ~/loot-figures-clase
Mueve el proyecto:
sudo mv ~/loot-figures-clase /var/www/
La ubicación final será:
/var/www/loot-figures-clase
Si ya existe una carpeta con ese nombre por un intento anterior, revisa su contenido antes de repetir el movimiento.
24. Configurar Apache en Ubuntu
24.1. Añadir el puerto
Abre:
sudo nano /etc/apache2/ports.conf
Añade:
Listen 8080
Conserva las instrucciones existentes y no dupliques Listen 8080 si ya aparece.
24.2. Crear el sitio
Ejecuta:
sudo nano /etc/apache2/sites-available/loot-figures.conf
Introduce:
<VirtualHost *:8080>
DocumentRoot /var/www/loot-figures-clase/public
<Directory /var/www/loot-figures-clase/public>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/loot-figures-error.log
CustomLog ${APACHE_LOG_DIR}/loot-figures-access.log combined
</VirtualHost>
Guarda el archivo.
Activa el sitio:
sudo a2ensite loot-figures.conf
Comprueba la sintaxis:
sudo apache2ctl configtest
Si aparece:
Syntax OK
reinicia Apache:
sudo systemctl restart apache2
No desactives los sitios anteriores de clase: esta tienda utiliza otro puerto.
25. Crear la base de datos en Ubuntu
Accede a MySQL:
sudo mysql
La instalación de MySQL mediante los paquetes de Ubuntu permite administrar el servicio y crear cuentas para las aplicaciones. Ubuntu Server documentation
Ejecuta:
CREATE DATABASE loot_figures
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'loot_app'@'localhost'
IDENTIFIED BY 'CambiaEstaClaveBD!';
GRANT SELECT, INSERT, UPDATE, DELETE
ON loot_figures.*
TO 'loot_app'@'localhost';
Sal:
EXIT;
Importa las tablas:
sudo mysql loot_figures < /var/www/loot-figures-clase/database/schema.sql
Comprueba el resultado:
sudo mysql -e "SHOW TABLES FROM loot_figures;"
Debes encontrar las mismas tablas que en XAMPP.
26. Configurar la conexión de la aplicación
Copia la plantilla:
sudo cp /var/www/loot-figures-clase/config/config.example.php /var/www/loot-figures-clase/config/config.php
Edita:
sudo nano /var/www/loot-figures-clase/config/config.php
Utiliza:
<?php
return [
'db' => [
'host' => 'localhost',
'port' => 3306,
'name' => 'loot_figures',
'user' => 'loot_app',
'password' => 'CambiaEstaClaveBD!'
],
'secure_cookie' => false,
'debug' => false
];
La base de datos está dentro de la propia máquina Ubuntu, por eso la aplicación utiliza localhost como servidor de base de datos.
No debes poner la IP del ordenador Windows en esta configuración.
27. Preparar propietarios y permisos
Apache necesita leer los archivos del proyecto. Además, debe poder escribir en la carpeta donde se guardan las imágenes subidas.
Configura el propietario y el grupo:
sudo chown -R root:www-data /var/www/loot-figures-clase
Configura los directorios:
sudo find /var/www/loot-figures-clase -type d -exec chmod 750 {} \;
Configura los archivos:
sudo find /var/www/loot-figures-clase -type f -exec chmod 640 {} \;
Permite que Apache gestione las imágenes subidas:
sudo chown -R www-data:www-data /var/www/loot-figures-clase/public/uploads
Comprueba:
ls -ld /var/www/loot-figures-clase/public/uploads
ls -l /var/www/loot-figures-clase/config/config.php
Preguntas
- ¿Qué representa el usuario
www-data? - ¿Por qué Apache necesita permiso de escritura en
uploads? - ¿Por qué no necesita escribir en todos los archivos PHP?
- ¿Qué diferencia hay entre los permisos de un archivo y los de un directorio?
No utilices chmod 777 para resolver problemas de permisos. Debes identificar qué usuario necesita acceso y qué operación debe realizar.
28. Cargar los datos de ejemplo
Ejecuta el script utilizando el usuario que puede leer los archivos del proyecto:
sudo -u www-data php /var/www/loot-figures-clase/scripts/seed.php
Comprueba los productos:
sudo mysql -e "SELECT id, name, stock FROM loot_figures.products;"
Comprueba los usuarios sin mostrar los hashes de contraseña:
sudo mysql -e "SELECT id, name, email, role FROM loot_figures.users;"
Evidencia: captura de los datos creados.
29. Comprobar el acceso web
Desde tu ordenador abre:
http://192.168.1.50:8080
Sustituye la IP por la del servidor.
Si utilizas la redirección NAT propuesta, abre:
http://localhost:8081
Si no puedes acceder
Comprueba el estado de Apache:
systemctl status apache2 --no-pager
Comprueba los puertos:
sudo ss -lntp
Revisa el cortafuegos:
sudo ufw status
Si UFW está activo, permite el puerto de la tienda:
sudo ufw allow 8080/tcp
No es necesario activar ni desactivar el cortafuegos para realizar esta comprobación.
Consulta el registro de errores del sitio:
sudo tail -n 50 /var/log/apache2/loot-figures-error.log
Importante: escribir localhost en el navegador de tu ordenador apunta a tu ordenador. No apunta a Ubuntu, salvo que hayas configurado una redirección de puertos.
30. Repetir las pruebas funcionales
Realiza en Ubuntu las mismas pruebas que hiciste en XAMPP:
- Navegación pública.
- Catálogo y filtros.
- Registro.
- Login y cierre de sesión.
- Edición del perfil.
- Carrito y pedido.
- Historial.
- Administración de productos.
- Administración de clientes.
- Cambio de contraseña.
- Subida de una imagen.
- Envío y consulta de un mensaje.
Comprueba especialmente la subida de imágenes: permite verificar que los permisos de uploads están preparados correctamente.
31. Comprobar qué está publicando Apache
Intenta abrir:
http://IP_DEL_SERVIDOR:8080/config/config.php
http://IP_DEL_SERVIDOR:8080/database/schema.sql
http://IP_DEL_SERVIDOR:8080/scripts/seed.php
Estas direcciones no deben permitir acceder a esos archivos, porque están fuera de la carpeta pública.
En cambio, debe funcionar:
http://IP_DEL_SERVIDOR:8080/api/listar_productos.php
Esta dirección devolverá los productos en JSON.
Explica por qué unas rutas son accesibles y otras no.
Bloque D. Comparación, documentación y entrega
32. Comparar las dos instalaciones
Completa esta tabla con los datos reales de tu trabajo:
| Aspecto | XAMPP | Ubuntu Server |
|---|---|---|
| Sistema operativo | ||
| Versión de PHP | ||
| Motor y versión de base de datos | ||
| Ubicación del proyecto | ||
| Carpeta pública | ||
| Archivo de configuración del sitio Apache | ||
| Dirección de acceso | ||
| Puerto web | ||
| Usuario de la base de datos | ||
Gestión de permisos de uploads | ||
| Ubicación de los registros de errores |
Responde también:
- ¿Qué pasos son iguales en los dos entornos?
- ¿Qué pasos cambian?
- ¿Qué tareas facilita XAMPP?
- ¿Qué servicios has tenido que preparar en Ubuntu?
- ¿Por qué el editor no sustituye al servidor web?
- ¿Dónde se ejecuta PHP?
- ¿Dónde se ejecuta JavaScript?
- ¿Por qué necesitas copiar archivos y preparar también la base de datos?
33. Registrar las pruebas
Incluye una tabla de comprobación para cada instalación:
| Prueba | Resultado esperado | Resultado obtenido | Evidencia |
|---|---|---|---|
| Abrir la home | Se muestran diseño e imágenes | ||
| Consultar catálogo | Se muestran los productos | ||
| Registrar cliente | Se crea la cuenta | ||
| Iniciar sesión | Se accede a la cuenta | ||
| Crear pedido | Se guarda y aparece en el historial | ||
| Editar producto | El cambio aparece en el catálogo | ||
| Cambiar contraseña | Funciona la nueva contraseña | ||
| Subir imagen | Se guarda y se muestra | ||
| Enviar contacto | El administrador puede leerlo |
No marques una prueba como correcta sin realizarla.
34. Documentar incidencias
Si encuentras un problema, registra:
- Qué estabas intentando hacer.
- El mensaje de error.
- Qué comprobaste.
- La causa que identificaste.
- La solución aplicada.
- Cómo verificaste que funcionaba.
Si no encuentras incidencias, indica las comprobaciones preventivas que has realizado: configuración, servicios, puertos, permisos y conexión a la base de datos.
35. Documentación que debes entregar
Prepara un README.md con estas secciones:
- Título, autor y objetivo.
- Descripción de la aplicación.
- Requisitos.
- Estructura del proyecto.
- Instalación en XAMPP.
- Instalación en Ubuntu Server.
- Configuración de Apache y base de datos.
- Pruebas funcionales.
- Incidencias y soluciones.
- Comparación de los entornos.
- Conclusiones personales.
Guarda las capturas en una carpeta:
capturas
Puedes insertarlas así:

Los comandos deben aparecer en bloques de código:
```bash
sudo systemctl status apache2 --no-pager
```
La documentación debe explicar tu instalación real, con tus rutas, tu IP, tus versiones y tus resultados.
No entregues únicamente una copia de este enunciado.
36. Entrega final
Entrega un ZIP con:
README.md.- La carpeta
capturas. - Los fragmentos de configuración necesarios para comprender tu instalación, con las contraseñas sustituidas por un marcador.
Por ejemplo:
'password' => 'CONTRASEÑA_OCULTA'
No es necesario incluir los discos de la máquina virtual ni una copia completa de XAMPP.
Conserva las dos instalaciones funcionando para poder demostrarlas en clase.
37. Comprobación final antes de entregar
- La aplicación funciona en XAMPP.
- La aplicación funciona en Ubuntu Server.
- Has comprobado las funciones de cliente y administrador.
- La subida de imágenes funciona en ambos entornos.
- Apache sirve únicamente la carpeta
public. - Has identificado los modelos, DAO y archivos de operaciones.
- Has observado una respuesta JSON.
- La documentación contiene pasos, comandos y evidencias.
- Las capturas se visualizan correctamente en el README.
- Puedes explicar qué has configurado y por qué.
La actividad se considerará completada cuando puedas mostrar las dos instalaciones y explicar el recorrido de una petición desde el navegador hasta la base de datos.











![[Reto] - Infraestructura virtualizada con Ubuntu Server 9dc81aff-d57d-45b1-83e9-c70955561713](https://laaventuradeaprender.com/wp-content/uploads/2026/03/9dc81aff-d57d-45b1-83e9-c70955561713-150x150.png)
