Pular para o conteúdo principal

Lab 5.6 - Instalação do WordPress e GLPI em um Servidor Linux (Ubuntu 24.04)

Objetivos​

Ao final deste lab, você será capaz de:

  • Instalar e configurar o Apache com múltiplos VirtualHosts
  • Instalar e configurar o MariaDB com múltiplos bancos de dados
  • Instalar WordPress e GLPI em portas distintas
  • Configurar permissões e segurança
  • Utilizar scripts shell para automatizar a instalação
  • Gerenciar serviços web e bancos de dados

Pré-requisitos​

  • Ubuntu 24.04 instalado
  • Acesso sudo/root
  • Pelo menos 2 GB de RAM disponível
  • Pelo menos 5 GB de espaço livre em disco
  • Conexão com a Internet

Visão Geral​

Este guia fornece as instruções e scripts shell para instalar WordPress e GLPI em um servidor Linux Ubuntu 24.04. As duas aplicações utilizarão portas e usuários distintos para evitar conflitos.

Arquitetura:

  • WordPress: Porta 8080, banco de dados wordpressdb, usuário wordpressuser
  • GLPI: Porta 8081, banco de dados glpidb, usuário glpiuser

Parte 1: Instalação do WordPress​

Passo 1: Criar o script de instalação​

Crie um arquivo de script para o WordPress:

nano install_wordpress.sh

Passo 2: Conteúdo do script​

Copie o conteúdo abaixo para o arquivo:

#!/bin/bash

# Atualização dos pacotes e instalação dos componentes necessários
sudo apt update
sudo apt install -y apache2 php php-{mysql,xml,mbstring,curl,zip,gd} libapache2-mod-php mariadb-server wget

# Segurança da instalação do MariaDB
sudo mysql_secure_installation

# Conexão ao MariaDB e criação do banco de dados e usuário do WordPress
sudo mysql -u root <<EOF
CREATE DATABASE wordpressdb;
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'securepassword1';
GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Download e extração do WordPress
cd /tmp
wget https://wordpress.org/latest.tar.gz
sudo tar xzvf latest.tar.gz -C /var/www/html/

# Configuração de permissões
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 775 /var/www/html/wordpress

# Criação do arquivo de configuração do WordPress no Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:8080>
ServerName localhost
DocumentRoot /var/www/html/wordpress

<Directory /var/www/html/wordpress>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>
EOT'

# Configuração da porta 8080
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf

# Ativação da configuração e reinício do Apache
sudo a2ensite wordpress.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instruções para instalação via interface web
echo "Instalação via interface web:"
echo "Abra um navegador e acesse http://127.0.0.1:8080/wordpress"
echo "Siga o assistente de instalação fornecendo as informações do banco de dados:"
echo "Nome do banco de dados: wordpressdb"
echo "Nome de usuário: wordpressuser"
echo "Senha: securepassword1"
echo "Host do banco de dados: localhost"

Passo 3: Tornar o script executável e executá-lo​

chmod +x install_wordpress.sh
./install_wordpress.sh

Passo 4: Respostas para mysql_secure_installation​

Durante a execução do script, você será solicitado a responder perguntas para proteger o MariaDB. Veja as respostas recomendadas:

Enter current password for root : [Pressione Enter]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Passo 5: Instalação via interface web​

  1. Abra um navegador e acesse http://127.0.0.1:8080/wordpress

  2. Siga o assistente de instalação fornecendo as informações do banco de dados:

    • Nome do banco de dados: wordpressdb
    • Nome de usuário: wordpressuser
    • Senha: securepassword1
    • Host do banco de dados: localhost
  3. Complete a instalação criando uma conta de administrador do WordPress

Passo 6: Verificação​

# Verificar se o Apache está ouvindo na porta 8080
sudo netstat -tulnp | grep :8080

# Verificar o status do Apache
sudo systemctl status apache2

# Verificar os logs
sudo tail -f /var/log/apache2/wordpress_access.log

Parte 2: Instalação do GLPI​

Passo 1: Criar o script de instalação​

Crie um arquivo de script para o GLPI:

nano install_glpi.sh

Passo 2: Conteúdo do script​

Copie o conteúdo abaixo para o arquivo:

#!/bin/bash

# Atualização dos pacotes e instalação dos componentes necessários
sudo apt update
sudo apt install -y apache2 php php-{apcu,cli,common,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,bz2} libapache2-mod-php mariadb-server wget

# Segurança da instalação do MariaDB (se ainda não feito)
# sudo mysql_secure_installation

