Ricerca nel sito web

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:

  1. sudo apt-get update
  2. 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:

  1. sudo apache2ctl configtest
Output
AH00558: 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:

  1. 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:

  1. sudo apache2ctl configtest

Poiché abbiamo aggiunto la direttiva globale ServerName, tutto ciò che dovresti vedere è:

Output
Syntax OK

Riavvia Apache per implementare le modifiche:

  1. 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:

  1. 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 alle porte 80 e 443:

  1. sudo ufw app info "Apache Full"
Output
Profile: 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:

  1. 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:

  1. 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:

  1. sudo apt-get install curl
  2. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. sudo systemctl restart apache2

Possiamo anche controllare lo stato del servizio apache2 usando systemctl:

  1. 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 :

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  • Installa Wordpress, il sistema di gestione dei contenuti più popolare su Internet.
  • Configura PHPMyAdmin per aiutarti a gestire i tuoi database MySQL dal browser web.
  • Scopri di più su MySQL per gestire i tuoi database.
  • Scopri come utilizzare SFTP per trasferire file da e verso il tuo server.