Tutorial: Installazione di un server Web LAMP su Amazon Linux 2 - Amazon Elastic Compute Cloud

Tutorial: Installazione di un server Web LAMP su Amazon Linux 2

Le seguenti procedure consentono di installare un server Web Apache con supporto PHP e MariaDB (un adattamento di MySQL sviluppato dalla community) sull'istanza Amazon Linux 2 (a volte chiamata server Web LAMP o stack LAMP). Puoi usare questo server per ospitare un sito Web statico o distribuire un'applicazione PHP dinamica che legge e scrive informazioni in un database.

Importante

Se si sta tentando di configurare un server web LAMP su una distribuzione diversa, come Ubuntu o Red Hat Enterprise Linux, questo tutorial non funzionerà. Per Amazon Linux AMI, consulta Tutorial: Installazione di un server Web LAMP su un'Amazon Linux AMI. Per Ubuntu, consulta la seguente documentazione della comunità Ubuntu: ApacheMySQLPHP. Per altre distribuzioni, consulta la relativa documentazione specifica.

Opzione: completare questo tutorial mediante Automation

Per completare questo tutorial mediante AWS Systems Manager Automation anziché le attività seguenti, esegui il documento di Automation AWSDocs-InstallALAMPServer-AL2.

Fase 1: preparare il server LAMP

Prerequisiti

  • Questo tutorial presuppone che tu abbia già avviato una nuova istanza tramite Amazon Linux 2, con un nome DNS pubblico raggiungibile da Internet. Per ulteriori informazioni, consulta Fase 1: avvio di un'istanza. È inoltre necessario aver configurato il gruppo di sicurezza per consentire le connessioni SSH (porta 22), HTTP (porta 80) e HTTPS (porta 443). Per ulteriori informazioni su questi prerequisiti, consulta Autorizzazione del traffico in entrata per le istanze Linux.

  • La seguente procedura installa l'ultima versione PHP disponibile su Amazon Linux 2, attualmente PHP 7.2. Se hai in programma di utilizzare applicazioni PHP diverse da quelle descritte in questo tutorial, devi controllare che siano compatibili con PHP 7.2.

Nota

Nota, questo pacchetto di installazione è creato con Mariadb (lamp-mariadb10.2-php7.2). Un certo numero di vulnerabilità precedenti in PHP 7.2 sono state sottoposti a patch tramite backport daAWS, tuttavia il tuo particolare software di sicurezza potrebbe ancora contrassegnare questa versione di PHP. Assicurati di eseguire frequentemente gli aggiornamenti del sistema. Puoi decidere di installare una versione più recente di PHP, tuttavia dovrai installare MariaDB separatamente.