# Conexão ao MariaDB e criação do banco de dados e usuário do GLPI
sudo mysql -u root <<EOF
CREATE DATABASE glpidb;
CREATE USER 'glpiuser'@'localhost' IDENTIFIED BY 'securepassword2';
GRANT ALL PRIVILEGES ON glpidb.* TO 'glpiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Download e extração do GLPI
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/10.0.7/glpi-10.0.7.tgz
sudo tar xvf glpi-10.0.7.tgz -C /var/www/html/

# Configuração de permissões
sudo chown -R www-data:www-data /var/www/html/glpi
sudo chmod -R 775 /var/www/html/glpi

# Criação do arquivo de configuração do GLPI no Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/glpi.conf
<VirtualHost *:8081>
ServerName localhost
DocumentRoot /var/www/html/glpi/public

<Directory /var/www/html/glpi/public>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/glpi_error.log
CustomLog ${APACHE_LOG_DIR}/glpi_access.log combined
</VirtualHost>
EOT'

# Configuração da porta 8081
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Ativação da configuração e reinício do Apache
sudo a2ensite glpi.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instruções para instalação via interface web
echo "Instalação via interface web:"
echo "Abra um navegador e acesse http://127.0.0.1:8081/glpi"
echo "Siga o assistente de instalação fornecendo as informações do banco de dados:"
echo "Nome do banco de dados: glpidb"
echo "Nome de usuário: glpiuser"
echo "Senha: securepassword2"
echo "Host do banco de dados: localhost"

Passo 3: Tornar o script executável e executá-lo​

chmod +x install_glpi.sh
./install_glpi.sh

Passo 4: Instalação via interface web​

  1. Abra um navegador e acesse http://127.0.0.1:8081/glpi

  2. Siga o assistente de instalação fornecendo as informações do banco de dados:

    • Nome do banco de dados: glpidb
    • Nome de usuário: glpiuser
    • Senha: securepassword2
    • Host do banco de dados: localhost
  3. Faça login com as credenciais padrão:

    • Usuário: glpi
    • Senha: glpi
  4. Importante: Altere imediatamente as senhas padrão

  5. Remova o arquivo de instalação por motivos de segurança:

sudo rm /var/www/html/glpi/install/install.php

Parte 3: Comandos Avançados e Segurança​

Gerenciamento de permissões​

# Definir permissões de arquivos de forma recursiva
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

# Definir permissões de diretórios
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;

Configuração do firewall (UFW)​

# Permitir as portas necessárias
sudo ufw allow 8080/tcp
sudo ufw allow 8081/tcp

# Verificar o status
sudo ufw status

Monitoramento em tempo real​

# Monitorar os logs do Apache
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/apache2/wordpress_access.log
sudo tail -f /var/log/apache2/glpi_access.log

# Monitorar processos do sistema
htop

# Monitorar o status do MySQL/MariaDB
sudo mysqladmin -u root -p status

Parte 4: Resolução de Problemas​

Erro de configuração do Apache​

Se você encontrar um erro de configuração do Apache:

# Verificar a sintaxe da configuração
sudo apache2ctl configtest

# Ver logs detalhados
sudo journalctl -xeu apache2.service

# Verificar os arquivos de configuração
sudo nano /etc/apache2/sites-available/wordpress.conf
sudo nano /etc/apache2/sites-available/glpi.conf

Verificar se as portas estão livres​

# Verificar as portas em escuta
sudo netstat -tulnp | grep :8080
sudo netstat -tulnp | grep :8081

# Alternativa com ss
sudo ss -tulnp | grep :8080
sudo ss -tulnp | grep :8081

Verificar permissões​

# Verificar permissões dos diretórios
ls -ld /var/www/html/wordpress
ls -ld /var/www/html/glpi

# Verificar o proprietário
ls -la /var/www/html/

Parte 5: Exercícios Práticos​

