Cómo subir Laravel a cPanel y Webuzo paso a paso (sin SSH)

Equipo Técnico de Hosting Perú Equipo Técnico de Hosting Perú Publicado: 26 oct 2026 Lectura: 10 min
Equipo Técnico de Hosting Perú

Publicado el

En esta guía subes un proyecto Laravel 13 a un hosting con cPanel o Webuzo usando solo el panel de control: sin acceso SSH y sin el instalador Softaculous. Está pensada para quien ya tiene su proyecto funcionando en su computadora y necesita publicarlo en un hosting compartido.

Probado por nuestro equipo: Laravel 13.38 con PHP 8.4, en cPanel 138 y en Webuzo 4.8, sobre AlmaLinux 9, con un plan de hosting compartido · octubre de 2026. Los pasos y los errores de esta guía salen de esa prueba.

Antes de empezar

Necesitas
  • Tu proyecto Laravel funcionando en tu computadora, con PHP y Composer instalados.
  • Un hosting con cPanel o Webuzo y una versión de PHP compatible: Laravel 13 necesita PHP 8.3 o superior (consulta la tabla de compatibilidad Laravel y PHP).
  • Una base de datos MySQL si tu aplicación la usa. En nuestros planes, el de 3 GB no incluye MySQL; desde el plan de 5 GB sí.
¿Por qué no usar Softaculous? El instalador de Laravel de Softaculous instala Laravel 11, que dejó de recibir parches de seguridad el 12 de marzo de 2026. Para un proyecto nuevo, sube tu propio proyecto con Laravel 13 siguiendo esta guía.

Paso 1: Prepara el proyecto en tu computadora

Como en el hosting no tendrás terminal, la carpeta vendor/ con las dependencias debe ir ya instalada desde tu computadora.

Usa la misma versión de PHP que tendrá el hosting

Composer elige las dependencias según la versión de PHP de tu computadora. En nuestra prueba, un proyecto preparado con PHP 8.4 no arrancó en un servidor con PHP 8.2 y mostró este mensaje:

Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 8.4.1". You are running 8.2.35.

Para evitarlo, usa en tu computadora la misma versión de PHP que vas a elegir en el hosting, o fija esa versión en el proyecto antes de instalar las dependencias:

# Ejemplo: el hosting usará PHP 8.3
composer config platform.php 8.3.0
composer update

Instala las dependencias para producción

composer install --no-dev --optimize-autoloader

Si tu proyecto usa Vite (CSS y JavaScript), compila también los recursos con npm run build: se generará la carpeta public/build.

Ajusta el archivo .env para producción

APP_ENV=production
APP_DEBUG=false
APP_URL=https://tudominio.com
Importante: con APP_DEBUG=true en producción, cualquier error muestra a los visitantes datos internos de tu aplicación, como rutas y configuración. La documentación de Laravel indica que en producción debe estar siempre en false.

Comprime el proyecto en un .zip

Comprime el contenido de la carpeta del proyecto (no hace falta incluir node_modules ni tests). Comprueba que el .zip incluya los archivos ocultos .env y public/.htaccess: en Windows y macOS no se ven por defecto. En nuestra prueba, el .zip de un proyecto nuevo pesó 8,5 MB y tenía unos 7.500 archivos.

Paso 2: Sube y descomprime el proyecto

  1. Entra a tu panel y abre el Administrador de archivos (tiene el mismo nombre en cPanel y en Webuzo).
  2. Ve a tu carpeta de inicio (/home/tuusuario), no a public_html.
  3. Sube el .zip con el botón Subir y, cuando termine, usa Extraer para descomprimirlo en una carpeta nueva llamada laravel.
  4. Activa Mostrar archivos ocultos (en cPanel está en Configuración) y comprueba que laravel/.env existe.
¿Por qué fuera de public_html? Todo lo que está dentro de public_html se puede pedir desde el navegador. Dejando el proyecto fuera, el .env (con las contraseñas de tu base de datos) y el código no quedan expuestos. Solo la carpeta public de Laravel debe ser accesible, como indica la documentación oficial.