Per preparare il server LAMP

  1. Connettiti alla tua istanza.

  2. Per verificare che tutti i pacchetti software siano aggiornati, eseguire un aggiornamento rapido del software sull'istanza. Questo processo può richiedere alcuni minuti, ma è importante assicurarsi di disporre della versione più recente degli aggiornamenti della sicurezza e delle correzioni dei bug.

    L'opzione -y installa gli aggiornamenti senza chiedere conferma. Se desideri esaminare gli aggiornamenti prima di installarli, puoi omettere questa opzione.

    [ec2-user ~]$ sudo yum update -y
  3. Installare i repository Amazon Linux Extras lamp-mariadb10.2-php7.2 e php7.2 per ottenere le versioni più recenti dei pacchetti LAMP MariaDB e PHP per Amazon Linux 2.

    [ec2-user ~]$ sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

    Se si verifica un errore indicante sudo: amazon-linux-extras: command not found, l'istanza non è stata avviata con un'AMI 2 di Amazon Linux (forse stai utilizzando Amazon Linux AMI). È possibile visualizzare la versione di Amazon Linux con il comando seguente.

    cat /etc/system-release

    Per configurare un server Web LAMP su Amazon Linux AMI, consulta Tutorial: Installazione di un server Web LAMP su un'Amazon Linux AMI.

  4. Ora che l'istanza è attuale, è possibile installare i pacchetti del server Web Apache, MariaDB e PHP.

    Utilizzare il comando yum install per installare contemporaneamente più pacchetti software e tutte le dipendenze correlate.

    [ec2-user ~]$ sudo yum install -y httpd mariadb-server

    È possibile visualizzare le versioni correnti di tali pacchetti utilizzando il comando seguente:

    yum info package_name
  5. Avviare il server Web Apache.

    [ec2-user ~]$ sudo systemctl start httpd
  6. Utilizzare il comando systemctl per configurare il server Web Apache per l'avvio a ogni avvio del sistema.

    [ec2-user ~]$ sudo systemctl enable httpd

    Puoi verificare che httpd sia attivo eseguendo il seguente comando:

    [ec2-user ~]$ sudo systemctl is-enabled httpd
  7. Se ancora non è stato fatto, aggiungere una regola di sicurezza per consentire le connessioni HTTP (porta 80) entranti all'istanza. Per impostazione predefinita, un gruppo di sicurezza launch-wizard-N è stato configurato per l'istanza durante l'inizializzazione. Questo gruppo contiene una regola singola per consentire connessioni SSH.

    1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

    2. Scegliere Instances (Istanze) e selezionare l'istanza.

    3. Nella scheda Security (Sicurezza) visualizzare le regole in entrata. Verrà visualizzata la regola seguente:

      Port range Protocol Source 22 tcp 0.0.0.0/0
      avvertimento

      L’uso di 0.0.0.0/0 consente a tutti gli indirizzi IPv4 di accedere all'istanza tramite SSH. Questo è accettabile per un breve periodo di tempo in un ambiente di test, ma non è sicuro per gli ambienti di produzione. In produzione, potrai autorizzare solo un determinato indirizzo IP o un intervallo di indirizzi per accedere a un'istanza.

    4. Scegliere il collegamento per il gruppo di sicurezza. Tramite le procedure in Aggiunta di regole a un gruppo di sicurezza, aggiungere una nuova regola di sicurezza in entrata con i seguenti valori:

      • Type (Tipo): HTTP

      • Protocol (Protocollo): TCP

      • Port Range (Intervallo porte: 80

      • Source (Origine): personalizzata

  8. Verificare il server Web. Nel browser Web, digitare l'indirizzo DNS pubblico (o l'indirizzo IP pubblico) dell'istanza. In assenza di contenuti in /var/www/html, dovrebbe venire visualizzata la pagina di test di Apache. È possibile ottenere il DNS pubblico per l'istanza utilizzando la console Amazon EC2 (controllare la colonna Public DNS (DNS pubblico); se la colonna è nascosta, scegliere Show/Hide Columns (Mostra/nascondi colonne) (l'icona a forma di ingranaggio) e quindi Public DNS (DNS pubblico)).

    Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta Aggiunta di regole a un gruppo di sicurezza.

    Importante

    Se non si utilizza Amazon Linux, potrebbe inoltre essere necessario configurare il firewall sull'istanza per consentire tali connessioni. Per ulteriori informazioni sulla modalità di configurazione del firewall, consulta la documentazione per la distribuzione specifica.

    
                        Pagina di test di Apache

Apache httpd utilizza i file che sono tenuti in una directory chiamata root del documento di Apache. La root del documento di Apache Amazon Linux è /var/www/html, che per impostazione predefinita è di proprietà della root.

Per permettere all'account ec2-user di manipolare file nella directory, è necessario modificare la proprietà e le autorizzazioni della directory. Sono disponibili molti modi per completare questa attività. In questo tutorial, aggiungi l'utente ec2-user al gruppo apache per assegnare la proprietà del gruppo apache della directory /var/www e assegnare autorizzazioni di scrittura al gruppo.

Per impostare le autorizzazioni dei file

  1. Aggiungere l'utente (in questo caso ec2-user) al gruppo apache.

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. Uscire e ripetere l'accesso per scegliere il nuovo gruppo, quindi verificare l'appartenenza.

    1. Uscire (utilizzare il comando exit o chiudere la finestra terminale):

      [ec2-user ~]$ exit
    2. Per verificare l'appartenenza al gruppo apache, riconnettersi all'istanza, quindi eseguire il seguente comando:

      [ec2-user ~]$ groups ec2-user adm wheel apache systemd-journal
  3. Modificare la proprietà del gruppo di /var/www e dei suoi contenuti al gruppo apache.

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. Per aggiungere le autorizzazioni di scrittura di gruppo e impostare l'ID di gruppo nelle sottodirectory future, modificare le autorizzazioni di directory di /var/www e delle relative sottodirectory.

    [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
  5. Per aggiungere le autorizzazioni di scrittura di gruppo, modificare in modo ricorsivo le autorizzazioni del file di /var/www e delle relative sottodirectory:

    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;

Ora, ec2-user (e qualsiasi membro futuro del gruppo apache) può aggiungere, eliminare e modificare i file nella root del documento di Apache, consentendoti di aggiungere contenuti, ad esempio un sito Web statico o un'applicazione PHP.

Per proteggere il server Web (facoltativo)

Un server Web che esegue il protocollo HTTP non offre alcuna sicurezza di trasporto per i dati inviati e ricevuti. Quando ti connetti a un server HTTP tramite un browser Web, gli URL visitati, il contenuto delle pagine Web ricevute e i contenuti (incluse le password) di tutti i moduli HTML inviati sono tutti visibili a persone non autorizzate in qualsiasi punto del percorso di rete. La best practice per la protezione del tuo server Web prevede l'installazione del supporto per HTTPS (HTTP Secure), che protegge i dati con la crittografia SSL/TLS.

Per informazioni sull'abilitazione di HTTPS sul server, consulta Tutorial: configurazione di SSL/TLS su Amazon Linux 2.

Fase 2: verificare il server LAMP

Se il server è installato e in esecuzione e le autorizzazioni dei file sono impostate correttamente, l'account ec2-user dovrebbe essere in grado di creare un file PHP nella directory /var/www/html disponibile da Internet.

Per verificare il server LAMP

  1. Creare un file PHP nella root del documento di Apache.

    [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

    Se si verifica un errore "Permission denied" (Autorizzazione negata) quando si tenta di eseguire questo comando, provare a uscire e accedere nuovamente per ottenere le autorizzazioni di gruppo appropriate configurate in Per impostare le autorizzazioni dei file.

  2. In un browser Web, digitare l'URL del file appena creato. Questo URL è l'indirizzo DNS pubblico dell'istanza, seguito da una barra e dal nome di file. Ad esempio:

    http://my.public.dns.amazonaws.com/phpinfo.php

    Viene visualizzata la pagina delle informazioni PHP:

    Se non viene visualizzata questa pagina, verifica che il file /var/www/html/phpinfo.php sia stato creato correttamente nella fase precedente. È anche possibile verificare che tutti i pacchetti richiesti siano stati installati con il seguente comando.

    [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd

    Se uno dei pacchetti richiesti non è elencato nell'output, installarlo utilizzando il comando sudo yum install package. Verificare inoltre che extra php7.2 e lamp-mariadb10.2-php7.2 siano abilitati nell'output del comando amazon-linux-extras.

  3. Eliminare il file phpinfo.php. Sebbene questa informazione possa essere utile, non deve essere divulgata su Internet per ragioni di sicurezza.

    [ec2-user ~]$ rm /var/www/html/phpinfo.php

Ora si dovrebbe avere un server Web LAMP completamente funzionante. Se vengono aggiunti contenuti alla root del documento di Apache su /var/www/html, dovrebbe essere possibile visualizzare tali contenuti all'indirizzo DNS pubblico per l'istanza.

Fase 3: proteggere il server di database

L'installazione predefinita del server MariaDB ha diverse caratteristiche che sono ottime per test e sviluppo, ma dovrebbero essere disabilitate o rimosse per i server di produzione. Il comando mysql_secure_installation guida attraverso il processo di impostazione di una password root e la rimozione delle caratteristiche non protette dall'installazione. Anche se non hai intenzione di utilizzare il server MariaDB, consigliamo di eseguire questa procedura.

Per proteggere il server MariaDB

  1. Avviare il server MariaDB.

    [ec2-user ~]$ sudo systemctl start mariadb
  2. Esegui mysql_secure_installation.

    [ec2-user ~]$ sudo mysql_secure_installation
    1. Quando richiesto, digitare una password per l'account root.

      1. Digitare la password root corrente. Per impostazione predefinita, l'account root non ha una password configurata. Premere Invio.

      2. Digitare Y per impostare una password e digitare una password sicura due volte. Per ulteriori informazioni sulla creazione di una password sicura, visita la pagina https://identitysafe.norton.com/password-generator/. Assicurarsi di conservare questa password in un posto sicuro.

        L'impostazione di una password root per MariaDB è solo la misura di base per la protezione del database. Quando si crea o si installa un'applicazione basata su un database, normalmente si crea un utente del servizio di database per tale applicazione per evitare di usare l'account root per ragioni diverse dall'amministrazione del database.

    2. Digitare Y per rimuovere gli account utente anonimi.

    3. Digitare Y per disabilitare l'accesso root in remoto.

    4. Digitare Y per rimuovere il database di test.

    5. Digitare Y per ricaricare le tabelle dei privilegi e salvare le modifiche.

  3. (Facoltativo) Se non si ha intenzione di utilizzare immediatamente il server MariaDB, interromperlo. È possibile riavviarlo quando è di nuovo necessario.

    [ec2-user ~]$ sudo systemctl stop mariadb
  4. (Facoltativo) Se si desidera che il server MariaDB si avvii a ogni avvio, digitare il seguente comando.

    [ec2-user ~]$ sudo systemctl enable mariadb

Fase 4: (facoltativo) installare phpMyAdmin

phpMyAdmin è uno strumento di gestione del database basato su Web che è possibile utilizzare per visualizzare e modificare i database MySQL sull'istanza EC2. Segui le fasi seguenti per installare e configurare phpMyAdmin sull'istanza Amazon Linux.

Importante

Non consigliamo di utilizzare phpMyAdmin per accedere a un server LAMP, a meno che non sia stato abilitato SSL/TLS in Apache; in caso contrario, la password dell'amministratore del database e altri dati vengono trasmessi in modo non sicuro tramite Internet. Per i consigli sulla sicurezza degli sviluppatori, consulta Securing your phpMyAdmin installation. Per informazioni generali sulla protezione di un server Web su un'istanza EC2, consulta Tutorial: configurazione di SSL/TLS su Amazon Linux 2.

Per installare phpMyAdmin

  1. Installare le dipendenze richieste.

    [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
  2. Riavviare Apache.

    [ec2-user ~]$ sudo systemctl restart httpd
  3. Riavviare php-fpm.

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. Andare alla root del documento di Apache in /var/www/html.

    [ec2-user ~]$ cd /var/www/html
  5. Selezionare un pacchetto di origine per la versione più recente di phpMyAdmin da https://www.phpmyadmin.net/downloads. Per scaricare il file direttamente nell'istanza, copiare il link e incollarlo in un comando wget, come in questo esempio:

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. Creare una cartella phpMyAdmin in cui estrarre il pacchetto con il comando seguente.

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. Eliminare il tarball phpMyAdmin-latest-all-languages.tar.gz.

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (Facoltativo) Se il server MySQL non è in esecuzione, avviarlo in questo momento.

    [ec2-user ~]$ sudo systemctl start mariadb
  9. In un browser Web, digitare l'URL dell'installazione phpMyAdmin. Questo URL è l'indirizzo DNS pubblico (o indirizzo IP pubblico) dell'istanza seguito da una barra e dal nome della directory di installazione. Ad esempio:

    http://my.public.dns.amazonaws.com/phpMyAdmin

    Deve essere visualizzata la pagina di accesso phpMyAdmin:

  10. Accedere all'installazione phpMyAdmin con il nome utente root la password root MySQL creata in precedenza.

    L'installazione deve essere configurata prima di essere messa in funzione. Si consiglia di iniziare con la creazione manuale del file di configurazione, come segue:

    1. Per iniziare con un file di configurazione minimo, utilizza l'editor di testo preferito per creare un nuovo file e quindi copia al suo interno il contenuto di config.sample.inc.php.

    2. Salva il file come config.inc.php nella directory phpMyAdmin che contiene il index.php.

    3. Per eventuali configurazioni aggiuntive, consulta le indicazioni da seguire dopo la creazione del file disponibili nella sezione Using the Setup script (Utilizzo dello script di installazione) delle istruzioni di installazione di phpMyAdmin.

    Per ulteriori informazioni relative all'utilizzo di phpMyAdmin, consulta la Guida per l'utente phpMyAdmin.

Risoluzione dei problemi

Questa sezione offre suggerimenti per la risoluzione di problemi comuni che si possono incontrare quando si configura un nuovo server LAMP.

Non riesco a connettermi al mio server utilizzando un browser Web

Esegui i controlli seguenti per verificare se il tuo server Web Apache è in esecuzione e accessibile.

  • Il server Web è in esecuzione?

    Puoi verificare che httpd sia attivo eseguendo il seguente comando:

    [ec2-user ~]$ sudo systemctl is-enabled httpd

    Se il processo httpd non è in esecuzione, ripeti le fasi descritte in Per preparare il server LAMP.

  • Il firewall è configurato correttamente?

    Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta Aggiunta di regole a un gruppo di sicurezza.

Non riesco a connettermi al mio server utilizzando HTTPS

Eseguire le seguenti verifiche per verificare se il server Web Apache è configurato per supportare HTTPS.

  • Il server Web è configurato correttamente?

    Dopo avere installato Apache, il server è configurato per il traffico HTTP. Per supportare HTTPS, abilitare TLS sul server e installare un certificato SSL. Per informazioni, consulta Tutorial: configurazione di SSL/TLS su Amazon Linux 2.

  • Il firewall è configurato correttamente?

    Verificare che il gruppo di protezione per l'istanza contenga una regola per consentire il traffico HTTPS sulla porta 443. Per ulteriori informazioni, consulta Aggiunta di regole a un gruppo di sicurezza.

Argomenti correlati

Per ulteriori informazioni sul trasferimento di file all'istanza o l'installazione di un blog WordPress sul server Web, consulta la documentazione seguente:

Per ulteriori informazioni sui comandi e sul software utilizzati in questo tutorial, consulta le pagine Web seguenti:

Per ulteriori informazioni sulla registrazione di un nome di dominio per il server Web o sul trasferimento di un nome di dominio esistente su questo host, consulta l'articolo relativo alla creazione e alla migrazione di domini e sottodomini ad Amazon Route 53 nella Guida per lo sviluppatore di Amazon Route 53.