Desplegament de Laravel en un allotjament compartit

Per pujar un projecte Laravel i posar-lo en producció en un servidor amb allotjament compartit haurem de seguir els passos següents:

  1. La documentació de Laravel indica uns passos per optimitzar els arxius. Mirar bé i amb la calma la documentació, per saber si les comandes que indica s'han de fer en local o en producció. Tenir en compte que a vegades s'ha de netejar la caché, i com que en un hosting compartit no hi ha accés per ssh a la consola, potser haurem d'anar a \storage\framework i esborrar el contingut de la carpeta /cache, /sessions i /views. És de suposar que també es deu poder fer en local, abans de pujar-ho tot.

  2. Per penjar el codi al servidor, s'ha de posar tot el projecte excepte la carpeta /public a una carpeta qualsevol, es pot anomenar /projecte, per exemple. Aquesta carpeta s'ha de penjar a l'arrel del hosting. Llavors només el CONTINGUT de la carpeta /public s'ha de posar al mateix lloc, a l'arrel del hosting.

  3. Un cop fet això, mirar que a la carpeta /projecte hi hagi l'arxiu de configuració .env amb les variables que toquen segons l'entorn de producció:

    APP_ENV=production
    APP_DEBUG=false
    DB_DATABASE=db_name_produccio
    DB_USERNAME=db_usuari
    DB_PASSWORD=dw_pASSword
  4. Donat que el projecte desa les imatges de contingut a la carpeta projecte/storage, hem de crear un arxiu simbòlic a l'arrel. Penjarem a l'arrel del hosting un arxiu symlink.php amb aquest script:

    $target = 'projecte/storage/app/public';
    $link = 'storage';
    echo "TARGET: " . $target . " / LINK: " . $link;
    symlink($target, $link);
    echo " / READLINK: " . readlink($link);

    Un cop fet això, anirem al navegador i des del domini o subdomini del projecte cridarem aquest arxiu. Una altra manera —segurament més d'acord amb el framework Laravel— seria crear una ruta que executi aquest script, en un controlador creat a tal efecte.

  5. Modificar l'arxiu index.php de l'arrel del hosting, retocant aquestes línies:

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

Comentaris