Mattia
Mattia Author of Coding Samurai, works for HCT Italia and Fluentify as full stack developer.

Creare una applicazione Laravel su AWS con Amazon EC2

Creare una applicazione Laravel su AWS con Amazon EC2

In questo articolo partiremo da alcuni presupposti. Per poterlo completare, avremo bisogno di creare un account su AWS e collegargli una carta di credito valida. Si tratta di un passaggio necessario per poter accedere ai servizi offerti, non verranno effettuati addebiti di alcun tipo, tutto ciò che faremo è disponibile all’interno del tier gratuito offerto da AWS.

Amazon EC2

Amazon EC2 è un servizio di cloud computing che permette di eseguire server virtuali per far girare applicazioni e servizi web come in un tradizionale data center.

A differenza di quest’ultimo però, offre il vantaggio di poter effettuare il provisioning di server e risorse immediatamente in base alle proprie esigenze. Questo servizio introduce una serie di concetti che vanno approfonditi per comprenderne il funzionamento complessivo, in primo luogo istanze ed AMI.

AMI sta per Amazon Machine Image, e si tratta di template che contengono il software necessario per dare vita ad un server virtuale. Nello specifico, ogni template contiene:

  • Sistema operativo.
  • Application server.
  • Software aggiuntivi.

Le istanze EC2 sono copie di una AMI eseguite su una determinata configurazione hardware. In altre parole, l’istanza è il vero e proprio ambiente virtuale fatto di CPU, memoria, storage e banda internet che esegue il nostro pacchetto software, ovvero la nostra AMI.

Laravel

Laravel è un framework PHP per la creazione di qualsiasi cosa, dalle applicazioni di piccole dimensioni a quelle di enterprise. Laravel è stato creato da Taylor Otwell nel giugno 2011 con l’obiettivo di avere una sintassi del codice semplice ed espressiva, che offre il vantaggio di avere un’applicazione Web che è facile da usare e codice gestibile.

È interessante notare che Laravel è stato visto migliorare di anno in anno. Ogni anno vengono implementate nuove funzionalità oltre alla correzione dei bug, tutto grazie alla sua disponibilità come framework PHP open source e alla comunità degli sviluppatori su GitHub.

Stack

Ci sono alcune possibilità quando si sceglie un server web per PHP in Linux. Le più popolari sono Nginx e Apache. In questo caso useremo Apache.

Creazione della EC2

Accediamo alla console del nostro account AWS e dopo esserci posizionati nela region di nostra scelta, selezioniamo il servizio EC2. Per prima cosa dobbiamo scegliere la AMI, nel nostro caso selezioniamo Amazon Linux 2 LTS. Tale AMI è disponibile per il free tier e quindi fa esattamente al caso nostro. Come tipologia sceglieremo la t2.micro.

Nel terzo passo possiamo lasciare tutto secondo impostazioni standard, verrà creata una VPC pubblica di default. Negli step successivi assegnamo lo storage di default e i tag che riteniamo opportuni. Infinev assegnamo un gruppo di sicurezza con i permessi di accesso per i protocolli SSH, HTTP ed HTTPS.

Ricordiamoci di generare una chiave SSH per l’accesso alla istanza, in alternativa potremo già usare una di quelle che già abbiamo, se per qualche motivo su AWS ne abbiamo generata una. La chiave di accesso non deve essere persa, una volta generata non sarà possibile per alcun motivo generarne un’altra. Lanciamo l’istanza e attendiamo che parta.

Installazione dei software

Apriamo un terminale Linux sul nostro PC e forniamo i giusti permessi alla chiave per la connessione ssh.

1
sudo chmod 400 laravel-coding-samurai.pem

Accediamo alla nostra istanza. Il nome dell’utente di default per le istanze Amazon Linux è “ec2-user” (nel caso di Ubuntu è “ubuntu” per esempio), l’indirizzo IP della macchina è disponibile nella visuale di dettaglio della stessa l’indirizzo ip nell’esempio seguente è completamente inventato.

1
ssh ec2-user@86.232.212.99 -i laravel-coding-samurai.pem

Aggiorniamo i pacchetti e installiamo Apache, poi lo avviamo.

1
2
3
4
sudo yum update -y
sudo yum install -y httpd httpd-tools mod_ssl
sudo systemctl enable httpd 
sudo systemctl start httpd 

Se visitiamo ora l’indirizzo IP della macchina dovremmo vedere la pagina di benvenuto di Apache. Attiviamo i pacchetti extras di Amazon Linux.

1
sudo yum install amazon-linux-extras -y

Controlliamo quali siano le versioni di PHP disponibili e installiamo l’ultima stabile disponibile, successivamente i pacchetti richiesti.

1
2
3
4
5
sudo amazon-linux-extras | grep php
sudo amazon-linux-extras enable php7.4 
sudo yum clean metadata 
sudo yum install php php-common php-pear 
sudo yum install php-{cgi,curl,mbstring,gd,mysqlnd,gettext,json,xml,fpm,intl,zip}

Creazione del progetto Laravel e configurazione di Apache

A questo punto avremo bisogno di Git, Composer e successivamente di Laravel per poter partire col nostro progetto, avremo anche bisogno di aprire il file di configurazione di Apache con Nano.

1
2
3
4
yum install git -y
cd /var/www/html
git clone https://github.com/laravel/laravel.git
nano /etc/httpd/conf/httpd.conf

Alla fine del file copiamo questa configurazione.

1
2
3
4
5
6
Alias / /var/www/html/laravel/public/
<Directory "/var/www/html/laravel/public">
        AllowOverride All
        Order allow,deny
        allow from all
</Directory>

Modifichiamo il file .htaccess.

1
nano /var/www/html/laravel/public/.htaccess

Aggiungiamo la direttiva “RewriteBase /” sotto “RewriteEngine On”.

copiamo il file di esempio delle configurazioni di ambiente, ed editiamolo:

1
2
3
cd /var/www/html/laravel
mv .env.example .env
nano .env

Il file di configurazione si presenterà così:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=database
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

Dobbiamo anche creare il nostro database locale sqlite, riavviare Apache e installare Composer e le dipendenze di Laravel. Dobbiamo anche accordare i permessi nella cartella storage e nella cartella del DB.

1
2
3
4
5
6
7
8
9
10
cd /var/www/html/laravel/database
touch database.sqlite
service httpd restart
cd /var/www/html/laravel
yum install wget -y
wget https://getcomposer.org/composer.phar
php composer.phar
php composer.phar install
sudo chmod -R 775 database
sudo chmod -R 755 storage

infine, generiamo la chiave dela app e migriamo il database.

1
2
php artisan generate:key
php artisan migrate
Rating: