Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Criar Pilha LAMP Multi-VM na Oracle Virtualization
Introdução
O núcleo da solução Oracle Virtualization é o host do Oracle Linux KVM. Além desse hipervisor, você pode executar muitas máquinas virtuais - cada uma executando um dos sistemas operacionais suportados, incluindo Oracle Linux, RHEL, Windows, Ubuntu, Solaris e outros. Essa solução de virtualização é gerenciada por meio do Oracle Linux Virtualization Manager, que oferece uma única interface para manter as coisas organizadas. Além do gerenciamento de vários hosts/multi-VM, o Oracle Linux Virtualization Manager habilita os principais recursos da solução Oracle Virtualization. Por exemplo, o Oracle Linux Virtualization Manager fornece alta disponibilidade automática com failover de VM, migração ao vivo de VMs entre hosts sem tempo de inatividade, controle de acesso baseado em atribuição e log de auditoria, além de workflows de backup e recuperação de desastres simplificados. Esses recursos empresariais transformam o Oracle Linux KVM de hosts individuais em uma verdadeira plataforma de virtualização empresarial.
Neste tutorial, exploraremos a tecnologia principal de hipervisor que potencializa a Oracle Virtualization. O KVM (Kernel-based Virtual Machine) é um hypervisor de código-fonte aberto tipo 1 (bare-metal). Essa funcionalidade permite que um sistema host, como o Oracle Linux, hospede várias máquinas virtuais (VMs) ou convidados ao executar em hardware suportado.
Este tutorial implantará o Oracle Linux KVM para criar máquinas virtuais configuradas com aplicativos de pilha LAMP, permitindo que você hospede ambientes completos de desenvolvimento web com componentes Linux, Apache, MySQL e PHP em várias VMs.
Importante: Os dois códigos de aplicativo neste laboratório são apenas para fins educacionais. Eles são projetados para ajudar os desenvolvedores a aprender e praticar habilidades de desenvolvimento de aplicativos com a pilha LAMP. Esses códigos não se destinam a ambientes de produção e não devem ser usados como estão em uma configuração ativa.
Objetivos
- Configurar OCI, Luna ou servidor On-premise
- Implantar o Oracle Linux KVM
- Criar Máquina Virtual usando Imagens do Oracle Cloud
- Instalar o servidor MySQL
- Instalar o servidor Web com Apache e PHP
Pré-requisitos
Qualquer sistema Oracle Linux com as seguintes configurações:
- um usuário não raiz com permissões sudo
Etapa 1: Implantar o Oracle Linux
Observação: Se estiver em execução na sua própria tenancy, leia o projeto linux-virt-labs GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.
-
Abra um terminal no Luna Desktop.
-
Clone o projeto
linux-virt-labsGitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git -
Altere para o diretório de trabalho.
cd linux-virt-labs/ol -
Instale as coleções necessárias.
ansible-galaxy collection install -r requirements.yml -
Implante o ambiente de laboratório.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e instance_ocpus="4" -e instance_memory="64"O ambiente de laboratório gratuito requer a variável extra
local_python_interpreter, que defineansible_python_interpreterpara reproduções em execução no localhost. Essa variável é necessária porque o ambiente instala o pacote RPM do Oracle Cloud Infrastructure SDK para Python, localizado nos módulos python3.6.A forma de implantação padrão usa a CPU AMD e o Oracle Linux 8. Para usar uma CPU Intel, adicione
-e instance_shape="VM.Standard3.Flex"Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Neste estágio do playbook, a instalação do Oracle Linux está concluída e as instâncias estão prontas. Anote o jogo anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta e quaisquer outras informações de implantação necessárias durante a execução do laboratório.
Etapa 2: Validar Ambiente Suporta Virtualização
-
Abra um novo terminal no Luna Desktop e conecte-se via SSH à instância ol-node-01.
ssh opc@<YOUR ol-node-01 PUBLIC_IP> -
Execute o comando a seguir para determinar seu tipo de CPU.
grep -e 'vendor_id' /proc/cpuinfo | uniqO
vendor_idreportaAuthenticAMDpara uma CPU AMD ouGenuinIntelpara uma CPU Intel. -
Verifique se o hardware suporta virtualização.
Execute o comando que corresponde ao seu tipo de CPU.
- Verifique se existem extensões de CPU AMD V.
grep -w -o 'svm' /proc/cpuinfo | uniq- Verifique se existem extensões de CPU Intel VT.
grep -w -o 'vmx' /proc/cpuinfo | uniqA existência de um destes sinalizadores na saída do comando indica que este sistema suporta virtualização. Você também pode usar o comando
lscpue procurar a entradaVirtualizationna saída. -
Verifique os módulos KVM carregados.
lsmod | grep kvmA saída exibe os módulos do kernel KVM após a instalação de pacotes de virtualização e o início do serviço libvirtd. Em sistemas de nuvem como o OCI, esses módulos são carregados automaticamente quando o libvirtd é iniciado, não durante a instalação do pacote. A sequência de carregamento é: instalar pacotes → iniciar o serviço libvirtd → módulos aparecem na saída lsmod.
Etapa 3: Instalar e Iniciar o KVM
-
Verifique a versão em execução do Oracle Linux.
hostnamectl | grep 'Operating System' -
Instale os pacotes de software associados para a virtualização do Oracle Linux.
Esses comandos instalam os pacotes de virtualização, que incluem libvirt, e outras dependências no Oracle Linux. O pacote libvirt fornece uma biblioteca de software e uma API para gerenciar máquinas virtuais KVM e inclui o daemon libvirtd que é executado em segundo plano para lidar com o gerenciamento real da VM.
sudo dnf module install -y virt -
Instale o
virt-install- ferramenta para criar e configurar máquinas virtuais (VMs) usando o hipervisor KVM (Máquina Virtual baseada em kernel).sudo dnf install -y virt-install -
Validar se a máquina host está pronta e configurada para executar VMs libvirt.
virt-host-validateSe todas as verificações forem aprovadas, o sistema estará preparado para a criação de VMs. Se alguma verificação falhar, siga as instruções para corrigir o problema. Se qualquer verificação retornar o valor de
WARN, considere seguir as instruções para melhorar os recursos de virtualização. -
Inicie os serviços Systemd, permitindo que eles sejam iniciados automaticamente em cada inicialização.
sudo systemctl enable --now libvirtd.service -
Verifique o status dos serviços para confirmar que eles estão ativos e em execução.
sudo systemctl status libvirtd.serviceA saída mostra o serviço como ativado e em execução. Se necessário, insira a letra 'q' para sair do modo de saída
Etapa 4: Criar duas Máquinas Virtuais usando Imagens do Oracle Cloud
-
Altere para o local de armazenamento de imagens do KVM.
cd /var/lib/libvirt/images -
Faça download do modelo de VM do Oracle Linux.
sudo curl -O https://yum.oracle.com/templates/OracleLinux/OL8/u10/x86_64/OL8U10_x86_64-kvm-b237.qcow2Criar VM-01 (Banco de Dados)
-
Criar um arquivo de metadados.
cat << 'EOF' | sudo tee ~/meta-data > /dev/null instance-id: iid-local01 local-hostname: vm-01 EOF -
Criar um arquivo de dados do usuário.
cat << 'EOF' | sudo tee ~/user-data > /dev/null #cloud-config system_info: default_user: name: opc ssh_authorized_keys: - <paste_public_key_here> EOF -
Gerar um par de chaves SSH para conexão segura com a VM
ssh-keygen -t rsa -b 4096Clique em
Enterpara aceitar cada um dos padrões. O comando grava o par de chaves no diretório.sshno home do usuário. - Extrair a chave SSH pública gerada
SSHKEY=$(cat ~/.ssh/id_rsa.pub) - Atualizar o arquivo de dados do usuário com a chave SSH pública gerada
sed -i "s|<paste_public_key_here>|${SSHKEY}|g" ~/user-data - Gerar uma imagem ISO contendo os arquivos de metadados e de dados do usuário
sudo genisoimage -output /var/lib/libvirt/images/vm-01.iso -volid cidata -joliet -rock ~/user-data ~/meta-data - Localize a variante do SO que corresponde à imagem baixada
osinfo-query os | grep ol8 - Copiar a imagem do Oracle Linux para uma nova imagem de disco para vm-01
sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-01.qcow - Criar uma nova máquina virtual chamada vm-01 com recursos e configuração especificados
sudo virt-install --name vm-01 \ --memory 2048 \ --vcpus 2 \ --disk /var/lib/libvirt/images/vm-01.qcow,device=disk,bus=virtio \ --disk /var/lib/libvirt/images/vm-01.iso,device=cdrom \ --os-type linux --os-variant ol8.10 \ --virt-type kvm --graphics none \ --network network=default,model=virtio \ --noautoconsole \ --import - Listar todas as máquinas virtuais em execução
sudo virsh list -
Recupere o endereço IP da máquina virtual
vm-01.sudo virsh net-dhcp-leases --network default -
Verifique se a máquina virtual funciona conectando-se ao
ssh.ssh opc@<ip_address_of_vm-01> -
Obtenha detalhes sobre a máquina virtual executando o
hostnamectl.hostnamectl -
Saia do servidor vm-01 para continuar para a próxima etapa
exitVocê pode verificar a versão e obter detalhes adicionais sobre o sistema operacional na máquina virtual executando o
hostnamectl.Criar VM-02 (Servidor Web)
-
Criar um arquivo de metadados para vm-02
cat << 'EOF' | sudo tee ~/meta-data > /dev/null instance-id: iid-local02 local-hostname: vm-02 EOF - Gerar uma imagem ISO para vm-02
sudo genisoimage -output /var/lib/libvirt/images/vm-02.iso -volid cidata -joliet -rock ~/user-data ~/meta-data - Copiar a imagem do Oracle Linux para uma nova imagem de disco para vm-02
sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-02.qcow - Criar uma nova máquina virtual chamada vm-02 com recursos e configuração especificados
sudo virt-install --name vm-02 \ --memory 2048 \ --vcpus 2 \ --disk /var/lib/libvirt/images/vm-02.qcow,device=disk,bus=virtio \ --disk /var/lib/libvirt/images/vm-02.iso,device=cdrom \ --os-type linux --os-variant ol8.10 \ --virt-type kvm --graphics none \ --network network=default,model=virtio \ --noautoconsole \ --import - Listar todas as máquinas virtuais em execução
sudo virsh list -
Recupere o endereço IP da máquina virtual
vm-02.sudo virsh net-dhcp-leases --network default -
Verifique se a máquina virtual funciona conectando-se ao
ssh.ssh opc@<ip_address_of_vm-02> -
Obtenha detalhes sobre a máquina virtual executando o
hostnamectl.hostnamectl -
Saia do servidor vm-02 para continuar para a próxima etapa
exit -
Você pode verificar a versão e obter detalhes adicionais sobre o sistema operacional na máquina virtual executando o
hostnamectl.hostnamectlExemplo de Saída:
[oracle@ol-node01 images]$ ssh opc@192.168.122.46 The authenticity of host '192.168.122.46 (192.168.122.46)' can't be established. ECDSA key fingerprint is SHA256:xcuVfQdoFDCC72i7plD0OfqDTSBG6QWhOm5ti4HIKEs. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.122.46' (ECDSA) to the list of known hosts. [opc@vm-01 ~]$ hostnamectl Static hostname: vm-01 Icon name: computer-vm Chassis: vm Machine ID: 30c9345b511448b681aafb3371de9792 Boot ID: c2d5586b094f4d299a4ba6c05086d004 Virtualization: kvm Operating System: Oracle Linux Server 8.10 CPE OS Name: cpe:/o:oracle:linux:8:10:server Kernel: Linux 5.15.0-206.153.7.1.el8uek.x86_64 Architecture: x86-64 - Extraia o endereço IP de vm-01 e salve-o na variável VM01_IP
VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - Extraia o endereço IP de vm-02 e salve-o na variável VM02_IP
VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - Certifique-se de que o endereço IP das VMs seja salvo corretamente:
echo "VM-01 (Web): $VM01_IP"echo "VM-02 (Web): $VM02_IP" - Testar o comando SSH para as VMs
ssh -o ConnectTimeout=10 opc@$VM01_IP "echo 'VM-01 OK'"ssh -o ConnectTimeout=10 opc@$VM02_IP "echo 'VM-02 OK'"
Etapa 5: Configurar MySQL no VM-01
Instalar MySQL
- No ol-node-01, a instância SSH estabelece uma conexão SSH com VM-01
ssh opc@$VM01_IP - Fazer download da configuração do repositório MySQL
sudo yum -y install https://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm - Desative o módulo MySQL padrão para evitar conflitos
sudo yum -y module disable mysql - Instalar o servidor e o cliente MySQL
sudo yum install -y mysql mysql-server - Iniciar serviço MySQL
sudo systemctl start mysqld - Ative o serviço MySQL para iniciar na inicialização
sudo systemctl enable mysqld - Permitir tráfego de entrada MySQL por meio do firewall
sudo firewall-cmd --permanent --add-service=mysql - Recarregue a configuração do firewall para aplicar alterações
sudo firewall-cmd --reloadConfigurar MySQL
- Extrair senha raiz temporária do log MySQL
TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}') - Faça login no MySQL com a senha raiz temporária
mysql -uroot -p$TEMP_PASS --connect-expired-password - Altere a senha raiz para um valor seguro
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Welcome#123'; - Criar usuário 'admin' com uma senha segura
CREATE USER 'admin'@'%' IDENTIFIED BY 'Welcome#123'; - Conceder todos os privilégios ao usuário 'admin'
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; - Crie um usuário 'empuser' com uma senha segura
CREATE USER 'empuser'@'%' IDENTIFIED BY 'Welcome#123'; - Conceder todos os privilégios a 'empuser'
GRANT ALL PRIVILEGES ON *.* TO 'empuser'@'%' WITH GRANT OPTION; - Recarregar tabelas de privilégios para aplicar alterações
FLUSH PRIVILEGES; - Sair do shell MySQL
\q - Sair da sessão SSH de VM-01
exit
Etapa 6: Configurar o Apache/PHP na VM-02
- No ol-node-01, a instância SSH estabelece uma conexão SSH com VM-02
ssh opc@$VM02_IP - Instalar o servidor Apache HTTP
sudo yum install -y httpd - Instalar o PHP 8.2 e suas dependências
sudo dnf install -y @php:8.2 - Instalar extensões PHP MySQL e JSON
sudo yum install -y php-mysqlnd php-json - Ativar e iniciar o servidor Apache HTTP
sudo systemctl enable --now httpd - Permitir tráfego HTTP de entrada na porta 80
sudo firewall-cmd --permanent --add-port=80/tcp - Recarregue a configuração do firewall para aplicar alterações
sudo firewall-cmd --reload - Permitir que o Apache se conecte a recursos de rede
sudo setsebool -P httpd_can_network_connect 1 - Sair da sessão SSH de VM-02
exit
Etapa 7: Testar o Apache
- Exiba o endereço IP do YOUR VM_02 IP VM-02:
echo "VM-02 (Web): $VM02_IP" -
Abra um novo terminal no Luna Desktop e crie um túnel SSH para acessar o servidor Web VM-02 da máquina local
… certifique-se de primeiro substituir **
** e ** ** ssh -L 8081:<YOUR VM_02 IP>:80 opc@<YOUR ol-node-01 PUBLIC_IP> - Use um navegador do Luna ou de um ambiente on-premises para testar o Apache acessando o servidor Web por meio do túnel SSH
http://localhost:8081Importante: Deixe o túnel SSH e o Browser abertos para uso posterior
Etapa 8: Criar Aplicativo de Teste
-
Retornar à sua instância ssh opc@ol-node-01
- Recuperar endereço IP de VM-01 de leasings de DHCP
VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - Recuperar endereço IP de VM-02 de leasings de DHCP
VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - No ol-node-01, a instância SSH estabelece uma conexão SSH com VM-02
ssh opc@$VM02_IP - Criar uma página de informações PHP para exibir a configuração PHP
sudo tee /var/www/html/info.php > /dev/null << 'EOF' <?php phpinfo(); ?> EOF -
Criar aplicativo de teste de conexão de banco de dados
sudo tee /var/www/html/dbtest.php > /dev/null << 'EOF' <?php echo "<h1>Multi-VM LAMP Stack Test</h1>"; // Database connection details define('DB_SERVER', '$VM01_IP'); define('DB_USERNAME', 'admin'); define('DB_PASSWORD', 'Welcome#123'); define('DB_NAME', 'mysql'); echo "<p>Testing connection to MySQL at: " . DB_SERVER . "</p>"; // Test network connectivity $fp = @fsockopen(DB_SERVER, 3306, $errno, $errstr, 5); if (!$fp) { echo "<p style='color: red;'>ERROR: Cannot reach MySQL server</p>"; echo "<p>Error: $errstr ($errno)</p>"; } else { echo "<p style='color: green;'>✓ Network connection successful</p>"; fclose($fp); // Test MySQL connection $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); if($link === false){ echo "<p style='color: red;'>ERROR: Could not connect to MySQL</p>"; echo "<p>Error: " . mysqli_connect_error() . "</p>"; } else { echo "<p style='color: green;'>✓ Successfully Connected to MySQL!</p>"; echo "<p>MySQL Version: " . mysqli_get_server_info($link) . "</p>"; echo "<p>Host Info: " . mysqli_get_host_info($link) . "</p>"; mysqli_close($link); } } ?> EOF - Definir permissões de arquivo de aplicativo
sudo chown apache:apache /var/www/html/*.php - Atualize a linha define('DB_SERVER', '$VM01_IP'); alterando o valor de $VM01_IP com o valor de endereço IP vm-01 salvo
sudo vi /var/www/html/dbtest.phpExemplo de Saída:
``texto … Código antes de definir('DB_SERVER', '$VM01_IP'); … Código depois de definir('DB_SERVER', '192.168.122.???');
-
Sair de VM-02
exit
Etapa 9: Acessar seu aplicativo de Teste do Servidor Web e do Banco de Dados
- Se o túnel SSH estiver fechado, crie para o teste básico
ssh -L 8081:$VM02_IP:80 opc@<YOUR ol-node-01 PUBLIC_IP> - Teste básico de LAMP Navegue até:
http://localhost:8081/info.php - Demonstração de teste Básico do Banco de Dados Navegue até:
http://localhost:8081/dbtest.php
Resultados Esperados:
-
Teste básico: Mensagem verde "Conectado com sucesso ao MySQL!"
Etapa 10: Criar e Carregar Banco de Dados do Funcionário
-
Você deve estar na sua instância ssh opc@ol-node-01
- Recuperar endereço IP de VM-01 de leasings de DHCP
VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - Recuperar endereço IP de VM-02 de leasings de DHCP
VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1) - Na instância SSH opc@ol-node-01, estabeleça uma conexão SSH com VM-01
ssh opc@$VM01_IP - Alterar para pasta /tmp
cd /tmp - Faça download do banco de dados de amostra de funcionário MySQL
sudo curl -L -o employees_db_full.zip "https://objectstorage.us-ashburn-1.oraclecloud.com/p/5UYZYk1vh241OqeHp_J0xnzBpzUOxZtTgaqCH16OP7HpOjC71W207gAY9EY1rW2U/n/idazzjlcjqzj/b/mysql-ee-downloads/o/employees_db_full.zip" - Instalar ferramentas de compactação
sudo dnf install -y unzip - Extrair o banco de dados
sudo unzip employees_db_full.zipcd employees_db_full - Carregar o banco de dados
mysql -u admin -pWelcome#123 < employee.sql - Verificar banco de dados carregado
mysql -u admin -pWelcome#123 -e "USE employee; SHOW TABLES; SELECT COUNT(*) FROM employee;" - Sair da VM do banco de dados
exit
Etapa 11: Criar Aplicativo Web de Banco de Dados do Funcionário
- No ol-node-01, a instância SSH estabelece uma conexão SSH com VM-02
ssh opc@$VM02_IP - Criar aplicativo de banco de dados de funcionários profissionais
sudo tee /var/www/html/employee.php > /dev/null << 'EOF' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Employee Database - Multi-VM LAMP Demo</title> <style> body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; text-align: center; padding: 30px; border-radius: 15px; margin-bottom: 20px; box-shadow: 0 8px 16px rgba(0,0,0,0.1); } .info-box { background: rgba(255,255,255,0.9); padding: 25px; border-radius: 12px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); margin-bottom: 20px; backdrop-filter: blur(10px); } .success { color: #28a745; font-weight: bold; } .error { color: #dc3545; font-weight: bold; } table { width: 100%; border-collapse: collapse; margin: 20px 0; background: rgba(255,255,255,0.9); border-radius: 12px; overflow: hidden; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } th, td { padding: 15px; text-align: left; border-bottom: 1px solid #ddd; } th { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; font-weight: bold; } tr:hover { background-color: rgba(102, 126, 234, 0.1); } .stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin: 20px 0; } .stat-card { background: white; padding: 20px; border-radius: 10px; text-align: center; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .stat-number { font-size: 2em; font-weight: bold; color: #667eea; } </style> </head> <body> <div class="header"> <h1>🏢 Employee Database Demo</h1> <p>MySQL Employee Sample Database on Multi-VM Architecture</p> </div> <?php // Database connection details define('DB_SERVER', '$VM01_IP'); define('DB_USERNAME', 'empuser'); define('DB_PASSWORD', 'Welcome#123'); define('DB_NAME', 'employee'); try { // Connect to MySQL database on separate VM $pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo '<div class="info-box success">'; echo '<h2>✅ Connected to Employee Database</h2>'; echo '<p><strong>Database Server:</strong> ' . DB_SERVER . ' (vm-01)</p>'; echo '<p><strong>Web Server:</strong> ' . gethostname() . ' (vm-02)</p>'; echo '</div>'; // Get database statistics $stats = []; $stmt = $pdo->query("SELECT COUNT(*) as count FROM employee"); $stats['employee'] = $stmt->fetch()['count']; $stmt = $pdo->query("SELECT COUNT(*) as count FROM department"); $stats['departments'] = $stmt->fetch()['count']; $stmt = $pdo->query("SELECT COUNT(*) as count FROM salary"); $stats['salaries'] = $stmt->fetch()['count']; $stmt = $pdo->query("SELECT COUNT(*) as count FROM title"); $stats['titles'] = $stmt->fetch()['count']; echo '<div class="info-box">'; echo '<h2>📊 Database Statistics</h2>'; echo '<div class="stats">'; echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['employee']) . '</div><div>Employee</div></div>'; echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['departments']) . '</div><div>Departments</div></div>'; echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['salaries']) . '</div><div>Salary Records</div></div>'; echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['titles']) . '</div><div>Job Titles</div></div>'; echo '</div>'; echo '</div>'; // Show recent employee echo '<div class="info-box">'; echo '<h2>👥 Sample Employee Data</h2>'; $stmt = $pdo->query("SELECT emp_no, first_name, last_name, gender, hire_date FROM employee ORDER BY hire_date DESC LIMIT 20"); $employee = $stmt->fetchAll(); echo '<table>'; echo '<thead><tr><th>Employee #</th><th>First Name</th><th>Last Name</th><th>Gender</th><th>Hire Date</th></tr></thead>'; echo '<tbody>'; foreach ($employee as $emp) { echo '<tr>'; echo '<td>' . htmlspecialchars($emp['emp_no']) . '</td>'; echo '<td>' . htmlspecialchars($emp['first_name']) . '</td>'; echo '<td>' . htmlspecialchars($emp['last_name']) . '</td>'; echo '<td>' . htmlspecialchars($emp['gender']) . '</td>'; echo '<td>' . htmlspecialchars($emp['hire_date']) . '</td>'; echo '</tr>'; } echo '</tbody></table>'; echo '</div>'; // Show departments echo '<div class="info-box">'; echo '<h2>🏬 Departments</h2>'; $stmt = $pdo->query("SELECT dept_no, dept_name FROM department ORDER BY dept_name"); $departments = $stmt->fetchAll(); echo '<table>'; echo '<thead><tr><th>Department Code</th><th>Department Name</th></tr></thead>'; echo '<tbody>'; foreach ($departments as $dept) { echo '<tr>'; echo '<td>' . htmlspecialchars($dept['dept_no']) . '</td>'; echo '<td>' . htmlspecialchars($dept['dept_name']) . '</td>'; echo '</tr>'; } echo '</tbody></table>'; echo '</div>'; } catch (PDOException $e) { echo '<div class="info-box error">'; echo '<h2>❌ Database Connection Error</h2>'; echo '<p>Error: ' . htmlspecialchars($e->getMessage()) . '</p>'; echo '</div>'; } ?> <div class="info-box"> <h2>🏗️ Multi-VM Architecture</h2> <p><strong>Database VM (vm-01):</strong> MySQL Server with Employee Database</p> <p><strong>Web VM (vm-02):</strong> Apache + PHP Web Application</p> <p><strong>Data Source:</strong> MySQL Sample Employee Database</p> <p><strong>Records:</strong> 300,000+ employee, 400,000+ salary records</p> </div> </body> </html> EOF - Definir permissões adequadas
sudo chown apache:apache /var/www/html/employee.php - Atualize a linha define('DB_SERVER', '$VM01_IP'); alterando o valor de $VM01_IP com o valor de endereço IP salvo
sudo vi /var/www/html/employee.phpExemplo de Saída:
``texto … Código antes de definir('DB_SERVER', '$VM01_IP'); … Código depois de definir('DB_SERVER', '192.168.122.???');
- Sair da VM do servidor Web
exit
Etapa 12: Acessar Aplicação do Funcionário
- Se o túnel SSH estiver fechado, crie para o teste básico
ssh -L 8081:$VM02_IP:80 opc@<YOUR ol-node-01 PUBLIC_IP> - Demonstração do Banco de Dados do Funcionário Navegue até:
http://localhost:8081/employee.php
Resultados Esperados:
- Teste básico: Mensagem verde "Conectado com sucesso ao MySQL!"
- Demonstração do funcionário: Interface profissional com mais de 300.000 registros de funcionários
Aplicativos Disponíveis:
🔧 Teste LAMP Básico (http://localhost:8081/dbtest.php)
- Teste simples de conectividade do banco de dados
- Exibição de informações do sistema
- Versão e status do MySQL
🏢 Demonstração do banco de dados de funcionários (http://localhost:8081/employee.php)
- Mais de 300.000 registros de funcionários
- Mais de 400.000 registros salariais
- Interface profissional com estatísticas
- Dados reais para demonstrações
- Listagens de departamentos e detalhes do funcionário
Comandos de Gerenciamento Essenciais
Gerenciamento de VMs
- Listar VMs em execução e seus status
sudo virsh list - Iniciar VM-01
sudo virsh start vm-01 - Fazer Shutdown de VM-01
sudo virsh shutdown vm-01 - Exiba leasings de DHCP para VMs na rede padrão
sudo virsh net-dhcp-leases --network default
Configurar para executar este laboratório no Oracle Cloud Infrastructure
- Configuração da Rede Virtual na Nuvem ``` Navegue: Rede → Redes Virtuais na Nuvem → Iniciar Assistente de VCN
- nome: ol-vcn-01
- Criar VCN Navegar: Rede → Redes Virtuais na Nuvem → kvm-network → Listas de Segurança Adicionar estas regras de entrada:
- SSH: Origem 0.0.0.0/0, Porta TCP 22
- HTTP: Origem 0.0.0.0/0, Porta TCP 80 ``
- Configuração da Instância de Computação:
Navigation: Hamburger Menu → Compute → Instances → Create Instance Configuration: - Name: ol-node-01 - Image: Oracle Linux 8 (Latest) - Shape: VM.Standard.E4.Flex (4 OCPUs, 16GB RAM) - Boot Volume: 100 GB - VCN: ol-vcn-01 - Subnet: Public subnet ol-vcn-01 - Assign Public IP: Yes - Add SSH Key: Upload your public key - Testar IP público de Computação com SSH
ssh opc@<ol-vcn-01_PUBLIC_IP> -
Continue até a Etapa 2: Validar Ambiente Suporta Virtualização
Próximas Etapas
Aprenda a gerenciar hosts e vms com o Oracle Linux Virtual Manager (OLVM)
Links Relacionados
Mais Recursos de Aprendizado
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Create Multi-VM LAMP Stack on Oracle Virtualization
G43726-02