Aplicativo da web PHP em uma Pilha LAMP na VPC

Este tutorial pode incorrer em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.

Este tutorial orienta você na criação de um servidor virtual Ubuntu Linux com servidor da Web Apache, banco de dados MySQL e script PHP na IBM Cloud Na infraestrutura de nuvem privada virtual(VPC). Essa combinação de software, mais comumente chamada de pilha LAMP, é frequentemente usada para fornecer sites e aplicativos da Web. Usando o IBM Cloud VPC, você implementará rapidamente a sua pilha LAMP e, se desejado, incluirá a criação de log e o monitoramento. Para experimentar o servidor LAMP em ação, você também instalará e configurará o sistema de gerenciamento de conteúdo WordPress gratuito e de código aberto.

Objetivos

  • Provisionar uma instância de servidor virtual (VSI) em uma VPC.
  • Instalar os softwares Apache, MySQL e PHP mais recentes.
  • Hospedar um website ou um blog instalando e configurando o WordPress.
  • Configurar a criação de log e o monitoramento para detectar indisponibilidades e monitorar desempenho lento (opcional).
  • Redimensionar o VSI (opcional).

Diagrama de arquitetura*Diagrama de
do

  1. O usuário final acessa o servidor LAMP que está em execução em uma VPC usando um navegador da web.
  2. A VSI é configurada para usar dados de um volume de Block Storage criptografado (opcional).

Antes de Iniciar

Este tutorial requer:

  • Uma IBM Cloud conta faturável,
  • CLI do IBM Cloud,
    • Plug-in do IBM Cloud VPC (vpc-infrastructure),
  • terraform para usar Infraestrutura como código para provisionar recursos,
  • jq para consultar arquivos JSON,
  • git para clonar o repositório de código-fonte,

Você encontrará instruções para baixar e instalar essas ferramentas para o seu ambiente operacional no guia Getting started with solution tutorials. Para evitar a instalação dessas ferramentas, você pode usar o Cloud Shell.

Criar serviços

Nesta seção, você provisionará uma VPC, uma sub-rede, um grupo de segurança e uma instância de servidor virtual (VSI) usando a IBM Cloud Shell e a IBM Cloud CLI. As VSIs geralmente abordam picos em demanda após os quais podem ser suspensas ou desligadas para que o ambiente de nuvem se adéque perfeitamente às suas necessidades de infraestrutura.

Se você preferir usar um modelo Terraform para gerar esses recursos, será possível usar o modelo disponível aqui: https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp e seguir as instruções no README.md. Esse modelo também pode ser usado em Schematics.

  1. Enquanto estiver com login efetuado em seu IBM Cloud conta, ative o IBM Cloud Shell
  2. No shell, você é automaticamente conectado a uma das regiões IBM Cloud. É possível alternar para uma região diferente, se desejar, executando o seguinte comando:
    ibmcloud target -r <region-name> -g <resource-group>
    

Crie Chave(s) SSH

  1. Na VPC, em vez de uma senha, uma chave SSH é usada para acesso de administrador a uma VSI. Crie uma chave SSH executando o comando a seguir e aceite os padrões quando solicitado. Para obter mais informações sobre chaves SSH, consulte os docs Chaves SSH.

    ssh-keygen -t rsa -b 4096
    

    O comando acima gera dois arquivos dentro do diretório ~/.ssh: id_rsa e id_rsa.pub. Sua sessão do Cloud Shell é de curta duração; quaisquer arquivos que você criar dentro do IBM Cloud Shell deverão ser salvos em uma localização segura para reutilização futura. Há uma opção de download e upload de arquivo no Cloud Shell na seção direita superior da tela.

    Se você tiver uma chave SSH existente que deseja reutilizar, faça upload dela em sua sessão do Cloud Shell como alternativa.

  2. Inclua a chave SSH em sua conta.

    SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
    

