Introduzione

Laravel è un framework PHP open source che fornisce una serie di strumenti e risorse per creare moderne applicazioni PHP. Con un ecosistema completo che sfrutta le sue funzionalità integrate, la popolarità di Laravel è cresciuta rapidamente negli ultimi anni, con molti sviluppatori che lo hanno adottato come framework di scelta per un processo di sviluppo semplificato. In questa guida, installerai e configurerai una nuova applicazione Laravel su un server Ubuntu 18.04, usando Composer per scaricare e gestire le dipendenze del framework. Al termine, avrai un'applicazione demo Laravel funzionale che estrae i contenuti da un database MySQL.

In questo tutorial, vedremo come installare Laravel con LEMP su Ubuntu 18.04 LTS.

Se il vostro intento è installare il Laravel con LEMP su di un server in remoto continuate a leggere, altrimenti saltate il primo paragrafo "Connessione al Server" e leggere il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Prerequisiti

Per completare questa guida, devi prima rispettare i seguenti requisiti:

Installare i moduli PHP richiesti

Prima di poter installare Laravel, è necessario installare alcuni moduli PHP richiesti dal framework. Useremo apt per installare i moduli PHP. Queste estensioni di PHP forniscono un supporto extra per gestire la codifica dei caratteri, XML e la matematica di precisione. Se questa è la prima volta che usi apt in questa sessione, dovresti prima eseguire il comando update per aggiornare la cache del gestore pacchetti:

sudo apt update 

Ora puoi installare i pacchetti richiesti con:

sudo apt install php-mbstring php-xml php-bcmath

Il sistema è ora pronto per eseguire l'installazione di Laravel tramite Composer, ma prima di farlo, avrai bisogno di un database per la tua applicazione.

Creare un database per l'applicazione

Per dimostrare l'installazione e l'utilizzo di base di Laravel, creeremo un'applicazione di elenco di viaggio di esempio per mostrare un elenco di luoghi in cui un utente vorrebbe viaggiare e un elenco di luoghi che ha già visitato. Questo può essere memorizzato in una semplice tabella dei luoghi con un campo per le posizioni che chiameremo nome e un altro campo per contrassegnarli come visitati o non visitati, che chiameremo visitati. Inoltre, includeremo un campo ID per identificare in modo univoco ogni voce. Per connetterci al database dall'applicazione Laravel, creeremo un utente MySQL dedicato e garantiremo a questo utente tutti i privilegi sul database travel_list.

Effettuare quindi il login a MySQL come root:

sudo mysql

Oppure se avete seguito la nostra guida per l'installazione di LEMP, come suggerito nei prerequisiti:

sudo mysql -u root -p

Creare un nuovo database:

CREATE DATABASE travel_list;

Ora puoi creare un nuovo utente e concedere loro i privilegi completi sul database personalizzato che hai appena creato. In questo esempio, stiamo creando un utente di nome travel_user con una password a tua scelta, anche se dovresti cambiarlo in una password sicura di tua scelta:

GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'TUA_PASSWORD' WITH GRANT OPTION;

Ciò fornirà all'utente travel_user i privilegi completi sul database travel_list, impedendo a questo utente di creare o modificare altri database sul server. Successivamente, esci dalla shell MySQL:

exit;

Adesso è possibile provare ad effettuare il login a MySQL con l'utente appena creato:

mysql -u travel_user -p

Nota il flag -p in questo comando, che ti chiederà la password utilizzata durante la creazione dell'utente travel_user. Dopo aver effettuato l'accesso alla console MySQL, confermare di avere accesso al database travel_list:

SHOW DATABASES;

Dovresti ricevere un messaggio di output simile al seguente:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| travel_list        |
+--------------------+
2 rows in set (0.01 sec)

Quindi, crea una tabella denominata places nel database travel_list. Dalla console MySQL, eseguire la seguente dichiarazione:

CREATE TABLE travel_list.places (
    id INT AUTO_INCREMENT,
    name VARCHAR(255),
    visited BOOLEAN,
    PRIMARY KEY(id)
);

Popoliamo la tabella places con dati di esempio:

INSERT INTO travel_list.places (name, visited) 
VALUES ("Tokyo", false),
("Budapest", true),
("Nairobi", false),
("Berlin", true),
("Lisbon", true),
("Denver", false),
("Moscow", false),
("Olso", false),
("Rio", true),
("Cincinati", false);

Confermare che l'inserimento è stato effettuato con successo:

SELECT * FROM travel_list.places;

Dovresti ricevere un messaggio di output simile al seguente:

+----+-----------+---------+
| id | name      | visited |
+----+-----------+---------+
|  1 | Tokyo     |       0 |
|  2 | Budapest  |       1 |
|  3 | Nairobi   |       0 |
|  4 | Berlin    |       1 |
|  5 | Lisbon    |       1 |
|  6 | Denver    |       0 |
|  7 | Moscow    |       0 |
|  8 | Oslo      |       0 |
|  9 | Rio       |       1 |
| 10 | Cincinati |       0 |
+----+-----------+---------+
10 rows in set (0.00 sec)

