Una versione precedente di questo tutorial è stata scritta da Brennan Bearnes.

Introduzione

Lo stack “LAMP” è un gruppo di software open-source che è tipicamente installato insieme per permettere ad un server di ospitare siti web dinamici e applicazioni web. Questo termine è in realtà un acronimo che rappresenta il sistema operativo Linux, con il server web Apache. I dati del sito sono memorizzati in un database MySQL, e il contenuto dinamico è elaborato da PHP.

In questa guida, installeremo uno stack LAMP su un server Ubuntu 18.04.

Prequisiti

Per completare questo tutorial, è necessario avere un server Ubuntu 18.04 con un account utente non root sudoabilitato e un firewall di base. Questo può essere configurato utilizzando la nostra guida alla configurazione iniziale del server per Ubuntu 18.04.

Passo 1 – Installare Apache e aggiornare il firewall

Il server web Apache è tra i più popolari server web nel mondo. È ben documentato ed è stato ampiamente utilizzato per gran parte della storia del web, il che lo rende una grande scelta predefinita per ospitare un sito web.

Installare Apache utilizzando il gestore dei pacchetti di Ubuntu, apt:

  • sudo apt update
  • sudo apt install apache2

Siccome questo è un comando sudo, queste operazioni vengono eseguite con i privilegi di root. Ti chiederà la password del tuo normale utente per verificare le tue intenzioni.

Una volta inserita la password, apt ti dirà quali pacchetti intende installare e quanto spazio extra su disco occuperanno. Premi Y e premi ENTER per continuare, e l’installazione procederà.

Regola il firewall per permettere il traffico web

Poi, assumendo che tu abbia seguito le istruzioni di configurazione iniziale del server e abilitato il firewall UFW, assicurati che il tuo firewall permetta il traffico HTTP e HTTPS. Puoi controllare che UFW abbia un profilo di applicazione per Apache in questo modo:

  • sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Se guardi il profilo Apache Full, dovrebbe mostrare che abilita il traffico verso le porte 80 e 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Allow incoming HTTP and HTTPS traffic for this profile:

  • sudo ufw allow in "Apache Full"

Puoi fare subito un controllo a campione per verificare che tutto sia andato come previsto visitando l’indirizzo IP pubblico del tuo server nel tuo browser web (vedi la nota sotto la prossima voce per scoprire qual è il tuo indirizzo IP pubblico se non hai già queste informazioni):

http://your_server_ip

Vedrai la pagina web di default di Ubuntu 18.04 Apache, che è lì per scopi informativi e di test. Dovrebbe avere un aspetto simile a questo:

Ubuntu 18.04 Apache default

Se vedi questa pagina, allora il tuo server web è ora correttamente installato e accessibile attraverso il firewall.

Come trovare l’indirizzo IP pubblico del tuo server

Se non sai qual è l’indirizzo IP pubblico del tuo server, ci sono diversi modi per trovarlo. Di solito, questo è l’indirizzo che usate per connettervi al vostro server attraverso SSH.

Ci sono alcuni modi diversi per farlo dalla riga di comando. In primo luogo, potreste usare gli strumenti iproute2 per ottenere il vostro indirizzo IP digitando questo:

  • ip addr show eth0 | grep inet | awk '{ print ; }' | sed 's/\/.*$//'

Questo vi restituirà due o tre righe. Sono tutti indirizzi corretti, ma il tuo computer potrebbe essere in grado di usarne solo uno, quindi sentiti libero di provarli tutti.

Un metodo alternativo è quello di usare l’utilità curl per contattare una parte esterna che ti dica come vede il tuo server. Questo viene fatto chiedendo a un server specifico qual è il tuo indirizzo IP:

  • sudo apt install curl
  • curl http://icanhazip.com

Indifferentemente dal metodo che usi per ottenere il tuo indirizzo IP, digitalo nella barra degli indirizzi del tuo browser web per visualizzare la pagina predefinita di Apache.

Step 2 – Installare MySQL

Ora che hai il tuo server web attivo e funzionante, è il momento di installare MySQL. MySQL è un sistema di gestione di database. Fondamentalmente, organizzerà e fornirà l’accesso ai database dove il tuo sito può memorizzare informazioni.

Anche in questo caso, usa apt per acquisire e installare questo software:

  • sudo apt install mysql-server

Nota: In questo caso, non è necessario eseguire sudo apt update prima del comando. Questo perché l’hai appena eseguito nei comandi precedenti per installare Apache. L’indice dei pacchetti sul tuo computer dovrebbe essere già aggiornato.

