AWS Cloud9 ya no está disponible para nuevos clientes. Los clientes existentes de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. Más información
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Este tutorial le permite configurar y ejecutar LAMP (Linux, Apache Servidor HTTP, MySQL, y PHP) dentro de un entorno AWS Cloud9 de desarrollo.
Seguir este tutorial y crear este ejemplo puede resultar en gastos para usted Cuenta de AWS. Estos incluyen posibles cargos por Servicios de AWS ejemplo Amazon Elastic Compute Cloud (Amazon EC2). Para obtener más información, consulta los EC2 precios de Amazon
Temas
Requisitos previos
Antes de utilizar este ejemplo, asegúrese de que su configuración cumpla los siguientes requisitos:
-
Debe tener un entorno de AWS Cloud9 EC2 desarrollo existente. En este ejemplo se supone que ya tienes un EC2 entorno conectado a una EC2 instancia de Amazon que ejecuta Amazon Linux o Ubuntu Servidor. Si tiene otro tipo de entorno o sistema operativo, es posible que tenga que adaptar las instrucciones de este ejemplo para configurar herramientas relacionadas. Para obtener más información, consulte Crear un entorno en AWS Cloud9.
-
Ya tiene abierto el AWS Cloud9 IDE del entorno existente. Al abrir un entorno, AWS Cloud9 abre el IDE de ese entorno en el navegador web. Para obtener más información, consulte Abrir un entorno en AWS Cloud9.
Paso 1: Instalar las herramientas
En este paso, instalará las siguientes herramientas:
-
Apache Servidor HTTP, un host de servidor web.
-
PHP, un lenguaje de script especialmente indicado para el desarrollo web y que se puede incrustar en HTML.
-
MySQL, un sistema de administración de bases de datos.
A continuación, finalice este paso iniciando Apache Servidor HTTP y, a continuación MySQL.
-
Asegúrese de que las últimas actualizaciones de seguridad y correcciones de errores están instaladas en la instancia. Para ello, en una sesión de terminal en el AWS Cloud9 IDE, ejecute
yum update
for (Amazon Linux) oapt update
for (Ubuntu Servidor). (Para iniciar una nueva sesión del terminal, en la barra de menús, seleccione Window [Ventana], New Terminal [Nuevo terminal]).Para Amazon Linux:
sudo yum -y update
En Ubuntu Servidor:
sudo apt -y update
-
Compruebe si Apache El servidor HTTP ya está instalado. Para ello, ejecute
httpd -v
(para Amazon Linux) oapache2 -v
(para Ubuntu El comando (servidor).Si se ejecuta correctamente, el resultado contiene el Apache Número de versión del servidor HTTP.
Si ve un error, instale Apache Servidor HTTP ejecutando el
install
comando.Para Amazon Linux:
sudo yum install -y httpd24
En Ubuntu Servidor:
sudo apt install -y apache2
-
Confirme si PHP ya está instalado ejecutando el
php -v
comando.Si es así, el resultado contendrá el número de versión de PHP.
Si aparece un error, instale PHP ejecutando el comando
install
.Para Amazon Linux:
sudo yum install -y php56
En Ubuntu Servidor:
sudo apt install -y php libapache2-mod-php php-xml
-
Confirme si MySQL ya está instalado ejecutando el
mysql --version
comando.Si se ejecuta correctamente, el resultado contiene el MySQL número de versión.
Si ve un error, instale MySQL ejecutando el
install
comando.Para Amazon Linux:
sudo yum install -y mysql-server
En Ubuntu Servidor:
sudo apt install -y mysql-server
-
Después de instalar Apache Servidor HTTP, PHP, y MySQL, iniciar Apache Servidor HTTP y, a continuación, confirme que se ha iniciado ejecutando el siguiente comando.
Para Amazon Linux (es posible que tenga que ejecutar el comando dos veces):
sudo service httpd start && sudo service httpd status
En Ubuntu Servidor (para volver a la línea de comandos, presione
q
):sudo service apache2 start && sudo service apache2 status
-
Inicio MySQLy, a continuación, confirme que se ha iniciado ejecutando el siguiente comando.
Para Amazon Linux:
sudo service mysqld start && sudo service mysqld status
En Ubuntu Servidor (para volver a la línea de comandos, presione
q
):sudo service mysql start && sudo service mysql status
Paso 2: Configurar MySQL
En este paso, configuras MySQL para seguir MySQL mejores prácticas de seguridad. Estas prácticas recomendadas de seguridad incluyen establecer una contraseña para las cuentas raíz y eliminar las cuentas raíz a las que se puede acceder desde fuera del host local. Otras prácticas recomendadas a tener en cuenta son eliminar los usuarios anónimos, eliminar la base de datos de prueba y eliminar los privilegios que permiten a cualquier persona acceder a las bases de datos con nombres que comiencen por test_
.
A continuación, finalice este paso practicando el inicio y, a continuación, la salida del MySQL cliente de línea de comandos.
-
Implementar MySQL mejores prácticas de seguridad para el MySQL instalación mediante la ejecución del siguiente comando en una sesión de terminal en el AWS Cloud9 IDE.
sudo mysql_secure_installation
-
Cuando se le solicite, responda a las siguientes preguntas.
Para Amazon Linux:
-
Enter current password for root (enter for none) (Ingrese la contraseña raíz actual [Intro para ninguna]: pulse
Enter
(sin contraseña). -
Set root password (Establecer la contraseña raíz): escriba
Y
y, a continuación, pulseEnter
. -
New password (Nueva contraseña): escriba una contraseña y, a continuación, pulse
Enter
. -
Re-enter new password (Volver a ingresar la nueva contraseña): escriba la contraseña de nuevo y, a continuación, pulse
Enter
. (Asegúrese de almacenar la contraseña en un lugar seguro para usarla más adelante). -
Remove anonymous users (Eliminar usuarios anónimos): escriba
Y
y, a continuación, pulseEnter
. -
Disallow root login remotely (No permitir el inicio de sesión raíz de forma remota): escriba
Y
y, a continuación, pulseEnter
. -
Remove test database and access to it (Eliminar la base de datos de prueba y acceder a ella): escriba
Y
y, a continuación, pulseEnter
. -
Reload privilege tables now (Volver a cargar tablas de privilegios ahora): escriba
Y
y, a continuación, pulseEnter
.
En Ubuntu Servidor:
-
Would you like to set up VALIDATE PASSWORD plugin (¿Quiere configurar el complemento VALIDATE PASSWORD?): escriba
y
y, a continuación, pulseEnter
. -
There are three levels of password validation policy (Existen tres niveles de política de validación de contraseñas): escriba
0
,1
, o2
y, a continuación, pulseEnter
. -
New password (Nueva contraseña): escriba una contraseña y, a continuación, pulse
Enter
. -
Re-enter new password (Volver a introducir la nueva contraseña): escriba la contraseña de nuevo y, a continuación, pulse
Enter
. Asegúrese de guardar la contraseña en un lugar seguro para usarla más adelante. -
Do you wish to continue with the password provided (¿Desea continuar con la contraseña proporcionada?): escriba
y
y, a continuación, pulseEnter
. -
Remove anonymous users (Eliminar usuarios anónimos): escriba
y
y, a continuación, pulseEnter
. -
Disallow root login remotely (No permitir el inicio de sesión raíz de forma remota): escriba
y
y, a continuación, pulseEnter
. -
Remove test database and access to it (Eliminar la base de datos de prueba y acceder a ella): escriba
y
y, a continuación, pulseEnter
. -
Reload privilege tables now (Volver a cargar tablas de privilegios ahora): escriba
y
y, a continuación, pulseEnter
.
-
-
Para interactuar directamente con MySQL, inicie el MySQL cliente de línea de comandos como usuario root ejecutando el siguiente comando. Cuando se le solicite, escriba la contraseña del usuario raíz que ha definido anteriormente y, a continuación, pulse
Enter
. El mensaje cambia amysql>
cuando se encuentra en el MySQL cliente de línea de comandos.sudo mysql -uroot -p
-
Para salir del MySQL cliente de línea de comandos, ejecute el siguiente comando. El símbolo vuelve a cambiar a
$
.exit;
Paso 3: Configurar un sitio web
En este paso, configurará la raíz del sitio web predeterminada para Apache Servidor HTTP con propietarios y permisos de acceso recomendados. A continuación, crea un PHPpágina web basada en la raíz de ese sitio web predeterminado.
A continuación, habilita el tráfico web entrante para ver esa página web configurando el grupo de seguridad en Amazon EC2 y la lista de control de acceso a la red (ACL de red) en Amazon Virtual Private Cloud (Amazon VPC) que están asociados a este EC2 entorno. Cada EC2 entorno debe estar asociado a un grupo de seguridad en Amazon EC2 y a una ACL de red en Amazon VPC. Sin embargo, aunque la ACL de red predeterminada de una Cuenta de AWS permite todo el tráfico de entrada y salida del entorno, el grupo de seguridad predeterminado permite únicamente el tráfico entrante mediante SSH a través del puerto 22. Para obtener más información, consulte Configuración de VPC para entornos de desarrollo AWS Cloud9.
Para finalizar este paso, debe ver correctamente la página web desde fuera del IDE de AWS Cloud9 .
-
Configure la raíz del sitio web predeterminada para Apache Servidor HTTP (
/var/www/html
) con propietarios y permisos de acceso recomendados. Para ello, ejecute los seis comandos siguientes, uno a la vez y en el orden siguiente, en una sesión de terminal en el AWS Cloud9 IDE. Para entender lo que hace cada comando, lea la información que aparece detrás del comando#
en cada comando.Para 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.
En Ubuntu Servidor:
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.
-
Cree un PHPpágina web basada
index.php
en el nombre de la carpeta raíz del sitio web predeterminado para Apache Servidor HTTP (que es/var/www/html
) ejecutando el siguiente comando.Para 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
El comando anterior para Amazon Linux también cambia el propietario del archivo a
ec2-user
, cambia el grupo del archivo aweb-content
y cambia los permisos del archivo a read/write for the user, and read/execute para el grupo y otros.En Ubuntu Servidor:
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
El comando anterior para Ubuntu El servidor también cambia el propietario del archivo a
ubuntu
, cambia el grupo del archivo aweb-content
y cambia los permisos del archivo read/write for the user, and read/execute para el grupo y otros usuarios.Si se ejecuta correctamente, los comandos anteriores crean el archivo
index.php
con el siguiente contenido.<?php phpinfo(); ?>
-
Habilite el tráfico web entrante a través del puerto 80 para ver la nueva página web configurando la ACL de red en Amazon VPC y el grupo de seguridad Amazon EC2 asociado a este EC2 entorno. Para ello, ejecute los ocho comandos siguientes, de uno en uno, en el orden que se indica a continuación. Para entender lo que hace cada comando, lea la información que aparece detrás del comando
#
en cada comando.importante
La ejecución de los siguientes comandos habilita el tráfico web entrante a través del puerto 80 para todos los EC2 entornos e EC2 instancias de Amazon que estén asociados al grupo de seguridad y a la ACL de red de este entorno. Esto podría provocar que se habilite inesperadamente el tráfico web entrante a través del puerto 80 para EC2 entornos e EC2 instancias de Amazon distintos de este.
nota
Los comandos del segundo al cuarto siguientes habilitan el grupo de seguridad para permitir el tráfico web entrante a través del puerto 80. Si tiene un grupo de seguridad predeterminado, que solo permite el tráfico SSH a través del puerto 22, debe ejecutar el primer comando y después los comandos del segundo al cuarto. Sin embargo, si tiene un grupo de seguridad personalizado que ya permite el tráfico web entrante a través del puerto 80, puede omitir la ejecución de estos comandos.
Los comandos del quinto al octavo siguientes habilitan la ACL de red para permitir el tráfico web entrante a través del puerto 80. Si tiene una ACL de red predeterminada, que ya permite todo el tráfico entrante a través de todos los puertos, puede pasar por alto la ejecución de dichos comandos. Sin embargo, supongamos que tiene una ACL de red personalizada que no habilita el tráfico web entrante a través del puerto 80. A continuación, ejecute el primer comando seguido de los comandos quinto a octavo.
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.
-
Obtenga la URL al archivo
index.php
en la raíz del servidor web. Para ello, ejecute el siguiente comando y utilice una nueva pestaña del navegador web o un navegador web distinto del AWS Cloud9 IDE para ir a la URL que se muestra. Si se ejecuta correctamente, la página web muestra información sobre Apache Servidor HTTP, MySQL, PHP, y otros ajustes relacionados.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.
Paso 4: Limpiar
Supongamos que desea seguir utilizando este entorno, pero desea deshabilitar el tráfico web entrante a través del puerto 80. En ese caso, ejecute los ocho comandos siguientes, uno por uno, en el orden que se indica a continuación, para eliminar las reglas de tráfico entrante correspondientes que configuró anteriormente en el grupo de seguridad y en la ACL de red que están asociados al entorno. Para entender lo que hace cada comando, lea la información que aparece detrás del comando #
en cada comando.
importante
La ejecución de los siguientes comandos deshabilita el tráfico web entrante a través del puerto 80 en todos los EC2 entornos e EC2 instancias de Amazon que estén asociados al grupo de seguridad y a la ACL de red de este entorno. Esto podría provocar la desactivación inesperada del tráfico web entrante a través del puerto 80 para EC2 entornos e EC2 instancias de Amazon distintos de este.
nota
Los comandos del quinto al octavo siguientes eliminan las reglas existentes para impedir que la ACL de red permita el tráfico web entrante a través del puerto 80. Si tiene una ACL de red predeterminada, que ya permite todo el tráfico entrante a través de todos los puertos, puede omitir la ejecución de dichos comandos. Sin embargo, supongamos que tiene una ACL de red personalizada con reglas existentes que permiten el tráfico web entrante a través del puerto 80 y desea eliminar esas reglas. En ese caso, ejecute el primer comando seguido de los comandos quinto a octavo.
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.
Si ha terminado de usar este entorno, elimínelo para evitar que se apliquen cargos continuos en su Cuenta de AWS. Para obtener instrucciones, consulte Eliminar un entorno en AWS Cloud9.