Criar VPC, Sub-rede(s) e Grupo(s) de segurança

  1. Crie uma VPC. Para obter mais informações, consulte os docs para criar um VPC no console ou na CLI.

    VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
    
  2. Crie a sub-rede para a sua VPC.

    SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
    
  3. Crie o grupo de segurança para a sua VPC.

    SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
    
  4. Inclua uma regra para limitar a entrada para a porta SSH 22.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
    

    Você pode restringir o acesso à porta SSH a um subconjunto de endereços; use --remote <endereço IP ou CIDR> no comando acima para limitar quem pode acessar esse servidor, ou seja ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json

  5. Inclua uma regra para limitar a entrada para a porta HTTP 80.

    ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
    

    Você também pode restringir o acesso à porta HTTP a um subconjunto de endereços; use --remote <endereço IP ou CIDR> no comando acima para limitar quem pode acessar esse servidor, ou seja ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json

  6. Inclua uma regra para permitir a saída para todos. Isso é necessário para instalar o software, ele pode ser desativado ou removido posteriormente.

    ibmcloud is security-group-rule-add $SG_ID outbound all --json
    

Criar Instância de servidor virtual

  1. O IBM Cloud periodicamente atualiza a imagem do Ubuntu com o software mais recente; obtenha o ID da imagem para o Ubuntu 20.x mais recente, executando o seguinte comando.
    IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
    
  2. Criar Instância de servidor virtual
    NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
    
  3. Reservar um IP flutuante
    FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
    
  4. Conecte-se ao servidor com SSH. Observe que pode levar um minuto para que o servidor recém-criado seja acessível por meio de SSH.
    ssh root@$FLOATING_IP
    
    Será necessário saber o IP flutuante para acessar o servidor virtual por meio do seu navegador. Como ele foi capturado em uma variável shell anteriormente, será possível executar o comando a seguir para obter o endereço IP flutuante echo $FLOATING_IP ou executando ibmcloud is floating-ips --json e procurando o nome usado para criar o IP flutuante fip-lamp-1 no resultado. Você também pode encontrar o endereço IP flutuante do servidor no console da Web.

Instalar o Apache, o MySQL e o PHP

Nesta seção, você executará comandos para atualizar as origens do pacote Ubuntu e instalar o Apache, o MySQL e o PHP com a versão mais recente.

Quando o servidor é acionado pela primeira vez, é possível que ele já esteja executando atualizações do sistema e bloqueie você para que não execute os comandos abaixo, é possível verificar o status das atualizações do sistema executando ps aux | grep -i apt e esperar que o sistema automatizado atualize a tarefa para concluir ou elimine a tarefa.

  1. Desativar o modo interativo durante atualizações
    export DEBIAN_FRONTEND=noninteractive
    
  2. Atualizar pacotes
    apt update
    
  3. Instalar o Apache
    apt install apache2 -y
    
  4. Instalar o MySQL
    apt install mysql-server -y
    
  5. Instalar o PHP
    apt install php libapache2-mod-php php-mysql php-common php-cli -y
    

Verificar a instalação e a configuração

Nesta seção, você verificará se o Apache, o MySQL e o PHP estão atualizados e em execução na imagem do Ubuntu. Você também implementará as configurações de segurança recomendadas para MySQL.

  1. Verifique o Ubuntu abrindo o endereço IP flutuante no navegador. Você deve ver a página de boas-vindas do Ubuntu.
    Verificar Ubuntu
    Verificar Ubuntu
  2. Revise as versões do Apache, MySQL e PHP instaladas usando os comandos a seguir.
    apache2 -v
    
    mysql -V
    
    php -v
    
  3. Abra um prompt mysql.
    mysql
    
  4. Execute os seguintes comandos substituindo sua senha por yourPassword.
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
    
  5. Saia do prompt mysql.
    exit
    
  6. Execute o script a seguir para proteger o banco de dados MySQL. Escolha as opções que melhor se ajustam às suas preferências ou simplesmente pressione a tecla ENTER para percorrer rapidamente a configuração.
    mysql_secure_installation
    
  7. Além disso, você pode criar rapidamente uma página de informações em PHP com o seguinte comando.
    echo "<?php phpinfo(); ?>" > /var/www/html/info.php
    
  8. Visualize a página de informações do PHP que você criou: abra um navegador e acesse http://{FloatingIPAddress}/info.php. Substitua o endereço IP flutuante da sua VSI. Ele será semelhante à imagem a seguir.

Informações PHP
Informações PHP

Instalar e configurar o WordPress