Anche questo comando ti mostrerà una lista dei pacchetti che verranno installati, insieme alla quantità di spazio su disco che occuperanno. Digita Y per continuare.

Quando l’installazione è completa, esegui un semplice script di sicurezza che viene preinstallato con MySQL e che rimuoverà alcune pericolose impostazioni predefinite e bloccherà l’accesso al tuo sistema di database. Avvia lo script interattivo eseguendo:

  • sudo mysql_secure_installation

Questo ti chiederà se vuoi configurare il VALIDATE PASSWORD PLUGIN.

Nota: Abilitare questa caratteristica è una sorta di decisione. Se abilitata, le password che non corrispondono ai criteri specificati saranno rifiutate da MySQL con un errore. Questo causerà problemi se si utilizza una password debole in combinazione con un software che configura automaticamente le credenziali utente di MySQL, come i pacchetti Ubuntu per phpMyAdmin. È sicuro lasciare la convalida disabilitata, ma dovresti sempre usare password forti e uniche per le credenziali del database.

Rispondi Y per sì, o qualsiasi altra cosa per continuare senza abilitare.

VALIDATE PASSWORD PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No:

Se rispondi “sì”, ti verrà chiesto di selezionare un livello di convalida della password. Tieni presente che se inserisci 2 per il livello più forte, riceverai degli errori quando tenterai di impostare qualsiasi password che non contenga numeri, lettere maiuscole e minuscole e caratteri speciali, o che sia basata su parole del dizionario comune.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

A prescindere dal fatto che tu abbia scelto di impostare il VALIDATE PASSWORD PLUGIN, il tuo server ti chiederà poi di selezionare e confermare una password per l’utente root di MySQL. Questo è un account amministrativo in MySQL che ha maggiori privilegi. Pensalo come se fosse simile all’account di root per il server stesso (anche se quello che stai configurando ora è un account specifico per MySQL). Assicurati che sia una password forte e unica, e non lasciarla vuota.

Se hai abilitato la convalida della password, ti verrà mostrata la forza della password di root che hai appena inserito e il tuo server ti chiederà se vuoi cambiare la password. Se sei soddisfatto della tua password attuale, inserisci N per “no” al prompt:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Per le altre domande, premi Y e premi il tasto ENTER ad ogni prompt. Questo rimuoverà alcuni utenti anonimi e il database di prova, disabiliterà i login remoti di root, e caricherà queste nuove regole in modo che MySQL rispetti immediatamente i cambiamenti che hai fatto.

Nota che nei sistemi Ubuntu che eseguono MySQL 5.7 (e versioni successive), l’utente root MySQL è impostato per autenticarsi usando il plugin auth_socket per default piuttosto che con una password. Questo permette una maggiore sicurezza e usabilità in molti casi, ma può anche complicare le cose quando hai bisogno di permettere ad un programma esterno (ad esempio, phpMyAdmin) di accedere all’utente.

Se preferisci usare una password quando ti connetti a MySQL come root, dovrai cambiare il suo metodo di autenticazione da auth_socket a mysql_native_password. Per farlo, apri il prompt di MySQL dal tuo terminale:

  • sudo mysql

Poi, controlla quale metodo di autenticazione usano i tuoi account utente MySQL con il seguente comando:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

In questo esempio, puoi vedere che l’utente root si autentica usando il plugin auth_socket. Per configurare l’account root per autenticarsi con una password, eseguite il seguente comando ALTER USER. Assicurati di cambiare password con una password forte di tua scelta:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Poi, esegui FLUSH PRIVILEGES che dice al server di ricaricare le tabelle di concessione e di mettere in atto le tue nuove modifiche:

  • FLUSH PRIVILEGES;

Controlla di nuovo i metodi di autenticazione impiegati da ciascuno dei tuoi utenti per confermare che root non si autentica più usando il plugin auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Puoi vedere in questo esempio che l’utente MySQL root ora si autentica usando una password. Una volta confermato questo sul tuo server, puoi uscire dalla shell di MySQL:

  • exit

A questo punto, il tuo sistema di database è ora impostato e puoi passare all’installazione di PHP, il componente finale dello stack LAMP.

Step 3 – Installazione di PHP

PHP è il componente della tua configurazione che elaborerà il codice per visualizzare il contenuto dinamico. Può eseguire script, connettersi ai tuoi database MySQL per ottenere informazioni e passare il contenuto elaborato al tuo server web per visualizzarlo.

