Ricerca nel sito web

Come installare lo stack Linux, Apache, MySQL, PHP (LAMP) su Ubuntu 18.04


introduzione

Uno stack \LAMP è un gruppo di software open source che viene tipicamente installato insieme per consentire a un server di ospitare siti Web dinamici e app Web. Questo termine è in realtà un acronimo che rappresenta il sistema operativo Linux, con il server Web Apache. I dati del sito sono archiviati in un database MySQL e il contenuto dinamico viene elaborato da PHP.

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

Prerequisiti

Per completare questo tutorial, devi disporre di un server Ubuntu 18.04 con un account utente abilitato per sudo non root e un firewall di base configurato. Per configurarlo, puoi seguire la nostra guida alla configurazione iniziale del server per Ubuntu 18.04.

Passaggio 1: installazione di Apache e aggiornamento del firewall

Il server Web Apache è un popolare server Web open source che può essere utilizzato insieme a PHP per ospitare siti Web dinamici. È ben documentato ed è stato ampiamente utilizzato per gran parte della storia del web.

Innanzitutto, assicurati che la tua cache apt sia aggiornata con:

  1. sudo apt update

Se è la prima volta che utilizzi sudo in questa sessione, ti verrà chiesto di fornire la password del tuo normale utente per convalidare le tue autorizzazioni.

Una volta aggiornata la cache, puoi installare Apache con:

  1. sudo apt install apache2

Dopo aver inserito questo comando, apt ti dirà quali pacchetti intende installare e quanto spazio su disco aggiuntivo occuperanno. Premi Y e premi INVIO per confermare, e l'installazione procederà.

Regola il firewall per consentire il traffico web

Quindi, supponendo che tu abbia seguito le istruzioni iniziali per la configurazione del server e abilitato il firewall UFW, assicurati che il tuo firewall consenta il traffico HTTP e HTTPS. Puoi verificare 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 i dettagli del profilo Apache Full, vedrai 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

Per consentire il traffico HTTP e HTTPS in entrata per questo server, eseguire:

  1. sudo ufw allow "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

Vedrai la pagina web predefinita di Ubuntu 18.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.

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 usi per connetterti al tuo server tramite SSH.

Esistono diversi modi per eseguire questa operazione dalla riga di comando. Innanzitutto, puoi utilizzare gli strumenti iproute2 per ottenere il tuo indirizzo IP 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. Questo viene fatto chiedendo a un server specifico qual è il tuo indirizzo IP:

  1. sudo apt install curl
  2. curl http://icanhazip.com

Indipendentemente dal metodo utilizzato per ottenere il tuo indirizzo IP, digitalo nella barra degli indirizzi del tuo browser Web per visualizzare la pagina Apache predefinita.

Passaggio 2: installazione di 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 in cui il tuo sito può memorizzare le informazioni.

Di nuovo, usa apt per acquisire e installare questo software:

  1. sudo apt install mysql-server

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

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

Al termine dell'installazione, esegui un semplice script di sicurezza preinstallato con MySQL che rimuoverà alcune impostazioni predefinite pericolose e bloccherà l'accesso al tuo sistema di database. Avvia lo script interattivo eseguendo:

  1. sudo mysql_secure_installation

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

Nota: 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:

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 errori quando tenti di impostare qualsiasi password che non contenga numeri, lettere maiuscole e minuscole e caratteri speciali o che sia basata 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

Indipendentemente dal fatto che tu abbia scelto di impostare il VALIDATE PASSWORD PLUGIN, il tuo server ti chiederà successivamente di selezionare e confermare una password per l'utente root di MySQL. Questo non deve essere confuso con la root di sistema. L'utente root del database è un utente amministrativo con privilegi completi sul sistema del database. Anche se il metodo di autenticazione predefinito per l'utente root di MySQL dispensa dall'uso di una password, anche quando ne è impostata una, è necessario definire qui una password complessa come misura di sicurezza aggiuntiva. Ne parleremo tra un momento.

Se hai abilitato la convalida della password, ti verrà mostrata la sicurezza della password per la password di root che hai appena inserito e il tuo server ti chiederà se vuoi cambiare 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, premi Y e premi il tasto INVIO a ogni richiesta. Ciò 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 apportate.