Experimente sua pilha LAMP instalando um aplicativo. As etapas a seguir instalam a plataforma WordPress de software livre, que é frequentemente usada para criar websites e blogs. Para obter mais informações e configurações para a instalação de produção, consulte a documentação WordPress.

  1. Execute o comando a seguir para instalar o WordPress.
    apt install wordpress -y
    
  2. Configure o WordPress para usar o MySQL e o PHP. Execute o comando a seguir para abrir um editor de texto e criar o arquivo /etc/wordpress/config-localhost.php.
    sensible-editor /etc/wordpress/config-localhost.php
    
  3. Copie as linhas a seguir para o arquivo substituindo yourPassword por sua senha do banco de dados MySQL e deixando os outros valores sem mudança. Salve e saia do arquivo.
    <?php
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'wordpress');
    define('DB_PASSWORD', 'yourPassword');
    define('DB_HOST', 'localhost');
    define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
    ?>
    
  4. Abra um prompt mysql e forneça sua senha.
    mysql -u root -p
    
  5. Execute os seguintes comandos, substituindo a senha do banco de dados por yourPassword e deixando os outros valores inalterados.
    CREATE DATABASE wordpress;
    
    CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
    
    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
    
    FLUSH PRIVILEGES;
    
  6. Saia do prompt mysql.
    exit
    
  7. Mova a instalação do WordPress para a raiz do documento do servidor da web.
    ln -s /usr/share/wordpress /var/www/html/wordpress
    
    mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
    
  8. Conclua a configuração do WordPress e publique na plataforma. Abra um navegador e acesse http://{FloatingIPAddress}/wordpress/wp-admin. Substitua o endereço IP flutuante de sua instância. Ele deve ser semelhante à imagem a seguir.
    WordPress em execução
    Site WordPress em execução

Configurar domínio

Para usar um nome de domínio existente com o seu servidor LAMP, atualize o registro A para apontar para o endereço IP flutuante da VSI.

Monitoramento do servidor e gerenciamento de log

Para assegurar a disponibilidade do servidor e a melhor experiência do usuário, o monitoramento deve ser ativado em cada servidor de produção. Várias opções estão disponíveis para monitorar sua VSI e capturar logs em uma localização central para análise.

Monitoramento do servidor

É possível monitorar o uso de CPU, volume, memória e rede de suas instâncias de VSI após a configuração de uma instância do serviço IBM Cloud Monitoring. Para configurar o serviço de monitoramento, siga as etapas descritas na documentação Monitorando um host Linux.

Criação de log do servidor

Você pode criar uma instância IBM Cloud Logs para gerenciar os logs do sistema e do aplicativo no IBM Cloud.

O IBM Cloud Logs oferece aos administradores, equipes do DevOps e desenvolvedores recursos avançados para filtrar, procurar e usar tail de dados de log, definir alertas e designar visualizações customizadas para monitorar logs do aplicativo e do sistema

Siga as instruções descritas na seção Gerenciando o agente de registro para Linux

Configurar um volume de dados criptografado Bring-Your-Own-Key (BYOK) (opcional)

A VSI foi criada com um volume de Inicialização criptografado gerenciado pelo provedor de 100 GB. Antes de excluí-la, é necessário mover quaisquer dados que você deseja proteger. Uma alternativa é criar um volume de Dados que possa ser persistido mesmo se a VSI for excluída e anexada a uma nova VSI. Também é possível criptografar o volume com sua própria chave. Se esse for o seu resultado desejado, siga as etapas descritas abaixo para criar um volume de dados e anexe-o à sua VSI.

  1. Crie um arquivo de configuração de volume de dados.

    VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
    

    Na VPC, você também tem a opção de usar uma chave de criptografia gerenciada pelo cliente. Para armazenar suas próprias chaves de criptografia, você pode usar um dos dois serviços disponíveis: (1) Um serviço FIPS 140-2 Nível 3 IBM Key Protect. Consulte o tópico Provisionando o serviço IBM Key Protect na documentação. (2) Um serviço de Nível 4 do FIPS 140-2 IBM Cloud Hyper Protect Crypto Services, consulte o tópico Introdução ao IBM Cloud Hyper Protect Crypto Services na documentação. Ao criar o volume, é possível especificar o parâmetro --encryption-key com o CRN para a chave de criptografia que deseja usar.

  2. Capture o ID do VSI criado anteriormente, listando todas as instâncias e filtragem com base no nome da instância:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  3. Anexe o volume de dados à sua VSI existente.

    ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
    
  4. Conecte-se ao servidor com SSH.

    ssh root@$FLOATING_IP
    
  5. Configure o volume de dados recém-criado no VSI, execute cada linha abaixo uma de cada vez.

    new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//')
    parted $new_bsv mklabel gpt
    parted -a opt $new_bsv mkpart primary ext4 0% 100%
    new_part=${new_bsv}1
    mkfs.ext4 -L lamp-data ${new_part}
    mkdir /data
    mount ${new_part} /data
    echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab
    mount -a
    

