Come installare lo stack Linux, Apache, MySQL, PHP (LAMP) su Ubuntu 16.04
introduzione
Lo stack LAMP è un insieme di software open source che in genere viene installato insieme per consentire a un server di ospitare siti web dinamici e app web. Questo termine è un acronimo che rappresenta il sistema operativo Linux, con il web server Apache. I dati del sito sono archiviati in un database MySQL e il contenuto dinamico viene elaborato da PHP.
In questa guida, otterremo uno stack LAMP installato su un server Ubuntu 16.04. Ubuntu soddisferà il nostro primo requisito: un sistema operativo Linux.
Prerequisiti
Prima di iniziare con questa guida, dovresti disporre di un account utente separato, non root, con privilegi sudo
impostati sul tuo server. Puoi imparare come farlo completando i passaggi 1–4 nel nostro tutorial sulla configurazione iniziale del server per Ubuntu 16.04.
Passaggio 1: installazione di Apache e regolazione del firewall
Il server Web Apache è tra i server Web più popolari al mondo. È ben documentato ed è stato ampiamente utilizzato per gran parte della storia del Web, il che lo rende un'ottima scelta predefinita per l'hosting di un sito Web.
Possiamo installare Apache facilmente usando il gestore di pacchetti di Ubuntu, apt
. Un gestore di pacchetti ci consente di installare la maggior parte del software senza problemi da un repository gestito da Ubuntu. Puoi saperne di più su come usare apt
qui.
Per i nostri scopi, possiamo iniziare digitando questi comandi:
- sudo apt-get update
- sudo apt-get install apache2
Dato che stiamo usando 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 su disco occuperà. Premi y
e premi INVIO
per continuare e l'installazione procederà.
Impostazione di Global ServerName per sopprimere gli avvisi di sintassi
Successivamente, aggiungeremo una singola riga al file /etc/apache2/apache2.conf
per sopprimere un messaggio di avviso. Sebbene innocuo, se non imposti ServerName
globalmente, riceverai il seguente avviso quando controlli la configurazione di Apache per errori di sintassi:
- sudo apache2ctl configtest
OutputAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Apri il file di configurazione principale con la modifica del testo:
- sudo nano /etc/apache2/apache2.conf
All'interno, in fondo al file, aggiungi una direttiva ServerName
, che punta al tuo nome di dominio principale. Se non hai un nome di dominio associato al tuo server, puoi utilizzare l'indirizzo IP pubblico del tuo server:
Nota: se non conosci l'indirizzo IP del tuo server, vai alla sezione su come trovare l'indirizzo IP pubblico del tuo server per trovarlo.
. . .
ServerName server_domain_or_IP
Salva e chiudi il file quando hai finito.
Successivamente, verifica la presenza di errori di sintassi digitando:
- sudo apache2ctl configtest
Poiché abbiamo aggiunto la direttiva globale ServerName
, tutto ciò che dovresti vedere è:
OutputSyntax OK
Riavvia Apache per implementare le modifiche:
- sudo systemctl restart apache2
Ora puoi iniziare a regolare il firewall.
Regolazione del firewall per consentire il traffico web
Successivamente, supponendo di aver seguito le istruzioni di configurazione iniziale del server per abilitare il firewall UFW, assicurati che il tuo firewall consenta il traffico HTTP e HTTPS. Puoi assicurarti che UFW abbia un profilo dell'applicazione per Apache in questo modo:
- sudo ufw app list
OutputAvailable applications:
Apache
Apache Full
Apache Secure
OpenSSH
Se guardi il profilo Apache Full
, dovrebbe mostrare che abilita il traffico alle porte 80 e 443:
- sudo ufw app info "Apache Full"
OutputProfile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Consenti traffico in entrata per questo profilo:
- 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 l'intestazione successiva per scoprire qual è il tuo indirizzo IP pubblico se non disponi di queste informazioni Già):
http://your_server_IP_address
Vedrai la pagina web predefinita di Ubuntu 16.04 Apache, che è lì a scopo informativo e di test. Dovrebbe assomigliare a qualcosa di simile a questo:
Se vedi questa pagina, allora il tuo server web è ora correttamente installato e accessibile attraverso il tuo firewall.
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 usi per connetterti al tuo server tramite SSH.
Dalla riga di comando, puoi trovarlo in alcuni modi. Innanzitutto, puoi utilizzare gli strumenti iproute2
per ottenere il tuo indirizzo digitando questo:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Questo ti 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 consiste nell'usare l'utility curl
per contattare una parte esterna per dirti come essa vede il tuo server. Puoi farlo chiedendo a un server specifico qual è il tuo indirizzo IP:
- sudo apt-get install curl
- curl http://icanhazip.com
Indipendentemente dal metodo che usi per ottenere il tuo indirizzo IP, puoi digitarlo nella barra degli indirizzi del tuo browser web per accedere al tuo server.
Passaggio 2: installazione di MySQL
Ora che abbiamo il nostro 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 in cui il nostro sito può memorizzare informazioni.
Di nuovo, possiamo usare apt
per acquisire e installare il nostro software. Questa volta installeremo anche altri pacchetti \helper che ci aiuteranno a far comunicare i nostri componenti tra loro:
- sudo apt-get install mysql-server
Nota: in questo caso, non è necessario eseguire sudo apt-get update
prima del comando. Questo perché di recente l'abbiamo eseguito nei comandi sopra per installare Apache. L'indice dei pacchetti sul nostro computer dovrebbe essere già aggiornato.
Ancora una volta, ti verrà mostrato un elenco dei pacchetti che verranno installati, insieme alla quantità di spazio su disco che occuperanno. Inserisci Y per continuare.
Durante l'installazione, il tuo server ti chiederà di selezionare e confermare una password per l'utente MySQL \root. Questo è un account amministrativo in MySQL che ha maggiori privilegi. Consideralo simile all'account root per il server stesso (quello che stai configurando ora è un account specifico di MySQL, tuttavia).Assicurati che questa sia una password complessa e univoca e non lasciarla vuota.
Quando l'installazione è completa, vogliamo eseguire un semplice script di sicurezza che rimuoverà alcune impostazioni predefinite pericolose e bloccherà un po' l'accesso al nostro sistema di database. Avvia lo script interattivo eseguendo:
- mysql_secure_installation
Ti verrà chiesto di inserire la password che hai impostato per l'account root di MySQL. Successivamente, ti verrà chiesto se desideri configurare il VALIDATE PASSWORD PLUGIN
.
Avvertenza: l'abilitazione di questa funzione è una specie di giudizio. Se abilitato, le password che non corrispondono ai criteri specificati verranno rifiutate da MySQL con un errore. Ciò causerà problemi se si utilizza una password debole insieme al software che configura automaticamente le credenziali utente MySQL, come i pacchetti Ubuntu per phpMyAdmin. È sicuro lasciare la convalida disabilitata, ma dovresti sempre usare password complesse e univoche 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 passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Ti verrà chiesto di selezionare un livello di convalida della password. Tieni presente che se inserisci 2, per il livello più forte, riceverai errori quando tenti di impostare una password che non contenga numeri, lettere maiuscole e minuscole e caratteri speciali o che si basi su parole comuni del dizionario.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Se hai abilitato la convalida della password, ti verrà mostrata una sicurezza della password per la password di root esistente e ti verrà chiesto se desideri modificare quella password. Se sei soddisfatto della tua password attuale, inserisci n per \no” al prompt:
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Per il resto delle domande, dovresti premere Y e premere il tasto Invio a ogni richiesta. Questo rimuoverà alcuni utenti anonimi e il database di test, disabiliterà gli accessi root remoti e caricherà queste nuove regole in modo che MySQL rispetti immediatamente le modifiche che abbiamo apportato.
A questo punto, il tuo sistema di database è ora configurato e possiamo andare avanti.
Passaggio 3: installazione di PHP
PHP è il componente della nostra configurazione che elaborerà il codice per visualizzare il contenuto dinamico. Può eseguire script, connettersi ai nostri database MySQL per ottenere informazioni e consegnare il contenuto elaborato al nostro server Web per la visualizzazione.
Possiamo sfruttare ancora una volta il sistema apt
per installare i nostri componenti. Includeremo anche alcuni pacchetti di supporto, in modo che il codice PHP possa essere eseguito sotto il server Apache e comunicare con il nostro database MySQL:
- sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Questo dovrebbe installare PHP senza problemi. Lo testeremo tra un momento.
Nella maggior parte dei casi, vorremo 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 nostro server web di preferire i file PHP, quindi faremo prima cercare ad Apache un file index.php
.
Per fare ciò, digita 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
Sembrerà così:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
Vogliamo spostare il file indice PHP evidenziato sopra nella prima posizione dopo la specifica DirectoryIndex
, in questo modo:
<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. Dovrai confermare il salvataggio digitando Y e quindi premere Invio per confermare la posizione di salvataggio del file.
Successivamente, dobbiamo riavviare il server Web Apache affinché le nostre modifiche vengano riconosciute. Puoi farlo digitando questo:
- sudo systemctl restart apache2
Possiamo 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 Wed 2016-04-13 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
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]: *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.
Installa i moduli PHP
Per migliorare la funzionalità di PHP, possiamo facoltativamente installare alcuni moduli aggiuntivi.
Per vedere le opzioni disponibili per i moduli e le librerie PHP, puoi reindirizzare i risultati di apt-cache search
in less
, un pager che ti permette di scorrere l'output di altri comandi :
- apt-cache search php- | less
Usa i tasti freccia per scorrere su e giù e q per uscire.
I risultati sono tutti componenti facoltativi che è possibile installare. Ti darà una breve descrizione per ciascuno:
libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:
Per ottenere maggiori informazioni su cosa fa ciascun modulo, puoi cercare in Internet o guardare la lunga descrizione del pacchetto digitando:
- apt-cache show package_name
Ci sarà molto output, con un campo chiamato Description-en
che avrà una spiegazione più lunga della funzionalità fornita dal modulo.
Ad esempio, per scoprire cosa fa il modulo php-cli
, potremmo digitare questo:
- apt-cache show php-cli
Insieme a una grande quantità di altre informazioni, troverai qualcosa che assomiglia a questo:
Output…
Description-en: 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 Debian's default
PHP version (currently 7.0).
…
Se, dopo la ricerca, decidi di voler installare un pacchetto, puoi farlo utilizzando il comando apt-get install
come abbiamo fatto per il nostro altro software.
Se decidiamo che php-cli
è qualcosa di cui abbiamo bisogno, potremmo digitare:
- sudo apt-get install php-cli
Se vuoi installare più di un modulo, puoi farlo elencando ciascuno di essi, separato da uno spazio, seguendo il comando apt-get install
, in questo modo:
- sudo apt-get install package1 package2 ...
A questo punto, il tuo stack LAMP è installato e configurato. Dovremmo comunque testare il nostro PHP.
Passaggio 4: test dell'elaborazione PHP sul server Web
Per verificare che il nostro sistema sia configurato correttamente per PHP, possiamo creare uno script PHP molto semplice.
Chiameremo questo script info.php
. Affinché Apache possa trovare il file e servirlo correttamente, deve essere salvato in una directory molto specifica, chiamata web root.
In Ubuntu 16.04, questa directory si trova in /var/www/html/
. Possiamo creare il file in quella posizione digitando:
- sudo nano /var/www/html/info.php
Questo aprirà un file vuoto. Vogliamo inserire il seguente testo, che è codice PHP valido, all'interno del file:
<?php
phpinfo();
?>
Quando hai finito, salva e chiudi il file.
Ora possiamo verificare se il nostro server web è in grado di visualizzare correttamente i contenuti generati da uno script PHP. Per provarlo, non ci resta che visitare questa pagina nel nostro browser web. Avrai di nuovo bisogno dell'indirizzo IP pubblico del tuo server.
L'indirizzo che vuoi visitare sarà:
http://your_server_IP_address/info.php
La pagina a cui arrivi dovrebbe essere simile a questa:
Questa pagina ti fornisce sostanzialmente informazioni sul tuo server dal punto di vista di PHP. È utile per il debug e per garantire che le impostazioni vengano applicate correttamente.
Se questo ha avuto successo, il tuo PHP funziona come previsto.
Probabilmente vorrai rimuovere questo file dopo questo test perché potrebbe effettivamente fornire informazioni sul tuo server a utenti non autorizzati. Per fare ciò, puoi digitare questo:
- sudo rm /var/www/html/info.php
Puoi sempre ricreare questa pagina se hai bisogno di accedere nuovamente alle informazioni in un secondo momento.
Conclusione
Ora che hai installato uno stack LAMP, hai molte scelte su cosa fare dopo. Fondamentalmente, hai installato una piattaforma che ti consentirà di installare la maggior parte dei tipi di siti Web e software Web sul tuo server.
Come passaggio successivo immediato, dovresti assicurarti che le connessioni al tuo server web siano protette, servendole tramite HTTPS. L'opzione più semplice qui è utilizzare Let's Encrypt per proteggere il tuo sito con un certificato TLS/SSL gratuito.
Alcune altre opzioni popolari sono: