AWS Cloud9 non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni
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à.
Questo tutorial ti consente di configurare ed eseguire LAMP (Linux, Apache HTTPServer, MySQLe PHP) all'interno di un ambiente di AWS Cloud9 sviluppo.
Seguire questo tutorial e creare questo esempio potrebbe comportare dei costi a carico dell'utente Account AWS. Questi includono eventuali costi per Servizi AWS Amazon Elastic Compute Cloud (AmazonEC2). Per ulteriori informazioni, consulta la pagina EC2dei prezzi di Amazon
Argomenti
Prerequisiti
Prima di usare questo esempio, assicurati che la configurazione soddisfi i seguenti requisiti:
-
È necessario disporre di un ambiente di AWS Cloud9 EC2 sviluppo esistente. Questo esempio presuppone che tu disponga già di un EC2 ambiente connesso a un'EC2istanza Amazon che esegue 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.
-
Il file AWS Cloud9 IDE per l'ambiente esistente è già aperto. Quando apri un ambiente, AWS Cloud9 apre il IDE relativo ambiente nel tuo 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 HTTPServer, un host di server Web.
-
PHP, un linguaggio di scripting particolarmente adatto per lo sviluppo web e in cui può essere HTML incorporato.
-
MySQL, un sistema di gestione dei database.
Quindi finisci questo passaggio avviando Apache HTTPServer e poi MySQL.
-
Assicurarsi che gli ultimi aggiornamenti di sicurezza e correzioni di bug siano installati nell'istanza. A tale scopo, in una sessione di terminale in AWS Cloud9 IDE, esegui
yum update
for (Amazon Linux) oapt update
for (Ubuntu Comando 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
In Ubuntu Server:
sudo apt -y update
-
Controlla se Apache HTTPIl server è già installato. A tale scopo, esegui
httpd -v
(per Amazon Linux) oapache2 -v
(per Ubuntu comando Server ().In caso di successo, l'output contiene Apache HTTPNumero di versione del server.
Se visualizzi un errore, installa Apache HTTPServer eseguendo il
install
comando.Per Amazon Linux:
sudo yum install -y httpd24
In Ubuntu Server:
sudo apt install -y apache2
-
Conferma se PHP è già installato eseguendo il
php -v
comando.In caso di successo, l'output contiene il numero di PHP versione.
Se vedi un errore, installa PHP eseguendo il
install
comando.Per Amazon Linux:
sudo yum install -y php56
In Ubuntu Server:
sudo apt install -y php libapache2-mod-php php-xml
-
Conferma se MySQL è già installato eseguendo il
mysql --version
comando.In caso di successo, l'output contiene MySQL numero di versione.
Se vedi un errore, installa MySQL eseguendo il
install
comando.Per Amazon Linux:
sudo yum install -y mysql-server
In Ubuntu Server:
sudo apt install -y mysql-server
-
Dopo l'installazione Apache HTTPServer, PHPe MySQL, avvia Apache HTTPServer, quindi conferma che è stato avviato, eseguendo il comando seguente.
Per Amazon Linux (potrebbe essere necessario eseguire il comando due volte):
sudo service httpd start && sudo service httpd status
In Ubuntu Server (per tornare al prompt dei comandi, premere
q
):sudo service apache2 start && sudo service apache2 status
-
Start (Avvio) MySQL, quindi conferma che sia stato avviato, eseguendo il comando seguente.
Per Amazon Linux:
sudo service mysqld start && sudo service mysqld status
In Ubuntu Server (per tornare al prompt dei comandi, premere
q
):sudo service mysql start && sudo service mysql status
Fase 2: Configurazione MySQL
In questo passaggio, si configura MySQL da seguire MySQL migliori pratiche di sicurezza. 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_
.
Quindi finisci questo passaggio esercitandoti con l'avvio e poi l'uscita dal MySQL client a riga di comando.
-
Implement MySQL le migliori pratiche di sicurezza per MySQL installazione eseguendo il comando seguente in una sessione terminale in AWS Cloud9 IDE.
sudo mysql_secure_installation
-
Quando viene richiesto, rispondi alle seguenti domande come specificato.
Per Amazon Linux:
-
Inserisci la password corrente per root (Invio per nessuna password): premi
Enter
(nessuna password). -
Imposta la password root: digita
Y
e premiEnter
. -
Nuova password digita una password e premi
Enter
. -
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. -
Rimuovi utenti anonimi: digita
Y
, quindi premiEnter
. -
Disattiva l'accesso root da remoto: digita
Y
, quindi premiEnter
. -
Rimuovi il database di test e accedivi: digita
Y
, quindi premiEnter
. -
Ricarica le tabelle dei privilegi: digita
Y
, quindi premiEnter
.
In Ubuntu Server:
-
Vuoi configurare il VALIDATE PASSWORD plugin: Invio
y
, quindi premiEnter
. -
Configura uno dei tre livelli di policy di convalida della password: immetti
0
,1
o2
, quindi premiEnter
. -
Nuova password: immetti una password e premi
Enter
. -
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. -
Continua con la password fornita: immetti
y
, quindi premiEnter
. -
Rimuovi utenti anonimi: immetti
y
, quindi premiEnter
. -
Disattiva l'accesso root da remoto: immetti
y
, quindi premiEnter
. -
Rimuovi il database di test e l'accesso: immetti
y
, quindi premiEnter
. -
Ricarica le tabelle dei privilegi: immetti
y
, quindi premiEnter
.
-
-
Per interagire direttamente con MySQL, avvia il MySQL client da riga di comando come utente root eseguendo il comando seguente. Quando richiesto, digita la password dell'utente root impostata in precedenza, quindi premi
Enter
. Il prompt cambia amysql>
mentre si è in MySQL client a riga di comando.sudo mysql -uroot -p
-
Per uscire da MySQL client da riga di comando, esegui il seguente comando. Il prompt torna a essere
$
.exit;
Fase 3: configurare un sito Web
In questo passaggio, si configura la cartella principale predefinita del sito Web per Apache HTTPServer con proprietari e autorizzazioni di accesso consigliati. Quindi crei un PHPpagina Web basata all'interno della cartella principale del sito Web predefinita.
Consenti quindi al traffico web in entrata di visualizzare quella pagina Web configurando il gruppo di sicurezza in Amazon EC2 e la lista di controllo degli accessi alla rete (reteACL) in Amazon Virtual Private Cloud (AmazonVPC) associati a questo EC2 ambiente. Ogni EC2 ambiente deve essere associato sia a un gruppo di sicurezza in Amazon EC2 che a una rete ACL in AmazonVPC. Tuttavia, anche se la rete predefinita ACL in un Account AWS consente tutto il traffico in entrata e in uscita per l'ambiente, il gruppo di sicurezza predefinito consente solo il traffico in entrata che utilizza SSH la porta 22. Per ulteriori informazioni, consulta VPCimpostazioni per gli ambienti di AWS Cloud9 sviluppo.
È quindi possibile completare questo passaggio visualizzando correttamente la pagina Web dall'esterno di. AWS Cloud9 IDE
-
Imposta la cartella principale predefinita del sito Web per Apache HTTPServer (
/var/www/html
) con proprietari e autorizzazioni di accesso consigliati. A tale scopo, esegui i seguenti sei comandi, uno alla volta nell'ordine seguente, in una sessione terminale in. AWS Cloud9 IDE 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.
In 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.
-
Crea un PHPpagina Web basata denominata
index.php
nella cartella principale del sito Web predefinita per Apache HTTPServer (ovvero/var/www/html
) eseguendo il comando seguente.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
ec2-user
, cambia il gruppo del file in e modifica le autorizzazioni del file in read/write for the user, and read/execute per il gruppo e altri.web-content
In 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 Il server modifica inoltre il proprietario del file in
ubuntu
, modifica il gruppo del file in e modifica le autorizzazioni del file in quelle relative al gruppo e read/write for the user, and read/execute ad altri.web-content
Se i comandi precedenti vengono eseguiti correttamente, viene creato il file
index.php
con i seguenti contenuti.<?php phpinfo(); ?>
-
Abilita il traffico web in entrata sulla porta 80 per visualizzare la nuova pagina Web configurando la rete in ACL Amazon VPC e il gruppo di sicurezza Amazon EC2 associato a questo EC2 ambiente. 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 entrata sulla porta 80 per tutti EC2 gli ambienti e EC2 le istanze Amazon associati al gruppo di sicurezza e alla rete ACL per questo ambiente. Ciò potrebbe comportare l'attivazione inaspettata del traffico Web in entrata sulla porta 80 per ambienti EC2 e EC2 istanze Amazon diversi da questa.
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 disponi di un gruppo di sicurezza predefinito, che consente il SSH traffico in entrata solo sulla porta 22, devi eseguire il primo comando seguito da questi 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 seguenti comandi dal quinto all'ottavo consentono ACL alla rete di consentire il traffico Web in entrata sulla porta 80. Se disponi di una rete predefinitaACL, che consente già tutto il traffico in entrata su tutte le porte, puoi tranquillamente ignorare l'esecuzione di questi comandi. Tuttavia, supponiamo di avere una rete personalizzata ACL che non consente il traffico web in entrata 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.
-
Accedi al
index.php
file URL all'interno della cartella principale del server web. A tale scopo, esegui il comando seguente e utilizza una nuova scheda del browser Web o un browser Web diverso da quello per accedere AWS Cloud9 IDE a URL quello visualizzato. In caso di successo, la pagina Web visualizza informazioni su Apache HTTPServer, MySQL, PHPe 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. Quindi, esegui i seguenti otto comandi, uno alla volta nell'ordine seguente, per eliminare le regole del traffico in entrata corrispondenti che hai impostato in precedenza nel gruppo di sicurezza e nella rete ACL 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 entrata sulla porta 80 per tutti gli EC2 ambienti e le EC2 istanze Amazon associati al gruppo di sicurezza e alla rete ACL per questo ambiente. Ciò potrebbe comportare la disabilitazione inaspettata del traffico Web in entrata sulla porta 80 per ambienti EC2 e EC2 istanze Amazon diversi da questa.
Nota
I seguenti comandi dal quinto all'ottavo rimuovono le regole esistenti per impedire alla rete ACL di consentire il traffico web in entrata sulla porta 80. Se disponi di una rete predefinitaACL, che consente già tutto il traffico in entrata su tutte le porte, puoi ignorare l'esecuzione di questi comandi. Tuttavia, supponiamo di disporre di una rete personalizzata ACL con regole esistenti che consentono il traffico Web in entrata sulla porta 80 e di voler 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.