Para subir un proyecto Laravel a un hosting compartido con cPanel debes separar los archivos de la aplicación del directorio público (public/) y apuntar el dominio a esa carpeta. Este ajuste es lo que hace funcionar Laravel sin servidor dedicado ni acceso root.
¿Es posible correr Laravel en hosting compartido?
Sí, aunque con limitaciones. Laravel requiere PHP 8.1 o superior, acceso a Composer, y control sobre el directorio raíz del dominio. La mayoría de los hosts compartidos modernos —HostGator, Hostinger, Neubox— ya ofrecen PHP 8.2 y acceso a Composer por SSH o desde el terminal de cPanel. Lo que no tendrás en hosting compartido son colas de trabajo en segundo plano, WebSockets nativos ni control de procesos — para eso necesitas un VPS.
Paso 1: Prepara tu proyecto local antes de subir
Antes de transferir archivos, asegúrate de que tu proyecto esté listo para producción:
- Ejecuta
composer install --optimize-autoloader --no-devpara instalar dependencias sin las de desarrollo. - Compila tus assets si usas Vite o Mix:
npm run build. - Copia
.env.examplea.envy configura las variables de producción (base de datos, APP_KEY, APP_ENV=production, APP_DEBUG=false). - Genera la clave de aplicación si no la tienes:
php artisan key:generate.
No subas el directorio node_modules/ ni tu .env local — usarás un .env de producción directamente en el servidor.
Paso 2: Estructura de carpetas en el servidor
Este es el paso crítico que más confunde. En cPanel, cada dominio o subdominio apunta a un directorio raíz (Document Root). El problema es que Laravel espera que el servidor sirva solo la carpeta public/, no la raíz del proyecto completo.
La solución recomendada es la siguiente estructura:
home/
tuusuario/
miapp/ ← archivos de Laravel (app/, config/, vendor/, etc.)
public_html/ ← Document Root del dominio principal
index.php ← modificado para apuntar a miapp/
.htaccess
(resto de assets: css/, js/, images/)
Si el proyecto es para un subdominio o addon domain, cPanel te permite elegir el Document Root — ponlo en public_html/miapp_public y sube los archivos del proyecto a miapp/ fuera de public_html.
Paso 3: Sube los archivos al servidor
Tienes dos métodos principales:
Opción A: File Manager de cPanel
- Comprime tu proyecto (sin
node_modules) en un ZIP. - Abre el File Manager en cPanel, navega al directorio destino y sube el ZIP.
- Extrae el ZIP ahí mismo con clic derecho → Extract.
Opción B: SSH + Git (recomendado)
Si tu hosting permite acceso SSH (muchos planes compartidos lo incluyen):
ssh [email protected]
cd ~/miapp
git clone https://github.com/tuusuario/mi-proyecto.git .
composer install --optimize-autoloader --no-dev
Este método facilita actualizaciones futuras: solo haces git pull y composer install.
Paso 4: Ajusta los archivos de entrada del dominio
Una vez que los archivos están en el servidor, necesitas redirigir el Document Root del dominio hacia public/ de tu proyecto. Hay dos formas:
Opción 1: Cambiar el Document Root en cPanel
En cPanel → Dominios (o Addon Domains / Subdomains), edita el Document Root del dominio y apúntalo directamente a /home/usuario/miapp/public. Esta es la opción más limpia.
Opción 2: Modificar index.php en public_html
Si no puedes cambiar el Document Root, copia el index.php de tu carpeta public/ a public_html/ y edita las rutas al autoloader y a la app:
require __DIR__.'/../miapp/vendor/autoload.php';
$app = require_once __DIR__.'/../miapp/bootstrap/app.php';
Copia también el .htaccess de public/ a public_html/.
Paso 5: Configura el .env y la base de datos
- Crea la base de datos MySQL desde cPanel → MySQL Databases. Anota el nombre de la BD, usuario y contraseña.
- Sube o crea el archivo
.enven la raíz del proyecto (~/miapp/.env) con los datos correctos:APP_ENV=production APP_DEBUG=false APP_KEY=base64:... DB_HOST=localhost DB_DATABASE=usuario_nombrebd DB_USERNAME=usuario_dbuser DB_PASSWORD=contraseña_segura - Ejecuta las migraciones por SSH:
php artisan migrate --force. - Ajusta los permisos de las carpetas de escritura:
chmod -R 775 storage bootstrap/cache
Si tu hosting no ofrece SSH, puedes ejecutar Artisan creando un archivo PHP temporal con shell_exec('php artisan migrate --force') — aunque SSH siempre es preferible.
Paso 6: Verifica la instalación
- Visita tu dominio en el navegador. Si ves la página de bienvenida de Laravel, el deploy fue exitoso.
- Si aparece un error 500, revisa los logs en
storage/logs/laravel.log. - Si aparece el código fuente PHP en lugar de la página, el servidor está corriendo PHP como CGI sin el módulo correcto — contacta soporte.
- Activa el caché de configuración y rutas para mejor rendimiento:
php artisan config:cache && php artisan route:cache.
Si el deploy es para un proyecto de cliente o un producto en producción, considera contratar servicios de despliegue profesionales. En elenlace.com ayudamos a agencias y negocios a desplegar aplicaciones PHP/Laravel en entornos seguros y optimizados.
Para comparar qué hosting compartido soporta mejor Laravel en México, visita nuestra sección de comparativas de hosting.
Conclusiones clave
- Laravel funciona en hosting compartido siempre que el plan ofrezca PHP 8.1+ y acceso a Composer.
- La clave es separar los archivos del proyecto del Document Root y apuntar el dominio solo a
public/. - SSH simplifica enormemente el proceso de subida de archivos y las actualizaciones futuras.
- El archivo
.envdebe configurarse directamente en el servidor con datos de producción. - Ajusta permisos en
storage/ybootstrap/cache/para evitar errores de escritura. - Para proyectos de mayor escala o con colas/WebSockets, un VPS es la mejor opción.
¿Necesitas apoyo para desplegar tu aplicación Laravel o migrarla a un entorno más robusto? El equipo de elenlace.com te asesora en la configuración correcta desde el primer día.
Preguntas frecuentes
¿Todos los hosting compartidos soportan Laravel?
No todos. Necesitas uno que ofrezca PHP 8.1 o superior, acceso a Composer (por SSH o terminal de cPanel) y capacidad para modificar el Document Root del dominio. Verifica estas características antes de contratar.
¿Puedo correr php artisan sin acceso SSH?
Sí, de forma limitada. Puedes crear un archivo PHP con echo shell_exec('php artisan comandoaqui'); y ejecutarlo desde el navegador. Sin embargo, este método es menos seguro y debes eliminar el archivo inmediatamente después de usarlo.
¿Por qué aparece un error 500 después de subir Laravel?
Las causas más comunes son: permisos incorrectos en storage/ o bootstrap/cache/, un .env mal configurado, o rutas al autoloader erróneas en index.php. Revisa storage/logs/laravel.log para el mensaje exacto.
¿Puedo usar variables de entorno del servidor en lugar del archivo .env?
Depende del hosting. Algunos paneles permiten definir variables de entorno por dominio. Si el tuyo no lo permite, usar el archivo .env directamente en el servidor (fuera del Document Root) es la alternativa segura.
Compara proveedores
Otros proveedores y guías que vale la pena comparar: