Publicar Laravel en Hosting compartido

Índice de contenidos

Recomendaciones antes de publicar

  • Antes de empezar a desarrollar la aplicación en Laravel deberíamos saber, que versión de PHP se trabaja en el Hosting, en ocasiones los proveedores de Hosting no te permiten cambiar la versión del PHP a menos que te cambies de plan de cuenta. Según la versión de PHP podemos decidir que versión de Laravel podemos trabajar y así evitar futuros problemas.
  • Verifica que el Hosting cumpla con los requerimientos de la versión de Laravel que se escogió, puedes revisarlo en la documentación de Laravel https://laravel.com/docs/master/installation
  • En un Hosting compartido por lo general no hay problemas de permisos, pero si surgiera algún error recuerda que las carpetas storage y bootstrap/cache debe tener permisos de escritura 755
  • Trabaja en un entorno de desarrollo lo más parecido al Hosting donde se va ha publicar, esto te evitará muchos dolores de cabeza.
  • Sigue un principio básico, todo lo que no es público no debe ser accedido a traves del navegador web u otro programa. La carpeta public de Laravel es la parte que debe ser pública las demas carpetas no deben ser accedidas por ningun lado.
  • Para subir los archivos es mejor subirlo en uno o dos archivos comprimidos (zip), subalo por FTP y luego en el administrador de archivos del cPanel lo descomprime.
  • Exporte su base de datos en formato .sql o .zip y lo importa a través de la aplicación phpMyAdmin que trae el cPanel
  • Los datos de conexión se guardan en el archivo .env, cuando haya subido los archivos de laravel modifique este archivo con los nuevos datos de conexión.

    APP_ENV=production
    APP_DEBUG=false
     
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_DATABASE=laravel_demo
    DB_USERNAME=root
    DB_PASSWORD=secret
     
    MAIL_DRIVER=mail
    MAIL_HOST=mail.midominio
    MAIL_PORT=25

Publicar en el dominio principal

Cambiar la estructura de carpetas

En un hosting compartido la carpeta pública del dominio principal es public_html y su ruta absoluta es /home/user/public_html. En Laravel la carpeta pública es public, entonces debemos hacer los siguientes cambios.

Creamos la carpeta /home/user/laravel y ponemos en esa carpeta todo el contenido de archivos y carpetas de Laravel

Movemos el todo el contenido de la carpeta /home/user/laravel/public a la carpeta /home/user/public_html

Modificamos el archivo /home/user/public_html/index.php, modificamos 2 lineas

require __DIR__.'/../laravel/vendor/autoload.php';
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';

En app/Providers/AppServiceProvider.php agrega el siguiente código en el método register, para que la función public_path() cambie a la nueva ruta de la carpeta pública

$this->app->bind('path.public', function() {
    return base_path().'/public_html';
});

Publicar en sub dominio

Cambiar la estructura de carpetas

En un sub dominio la ruta de la carpeta principal es /home/user/public_html/subdominio

Creamos la carpeta /home/user/public_html/subdominio/laravel y ponemos en esa carpeta todo el contenido de archivos y carpetas de Laravel
Movemos el todo el contenido de la carpeta /home/user/public_html/subdominio/laravel/public a la carpeta /home/user/public_html/subdominio
Modificamos el archivo /home/user/public_html/subdominio/index.php, modificamos 2 lineas.

require __DIR__.'/laravel/vendor/autoload.php';
$app = require_once __DIR__.'/laravel/bootstrap/app.php';

En app/Providers/AppServiceProvider.php agrega el siguiente código en el método register, para que la función public_path() cambie a la nueva ruta de la carpeta pública

$this->app->bind('path.public', function() {
    return realpath(base_path().'/../');
});

Proteger la carpeta laravel

Como la carpeta del subdominio se encuentra en la zona pública y puede ser accedido desde http://midomnio.com/subdominio/laravel/.env entonces necesitamos protegerlo.
En el archivo public_html/subdominio/.htaccess agregamos al inicio la siguiente redirección

<IfModule mod_alias.c>
  RedirectMatch 301 laravel/.* /error/?
</IfModule>
(Visited 15.114 times, 1 visits today)
Puedes saltar al final y dejar una respuesta. Hacer ping no está permitido actualmente.