Ancora una volta, sfrutta il sistema apt per installare PHP. Inoltre, questa volta includi alcuni pacchetti helper in modo che il codice PHP possa girare sotto il server Apache e parlare con il tuo database MySQL:

  • sudo apt install php libapache2-mod-php php-mysql

Questo dovrebbe installare PHP senza problemi. Lo testeremo tra un momento.

Nella maggior parte dei casi, vorrai modificare il modo in cui Apache serve i file quando viene richiesta una directory. Attualmente, se un utente richiede una directory dal server, Apache cercherà prima un file chiamato index.html. Vogliamo dire al server web di preferire i file PHP agli altri, quindi fare in modo che Apache cerchi prima un file index.php.

Per fare questo, digitate questo comando per aprire il file dir.conf in un editor di testo con privilegi di root:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Sarà così:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm</IfModule>

Spostare il file indice PHP (evidenziato sopra) nella prima posizione dopo la specifica DirectoryIndex, come questo:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

Quando hai finito, salva e chiudi il file premendo CTRL+X. Conferma il salvataggio digitando Y e poi premi ENTER per verificare la posizione di salvataggio del file.

Dopo questo, riavvia il server web Apache in modo che le tue modifiche siano riconosciute. Fallo digitando questo:

  • sudo systemctl restart apache2

Puoi anche controllare lo stato del servizio apache2 usando systemctl:

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Premi Q per uscire da questo status.

Per migliorare la funzionalità di PHP, hai la possibilità di installare alcuni moduli aggiuntivi. Per vedere le opzioni disponibili per i moduli e le librerie PHP, convoglia i risultati di apt search in less, un pager che ti permette di scorrere l’output di altri comandi:

  • apt search php- | less

Usa i tasti freccia per scorrere su e giù, e premi Q per uscire.

I risultati sono tutti componenti opzionali che puoi installare. Ti darà una breve descrizione per ognuno:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

Per saperne di più su cosa fa ogni modulo, puoi cercare su internet maggiori informazioni su di essi. In alternativa, guardate la descrizione lunga del pacchetto digitando:

  • apt show package_name

Ci saranno molti output, con un campo chiamato Description che avrà una spiegazione più lunga della funzionalità che il modulo fornisce.

Per esempio, per scoprire cosa fa il modulo php-cli, potresti digitare questo:

  • apt show php-cli

Insieme a una grande quantità di altre informazioni, troverai qualcosa che assomiglia a questo:

Output
…Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2).…

Se, dopo la ricerca, decidi che vorresti installare un pacchetto, puoi farlo usando il comando apt install come hai fatto per gli altri software.

Se hai deciso che php-cli è qualcosa di cui hai bisogno, potresti digitare:

  • sudo apt install php-cli

Se vuoi installare più di un modulo, puoi farlo elencando ciascuno di essi, separati da uno spazio, dopo il comando apt install, come questo:

  • sudo apt install package1 package2 ...

A questo punto, il tuo stack LAMP è installato e configurato. Prima di fare qualsiasi altra cosa, ti raccomandiamo di impostare un host virtuale Apache dove puoi memorizzare i dettagli di configurazione del tuo server.

Passo 4 – Impostare gli host virtuali (consigliato)

Quando usi il server web Apache, puoi usare gli host virtuali (simili ai blocchi di server in Nginx) per incapsulare i dettagli di configurazione e ospitare più di un dominio da un singolo server. Noi imposteremo un dominio chiamato your_domain, ma dovresti sostituirlo con il tuo nome di dominio. Per saperne di più su come impostare un nome di dominio con DigitalOcean, vedere la nostra Introduzione a DigitalOcean DNS.

Apache su Ubuntu 18.04 ha un blocco di server abilitato di default che è configurato per servire i documenti dalla directory /var/www/html. Mentre questo funziona bene per un singolo sito, può diventare ingombrante se si ospitano più siti. Invece di modificare /var/www/html, creiamo una struttura di directory all’interno di /var/www per il nostro sito your_domain, lasciando /var/www/html al suo posto come directory predefinita da servire se una richiesta del client non corrisponde a nessun altro sito.

Crea la directory per il tuo_dominio come segue:

sudo mkdir /var/www/your_domain

Poi, assegna la proprietà della directory con la variabile d’ambiente $USER:

  • sudo chown -R $USER:$USER /var/www/your_domain

I permessi delle tue radici web dovrebbero essere corretti se non hai modificato il valore unmask, ma puoi assicurartene digitando:

  • sudo chmod -R 755 /var/www/your_domain

