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).
- O usuário final acessa o servidor LAMP que está em execução em uma VPC usando um navegador da web.
- 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),
- Plug-in do IBM Cloud VPC (
terraformpara usar Infraestrutura como código para provisionar recursos,jqpara consultar arquivos JSON,gitpara 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.
- Enquanto estiver com login efetuado em seu IBM Cloud conta, ative o IBM Cloud Shell
- 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
-
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 4096O comando acima gera dois arquivos dentro do diretório
~/.ssh:id_rsaeid_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.
-
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
-
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') -
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') -
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') -
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 --jsonVocê 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 -
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 --jsonVocê 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 -
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
- 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') - 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') - Reservar um IP flutuante
FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address') - 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.
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 flutuantessh root@$FLOATING_IPecho $FLOATING_IPou executandoibmcloud is floating-ips --jsone procurando o nome usado para criar o IP flutuantefip-lamp-1no 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.
- Desativar o modo interativo durante atualizações
export DEBIAN_FRONTEND=noninteractive - Atualizar pacotes
apt update - Instalar o Apache
apt install apache2 -y - Instalar o MySQL
apt install mysql-server -y - 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.
- Verifique o Ubuntu abrindo o endereço IP flutuante no navegador. Você deve ver a página de boas-vindas do Ubuntu.
Verificar Ubuntu - Revise as versões do Apache, MySQL e PHP instaladas usando os comandos a seguir.
apache2 -vmysql -Vphp -v - Abra um prompt
mysql.mysql - Execute os seguintes comandos substituindo sua senha por yourPassword.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword'; - Saia do prompt
mysql.exit - 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 - 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 - 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.
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.
- Execute o comando a seguir para instalar o WordPress.
apt install wordpress -y - 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 - 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'); ?> - Abra um prompt
mysqle forneça sua senha.mysql -u root -p - 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; - Saia do prompt
mysql.exit - Mova a instalação do WordPress para a raiz do documento do servidor da web.
ln -s /usr/share/wordpress /var/www/html/wordpressmv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php - 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.
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.
-
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-keycom o CRN para a chave de criptografia que deseja usar. -
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') -
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 -
Conecte-se ao servidor com SSH.
ssh root@$FLOATING_IP -
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
- Pare o serviço do Apache
service apache2 stop - Mova o diretório do Apache de /var para /data
mv /var/www /data/ - Crie um link para a nova localização
ln -s /data/www /var/www - Inicie o serviço do Apache
service apache2 start
Configure o MySQL para usar o novo sistema de arquivos /data
- Pare o serviço do MySQL
service mysql stop - Mova o diretório MySQL de /var para /data
mkdir /data/libmv /var/lib/mysql /data/lib/ - Crie um link para a nova localização
ln -s /data/lib/mysql /var/lib/mysql - 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 - Reinicie o serviço do AppArmor
systemctl restart apparmor - Inicie o serviço do MySQL
service mysql start - 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.
-
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') -
Pare a instância do .
ibmcloud is instance-stop $VSI_ID -
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-profilesa 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. -
Inicie a instância do .
ibmcloud is instance-start $VSI_ID -
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
- 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.
- Em seguida, alterne para Instâncias de servidor virtual, Excluir sua instância.
- Quando os VSIs forem desligados, alterne para Sub-redes. Exclua sua sub-rede.
- Depois que as sub-redes tiverem sido excluídas, alterne para a guia VPC e exclua seu VPC.
- 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.