Adesso usciamo da MySQL:

exit

Creare un applicazione Laravel

Ora creerai una nuova applicazione Laravel usando il comando composer. Questo comando Composer viene in genere utilizzato per avviare nuove applicazioni in base a framework e sistemi di gestione dei contenuti esistenti. In questa guida, useremo travel_list come un'applicazione di esempio. L'applicazione travel_list visualizzerà un elenco di posizioni estratte da un server MySQL locale, destinato a dimostrare la configurazione di base di Laravel e confermare che si è in grado di connettersi al database. Innanzitutto, vai alla home directory del tuo utente:

cd ~

Il comando seguente creerà una nuova directory travel_list contenente un'applicazione Laravel impostazioni predefinite:

composer create-project --prefer-dist laravel/laravel travel_list

Dovresti ricevere un messaggio di output simile al seguente:

Installing laravel/laravel (v5.8.17)
  - Installing laravel/laravel (v5.8.17): Downloading (100%)         
Created project in travel_list
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 80 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)         
  - Installing phpoption/phpoption (1.5.0): Downloading (100%)         
  - Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)         
  - Installing symfony/css-selector (v4.3.2): Downloading (100%)     
...

Al termine dell'installazione, accedi alla directory dell'applicazione ed esegui il comando artisan di Laravel per verificare che tutti i componenti siano stati installati correttamente:

cd travel_list
php artisan

Dovresti ricevere un messaggio di output simile al seguente:

Laravel Framework 5.8.29

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
      --env[=ENV]       The environment the command should run under
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

(...)

Questo output conferma che i file dell'applicazione sono presenti e che gli strumenti della riga di comando di Laravel funzionano come previsto. Tuttavia, dobbiamo ancora configurare l'applicazione per impostare il database e alcuni altri dettagli.

Configurare Laravel

I file di configurazione di Laravel si trovano in una directory chiamata config, all'interno della directory principale dell'applicazione. Inoltre, quando si installa Laravel con Composer, viene creato un file di ambiente. Questo file contiene impostazioni specifiche dell'ambiente corrente in cui è in esecuzione l'applicazione e avrà la precedenza sui valori impostati nei normali file di configurazione situati nella directory di configurazione. Ogni installazione su un nuovo ambiente richiede un file di ambiente su misura per definire elementi quali le impostazioni di connessione al database, le opzioni di debug, l'URL dell'applicazione, e altri elementi che possono variare a seconda dell'ambiente in cui è in esecuzione l'applicazione.

Modificheremo ora il file .env per personalizzare le opzioni di configurazione per l'ambiente di applicazione corrente.
Aprire il file .env:

nano .env 

Anche se ci sono molte variabili di configurazione in questo file, non è necessario configurarle tutte ora. Il seguente elenco contiene una panoramica delle variabili che richiedono attenzione immediata:

  • APP_NAME: nome dell'applicazione, utilizzato per notifiche e messaggi.
  • APP_ENV: ambiente dell'applicazione corrente.
  • APP_KEY: utilizzata per generare sali e hash, questa chiave univoca viene creata automaticamente durante l'installazione di Laravel tramite Composer, quindi non è necessario modificarla.
  • APP_DEBUG: se mostrare o meno le informazioni di debug sul lato client.
  • APP_URL: URL di base per l'applicazione, utilizzato per generare collegamenti alle applicazioni.
  • DB_DATABASE: nome del database.
  • DB_USERNAME: nome utente per la connessione al database.
  • DB_PASSWORD: password per connettersi al database.

Per impostazione predefinita, questi valori sono configurati per un ambiente di sviluppo locale che utilizza Homestead, un pacchetto Vagrant preconfezionato fornito da Laravel. Nel caso in cui si stia installando Laravel in un ambiente di sviluppo o test, è possibile lasciare abilitata l'opzione APP_DEBUG, poiché ciò fornirà importanti informazioni di debug durante il test dell'applicazione da un browser. In questo caso la variabile APP_ENV deve essere impostata su development o testing. Nel caso in cui si stia installando Laravel in un ambiente di produzione, è necessario disabilitare l'opzione APP_DEBUG, poiché mostra all'utente informazioni riservate sull'applicazione. L'APP_ENV in questo caso dovrebbe essere impostato sulla production. Il seguente file .env imposta la nostra applicazione di esempio per lo sviluppo. La variabile APP_KEY contiene una chiave univoca che è stata generata automaticamente durante l'installazione di Laravel tramite Composer. Non è necessario modificare questo valore. Se vuoi generare una nuova chiave sicura, puoi usare il seguente comando:

php artisan key:generate

Modificare i seguenti parametri con i propri valori:

APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://domain_or_IP

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=travel_list
DB_USERNAME=travel_user
DB_PASSWORD=password
...

Al termine della modifica, salva e chiudi il file per conservare le modifiche. Se stai usando nano, puoi farlo con CTRL + X, quindi Y e Invio per confermare. L'applicazione Laravel è ora configurata, ma è ancora necessario configurare il server Web per poter accedervi da un browser.

