Cómo publicar un CRUD en Ubuntu y Apache (deploy real paso a paso) 🚀

Después de crear un CRUD completo con PHP y MySQL, el último paso es el más emocionante:


Publicarlo en un servidor real para que funcione en internet.


Muchos tutoriales enseñan a programar, pero pocos explican cómo llevar el proyecto a producción. En este caso de estudio vamos a hacerlo de forma sencilla y práctica usando:

  • Ubuntu Server
  • Apache
  • PHP
  • MySQL
  • Un proyecto CRUD real

Este paso convierte un proyecto de aprendizaje en una aplicación web real accesible desde cualquier lugar.



Qué significa hacer "deploy"


Hacer deploy significa:

  • Copiar tu proyecto al servidor.
  • Configurar el entorno.
  • Dar permisos correctos.
  • Probar que funcione correctamente.

Una vez hecho, cualquier persona podrá usar tu aplicación desde el navegador.



1) Carpeta pública del servidor web

En Apache sobre Ubuntu, la carpeta pública normalmente es:

/var/www/

Dentro suele estar:

/var/www/html/

Pero una práctica mejor es crear carpetas organizadas.

Por ejemplo:

/var/www/html/casos-de-estudio/

Y dentro:

/var/www/html/casos-de-estudio/

Que es exactamente donde está tu CRUD.

Ejemplo:

/var/www/html/casos-de-estudio/
│
├── crud-caso-de-estudio.php
├── includes/
│   ├── con.php
│   └── header.php

Esto permite tener varios proyectos organizados.



Verificar que Apache puede acceder

Desde terminal:

ls /var/www/html/casos-de-estudio/

Si ves los archivos, Apache podrá servirlos.



2) Configurar la conexión a la base de datos

En tu archivo:

includes/con.php

Debes definir:

$host = 'localhost';
$db   = 'floopware_casos';
$user = 'usuario';
$pass = 'password';

Normalmente en el servidor:

  • host = localhost
  • MySQL está en la misma máquina

Después de configurar, prueba:

https://tusitio.com/casos-de-estudio/crud-caso-de-estudio.php

Si ves el CRUD, la conexión funciona.



3) Permisos correctos (muy importante)

Uno de los errores más comunes en Ubuntu es olvidar permisos.

Apache suele ejecutarse como usuario:

www-data

Debes asegurarte de que pueda leer los archivos.

Ejemplo recomendado:

sudo chown -R www-data:www-data /var/www/html

Esto hace que Apache sea propietario.



Permisos recomendados

Archivos:

sudo find /var/www/html -type f -exec chmod 644 {} \;

Carpetas:

sudo find /var/www/html -type d -exec chmod 755 {} \;

Esto permite:

  • Lectura normal
  • Sin riesgos innecesarios

4) Verificar que PHP funciona

Puedes probar creando:

info.php

Contenido:

<?php phpinfo(); ?>

Luego visita:

https://tusitio.com/info.php

Si aparece la página de PHP:

✅ PHP funciona correctamente.

Después puedes eliminar el archivo.



5) Cosas típicas que fallan (y cómo solucionarlas)

Esta sección te ahorrará horas de frustración.



Error 500 (Internal Server Error)

Causas comunes:

  • Error en PHP
  • Permisos incorrectos
  • Archivo faltante

Solución:

Ver logs:

sudo tail -f /var/log/apache2/error.log

Este comando muestra errores en tiempo real.



Error de conexión MySQL

Mensaje típico:

Error de conexión

Revisar:

Probar desde terminal:

mysql -u usuario -p

Si aun no tienes claro cómo crear usuarios en MySQL en este post te digo como:



Página en blanco

Casi siempre significa error PHP.

Activar errores temporalmente:

ini_set('display_errors', 1);
error_reporting(E_ALL);

Luego desactivarlo en producción.



Permisos incorrectos


Error típico:

  • Página carga mal
  • Archivos no encontrados

Solución:

sudo chown -R www-data:www-data /var/www/

Ruta incorrecta en includes


Tu CRUD usa:

require __DIR__ . '/includes/con.php';

Esto es correcto porque:

  • Funciona en cualquier ruta.
  • No depende del dominio.
  • Evita errores de rutas relativas.

6) URL final del CRUD


Una vez publicado, el CRUD suele quedar accesible como:

https://tusitio.com/casos-de-estudio/crud-caso-de-estudio.php

O si tienes dominio:

https://floopware.com/casos-de-estudio/crud-caso-de-estudio.php

Esto permite:

  • Probar el proyecto online
  • Mostrarlo como portafolio
  • Usarlo como demo real

7) Buenas prácticas para producción

Aunque este es un caso de estudio, estas prácticas son recomendables.



1️⃣ No mostrar errores en producción

Evita esto:

display_errors = On

Puede mostrar:

  • Rutas internas
  • SQL
  • Información sensible

2️⃣ Mantener includes fuera de la raíz (opcional avanzado)

Ejemplo ideal:

/var/www/html/
   public/
   includes/

Pero para este caso de estudio no es obligatorio.



3️⃣ Mantener backups de la base de datos

Ejemplo:

mysqldump -u usuario -p floopware_casos > backup.sql

Muy útil si algo falla.



4️⃣ Mantener PHP actualizado

Versiones modernas:

  • PHP 8.1+
  • PHP 8.2+
  • PHP 8.3+
  • PHP 8.4...




8) Resultado final del caso de estudio

Después de todos los pasos tienes:

✅ Base de datos MySQL

✅ CRUD completo

✅ Conexión PDO segura

✅ Validación

✅ Buscador

✅ Edición

✅ Eliminación segura

✅ Protección básica

✅ Deploy real en servidor

Eso es exactamente lo que representa un proyecto web completo funcional.



Conclusión:


Publicar tu CRUD en Ubuntu y Apache es el paso que convierte un proyecto de aprendizaje en una aplicación real.

Este caso de estudio demuestra todo el proceso:

  • Diseño de base de datos
  • Conexión PDO
  • CRUD completo
  • Seguridad básica
  • Deploy real

Si puedes hacer esto desde cero, ya tienes las bases necesarias para construir sistemas web completos.

Este es el tipo de proyecto que marca la diferencia entre saber teoría y saber desarrollar aplicaciones reales.



Post relacionados:

Acceso al crud completo:


Categorías que te pueden ayudar si tienes dudas sobre algún tecnicismo o algún paso: