Tutorial LAMP per AWS Cloud9 - AWS Cloud9

AWS Cloud9 non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio normalmente. Scopri di più»

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial LAMP per AWS Cloud9

Questo tutorial consente di configurare ed eseguire LAMP (Linux, Apache HTTP Server ePHP) all'interno di un ambiente di AWS Cloud9 sviluppo. MySQL

Seguire questo tutorial e creare questo esempio potrebbe comportare addebiti a tuo caricoAccount AWS. inclusi gli eventuali costi per i servizi come Amazon Elastic Compute Cloud (Amazon EC2). Per ulteriori informazioni, consultare Prezzi di Amazon EC2.

Prerequisiti

Prima di usare questo esempio, assicurati che la configurazione soddisfi i seguenti requisiti:

  • È necessario disporre di un ambiente di sviluppo EC2 AWS Cloud9 esistente. Nell'esempio si presume che tu disponga già di un ambiente EC2 connesso a un'istanza Amazon EC2 in cui viene eseguito Amazon Linux o Ubuntu Server. Se disponi di un altro tipo di ambiente o sistema operativo, potrebbe essere necessario adattare le istruzioni di questo esempio per configurare gli strumenti correlati. Per ulteriori informazioni, consulta Creare un ambiente in AWS Cloud9.

  • Si dispone dell'IDE AWS Cloud9 per l'ambiente esistente già aperto. Quando apri un ambiente, AWS Cloud9 apre l'IDE per tale ambiente nel browser Web. Per ulteriori informazioni, consulta Apertura di un ambiente in AWS Cloud9.

Fase 1: installare gli strumenti

In questa fase installi i seguenti strumenti:

  • Apache HTTP Server, un host server Web.

  • PHP, un linguaggio di script che è particolarmente idoneo per lo sviluppo Web e può essere integrato in HTML.

  • MySQL, un sistema di gestione dei database.

Finisci questa fase con l'avvio di Apache HTTP Server e poi MySQL.

  1. Assicurarsi che gli ultimi aggiornamenti di sicurezza e correzioni di bug siano installati nell'istanza. Per eseguire questa operazione, in una sessione del terminale nell'IDE AWS Cloud9, esegui il comando yum update per Amazon Linux o apt update per Ubuntu Server. Per avviare una nuova sessione del terminale, dalla barra dei menu scegli Window (Finestra), New Terminal (Nuovo terminale).

    Per Amazon Linux:

    sudo yum -y update

    Per Ubuntu Server:

    sudo apt -y update
  2. Controlla se Apache HTTP Server è già installato. Per eseguire questa operazione, esegui il comando httpd -v per Amazon Linux o apache2 -v per Ubuntu Server.

    Se è già installato, l'output contiene il numero di versione di Apache HTTP Server.

    Se viene visualizzato un messaggio di errore, installa Apache HTTP Server eseguendo il comando install.

    Per Amazon Linux:

    sudo yum install -y httpd24

    Per Ubuntu Server:

    sudo apt install -y apache2
  3. Verifica se PHP è già installato eseguendo il comando php -v.

    Se è già installato, l'output contiene il numero di versione di PHP:

    Se viene visualizzato un messaggio di errore, installa PHP eseguendo il comando install.

    Per Amazon Linux:

    sudo yum install -y php56

    Per Ubuntu Server:

    sudo apt install -y php libapache2-mod-php php-xml
  4. Verifica se MySQL è già installato eseguendo il comando mysql --version.

    Se è già installato, l'output contiene il numero di versione di MySQL.

    Se viene visualizzato un messaggio di errore, installa MySQL eseguendo il comando install.

    Per Amazon Linux:

    sudo yum install -y mysql-server

    Per Ubuntu Server:

    sudo apt install -y mysql-server
  5. Dopo aver installato Apache HTTP Server, PHP e MySQL, avvia Apache HTTP Server e verifica che sia stato avviato usando il seguente comando.

    Per Amazon Linux (potrebbe essere necessario eseguire il comando due volte):

    sudo service httpd start && sudo service httpd status

    Per Ubuntu Server (per tornare al prompt dei comandi, premi q):

    sudo service apache2 start && sudo service apache2 status
  6. Avvia MySQL e verifica che sia stato avviato usando il seguente comando.

    Per Amazon Linux:

    sudo service mysqld start && sudo service mysqld status

    Per Ubuntu Server (per tornare al prompt dei comandi, premi q):

    sudo service mysql start && sudo service mysql status

Fase 2: configura MySQL

In questa fase, imposti MySQL con le best practice di sicurezza di MySQL. Queste best practice di sicurezza includono l'impostazione di una password per gli account root e la rimozione degli account root accessibili dall'esterno dell'host locale. Altre best practice da tenere in considerazione sono la rimozione degli utenti anonimi, la rimozione del database di test e la rimozione dei privilegi che consentono a chiunque di accedere ai database con i nomi che iniziano con test_.

Finisci questa fase con la prova dell'avvio e dell'uscita del client linea di comando MySQL.

  1. Implementa le best practice di sicurezza di MySQL per l'installazione di MySQL eseguendo il seguente comando in una sessione del terminale nell'IDE AWS Cloud9.

    sudo mysql_secure_installation
  2. Quando viene richiesto, rispondi alle seguenti domande come specificato.

    Per Amazon Linux:

    1. Inserisci la password corrente per root (Invio per nessuna password): premi Enter (nessuna password).

    2. Imposta la password root: digita Y e premi Enter.

    3. Nuova password digita una password e premi Enter.

    4. Immetti nuovamente la nuova password: digita di nuovo la password e premi Enter. Assicurati di riporre le password in un luogo sicuro per un uso successivo.

    5. Rimuovi utenti anonimi: digita Y, quindi premi Enter.

    6. Disattiva l'accesso root da remoto: digita Y, quindi premi Enter.

    7. Rimuovi il database di test e accedivi: digita Y, quindi premi Enter.

    8. Ricarica le tabelle dei privilegi: digita Y, quindi premi Enter.

    Per Ubuntu Server:

    1. Configura il plug-in VALIDATE PASSWORD: immetti y, quindi premi Enter.

    2. Configura uno dei tre livelli di policy di convalida della password: immetti 0, 1 o 2, quindi premi Enter.

    3. Nuova password: immetti una password e premi Enter.

    4. Immetti nuovamente la nuova password: immetti di nuovo la password e premi Enter. Assicurati di riporre le password in un luogo sicuro per un uso successivo.

    5. Continua con la password fornita: immetti y, quindi premi Enter.

    6. Rimuovi utenti anonimi: immetti y, quindi premi Enter.

    7. Disattiva l'accesso root da remoto: immetti y, quindi premi Enter.

    8. Rimuovi il database di test e l'accesso: immetti y, quindi premi Enter.

    9. Ricarica le tabelle dei privilegi: immetti y, quindi premi Enter.

  3. Per interagire direttamente con MySQL, avvia il client linea di comando MySQL come utente root usando il seguente comando. Quando richiesto, digita la password dell'utente root impostata in precedenza, quindi premi Enter. Il prompt diventa mysql> quando sei nel client linea di comando MySQL.

    sudo mysql -uroot -p
  4. Per uscire dal client linea di comando MySQL, esegui il seguente comando. Il prompt torna a essere $.

    exit;

Fase 3: configurare un sito Web

In questa fase imposti la root predefinita del sito Web per Apache HTTP Server con le autorizzazioni di accesso e i proprietari consigliati. Quindi crei una pagina Web basata su PHP all'interno della root predefinita del sito Web.

Abiliti il traffico Web in entrata per visualizzare la pagina Web configurando il gruppo di sicurezza in Amazon EC2 e la lista di controllo degli accessi di rete (ACL di rete) in Amazon Virtual Private Cloud (Amazon VPC) associati a questo ambiente EC2. Ogni ambiente EC2 deve essere associato a un gruppo di sicurezza in Amazon EC2 e a una lista di controllo degli accessi di rete in Amazon VPC. Tuttavia, mentre la lista di controllo degli accessi di rete predefinita in un Account AWS permette tutto il traffico in entrata e in uscita per l'ambiente, il gruppo di sicurezza predefinito permette solo il traffico in entrata utilizzando SSH sulla porta 22. Per ulteriori informazioni, consulta Impostazioni VPC per AWS Cloud9 ambienti di sviluppo.

Finisci questa fase con la corretta visualizzazione della pagina Web dall'esterno dell'IDE AWS Cloud9.

  1. Imposta la root predefinita del sito Web per Apache HTTP Server (/var/www/html) con le autorizzazioni di accesso e i proprietari consigliati. Per eseguire questa operazione, in una sessione del terminale dell'IDE AWS Cloud9 esegui uno alla volta e nell'ordine indicato i sei comandi seguenti. Per capire cosa fa ogni comando, leggere le informazioni dopo il carattere # dopo ogni comando.

    Per Amazon Linux:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ec2-user # Add the user ec2-user (your default user for this environment) to the group web-content. sudo usermod -G web-content -a apache # Add the user apache (Apache HTTP Server) to the group web-content. sudo chown -R ec2-user:web-content /var/www/html # Change the owner of /var/www/html and its files to user ec2-user and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.

    Per Ubuntu Server:

    sudo groupadd web-content # Create a group named web-content. sudo usermod -G web-content -a ubuntu # Add the user ubuntu (your default user for this environment) to the group web-content. sudo usermod -G web-content -a www-data # Add the user www-data (Apache HTTP Server) to the group web-content. sudo chown -R ubuntu:web-content /var/www/html # Change the owner of /var/www/html and its files to user ubuntu and group web-content. sudo find /var/www/html -type f -exec chmod u=rw,g=rx,o=rx {} \; # Change all file permissions within /var/www/html to user read/write, group read-only, and others read/execute. sudo find /var/www/html -type d -exec chmod u=rwx,g=rx,o=rx {} \; # Change /var/www/html directory permissions to user read/write/execute, group read/execute, and others read/execute.
  2. Crea una pagina Web basata su PHP denominata index.php nella cartella root del sito Web predefinito per Apache HTTP Server (/var/www/html) usando il seguente comando.

    Per Amazon Linux:

    sudo touch /var/www/html/index.php && sudo chown -R ec2-user:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    Il comando precedente per Amazon Linux modifica anche il proprietario del file in ec2-user, il gruppo del file in web-content e le autorizzazioni di lettura/scrittura del file per l'utente e di lettura/esecuzione per il gruppo e altri.

    Per Ubuntu Server:

    sudo touch /var/www/html/index.php && sudo chown -R ubuntu:web-content /var/www/html/index.php && sudo chmod u=rw,g=rx,o=rx /var/www/html/index.php && sudo printf '%s\n%s\n%s' '<?php' ' phpinfo();' '?>' >> /var/www/html/index.php

    Il comando precedente per Ubuntu Server modifica anche il proprietario del file in ubuntu, il gruppo del file in web-content e le autorizzazioni di lettura/scrittura del file per l'utente e di lettura/esecuzione per il gruppo e altri.

    Se i comandi precedenti vengono eseguiti correttamente, viene creato il file index.php con i seguenti contenuti.

    <?php phpinfo(); ?>
  3. Abilita il traffico Web in entrata sulla porta 80 per visualizzare la nuova pagina Web configurando la lista di controllo degli accessi di rete in Amazon VPC e il gruppo di sicurezza Amazon EC2 associato all'ambiente EC2. Per eseguire questa operazione, esegui uno alla volta i seguenti otto comandi nell'ordine indicato. Per capire cosa fa ogni comando, leggere le informazioni dopo il carattere # per ogni comando.

    Importante

    L'esecuzione dei seguenti comandi abilita il traffico Web in ingresso sulla porta 80 per tutti gli ambienti EC2 e le istanze Amazon EC2 associate al gruppo di sicurezza e alla lista di controllo degli accessi di rete per questo ambiente. Ciò potrebbe comportare l'abilitazione imprevista del traffico Web in ingresso sulla porta 80 per gli ambienti EC2 le istanze Amazon EC2 diversi da questo.

    Nota

    I comandi dal secondo al quarto riportati di seguito consentono al gruppo di sicurezza di permettere il traffico Web in ingresso sulla porta 80. Se hai un gruppo di sicurezza predefinito che consente solo il traffico SSH in entrata sulla porta 22, è necessario eseguire il primo comando e quindi i comandi dal secondo al quarto. Tuttavia, se è già disponibile un gruppo di sicurezza personalizzato che consente il traffico Web in ingresso sulla porta 80, è possibile ignorare l'esecuzione di tali comandi.

    I comandi dal quinto all'ottavo riportati di seguito abilitano la lista di controllo degli accessi di rete a permettere il traffico Web in ingresso sulla porta 80. Se hai una lista di controllo degli accessi di rete predefinita che consente già tutto il traffico in entrata su tutte le porte, puoi saltare in sicurezza questi comandi. Tuttavia, supponi di avere una lista di controllo degli accessi di rete personalizzata che non consente il traffico Web in ingresso sulla porta 80. Esegui il primo comando, quindi i comandi dal quinto all'ottavo dei seguenti.

    MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Add an inbound rule to the security group to allow all incoming IPv4-based traffic over port 80. aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Add an inbound rule to the security group to allow all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10000 --cidr-block 0.0.0.0/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv4-based traffic over port 80. Advanced users: change this suggested rule number as desired. aws ec2 create-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --protocol tcp --rule-action allow --rule-number 10100 --ipv6-cidr-block ::/0 --port-range From=80,To=80 # Add an inbound rule to the network ACL to allow all IPv6-based traffic over port 80. Advanced users: change this suggested rule number as desired.
  4. Ottieni l'URL del file index.php nella root del server Web. Per eseguire questa operazione, esegui il seguente comando e utilizza una nuova scheda del browser Web o un browser Web separato dall'IDE AWS Cloud9 per accedere all'URL visualizzato. In caso di esito positivo, la pagina Web visualizza le informazioni su Apache HTTP Server, MySQL, PHP e altre impostazioni correlate.

    MY_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) && echo http://$MY_PUBLIC_IP/index.php # Get the URL to the index.php file within the web server root.

Fase 4: pulizia

Supponi di voler continuare a utilizzare questo ambiente ma di voler disabilitare il traffico Web in entrata sulla porta 80. Esegui i seguenti otto comandi, uno alla volta nell'ordine indicato, per eliminare le corrispondenti regole di traffico in ingresso impostate in precedenza nel gruppo di sicurezza e nella lista di controllo degli accessi di rete associati all'ambiente. Per capire cosa fa ogni comando, leggere le informazioni dopo il carattere # per ogni comando.

Importante

L'esecuzione dei seguenti comandi disabilita il traffico Web in ingresso sulla porta 80 per tutti gli ambienti EC2 e le istanze Amazon EC2 associate al gruppo di sicurezza e alla lista di controllo degli accessi di rete per questo ambiente. Ciò potrebbe comportare la disabilitazione imprevista del traffico Web in ingresso sulla porta 80 per gli ambienti EC2 le istanze Amazon EC2 diversi da questo.

Nota

I comandi dal quinto all'ottavo riportati di seguito rimuovono le regole esistenti che impediscono alla lista di controllo degli accessi di rete di consentire il traffico Web in ingresso sulla porta 80. Se hai una lista di controllo degli accessi di rete predefinita che consente già tutto il traffico in entrata su tutte le porte, puoi ignorare questi comandi. Tuttavia, supponi di avere una lista di controllo degli accessi di rete personalizzata con regole esistenti che consentono il traffico Web in ingresso sulla porta 80 e vuoi eliminare tali regole. Dovrai eseguire il primo comando e quindi i comandi dal quinto all'ottavo.

MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily. MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --cidr 0.0.0.0/0 --port 80 # Delete the existing inbound rule from the security group to block all incoming IPv4-based traffic over port 80. aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --ip-permissions IpProtocol=tcp,Ipv6Ranges='[{CidrIpv6=::/0}]',FromPort=80,ToPort=80 # Delete the existing inbound rule from the security group to block all incoming IPv6-based traffic over port 80. MY_SUBNET_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SubnetId' --output text) # Get the ID of the subnet associated with the instance, and store it temporarily. MY_NETWORK_ACL_ID=$(aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$MY_SUBNET_ID --query 'NetworkAcls[].Associations[0].NetworkAclId' --output text) # Get the ID of the network ACL associated with the subnet, and store it temporarily. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10000 # Delete the existing inbound rule from the network ACL to block all IPv4-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match. aws ec2 delete-network-acl-entry --network-acl-id $MY_NETWORK_ACL_ID --ingress --rule-number 10100 # Delete the existing inbound rule from the network ACL to block all IPv6-based traffic over port 80. Advanced users: if you originally created this rule with a different number, change this suggested rule number to match.

Una volta terminato di usare l'ambiente, eliminalo per evitare di continuare ad addebitare i costi sul tuo Account AWS. Per istruzioni, consultare Eliminazione di un ambiente in AWS Cloud9.