Configure o Apache para usar o novo sistema de arquivos /data

  1. Pare o serviço do Apache
    service apache2 stop
    
  2. Mova o diretório do Apache de /var para /data
    mv /var/www /data/
    
  3. Crie um link para a nova localização
    ln -s /data/www /var/www
    
  4. Inicie o serviço do Apache
    service apache2 start
    

Configure o MySQL para usar o novo sistema de arquivos /data

  1. Pare o serviço do MySQL
    service mysql stop
    
  2. Mova o diretório MySQL de /var para /data
    mkdir /data/lib
    
    mv /var/lib/mysql /data/lib/
    
  3. Crie um link para a nova localização
    ln -s /data/lib/mysql /var/lib/mysql
    
  4. Adicione um alias do novo local ao AppArmor ; caso contrário, AppArmor bloqueará o acesso.
    echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
    
  5. Reinicie o serviço do AppArmor
    systemctl restart apparmor
    
  6. Inicie o serviço do MySQL
    service mysql start
    
  7. Abra um navegador e acesse http://{FloatingIPAddress}/wordpress. Substitua o endereço IP flutuante de sua instância. Você deve conseguir acessar sua página do WordPress assim como fazia antes de incluir o novo Volume de dados.

Redimensionar VSI (opcional)

O VSI foi criado usando um dos menores perfis disponíveis no VPC, ou seja, 2 vCPU e 4 GiB de RAM. É possível com base em seus requisitos de uso aumentar, ou diminuir, a quantidade de vCPU e RAM disponível, consulte Redimensionando uma instância do servidor virtual.

  1. Capture o ID do VSI criado anteriormente, listando todas as instâncias e filtragem com base no nome da instância:

    VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
    
  2. Pare a instância do .

    ibmcloud is instance-stop $VSI_ID
    
  3. Redimensione a instância.

    ibmcloud is instance-update $VSI_ID --profile cx2-4x8
    

    É possível obter uma lista de perfis alternativos, emitindo o comando ibmcloud is instance-profiles a seguir, observe, no entanto, as restrições de redimensionamento com base nos perfis atuais/de destino no tópico Redimensionando uma instância do servidor virtual.

  4. Inicie a instância do .

    ibmcloud is instance-start $VSI_ID
    
  5. Pode ser necessário esperar alguns minutos, já que o VSI é colocado em um host apropriado e iniciado. Abra um navegador e acesse http://{FloatingIPAddress}/wordpress. Substitua o endereço IP flutuante de sua instância. Você deve conseguir acessar sua página do WordPress assim como fazia antes do redimensionamento.

Remover recursos

  1. No console da VPC, clique em IPs flutuantes, em seguida, no endereço IP para suas VSIs, em seguida, no menu Ação, selecione Liberação. Confirme se você deseja liberar o endereço IP.
  2. Em seguida, alterne para Instâncias de servidor virtual, Excluir sua instância.
  3. Quando os VSIs forem desligados, alterne para Sub-redes. Exclua sua sub-rede.
  4. Depois que as sub-redes tiverem sido excluídas, alterne para a guia VPC e exclua seu VPC.
  5. Se você tiver criado o volume de dados opcional e ele não for mais necessário, alterne para a guia Bloquear volumes de armazenamento e exclua o volume.

Ao usar o console, pode ser necessário atualizar seu navegador para ver informações de status atualizadas depois de excluir um recurso.

Dependendo do recurso, ele não é excluído imediatamente, mas retido (por padrão por 7 dias). É possível recuperar o recurso excluindo-o permanentemente ou restaurando-o dentro do período de retenção. Consulte este documento sobre como usar a recuperação de recurso.