Come distribuire un’applicazione PHP?
In questo articolo si parlerà di PHP, uno dei più popolari linguaggi di scripting che alimentano il world wide web. Ne esploreremo i vantaggi, gli svantaggi e le opzioni di distribuzione.
Alla fine di questo articolo, sarete in grado di eseguire il bootstrap di una semplice applicazione PHP, dockerizzarla e distribuirla su Back4app Containers.
Contents
Panoramica sul PHP
PHP (abbreviazione di “PHP: HyperText Processor”) è un popolare linguaggio di scripting gratuito di uso generale. È stato creato nel 1993 da Rasmus Lerdorf e successivamente rilasciato nel 1995.
PHP è stato inizialmente concepito per lo sviluppo web, ma oggi viene utilizzato anche per lo scripting lato server, lo scripting a riga di comando e la scrittura di applicazioni desktop.
Il bello di PHP è che può essere incorporato direttamente nell’HTML. Non c’è bisogno di usare lunghi comandi per produrre l’HTML (come nel C o nel Perl). Ecco un rapido esempio:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My first PHP website</title>
</head>
<body>
<?php
$cool_scripting_language = "PHP";
echo "$cool_scripting_language is a cool scripting language!";
?>
</body>
</html>
Il PHP viene eseguito quando un utente richiede questo sito e viene restituito solo l’output HTML elaborato. Nel nostro caso, un messaggio che dice: “PHP è un linguaggio di scripting fantastico!”. Il PHP viene eseguito sul lato server invece che nel browser (come JavaScript).
È discutibile se PHP sia un linguaggio completamente orientato agli oggetti. Tuttavia, supporta le caratteristiche standard orientate agli oggetti, come gli spazi dei nomi, le classi e gli oggetti.
Al momento in cui scriviamo, la versione stabile più recente di PHP è la 8.2, ma molte applicazioni PHP rimangono su versioni precedenti.
Alcuni sviluppatori sostengono che il PHP stia morendo, ma non è così. Secondo un ‘indagine di W3Techs, PHP alimenta attualmente il 77,4% di tutti i siti web di cui si conosce il linguaggio di programmazione lato server.
Il linguaggio di scripting è utilizzato anche da siti web ad alto traffico come Facebook, Wikipedia, Mailchimp, vari software CMS e in passato è stato utilizzato anche da YouTube.
Vantaggi di PHP
Buone prestazioni
PHP è più performante di altri linguaggi di scripting lato server come ASP.NET, JSP e Python. Alcuni benchmark mostrano che PHP è fino a tre volte più veloce di Python.
PHP è la soluzione migliore per gestire le attività legate al web, come la generazione di pagine HTML, la gestione dell’invio di moduli e l’interazione con il database.
Al contrario, ci sono scelte più ottimali di PHP per compiti di calcolo pesanti o algoritmi complessi.
Multipiattaforma
PHP è indipendente dalla piattaforma. Funziona su diverse piattaforme, tra cui Windows, Linux, Unix e Mac. Inoltre, è compatibile con quasi tutti i server web più diffusi, come Apache HTTP, Caddy, Nginx, LiteSpeed e così via.
Il popolare linguaggio di scripting può essere utilizzato anche per sviluppare applicazioni desktop, grazie a phpdesktop di Czarek Tomczak. Si può pensare a questa libreria come a Electron, ma per PHP. Le applicazioni phpdesktop possono essere eseguite su Windows e Linux, ma non su Mac OS X (ancora).
Supporto per il database
Il linguaggio di scripting supporta una varietà di database, compresi quelli SQL e NoSQL. Il database più popolare da utilizzare con PHP è MySQL(stack LAMP), ma nulla vieta di utilizzare PostgreSQL o qualsiasi altro tipo di database.
È possibile vedere tutti i livelli di astrazione di PHP e le estensioni di database specifiche del fornitore sul loro sito web ufficiale.
Ecosistema vibrante
PHP è così popolare grazie al suo vivace ecosistema. Molti fantastici framework PHP accelerano significativamente il processo di sviluppo, semplificano la base di codice e guidano l’utente a scrivere codice più pulito e standardizzato.
I framework PHP più popolari al momento della stesura del presente documento sono:
Per altri framework e risorse fantastiche, consultate awesome-php su GitHub.
Esistono anche molti CMS che utilizzano il PHP, come WordPress, Joomla, Drupal e Magento.
Facile da imparare
PHP è un linguaggio adatto ai principianti con una sintassi semplice. È relativamente facile da imparare se si conoscono le basi del World Wide Web (WWW), HTML, CSS e JavaScript. Molti sviluppatori sono in grado di scrivere PHP, ma solo pochi sono in grado di scrivere PHP manutenibile che segue convenzioni di codice pulite.
Limitazioni di PHP
Strumenti di debug limitati
Il PHP non è in grado di gestire gli errori e manca di strumenti di debug rispetto ad altri linguaggi di programmazione popolari. Se il vostro progetto richiede un debug avanzato, dovrete probabilmente utilizzare software di terze parti come Xdebug, Krumo o Kint.
Alcuni IDE popolari, come PhpStorm e Visual Studio, dispongono anche di strumenti di debug PHP integrati.
Liberamente dattiloscritto
Come già detto, PHP è un linguaggio di scripting, non un linguaggio di programmazione. Una delle caratteristiche più comuni dei linguaggi di scripting è che sono poco tipizzati.
Ciò significa che il tipo di variabile non deve essere dichiarato esplicitamente prima del suo utilizzo. Inoltre, può cambiare in qualsiasi momento durante l’esecuzione.
Questo fa sì che le applicazioni PHP siano più soggette a errori e difficili da debuggare.
Falle di sicurezza
Nel corso degli anni, le applicazioni PHP sono state oggetto di vari attacchi da parte di hacker. Ciò è dovuto principalmente alla natura open-source di PHP e al basso costo di ingresso per i nuovi sviluppatori.
Alcune delle vulnerabilità PHP più note sono le iniezioni di SQL, il cross-site scripting (XSS), il cross-site request forgery (CSRF) e l’esecuzione di codice remoto (RCE).
Ricordate che queste vulnerabilità possono essere prevenute seguendo pratiche di codifica sicure. Assicuratevi di sanificare sempre l’input e di non eseguire mai l’input fornito dall’utente.
Vanilla PHP è obsoleto
Vanilla PHP (ovvero PHP senza librerie o framework) può essere piuttosto obsoleto per costruire applicazioni moderne. Per costruire velocemente applicazioni sicure, è necessario utilizzare un framework.
Opzioni di distribuzione PHP
Le applicazioni PHP possono essere distribuite su diverse piattaforme. I modelli cloud più comuni per la distribuzione di applicazioni PHP sono:
- Infrastruttura come servizio (IaaS),
- Piattaforma come servizio (PaaS),
- Contenitori come servizio (CaaS).
Il miglior modello di cloud per la distribuzione di applicazioni PHP non esiste. In definitiva, la scelta dipende dai requisiti del progetto, dal budget e dal livello di astrazione desiderato.
Di solito, i team di sviluppatori optano per PaaS o CaaS, perché sono più facili da gestire e non molto più costosi di IaaS. Vediamo alcuni dei migliori fornitori di hosting PHP.
Back4app Containers
Back4app Containers è un’eccellente offerta Containers as a Service (CaaS) di Back4app. La piattaforma consente agli sviluppatori di creare, scalare e distribuire rapidamente applicazioni dockerizzate.
Distribuire un’applicazione su Back4app Containers è facile come importare il repository GitHub e fare clic su un pulsante. La piattaforma dispone di un ottimo sistema di integrazione e distribuzione continua, supporta distribuzioni senza tempi morti, monitoraggio delle distribuzioni in tempo reale e altro ancora!
Un altro vantaggio di Back4app Containers è il suo livello gratuito, ottimo per ospitare piccole applicazioni. Man mano che la vostra applicazione cresce, potete passare ai livelli premium seguendo un piano tariffario semplice e prevedibile.
Google Cloud Run
Google Cloud Run è una piattaforma Containers as a Service (CaaS) completamente automatizzata per il deployment e lo scaling di app containerizzate. È diventata pubblicamente disponibile nel 2019 e da allora ha guadagnato molta popolarità.
Cloud Run è relativamente facile da usare, soprattutto se si ha familiarità con altri prodotti GCP. Alcuni vantaggi di Cloud Run sono i certificati SSL gratuiti, la buona integrazione con altre soluzioni GCP e la scalabilità a zero.
Al momento in cui scriviamo, Google offre 300 dollari di crediti gratuiti per i nuovi utenti.
Heroku
Heroku è una delle soluzioni pionieristiche di Platform as a Service (PaaS). È stata fondata nel 2007 e rimane tuttora molto popolare.
Offre un ampio supporto per diversi linguaggi di programmazione, tra cui PHP, Java, Node.js, Go, Scala e Python. La piattaforma è dotata di un’interfaccia utente semplice e intuitiva, consente una grande scalabilità e offre una vasta scelta di componenti aggiuntivi.
Heroku offriva un piano gratuito e istanze PostgreSQL e Redis in omaggio, ma ha deciso di cancellarle nel 2022 a causa di preoccupazioni legate a frodi e bot. Tuttavia, Heroku rimane un’ottima piattaforma per la distribuzione di applicazioni.
AWS Elastic Beanstalk
AWS Elastic Beanstalk (EB) è un’ottima soluzione Platform as a Service (PaaS). È una piattaforma matura e ben collaudata, nata nel 2011. EB supporta nativamente Go, Java, Node.js, PHP, Python, Ruby e consente di distribuire applicazioni dockerizzate.
La cosa migliore di Elastic Beanstalk è che si può combinare con altre soluzioni AWS, come AWS S3, AWS RDS, AWS CloudFront e così via. AWS offre un livello gratuito ai nuovi clienti.
Processo di distribuzione di PHP
In questa sezione vedremo come eseguire il bootstrap e il deploy di una semplice applicazione web Laravel su Back4app Containers.
Prerequisiti
- Conoscenza di base di PHP.
- Conoscenza di base di Docker e della tecnologia di containerizzazione.
- Composer insieme a Node.js e Docker installati sulla macchina locale.
Se non conoscete la tecnologia di containerizzazione, date un’occhiata a Che cosa sono i container?
Che cos’è Laravel?
Laravel è un ottimo framework PHP che consente di creare rapidamente applicazioni utilizzando una sintassi espressiva ed elegante. Il risultato è un codice pulito e conciso.
Il framework si basa sul modello architettonico model-view-controller (MVC). Soprattutto, Laravel è completamente gratuito e open-source.
È stato rilasciato inizialmente nel 2011 e attualmente è uno dei framework PHP più popolari. Grazie alla sua flessibilità, può essere utilizzato per costruire qualsiasi tipo di applicazione web.
Vantaggi di Laravel
- Performante e flessibile.
- Semplifica il lavoro con il database (tramite Eloquent ORM).
- Autenticazione e autorizzazione integrate.
- Misure di sicurezza integrate (CSRF, XSS).
Alcune alternative a Laravel sono Symfony, CodeIgniter, CakePHP e Laminas Project.
Creare un’applicazione
I passaggi seguenti richiedono l’installazione di Composer. Se non lo avete, scaricatelo dal sito ufficiale.
Si inizia creando un nuovo progetto Laravel tramite l’interfaccia a riga di comando di Composer:
$ composer create-project laravel/laravel sample-app
Si senta libero di sostituire
sample-app
con un nome personalizzato.
Questo comando creerà un nuovo progetto Laravel e la struttura di directory predefinita. Inoltre, installerà tutte le dipendenze tramite composer install
. Il comando dovrebbe richiedere al massimo tre minuti.
Una volta terminato, si noterà la seguente struttura di directory:
sample-app/
├── app/ contains the core code of your application
│ ├── Console
│ ├── Exceptions
│ ├── Http
│ ├── Models
│ └── Providers
├── bootstrap is used to bootstrap the framework
├── config contains all your configuration files
├── database contains database factories, migrations, seeders
├── public contains your index.php and static assets (JS, images, CSS)
├── resources contains all your views and templates (along with raw assets)
├── routes is used to define all your application endpoints
├── storage contains logs and other auto-generated stuff
├── tests can be utilized for automatic testing
└── vendor contains your Composer dependencies
Quindi, eseguire il server di sviluppo con il seguente comando:
$ php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server.
Infine, aprire il browser web preferito e navigare all’indirizzo http://localhost:8000/. Si dovrebbe vedere la pagina indice predefinita di Laravel.
Modificare l’applicazione
In questa sezione, modificheremo leggermente l’applicazione registrando un nuovo endpoint API.
Come indicato nella sezione precedente, tutte le rotte sono definite nella cartella routes. La cartella routes contiene i seguenti file:
routes/
├── api
├── channels
├── console
└── web
La cartella web definisce le rotte per l’utente finale, api per le rotte API, console per definire i comandi della console e, infine, channels per i canali di trasmissione degli eventi.
Prima di Laravel 5.3, esisteva un solo file di rotte, situato in app/Http/routes.php.
Navigare in routes/api.php e registrare un nuovo endpoint API in questo modo:
<?php
// routes/api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
// new endpoint
Route::get('/', function () {
return response()->json([
'detail' => 'Back4app Containers rocks!',
]);
});
Bene, è tutto.
Avviare di nuovo il server di sviluppo (se non è ancora in esecuzione) e navigare in http://localhost:8000/. Dovrebbe essere ancora possibile vedere la pagina Laravel predefinita, ma se si naviga in /api/, si dovrebbe vedere il seguente messaggio:
{
"detail": "Back4app Containers rocks!"
}
App Dockerize
In questa sezione, si dockerizzerà la nostra applicazione Laravel usando un file Docker.
Profilo Docker
Un Dockerfile è un file di testo semplice contenente tutte le istruzioni che il motore Docker deve eseguire per costruire ed eseguire un’immagine Docker. Le istruzioni sono solitamente scritte in maiuscolo e sono seguite da un numero personalizzato di argomenti. Esempio:
INSTRUCTION arg1 arg2 ... argn
Procedere con la creazione di un file Docker nella root del progetto con i seguenti contenuti:
FROM php:8.1-apache
# Set the working directory
WORKDIR /var/www/html
# Install the necessary libraries
RUN apt-get update && apt-get install -y \
libonig-dev \
libzip-dev
# Install PHP extensions
RUN docker-php-ext-install \
mbstring \
zip
# Copy over the Laravel project
COPY . .
# Install Composer along with the dependencies
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer install
# Change ownership of our applications
RUN chown -R www-data:www-data /var/www/html
# Copy over the .env file and generate the app key
COPY .env .env
RUN php artisan key:generate
# Expose port 80
EXPOSE 80
# Adjusting Apache configurations
RUN a2enmod rewrite
COPY apache/apache-config.conf /etc/apache2/sites-available/000-default.conf
Questo file Docker utilizza php:8.1-apache
come immagine di base, installa le dipendenze necessarie del sistema operativo e copia il progetto. Quindi installa le dipendenze di PHP tramite Composer, genera una chiave Laravel, espone la porta 80 e infine copia la configurazione di Apache.
Per saperne di più sui file Docker, consultare il riferimento ai file Docker.
.dockerignore
Possiamo usare un file .dockerignore per ridurre le dimensioni dell’immagine. Questo file funziona in modo simile a un file .gitignore. Ci permette di omettere file e directory specifici che non vogliamo siano inclusi nell’immagine.
Creare un file .dockerignore nella radice del progetto con i seguenti contenuti:
/.phpunit.cache
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/vendor
.phpunit.result.cache
auth.json
npm-debug.log
yarn-error.log
/.fleet
/.idea
/.vscode
Siate liberi di modificare il file .dockerignore in base alle vostre esigenze.
Costruire, eseguire e testare
Prima di provare a costruire un’immagine, assicurarsi di avere installato Docker:
$ docker --version
Docker version 20.10.22, build 3a2c30b
Una volta verificato, è possibile creare l’immagine:
$ docker build -t laravel-sample:1.0 .
Panoramica dei comandi:
docker build
è usato per costruire l’immagine.-t laravel-sample:1.0
etichetta l’immagine (i nomi delle immagini di solito hanno la strutturanome:versione
)..
specifica il contesto di compilazione. Nel nostro caso si tratta della radice del progetto.
Quindi, utilizzare l’immagine appena creata per avviare un contenitore:
$ docker run -p 80:80 --name laravel-sample-container -d laravel-sample:1.0
Panoramica dei comandi:
docker run
è usato per avviare un contenitore.-p 80:80
lega la porta80
dell’host alla80
del contenitore.--nome laravel-sample-container
specifica il nome del contenitore.-d
esegue l’immagine in modalità distaccata, cioè senza occupare il terminale.laravel-sample:1.0
indica al motore Docker quale immagine deve essere usata.
Se ora si controlla il contenitore in esecuzione, si dovrebbe vedere laravel-sample-container
:
$ docker ps
CONTAINER IMAGE COMMAND CREATED PORTS
b0bfbd laravel-sample:1.0 "docker-php..." 2s ago 0.0.0.0:80->80/tcp laravel
Infine, verificare se è possibile visualizzare l’applicazione visitando http://localhost/ nel proprio browser web preferito.
Spingere su GitHub
Per distribuire la vostra applicazione su Back4app Containers, dovete prima caricare il vostro codice sorgente su GitHub. Back4app Containers utilizza un sistema CI/CD che esegue automaticamente il deploy quando si esegue il commit del codice in un ramo specifico.
I passaggi seguenti richiedono un account GitHub (e Git installato).
Iniziate navigando su https://github.com e creando un nuovo repository:
Quindi, scegliere un nome adatto e lasciare tutto il resto come predefinito. Quindi fare clic sul pulsante “Crea repository” per creare il repository:
Una volta creato il repository, prendere l’URL remoto:
Ora si torna al progetto locale e si apre la riga di comando. Per inviare il codice a GitHub, occorre prima inizializzare un repository Git locale, come segue:
$ git init
Successivamente, si fa il VCS di tutti i file e si crea un nuovo commit:
$ git add .
$ git commit -m "init"
Infine, inserire il codice nel telecomando:
$ git push origin master
Ecco fatto! Se si aggiorna la pagina del repository GitHub, si dovrebbe vedere che tutti i file sono stati inviati con successo al repository Git remoto.
Distribuire l’applicazione
Per distribuire un’applicazione su Back4app Containers, occorre innanzitutto effettuare il login (o iscriversi se non si ha ancora un account). Una volta effettuato l’accesso, si verrà reindirizzati alla pagina della dashboard dell’app.
Quindi utilizzare il pulsante “Crea nuova app” per avviare il processo di creazione dell’app:
Selezionare “Containers as a Service”, poiché stiamo distribuendo un’applicazione containerizzata:
Quindi, collegare GitHub al proprio account Back4app e importare il repository creato nel passaggio precedente.
Assegnate alla vostra applicazione un nome personalizzato e lasciate tutto il resto come predefinito.
Per creare un’applicazione, fare clic su “Create App”. Back4app estrarrà automaticamente il codice sorgente da GitHub e avvierà il processo di creazione dell’immagine docker non appena si farà clic. Dopo qualche minuto, lo stato dell’app cambierà in “Ready”.
A questo punto, utilizzare il link a sinistra per aprire la pagina nel browser.
Ecco fatto!
Conclusione
In conclusione, avete imparato a conoscere PHP, i suoi vantaggi, gli svantaggi e le opzioni di distribuzione. Ora sapete come avviare e distribuire un’applicazione Laravel su Back4app.
Gli argomenti trattati nel corso del tutorial hanno scalfito appena la superficie del framework Laravel. È sempre possibile saperne di più consultando la documentazione di Laravel.
Il codice sorgente è disponibile sul repository GitHub di back4app-containers-php.
Passi futuri
- Approfondisci i concetti dell’architettura di Laravel e l’ORM di Eloquent.
- Avviare un database MySQL gestito e collegare l’applicazione Back4app Containers con esso.
FAQ
Che cos’è PHP?
PHP è un linguaggio di scripting gratuito e di uso generale molto popolare. È stato progettato per il web, ma può essere utilizzato anche per lo scripting lato server, comandi da riga di comando e applicazioni desktop. Attualmente PHP alimenta circa l’80% del web ed è utilizzato da molti siti ad alto traffico come Facebook, Wikipedia, Slack, ecc.
Quali sono i vantaggi di PHP?
– Buone prestazioni
– Multipiattaforma
– Supporto per database
– Ecosistema vivace
– Facile da imparare
Quali sono gli svantaggi di PHP?
– Strumenti di debug limitati
– Tipizzazione debole
– Vulnerabilità di sicurezza
– Il PHP base è obsoleto
Come distribuire un’app PHP?
1. Scrivi la tua applicazione PHP.
2. Dockerizza l’app e testala localmente.
3. Carica il codice sorgente su GitHub.
4. Crea un account su Back4app Containers.
5. Importa il tuo repository GitHub e clicca su “Deploy”!