Tutorial de LAMP para AWS Cloud9 - AWS Cloud9

AWS Cloud9 não está mais disponível para novos clientes. Os clientes atuais do AWS Cloud9 podem continuar usando o serviço normalmente. Saiba mais

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial de LAMP para AWS Cloud9

Este tutorial permite que você configure e execute a LAMP (Linux, Apache HTTP Server, MySQL e PHP) em um ambiente de desenvolvimento do AWS Cloud9.

Seguindo este tutorial e criando este exemplo pode gerar cobranças em sua Conta da AWS. Isso inclui possíveis cobranças por serviços da AWS como o Amazon Elastic Compute Cloud (Amazon EC2). Para obter mais informações, consulte Definição de preço Amazon EC2.

Pré-requisitos

Antes de usar esse exemplo, verifique se suas configurações cumprem os requisitos a seguir.

  • É necessário ter um ambiente existente de desenvolvimento do AWS Cloud9 EC2 Este exemplo pressupõe que você já tem um ambiente do EC2 conectado a uma instância do Amazon EC2 que executa Amazon Linux ou Ubuntu Server. Caso tenha um tipo diferente de ambiente ou sistema operacional, poderá ser necessário adaptar as instruções desse exemplo para configurar ferramentas relacionadas. Para obter mais informações, consulte Criando um ambiente em AWS Cloud9.

  • Você tem o IDE do AWS Cloud9 para o ambiente existente já aberto. Ao abrir um ambiente o AWS Cloud9 abre o IDE para esse ambiente em um navegador da Web. Para obter mais informações, consulte Abrir um ambiente no AWS Cloud9.

Etapa 1: Instalar as ferramentas

Nesta etapa, instale as seguintes ferramentas:

  • Apache HTTP Server, um host de servidor web.

  • PHP, uma linguagem de script que é especialmente adequada para o desenvolvimento na web e pode ser incorporada em HTML.

  • MySQL, um sistema de gerenciamento de banco de dados.

Conclua essa etapa iniciando o Apache HTTP Server, depois o MySQL.

  1. Garanta que as últimas atualizações de segurança e correções de bugs estão instaladas na instância. Para fazer isso, em uma sessão de terminal no IDE do AWS Cloud9, execute o comando yum update (para Amazon Linux) ou apt update (para Ubuntu Server). (Para iniciar uma nova sessão de terminal, na barra de menus, selecione Janela, Novo terminal.)

    Para Amazon Linux:

    sudo yum -y update

    Para Ubuntu Server:

    sudo apt -y update
  2. Verifique se o Apache HTTP Server já está instalado. Para fazer isso, execute o comando httpd -v (para Amazon Linux) ou apache2 -v (para Ubuntu Server).

    Se obtiver sucesso, a saída conterá o número da versão do Apache HTTP Server.

    Se você vir um erro, instale o Apache HTTP Server executando o comando install.

    Para Amazon Linux:

    sudo yum install -y httpd24

    Para Ubuntu Server:

    sudo apt install -y apache2
  3. Confirme se o PHP já está instalado executando o comando php -v.

    Se sim, a saída contém o número da versão PHP.

    Se você vir um erro, instale o PHP executando o comando install.

    Para Amazon Linux:

    sudo yum install -y php56

    Para Ubuntu Server:

    sudo apt install -y php libapache2-mod-php php-xml
  4. Confirme se o MySQL já está instalado executando o comando mysql --version.

    Se estiver, a saída conterá o número da versão do MySQL.

    Se você vir um erro, instale o MySQL executando o comando install.

    Para Amazon Linux:

    sudo yum install -y mysql-server

    Para Ubuntu Server:

    sudo apt install -y mysql-server
  5. Depois de instalar o Apache HTTP Server, PHP e MySQL, inicie o Apache HTTP Server e confirme se ele foi iniciado executando o comando a seguir.

    Para Amazon Linux (talvez seja necessário executar o comando duas vezes):

    sudo service httpd start && sudo service httpd status

    Para Ubuntu Server (para retornar ao prompt de comando, pressione q):

    sudo service apache2 start && sudo service apache2 status
  6. Inicie o MySQL e confirme que ele foi iniciado, executando o comando a seguir.

    Para Amazon Linux:

    sudo service mysqld start && sudo service mysqld status

    Para Ubuntu Server (para retornar ao prompt de comando, pressione q):

    sudo service mysql start && sudo service mysql status

Etapa 2: Configurar o MySQL

