
Nuova installazione di Laravel 13
By
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.