Poi, crea una pagina di esempio index.html usando nano o il tuo editor preferito:

  • nano /var/www/your_domain/index.html

Dentro, aggiungi il seguente HTML di esempio:

/var/www/your_domain/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Salva e chiudi il file quando hai finito.

Per permettere ad Apache di servire questo contenuto, è necessario creare un file host virtuale con le direttive corrette. Invece di modificare direttamente il file di configurazione predefinito situato a /etc/apache2/sites-available/000-default.conf, creiamone uno nuovo a /etc/apache2/sites-available/your_domain.conf:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Inseriamo il seguente blocco di configurazione, che è simile a quello predefinito, ma aggiornato per la nostra nuova directory e il nome di dominio:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Notare che abbiamo aggiornato DocumentRoot alla nostra nuova directory e ServerAdmin a una email a cui l’amministratore del sito your_domain può accedere. Abbiamo anche aggiunto due direttive: ServerName, che stabilisce il dominio base che dovrebbe corrispondere per questa definizione di host virtuale, e ServerAlias, che definisce ulteriori nomi che dovrebbero corrispondere come se fossero il nome base.

Salva e chiudi il file quando hai finito.

Abilitiamo il file con lo strumento a2ensite:

  • sudo a2ensite your_domain.conf

Disabilitiamo il sito predefinito definito in 000-default.conf:

  • sudo a2dissite 000-default.conf

Prossimo, testiamo gli errori di configurazione:

  • sudo apache2ctl configtest

Dovresti vedere il seguente output:

Output
Syntax OK

Riavvia Apache per implementare le tue modifiche:

  • sudo systemctl restart apache2

Apache dovrebbe ora servire il tuo nome di dominio. Puoi testarlo navigando verso http://your_domain, dove dovresti vedere qualcosa di simile a questo:

Esempio di host virtuale Apache

Con questo, il tuo host virtuale è completamente impostato. Prima di fare altre modifiche o di distribuire un’applicazione, però, sarebbe utile testare proattivamente la tua configurazione PHP nel caso ci siano dei problemi che dovrebbero essere affrontati.

Step 5 – Testare l’elaborazione PHP sul tuo server web

Per verificare che il tuo sistema sia configurato correttamente per PHP, crea uno script PHP molto semplice chiamato info.php. Affinché Apache trovi questo file e lo serva correttamente, deve essere salvato nella tua directory principale del web.

Crea il file nella root del web che hai creato nel passo precedente eseguendo:

  • sudo nano /var/www/your_domain/info.php

Questo aprirà un file vuoto. Aggiungi il seguente testo, che è codice PHP valido, all’interno del file:

info.php
<?phpphpinfo();?>

Quando hai finito, salva e chiudi il file.

Ora puoi provare se il tuo server web è in grado di visualizzare correttamente il contenuto generato da questo script PHP. Per provarlo, visita questa pagina nel tuo browser web. Avrai bisogno di nuovo dell’indirizzo IP pubblico del tuo server.

L’indirizzo che vorrai visitare è:

http://your_domain/info.php

La pagina a cui arriverai dovrebbe essere simile a questa:

Ubuntu 18.04 default PHP info

Questa pagina fornisce alcune informazioni di base sul tuo server dal punto di vista di PHP. È utile per il debug e per assicurare che le tue impostazioni siano applicate correttamente.

Se puoi vedere questa pagina nel tuo browser, allora il tuo PHP sta funzionando come previsto.

Probabilmente vuoi rimuovere questo file dopo questo test perché potrebbe effettivamente dare informazioni sul tuo server a utenti non autorizzati. Per farlo, esegui il seguente comando:

  • sudo rm /var/www/your_domain/info.php

Puoi sempre ricreare questa pagina se hai bisogno di accedere nuovamente alle informazioni in seguito.

Conclusione

Ora che hai uno stack LAMP installato, hai molte scelte su cosa fare dopo. Fondamentalmente, hai installato una piattaforma che ti permetterà di installare la maggior parte dei tipi di siti web e software web sul tuo server.

Come prossimo passo immediato, dovresti assicurarti che le connessioni al tuo server web siano protette, servendole via HTTPS. L’opzione più semplice è usare Let’s Encrypt per proteggere il tuo sito con un certificato TLS/SSL gratuito.

Altre opzioni popolari sono:

  • Installare WordPress il sistema di gestione dei contenuti più popolare su internet.
  • Impostare PHPMyAdmin per aiutare a gestire i tuoi database MySQL dal browser web.
  • Imparare a usare SFTP per trasferire file da e verso il tuo server.