Nesta etapa, você configurará o MySQL para seguir as práticas recomendadas de segurança do MySQL. Essas práticas recomendadas de segurança incluem a definição de uma senha para contas raiz e a remoção de contas raiz que podem ser acessadas de fora do host local. Outras práticas recomendadas a serem observadas são remover usuários anônimos, remover o banco de dados de teste e remover privilégios que permitem que qualquer pessoa acesse bancos de dados com nomes que começam com test_.

Conclua esta etapa praticando a inicialização e a saída do cliente da linha de comando do MySQL.

  1. Implemente as práticas recomendadas de segurança do MySQL para a instalação do MySQL executando o seguinte comando em uma sessão de terminal no IDE do AWS Cloud9.

    sudo mysql_secure_installation
  2. Quando solicitado, responda às seguintes perguntas conforme especificado.

    Para Amazon Linux:

    1. Insira a senha atual para raiz (Enter para nenhuma) – Pressione Enter (quando não houver senha).

    2. Definir senha raiz – Digite Y e pressione Enter.

    3. Nova senha Digite uma senha e pressione Enter.

    4. Digite novamente a nova senha: digite a senha novamente e pressione Enter. (Certifique-se de armazenar a senha em um local seguro para uso posterior.)

    5. Remover usuários anônimos – Digite Y e pressione Enter.

    6. Desautorizar o login raiz remotamente – Digite Y e pressione Enter.

    7. Remover o banco de dados de teste e o acesso a ele – Digite Y e pressione Enter.

    8. Recarregar tabelas de privilégio agora – Digite Y e pressione Enter.

    Para Ubuntu Server:

    1. Deseja configurar o plug-in VALIDATE PASSWORD? Insira y e pressione Enter.

    2. Há três níveis de política de validação de senha: insira 0, 1 ou 2, e pressione Enter.

    3. Nova senha: insira uma senha e pressione Enter.

    4. Insira novamente a nova senha: insira a senha novamente e pressione Enter. Certifique-se de armazenar a senha em um local seguro para uso posterior.

    5. Deseja continuar com a senha fornecida? Insira y e pressione Enter.

    6. Remover usuários anônimos: insira y e pressione Enter.

    7. Desautorizar o login raiz remotamente: insira y e pressione Enter.

    8. Remover o banco de dados de teste e o acesso a ele: insira y e pressione Enter.

    9. Recarregar tabelas de privilégio agora: insira y e pressione Enter.

  3. Para interagir diretamente com o MySQL, inicie o cliente de linha de comando do MySQL como o usuário raiz executando o comando a seguir. Quando solicitado, digite a senha do usuário raiz definida anteriormente e pressione Enter. O prompt muda para mysql> enquanto você está no cliente da linha de comando do MySQL.

    sudo mysql -uroot -p
  4. Para sair do cliente da linha de comando do MySQL, execute o comando a seguir. O prompt muda de volta para $.

    exit;

Etapa 3: Configurar um site

Nesta etapa, configure a raiz do site padrão para o Apache HTTP Server com os proprietários recomendados e as permissões de acesso. Depois, crie uma página da web baseada em PHP dentro da raiz do site padrão.

Você pode então habilitar o tráfego da Web de entrada para visualizar essa página da Web, configurando o grupo de segurança no Amazon EC2 e a lista de controle de acesso à rede (ACL da rede) na Amazon Virtual Private Cloud (Amazon VPC) que estiver associada a esse ambiente EC2. Cada ambiente EC2 deve ser associado a um grupo de segurança no Amazon EC2 e a uma ACL da rede na Amazon VPC. No entanto, mesmo que a ACL de rede padrão em uma Conta da AWS permita todo o tráfego de entrada e saída para o ambiente, o grupo de segurança padrão permitirá apenas o tráfego de entrada usando SSH na porta 22. Para obter mais informações, consulte Configurações de VPC para ambientes de desenvolvimento AWS Cloud9.