Al termine, verifica se riesci ad accedere alla console MySQL digitando:

  1. sudo mysql

Questo si collegherà al server MySQL come utente root del database amministrativo, che viene dedotto dall'uso di sudo durante l'esecuzione di questo comando. Dovresti vedere un output come questo:

Output
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

Per uscire dalla console MySQL, digitare:

  1. exit

Si noti che non è necessario fornire una password per connettersi come utente root, anche se ne è stata definita una durante l'esecuzione dello script mysql_secure_installation. Questo perché il metodo di autenticazione predefinito per l'utente amministrativo di MySQL è unix_socket invece di password. Anche se all'inizio potrebbe sembrare un problema di sicurezza, rende il server del database più sicuro perché gli unici utenti autorizzati ad accedere come utente MySQL root sono gli utenti di sistema con privilegi sudo che si connettono dalla console o tramite un'applicazione in esecuzione con il stessi privilegi. In termini pratici, ciò significa che non sarai in grado di utilizzare l'utente root del database amministrativo per connetterti dalla tua applicazione PHP. L'impostazione di una password per l'account MySQL root funziona come protezione, nel caso in cui il metodo di autenticazione predefinito venga modificato da unix_socket a password.

Per una maggiore sicurezza, è meglio disporre di account utente dedicati con privilegi meno estesi impostati per ogni database, soprattutto se si prevede di avere più database ospitati sul proprio server. Si prega di fare riferimento alla nostra guida su Come creare un nuovo utente e concedere autorizzazioni su MySQL per istruzioni dettagliate su come creare utenti MySQL e configurare i diritti di accesso al database.

Il tuo server MySQL è ora installato e protetto. Successivamente, installeremo PHP, il componente finale nello stack LAMP.

Passaggio 3: installazione di PHP

PHP è il componente della configurazione che elaborerà il codice per visualizzare il contenuto dinamico. Può eseguire script, connettersi ai tuoi database MySQL per ottenere informazioni e consegnare il contenuto elaborato al tuo server web in modo che possa mostrare i risultati ai tuoi visitatori.

Ancora una volta, sfrutta il sistema apt per installare PHP. Oltre al pacchetto php, avrai bisogno anche di libapache2-mod-php per integrare PHP in Apache e del pacchetto php-mysql per consentire a PHP di connettersi ai database MySQL. Eseguire il seguente comando per installare tutti e tre i pacchetti e le relative dipendenze:

  1. sudo apt install php libapache2-mod-php php-mysql

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

Modifica dell'indice delle directory di Apache (facoltativo)

In alcuni 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 rispetto ad altri, per fare in modo che Apache cerchi prima un file index.php. Se non lo fai, un file index.html posizionato nella root del documento dell'applicazione avrà sempre la precedenza su un file index.php.

Per apportare questa modifica, apri il file di configurazione dir.conf in un editor di testo a tua scelta. Qui useremo nano:

  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>

Sposta 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. Conferma il salvataggio digitando Y e poi premi INVIO per verificare la posizione di salvataggio del file.

Successivamente, riavviare il server web Apache in modo che le modifiche vengano riconosciute. Puoi farlo con il seguente comando:

  1. sudo systemctl restart apache2

Puoi anche controllare lo stato del servizio apache2 usando systemctl:

  1. sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago Main PID: 3719 (apache2) Tasks: 55 (limit: 2361) CGroup: /system.slice/apache2.service ├─3719 /usr/sbin/apache2 -k start ├─3721 /usr/sbin/apache2 -k start └─3722 /usr/sbin/apache2 -k start Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server... Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Premi Q per uscire da questo output di stato.

Installazione delle estensioni PHP (facoltativo)

Per estendere le 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 consente di scorrere l'output di altri comandi:

  1. apt search php- | less

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

I risultati sono tutti componenti facoltativi che è possibile installare. Ti darà una breve descrizione per ciascuno:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php-l10n
…
:

Per saperne di più su cosa fa ciascun modulo, puoi cercare su Internet ulteriori informazioni su di essi. In alternativa, guarda la lunga descrizione del pacchetto digitando:

  1. apt show package_name