Paso 3: Copia la carpeta public a public_html

  1. Entra a public_html y borra el index.html o la página por defecto del hosting, si existe.
  2. Abre laravel/public, selecciona todo su contenido (index.php, .htaccess, favicon.ico, robots.txt y la carpeta build si existe) y usa Copiar con destino /public_html.

Paso 4: Edita public_html/index.php

El index.php de Laravel busca el resto del proyecto en la carpeta superior. Como el proyecto está en laravel/, hay que cambiar tres rutas y añadir una línea. En el Administrador de archivos, selecciona public_html/index.php y pulsa Editar.

Antes (líneas originales):

if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';

$app->handleRequest(Request::capture());

Después:

if (file_exists($maintenance = __DIR__.'/../laravel/storage/framework/maintenance.php')) {
require __DIR__.'/../laravel/vendor/autoload.php';
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';

$app->usePublicPath(__DIR__);

$app->handleRequest(Request::capture());

La línea usePublicPath(__DIR__) le dice a Laravel que su carpeta pública es ahora public_html. Sin ella, funciones como asset() o los archivos de Vite buscarían en laravel/public.

Paso 5: Elige la versión de PHP del dominio

  1. Abre Administrador MultiPHP en cPanel o MultiPHP Manager en Webuzo.
  2. Marca tu dominio, elige PHP 8.4 (o la versión con la que preparaste el proyecto) y aplica el cambio.
En cPanel, haz este paso después de copiar el .htaccess. cPanel guarda la versión de PHP dentro de public_html/.htaccess. En nuestra prueba, al copiar el .htaccess de Laravel encima del de cPanel, el dominio volvió a la versión de PHP por defecto y la web dio error 500. Si ya te pasó, vuelve a elegir la versión en el Administrador MultiPHP: cPanel añade su bloque al final del .htaccess de Laravel sin estropearlo.

En este punto ya puedes abrir tu dominio: si tu proyecto usa SQLite (la opción por defecto de Laravel 13), deberías ver tu aplicación. Si usa MySQL, sigue con el paso 6.

Paso 6: Crea la base de datos MySQL

Ambos paneles anteponen tu nombre de usuario: si creas la base app, se llamará tuusuario_app. Usa ese nombre completo en el siguiente paso.

Paso 7: Configura el .env en el servidor

Edita laravel/.env con el Administrador de archivos y completa los datos de la base de datos:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=tuusuario_app
DB_USERNAME=tuusuario_app
DB_PASSWORD=la-contraseña-del-usuario

En Laravel 13 estas líneas vienen comentadas con #: quita el # del inicio. Revisa también que APP_URL tenga tu dominio con https://.

Paso 8: Ejecuta las migraciones sin SSH (con una tarea cron)

Sin terminal, la forma de ejecutar php artisan migrate es programar una tarea cron que se ejecute una vez y borrarla después.

  1. Abre Trabajos de cron en cPanel o Tarea programada (Cron) en Webuzo.
  2. Crea una tarea que se ejecute cada minuto con el comando de tu panel (cambia tuusuario y la versión de PHP por las tuyas):

cPanel:

cd /home/tuusuario/laravel && /usr/local/bin/ea-php84 artisan migrate --force >> /home/tuusuario/migracion.log 2>&1

Webuzo:

cd /home/tuusuario/laravel && /usr/local/apps/php84/bin/php artisan migrate --force >> /home/tuusuario/migracion.log 2>&1
  1. Espera uno o dos minutos y abre migracion.log en tu carpeta de inicio: cada migración debe terminar en DONE.
  2. Borra la tarea cron. Si la dejas, intentará migrar cada minuto.

El parámetro --force es necesario porque, con APP_ENV=production, Laravel pide confirmación antes de migrar y una tarea cron no puede responder.

¿Tu aplicación usa el programador de tareas de Laravel? Entonces sí necesitas una tarea cron permanente que ejecute php artisan schedule:run cada minuto. Te explicamos cómo crearla en cron jobs en cPanel.

Paso 9: Activa el SSL y comprueba tu sitio

En nuestra prueba, ambos paneles emitieron el certificado gratuito de Let’s Encrypt solos al crear la cuenta. Si tu dominio no carga con https://:

Por último, comprueba que https://tudominio.com/.env no muestre el archivo: debe responder con un error 403 o 404.

Errores comunes y cómo resolverlos

«Composer detected issues in your platform»

El PHP del hosting es más antiguo que el que usaste para preparar el proyecto. Sube la versión en MultiPHP o vuelve a preparar el proyecto con la versión del hosting (paso 1).

Error 500 en cPanel tras copiar el .htaccess

Se perdió la versión de PHP que guarda cPanel en el .htaccess. Vuelve a elegirla en el Administrador MultiPHP (paso 5).

Se ve la página por defecto del hosting

Queda un index.html en public_html o no se copió el contenido de laravel/public. Revisa el paso 3.

Error 500 después de configurar MySQL

Revisa en .env el nombre completo de la base y del usuario (con el prefijo tuusuario_) y la contraseña. El detalle del error está en laravel/storage/logs/laravel.log.

«Class not found» o fallos al cargar

Falta la carpeta vendor o está incompleta. Vuelve a ejecutar composer install --no-dev en tu computadora y sube el .zip de nuevo.

¿Hay que dar permisos 777 a storage?

No. En nuestros servidores PHP se ejecuta con tu usuario, así que los permisos 755 que dejan los paneles bastan. 777 es inseguro.

¿Otro error 500 o una página en blanco? En Error 500 en Laravel en cPanel y Webuzo: causas y solución te explicamos dónde ver el mensaje real sin SSH y cómo resolver las 8 causas más comunes.

cPanel y Webuzo: qué cambia en cada paso

PasocPanelWebuzo
Subir y extraerAdministrador de archivosAdministrador de archivos
Versión de PHPAdministrador MultiPHP (después de copiar el .htaccess)MultiPHP Manager
Base de datosDatabase Wizard / Manage My DatabasesBases de datos
MigracionesTrabajos de cron · /usr/local/bin/ea-php84Tarea programada (Cron) · /usr/local/apps/php84/bin/php
SSLAutomático (AutoSSL); manual en SSL/TLS StatusAutomático (Let’s Encrypt)
Acceso SSH No necesario No necesario
¿Buscas hosting para tu proyecto Laravel?

Varias versiones de PHP por dominio, MySQL, SSL gratis y soporte en español.

Ver planes de hosting

Preguntas frecuentes

No. Preparas las dependencias en tu computadora, subes el proyecto con el Administrador de archivos y ejecutas las migraciones con una tarea cron de una sola vez.
Softaculous instala Laravel 11, que ya no recibe parches de seguridad desde marzo de 2026. Para un proyecto nuevo es mejor subir tu propio proyecto con Laravel 13.
Sí, si tu aplicación usa SQLite, que es la base de datos por defecto de Laravel 13: el archivo database/database.sqlite viaja dentro del proyecto. Para aplicaciones con muchos usuarios simultáneos conviene MySQL.
Sube los archivos modificados (o un .zip nuevo, conservando tu .env del servidor). Si hay migraciones nuevas, repite el paso 8 y borra la tarea cron al terminar.
La misma con la que preparaste el proyecto en tu computadora. Para Laravel 13 recomendamos PHP 8.4. Consulta la tabla de compatibilidad Laravel y PHP.

Fuentes

Prueba realizada el 26 de octubre de 2026 en servidores de hosting.com.pe.

¿Necesitas hosting rápido y con soporte en español?

Hosting optimizado, SSL gratis y soporte técnico 24/7 desde Perú.

Ver planes de Hosting
Equipo Técnico de Hosting Perú
Equipo Técnico de Hosting Perú

Administramos servidores cPanel/WHM y VPS AlmaLinux para empresas peruanas desde hace 19 años.