Exercício 1: Adicionar comentários aos scripts​

  1. Abra os scripts install_wordpress.sh e install_glpi.sh
  2. Adicione comentários (#) explicando cada seção do script
  3. Explique o que cada comando importante faz

Exercício 2: Alterar as portas​

Modifique as portas para usar 8080 e 8082 em vez de 8080 e 8081:

  1. Modifique os arquivos de configuração do Apache
  2. Modifique o arquivo ports.conf
  3. Reinicie o Apache
  4. Teste o acesso às aplicações

Comandos a utilizar:

# Modificar a porta na configuração do GLPI
sudo nano /etc/apache2/sites-available/glpi.conf
# Altere *:8081 para *:8082

# Adicionar a porta 8082
echo "Listen 8082" | sudo tee -a /etc/apache2/ports.conf

# Reiniciar o Apache
sudo systemctl restart apache2

# Verificar
sudo netstat -tulnp | grep :8082

Exercício 3: Monitoramento e acompanhamento​

  1. Utilize htop para monitorar os recursos durante a instalação
  2. Monitore os logs do Apache em tempo real
  3. Verifique o status do MariaDB com mysqladmin

Questões de Reflexão​

Responda às seguintes perguntas em um documento separado:

  1. Qual a importância de configurar usuários e bancos de dados distintos para WordPress e GLPI?

    • Explique os riscos de segurança caso as duas aplicações compartilhassem o mesmo banco de dados
  2. O que aconteceria se WordPress e GLPI utilizassem ambos a porta 80?

    • Explique as implicações técnicas e possíveis soluções
  3. Por que é necessário proteger a instalação do MariaDB durante a configuração inicial?

    • Detalhe os riscos caso essa etapa seja ignorada
  4. Qual a relação entre o banco de dados e os arquivos do WordPress/GLPI baixados no servidor?

    • Explique como os dois interagem
  5. Explique o que acontece quando você acessa o WordPress ou GLPI via navegador após a instalação.

    • Descreva o fluxo da requisição do navegador até o banco de dados

Anexo 1: Métodos de Configuração de Portas​

Método 1: Arquivo de configuração separado (Recomendado)​

# Criar um arquivo de configuração para a porta
sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf'
sudo bash -c 'echo "Listen 8081" > /etc/apache2/conf-available/port8081.conf'

# Ativar as configurações
sudo a2enconf port8080
sudo a2enconf port8081

# Reiniciar o Apache
sudo systemctl restart apache2

Vantagens:

  • Mais modular
  • Facilita o gerenciamento das configurações
  • Não altera os arquivos principais

Método 2: Adição direta em ports.conf​

# Adicionar diretamente no ports.conf
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Reiniciar o Apache
sudo systemctl restart apache2

Vantagens:

  • Simples e rápido
  • Todas as configurações de portas no mesmo lugar

Desvantagens:

  • Altera o arquivo principal
  • Menos modular

Diferença entre tee e bash -c​

echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf :

  • Altera diretamente o arquivo de configuração principal
  • Simples, mas menos modular
  • Todas as configurações no mesmo lugar

sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf' :

  • Cria um arquivo de configuração separado
  • Mais modular e estruturado
  • Permite ativar/desativar facilmente
  • Não altera os arquivos principais

Anexo 2: Segurança Avançada​

Remover arquivos de instalação​

# WordPress (se presente)
sudo rm -rf /var/www/html/wordpress/wp-admin/install.php

# GLPI
sudo rm /var/www/html/glpi/install/install.php

Configurar permissões restritas​

# Permissões para WordPress
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

# Permissões para GLPI
sudo chown -R www-data:www-data /var/www/html/glpi
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

Configurar backups​

# Script de backup do banco de dados do WordPress
sudo mysqldump -u wordpressuser -p wordpressdb > /backup/wordpress_$(date +%Y%m%d).sql

# Script de backup do banco de dados do GLPI
sudo mysqldump -u glpiuser -p glpidb > /backup/glpi_$(date +%Y%m%d).sql

Resumo dos Comandos Importantes​

ComandoDescrição
sudo systemctl status apache2Verificar o status do Apache
sudo systemctl restart apache2Reiniciar o Apache
sudo apache2ctl configtestTestar a configuração do Apache
sudo netstat -tulnp | grep :8080Verificar se a porta está em escuta
sudo tail -f /var/log/apache2/access.logMonitorar os logs em tempo real
htopMonitorar os processos do sistema
sudo mysqladmin -u root -p statusVerificar o status do MariaDB
sudo ufw allow 8080/tcpLiberar a porta no firewall

Verificação Final​

Verifique se você conseguiu:

  • Instalar o WordPress na porta 8080
  • Instalar o GLPI na porta 8081
  • Configurar bancos de dados distintos
  • Acessar ambas as aplicações via navegador
  • Configurar o firewall (UFW)
  • Entender a diferença entre os métodos de configuração de portas
  • Adicionar comentários aos scripts
  • Responder às questões de reflexão

Próximos Passos​

  • Módulo 7: Rede e Configuração (para aprofundar em configuração de rede)
  • Módulo 8: Serviços e daemons (para automatizar com systemd)
  • Módulo 9: Segurança de Sistema (para reforçar ainda mais as instalações)

Recursos Complementares​


Lab criado em: Dezembro 2024