Configurare Nginx

Abbiamo installato Laravel su una cartella locale della home directory dell'utente remoto e, sebbene funzioni bene per ambienti di sviluppo locale, non è una pratica consigliata per i server Web aperti a Internet pubblico. Sposteremo la cartella dell'applicazione in /var/www, che è la solita posizione per le applicazioni Web in esecuzione su Nginx.

Utilizzare il comando mv per muovere l'applicazione in un altra cartella:

sudo mv ~/travel_list /var/www/travel_list

Ora dobbiamo dare all'utente l'accesso in scrittura alle cartelle di storage e cache, dove Laravel memorizza i file generati dall'applicazione:

sudo chown -R www-data.www-data /var/www/travel_list/storage
sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache

Creare un nuovo file di Virtual Host per Nginx:

sudo nano /etc/nginx/sites-available/travel_list

Inserire le seguenti configurazioni modificando il server_name e la directory root se l'applicazione ha un nome diverso:

server {
    listen 80;
    server_name server_domain_or_IP;
    root /var/www/travel_list/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Salva e chiudi il file al termine della modifica.
Per attivare il nuovo file di configurazione dell'host virtuale, creare un collegamento simbolico a travel_list nei siti abilitati:

sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/

Se si dispone di un altro file host virtuale precedentemente configurato per lo stesso server_name utilizzato nell'host virtuale travel_list, potrebbe essere necessario disattivare la vecchia configurazione rimuovendo il collegamento simbolico corrispondente all'interno di /etc/nginx/sites-enabled/, oppure modificare il campo server_name della vecchia configurazione, è possibile inserire come parametro _ quindi server_name _;

Per confermare la corretta configurazione di Nginx:

sudo nginx -t

Dovresti ricevere un messaggio di output simile al seguente:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Per apportare le modifiche riavviare Nginx:

sudo systemctl reload nginx

Ora apri il browser e accedi all'applicazione usando il nome di dominio o l'indirizzo IP del server, come definito dalla direttiva server_name nel tuo file di configurazione di travel_list:

http://server_domain_or_IP

Dovresti visualizzare una pagina con scritto Laravel

Ciò conferma che il tuo server Nginx è configurato correttamente per servire Laravel. Da questo punto, puoi iniziare a creare la tua applicazione. Nel passaggio successivo, modificheremo la route principale dell'applicazione per eseguire una query per i dati nel database.

Modificare la Homepage

Supponendo che finora abbiate seguito tutti i passaggi di questa guida, dovreste avere un'applicazione Laravel funzionante e una tabella di database denominata places contenente alcuni dati di esempio. Modificheremo ora il percorso principale dell'applicazione per eseguire una query per il database.

Apri il file principale dell'applicazione:

nano routes/web.php

Le route sono definite all'interno di questo file usando il metodo statico Route::get, che riceve un percorso e una funzione di callback come argomenti. Il codice seguente sostituisce la funzione di callback del percorso principale.
Sostituire il contenuto del file aperto con il seguente:

<?php

use Illuminate\Support\Facades\DB;

Route::get('/', function () {
  $visited = DB::select('select * from places where visited = ?', [1]); 
  $togo = DB::select('select * from places where visited = ?', [0]);

  return view('travel_list', ['visited' => $visited, 'togo' => $togo ] );
});
?>

Questo script esegue 2 query verso database usando il flag visited per filtrare i risultati. Restituisce i risultati in una vista chiamata travel_list, che creeremo successivamente.

Salva e chiudi il file al termine della modifica.
Ora creeremo la view che mostrerà i risultati della query all'utente.
Crea un nuovo file di visualizzazione all'interno di resources/views:

nano routes/web.php

Copiare ed incollare il seguente codice all'interno del file appena creato:

<html>
<head>
    <title>Travel List</title>
</head>

<body>
    <h1>My Travel Bucket List</h1>
    <h2>Places I'd Like to Visit</h2>
    <ul>
      @foreach ($togo as $newplace)
        <li>{{ $newplace->name }}</li>
      @endforeach
    </ul>

    <h2>Places I've Already Been To</h2>
    <ul>
          @foreach ($visited as $place)
                <li>{{ $place->name }}</li>
          @endforeach
    </ul>
</body>
</html>

Salva e chiudi il file al termine. Ora vai al tuo browser e ricarica l'applicazione. Vedrai la pagina appena creata con due liste generate dalle query impostate precedentemente.
Ora hai un'applicazione Laravel funzionale che estrae contenuti da un database MySQL.

Conclusione

In questo tutorial hai impostato una nuova applicazione Laravel su uno stack LEMP (Linux, Nginx, MySQL e PHP), in esecuzione su un server Ubuntu 18.04.
Per una maggiore sicurezza, dovresti prendere in considerazione l'installazione di un certificato TLS/SSL per il tuo server, che consente di pubblicare contenuti su HTTPS. A tal fine, puoi seguire la nostra guida su Come installare Let's Encrypt per Nginx su Ubuntu 18.04 LTS.