Essa etapa será finalizada quando você conseguir visualizar a página da Web de fora do IDE do AWS Cloud9.

  1. Configure a raiz do site padrão para o Apache HTTP Server (/var/www/html) com os proprietários recomendados e as permissões de acesso. Para fazer isso, execute os seis comandos, um de cada vez e na seguinte ordem, em uma sessão de terminal no IDE do AWS Cloud9. Para entender o que cada comando faz, leia as informações após o caractere # depois de 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.

    Para 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. Crie uma página da web baseada em PHP chamada index.php na pasta raiz do site padrão para o Apache HTTP Server (que é /var/www/html) executando o comando a seguir.

    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

    O comando anterior para Amazon Linux também altera o proprietário do arquivo para ec2-user, altera o grupo do arquivo para web-content, e altera as permissões do arquivo para ler/gravar para o usuário e ler/executar para o grupo e outros.

    Para 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

    O comando anterior para Ubuntu Server também altera o proprietário do arquivo para ubuntu, altera o grupo do arquivo para web-content, e altera as permissões do arquivo para ler/gravar para o usuário e ler/executar para o grupo e outros.

    Se for bem-sucedido, os comandos anteriores criarão o arquivo index.php com o seguinte conteúdo.

    <?php phpinfo(); ?>
  3. Habilite o tráfego da web de entrada na porta 80 para visualizar a nova página da web configurando a ACL da rede na Amazon VPC e o Amazon EC2 do grupo de segurança associado a esse ambiente do EC2. Para fazer isso, execute os seguintes oito comandos, um de cada vez e na seguinte ordem. Para entender o que cada comando faz, leia as informações após o caractere # para cada comando.

    Importante

    A execução dos comandos a seguir desabilita o tráfego da Web de entrada na porta 80 para todos os ambientes EC2 e as instâncias do Amazon EC2 associados ao grupo de segurança e à ACL da rede para esse ambiente. Isso pode causar uma a ativação inesperada do tráfego da Web de entrada na porta 80 para ambientes EC2 e instâncias do Amazon EC2 além desta.

    nota

    Os seguintes comandos, do segundo ao quarto, habilitam o grupo de segurança para permitir o tráfego da web de entrada na porta 80. Se você tiver um grupo de segurança padrão, que só permite o tráfego de entrada SSH na porta 22, você deverá executar o primeiro comando seguido por esses comandos do segundo ao quarto. No entanto, se você tiver um grupo de segurança personalizado que já permite o tráfego da web de entrada na porta 80, poderá pular a execução desses comandos.

    Os seguintes comandos, do quinto ao oitavo, habilitam a ACL da rede para permitir o tráfego da Web de entrada na porta 80. Se você tiver uma Network ACL padrão, que já permite todo o tráfego de entrada em todas as portas, você poderá ignorar com segurança a execução desses comandos. No entanto, suponha que você tenha uma ACL de rede personalizada que não permite o tráfego da web de entrada na porta 80. Depois, execute o primeiro comando seguido da sequência do quinto ao oitavo comando.

    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. Obtenha o URL para o arquivo index.php na raiz do servidor da web. Para fazer isso, execute o comando a seguir e use uma nova guia do navegador da Web ou um navegador da Web separado do IDE do AWS Cloud9 para acessar o URL que é exibido. Se bem-sucedido, a página da web exibirá informações sobre o Apache HTTP Server, MySQL e outras configurações relacionadas.

    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.

Etapa 4: Limpar

Suponha que você queira continuar usando esse ambiente, mas queira desativar o tráfego de entrada da web pela porta 80. Execute os oito comandos a seguir, um de cada vez e na ordem em que estão, para excluir as regras de tráfego de entrada correspondentes que você definiu anteriormente no grupo de segurança e ACL da rede associados ao ambiente. Para entender o que cada comando faz, leia as informações após o caractere # para cada comando.

Importante

A execução dos comandos a seguir desabilita o tráfego da Web de entrada na porta 80 para todos os ambientes EC2 e as instâncias do Amazon EC2 associados ao grupo de segurança e à ACL da rede para esse ambiente. Isso pode causar uma desativação inesperada do tráfego da Web de entrada na porta 80 para ambientes EC2 e instâncias do Amazon EC2 além desta.

nota

A sequência do quinto ao oitavo comando a seguir remove as regras existentes para impedir que a ACL de rede permita o tráfego da web de entrada na porta 80. Se você tiver uma ACL de rede padrão que já permite todo o tráfego de entrada em todas as portas, poderá ignorar a execução desses comandos. No entanto, suponha que você tenha uma ACL de rede personalizada com regras existentes que permitem o tráfego da web de entrada pela porta 80 e deseje excluir essas regras. Você precisa executar o primeiro comando seguido da sequência do quinto ao oitavo comando.

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.

Quando terminar de usar este ambiente, exclua-o para evitar cobranças contínuas em sua Conta da AWS. Para obter instruções, consulte Excluir um ambiente no AWS Cloud9.