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:
- Usuario MySQL
- Contraseña
- Base de datos existente
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: