Skip to content
Nuova installazione di Laravel 13

Nuova installazione di Laravel 13

By Pier Luigi Papeschi

Abbiamo visto diversi utilizzi di Laravel, con Filament, con React, con Firebase, ma mai una “semplice” installazione di Laravel. Ecco l’occasione giusta 😉

La guida ufficiale è qui, ma noi andremo a vedere molto nel concreto come si installa, senza la pretesa di coprire tutto l’argomento.

Premessa

Essendo un framework sviluppato su ambienti GNU/Linux, non mi soffermo su sitemi MacOS o Windows, perciò dò per scontato che si sia in possesso di un server Linux con accesso tramite console. Questa è una prerogativa necessaria e indispensabile, quindi se non sai di cosa parlo, forse… hai sbagliato post… 😉

Installazione

Iniziamo. Accediamo alla console e dopo aver creato un Virtual Host per questo progetto (spazio del server dedicato ad ospitare i file del sito e poter essere associato ad un dominio) spostiamo all’interno della cartella root per eseguire i seguenti comandi.

composer global require laravel/installer

Questo per installare un’applicativo che facilita l’installazione di Laravel (sempre se non l’hai già fatto, altrimenti viene ignorato).

Adesso possiamo eseguire questo comando

laravel new nome_app

il quale farà ogni cosa necessaria ad installare il framework base.

cd nome_app
vi .env

Con l’ultimo comando apriamo il file che contiene le variabili di ambiente “segrete” (variabili che non sono accessibili pubblicamente ma solo all’interno di Laravel).

Andiamo a cambiare questi valori con quelli della tua app

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:RqrfCjJXrLzNZ8E4irop1yWYXZRjdWzyqeYOtec/M=
APP_DEBUG=true
APP_URL=http://localhost

Configurazione del database

Poi aggiorniamo i parametri del database:

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=catalog
# DB_USERNAME=root
# DB_PASSWORD=

Normalmente per un’app “corposa” consiglio di cambiare il tipo di database, da SQLite a MySQL, quindi cambiamo quei valori in questo modo

DB_CONNECTION=mysql
DB_HOST=IP_SERVER_MYSQL
DB_PORT=3306
DB_DATABASE=NOME_DB
DB_USERNAME=UTENTE_DB
DB_PASSWORD=PW_DB

Se il server MySQL risiede sul solito server su cui stiamo lavorando, possiamo inserire localhost o 127.0.0.1

Per capire come mai possiamo cambiare database semplicemente cambiando nome alla variabile DB_CONNECTION, apri il file database.php contenuto dentro la cartella config

<?php

use Illuminate\Support\Str;
use Pdo\Mysql;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for database operations. This is
    | the connection which will be utilized unless another connection
    | is explicitly specified when you execute a query / statement.
    |
    */

    'default' => env('DB_CONNECTION', 'sqlite'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Below are all of the database connections defined for your application.
    | An example configuration is provided for each database system which
    | is supported by Laravel. You're free to add / remove connections.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DB_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
            'busy_timeout' => null,
            'journal_mode' => null,
            'synchronous' => null,
            'transaction_mode' => 'DEFERRED',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'mariadb' => [
            'driver' => 'mariadb',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => env('DB_CHARSET', 'utf8'),
            'prefix' => '',
            'prefix_indexes' => true,
            'search_path' => 'public',
            'sslmode' => env('DB_SSLMODE', 'prefer'),
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => env('DB_CHARSET', 'utf8'),
            'prefix' => '',
            'prefix_indexes' => true,
            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run on the database.
    |
    */

    'migrations' => [
        'table' => 'migrations',
        'update_date_on_publish' => true,
    ],

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as Memcached. You may define your connection settings here.
    |
    */

    'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
            'persistent' => env('REDIS_PERSISTENT', false),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
            'max_retries' => env('REDIS_MAX_RETRIES', 3),
            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
            'max_retries' => env('REDIS_MAX_RETRIES', 3),
            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
        ],

    ],

];

Si tratta di un array con la definizione di tutti i parametri di cui può aver bisogno e noi ci siamo limitati a valorizzare quelli strettamente richiesti nel file .env

Adesso dobbiamo creare le tabelle del database in MySQL (nel primo passo Laravel le aveva create in SQLite)

php artisan migrate

Devi vedere qualcosa del genere

php artisan migrate

INFO  Preparing database.  

Creating migration table ...................................... 10.19ms DONE

INFO  Running migrations.  

0001_01_01_000000_create_users_table .......................... 24.61ms DONE
0001_01_01_000001_create_cache_table .......................... 15.76ms DONE
0001_01_01_000002_create_jobs_table ........................... 17.65ms DONE

Queste sono le tabelle minime di cui necessita Laravel.

Stile e scripts

Fin qui ci siamo dedicati al PHP e al database, adesso configuriamo il Javascript e il CSS:

npm install && npm run build

Ovviamente dei aver installato npm (NodeJS Package Manager, quindi devi avere il server NodeJS installato, il server Javascript che useremo).

Per accedere al sito ricordiamoci che il punto di accesso di Laravel è la cartella public, quindi dobbiamo definire la DocumentRoot del server web su quella.