Ci sarà molto output, con un campo chiamato Description che avrà una spiegazione più lunga della funzionalità fornita dal modulo.

Ad esempio, per scoprire cosa fa il modulo php-cli, puoi digitare questo:

  1. 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 di voler installare un pacchetto, puoi farlo usando il comando apt install come hai fatto per l'altro software.

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

  1. sudo apt install php-cli

Se vuoi installare più di un modulo, puoi farlo elencando ciascuno di essi, separato da uno spazio, seguendo il comando apt install, in questo modo:

  1. sudo apt install package1 package2 ...

A questo punto, il tuo stack LAMP è installato e configurato. Prima di fare qualsiasi altra cosa, ti consigliamo di configurare un host virtuale Apache in cui puoi archiviare i dettagli di configurazione del tuo server.

Passaggio 4: configurazione di un host virtuale (consigliato)

Quando utilizzi il server web Apache, puoi utilizzare host virtuali (simili ai blocchi server in Nginx) per incapsulare i dettagli di configurazione e ospitare più di un dominio da un singolo server. Imposteremo un dominio chiamato tuo_dominio, ma dovresti sostituirlo con il tuo nome di dominio. Per ulteriori informazioni sulla configurazione di un nome di dominio con DigitalOcean, consulta la nostra Introduzione al DNS di DigitalOcean.

Apache su Ubuntu 18.04 ha un blocco del server abilitato per impostazione predefinita che è configurato per servire i documenti dalla directory /var/www/html. Sebbene funzioni 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 sito tuo_dominio, lasciando /var/www/html sul posto come directory predefinita da servire se una richiesta del client non corrisponde ad altri siti.

Crea la directory per tuo_dominio come segue:

  1. sudo mkdir /var/www/your_domain

Successivamente, assegna la proprietà della directory con la variabile di ambiente $USER, che fa riferimento all'utente attualmente connesso:

  1. sudo chown -R $USER:$USER /var/www/your_domain

I permessi della tua directory web root dovrebbero essere corretti se non hai modificato il suo valore umask, ma puoi assicurartene digitando:

  1. sudo chmod -R 755 /var/www/your_domain

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

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

All'interno, aggiungi il seguente codice HTML di esempio:

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

Affinché Apache possa servire questo contenuto, è necessario creare un file host virtuale con le direttive corrette. Invece di modificare direttamente il file di configurazione predefinito che si trova in /etc/apache2/sites-available/000-default.conf, creiamone uno nuovo in /etc/apache2/sites-available/ tuo_dominio.conf:

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

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

<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>

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

Salva e chiudi il file quando hai finito.

Abilitiamo il file con lo strumento a2ensite:

  1. sudo a2ensite your_domain.conf

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

  1. sudo a2dissite 000-default.conf

Quindi, testiamo gli errori di configurazione:

  1. sudo apache2ctl configtest

Dovresti vedere il seguente output:

Output
Syntax OK

Riavvia Apache per implementare le modifiche:

  1. sudo systemctl restart apache2

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

Con ciò, il tuo host virtuale è completamente configurato. Prima di apportare ulteriori modifiche o distribuire un'applicazione, tuttavia, sarebbe utile testare in modo proattivo la configurazione di PHP nel caso in cui vi siano problemi da risolvere.

Passaggio 5: test dell'elaborazione PHP sul server Web

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

Crea il file nella radice Web che hai creato nel passaggio precedente eseguendo:

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

<?php
phpinfo();

Quando hai finito, salva e chiudi il file.

Ora puoi verificare 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 di nuovo bisogno dell'indirizzo IP pubblico o del nome di dominio del tuo server.

L'indirizzo che vorrai visitare è:

http://your_domain/info.php

La pagina a cui arrivi dovrebbe essere simile a questa:

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

Se riesci a vedere questa pagina nel tuo browser, 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ò, esegui il seguente comando:

  1. sudo rm /var/www/your_domain/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. 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. Segui la nostra guida su come proteggere Apache con 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 da un browser web.
  • Scopri come utilizzare SFTP per trasferire file da e verso il tuo server.