Guia de tecnologias

Instalar Moodle 3.2 no CentOS 7 com Nginx, PHP-FPM 7.0 e MariaDB

7 min read Educação/TI Atualizado 08 Oct 2025
Instalar Moodle 3.2 no CentOS 7
Instalar Moodle 3.2 no CentOS 7

Importante: este tutorial usa exemplos (ex.: domínio moodle.hakase-labs.com e senha hakaselabs123). Substitua por valores reais em produção e escolha senhas seguras.

Objetivo e variantes de intenção

  • Objetivo principal: instalar e configurar o Moodle 3.2 em CentOS 7.
  • Variantes relacionadas: instalar Moodle no CentOS, Moodle com Nginx, Moodle com PHP-FPM, configurar SELinux para Moodle, SSL para Moodle.

Pré-requisitos rápidos

  • Servidor CentOS 7 com acesso root.
  • Acesso à internet para baixar pacotes e repositórios.
  • Domínio apontado para o servidor (recomendado para SSL real).

Sumário das etapas

  1. Instalar Nginx
  2. Instalar e configurar PHP-FPM 7.0
  3. Instalar e configurar MariaDB
  4. Baixar e configurar o Moodle
  5. Configurar SSL e virtual host Nginx
  6. Ajustar SELinux e Firewalld
  7. Instalar via instalador web do Moodle
  8. Testes e validação

TRABALHO PRÁTICO — Passos detalhados

Passo 1 — Instalar Nginx

Instale o repositório EPEL e, em seguida, o Nginx:

yum -y install epel-release
yum -y install nginx

Inicie e habilite o serviço:

systemctl start nginx
systemctl enable nginx

Verifique portas abertas (netstat pode não estar instalado):

netstat -plntu

Caso não tenha netstat:

yum -y install net-tools

Instalar nginx no CentOS 7

Nota: Nginx serve o conteúdo estático e encaminha PHP via socket para o PHP-FPM.

Passo 2 — Instalar e configurar PHP-FPM

Moodle 3.2 é compatível com PHP 7.0. Use um repositório terceiro (webtatic) para instalar PHP 7.0 no CentOS 7:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Instale PHP-FPM e extensões necessárias para Moodle:

yum install -y graphviz aspell php70w-fpm php70w-cli php70w-pspell php70w-curl php70w-gd php70w-intl php70w-mysql php70w-xml php70w-xmlrpc php70w-ldap php70w-zip php70w-json php70w-opcache php70w-readline php70w-mbstring php70w-soap

Edite /etc/php.ini e ajuste:

vim /etc/php.ini
# alterar:
cgi.fix_pathinfo=0

Edite o pool do PHP-FPM (/etc/php-fpm.d/www.conf):

cd /etc/php-fpm.d/
vim www.conf

Altere usuário/grupo para nginx e configure o socket:

user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
security.limit_extensions = .php

Descomente variáveis de ambiente do PHP-FPM:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Crie diretório de sessões e ajuste permissões:

mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
chown -R nginx:nginx /run/php-fpm/

Inicie e habilite o PHP-FPM:

systemctl start php-fpm
systemctl enable php-fpm

Verifique socket:

netstat -lx | grep php-fpm.sock

Importante: usar socket (vs TCP) reduz overhead local e melhora segurança ao não expor PHP-FPM em porta TCP.

Passo 3 — Instalar e configurar MariaDB

Instale MariaDB (mariadb-server e mariadb):

yum -y install mariadb-server mariadb

Ajuste my.cnf (adicionar ao final da seção [mysqld]):

vim /etc/my.cnf
# adicionar:
default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda

Inicie e habilite MariaDB:

systemctl start mariadb
systemctl enable mariadb

Proteja a instalação e defina senha root:

mysql_secure_installation

Siga as perguntas (remover usuários anônimos, impedir root remoto, remover DB test, recarregar privilégios).

Crie banco e usuário para Moodle (troque a senha por uma segura):

mysql -u root -p
CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
FLUSH PRIVILEGES;

Configurar database para instalação do Moodle

Nota de segurança: evite senhas em texto, use gerenciadores de senhas e restrinja acesso ao MySQL (bind-address quando necessário).

Passo 4 — Baixar e preparar o Moodle

Instale git, crie webroot e clone o repositório oficial:

yum -y install git
mkdir -p /var/www/
cd /var/www/
git clone https://github.com/moodle/moodle.git
cd moodle/
git branch -a

Troque para a branch estável MOODLE_32_STABLE:

git branch --track MOODLE_32_STABLE origin/MOODLE_32_STABLE
git checkout MOODLE_32_STABLE
git status

Crie diretório moodledata e ajuste permissões:

mkdir -p /var/moodledata
chown -R nginx:nginx /var/moodledata
chmod 777 /var/moodledata
chown -R nginx:nginx /var/www/moodle
chmod 755 /var/www/moodle

Baixar e configurar Moodle

Importante: moodledata deve ficar fora do diretório público e somente o processo web (nginx/php-fpm) deve ter acesso de escrita.

Passo 5 — Configurar SSL e virtual host Nginx

Exemplo usando certificado self-signed (em ambiente de teste). Em produção, prefira Let’s Encrypt ou certificado CA.

mkdir -p /etc/nginx/ssl/
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key
chmod 600 /etc/nginx/ssl/moodle.key

Crie /etc/nginx/conf.d/moodle.conf com o conteúdo:

# PHP Upstream Handler
upstream php-handler {
    server unix:/run/php-fpm/php-fpm.sock;
}

server {
    listen 80;
    server_name moodle.hakase-labs.com;
    return 301 https://$server_name$request_uri;
}

server {
    server_name      moodle.hakase-labs.com;

    listen            *:443 ssl http2;
    listen            [::]:443 ssl http2;

    ssl  on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    ssl_session_tickets off;
    resolver_timeout 5s;
    ssl_certificate /etc/nginx/ssl/moodle.crt;
    ssl_certificate_key /etc/nginx/ssl/moodle.key;

    root /var/www/moodle;
    rewrite ^/(.*\/.php)(/)(.*)$ /$1?file=/$3 last;

    location ^~ / {
        try_files $uri $uri/ /index.php?q=$request_uri;
        index index.php index.html index.htm;

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass php-handler;
        }
    }
}

Teste e reinicie Nginx:

nginx -t
systemctl restart nginx

Criar novos certificados autoassinados

Nota de segurança: o exemplo acima habilita TLSv1 e TLSv1.1 por compatibilidade histórica. Em produção, restrinja para TLSv1.2 e TLSv1.3 quando possível e atualize conjuntos de cifras.

Alternativa Let’s Encrypt (resumo): use certbot para obter certificados gratuitos e automatizar renovações. Exemplo:

yum -y install certbot python2-certbot-nginx
certbot --nginx -d moodle.seudominio.com

Passo 6 — SELinux e Firewalld

Verifique estado do SELinux:

sestatus

Se SELinux estiver em Enforcing, instale ferramentas e ajuste contextos:

yum -y install policycoreutils-python
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/moodle(/.*)?'
restorecon -Rv '/var/www/moodle/'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata(/.*)?'
restorecon -Rv '/var/moodledata/'

Instale e habilite firewalld, abra serviços HTTP/HTTPS/SSH:

yum -y install firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-all

Verificando status do SELinux no CentOS 7

Importante: se não usar SELinux, documente motivo e mantenha outras camadas de segurança (permissões de arquivo, firewall, monitoramento).

Passo 7 — Instalação via web do Moodle

Acesse no navegador: https://moodle.hakase-labs.com (ou seu domínio). O instalador web guiará as etapas:

  • Escolher idioma
  • Definir diretórios: web root (/var/www/moodle) e moodledata (/var/moodledata)
  • Selecionar driver de banco (MySQL)
  • Informar dados do banco (host: localhost, DB: moodledb, user: moodleuser, senha: hakaselabs123)

Exemplos de telas (ilustrativo):

Instalação Moodle: Escolher idioma Configurar web root, moodledata e URL Escolher driver de BD Configurar detalhes do banco

Siga as telas: aceite licença, verifique pré-requisitos PHP (todas as extensões devem estar OK). Ao final, configure o usuário admin e a página inicial.

Passo 8 — Testes e validação

Acesse:

Verifique que:

  • Página carrega via HTTPS
  • Login do administrador funciona
  • Upload de arquivos e criação de curso funcionam

Imagens das telas de resultado (ilustrativo):

Instalação Moodle concluída Dashboard do usuário Página inicial do Moodle Página de login do Moodle

Verificação final e boas práticas

  • Remova exemplos e senhas de teste do servidor.
  • Habilite backups automáticos do banco e do diretório moodledata.
  • Atualize regularmente pacotes e Moodle (faça testes em ambiente de staging).

Checklist operacional (para enviar para produção)

  • Dominio apontando para servidor
  • Certificado TLS válido (Let’s Encrypt ou CA) instalado
  • Permissões corretas em /var/www/moodle e /var/moodledata
  • SELinux contexts aplicados (se SELinux em Enforcing)
  • Firewalld com portas 80/443/22 abertas
  • Backup automático do banco e moodledata configurado
  • Monitoramento e alertas (disco, memória, CPU)

Playbook de backup rápido (SOP)

  1. Banco de dados (dump full):
mysqldump -u root -p --single-transaction --quick --routines --events moodledb > /root/backup/moodledb-$(date +%F).sql
  1. Dados do Moodle (arquivos):
rsync -av --delete /var/moodledata/ /root/backup/moodledata-$(date +%F)/
  1. Compacte e armazene fora do servidor (S3, NAS):
tar czf /root/backup/moodle-full-$(date +%F).tar.gz /root/backup/moodledb-$(date +%F).sql /root/backup/moodledata-$(date +%F)/
# mover para local seguro

Agende via crontab para execução diária ou conforme RPO desejado.

Runbook para falhas comuns (resumo)

  • Site retorna 502 Bad Gateway: verificar php-fpm está ativo e socket /run/php-fpm/php-fpm.sock existe; conferir permissões.
  • Erro de conexão com DB: testar mysql -u moodleuser -p -h localhost; verificar se mariadb está rodando e escutando em 127.0.0.1:3306.
  • Uploads falham: conferir permissões e SELinux contexts em /var/moodledata.
  • SSL configurado mas navegador anuncia inseguro: verificar certificado, chave e cadeia; confirmar domínio coincide com CN/SAN.

Testes / Critérios de aceitação

  • Instalação web completa sem erros.
  • Login administrador funcional.
  • Criação de curso e upload de arquivo (10MB) bem-sucedidos.
  • Página principal acessível via HTTPS e sem avisos de segurança.

Dicas de segurança e hardening

  • Forçar TLSv1.2+ em produção (remover TLSv1 e TLSv1.1).
  • Habilitar HSTS com cuidado (incluir subdomínios somente quando apropriado).
  • Limitar acesso SSH por IP e usar autenticação por chave.
  • Desabilitar módulos PHP desnecessários.
  • Rodar auditoria periódica de permissões em moodledata e código fonte.

Performance e escala (heurísticas)

  • Para <200 usuários simultâneos: 4 CPU, 8–16 GB RAM, SSD rápido.
  • Cache: habilite OpCache em PHP e considere Redis/Memcached para cache de sessão e aplicação.
  • Separar DB em servidor dedicado quando I/O ou conexões aumentarem.

Compatibilidade e migração rápida

  • Este guia usa Moodle 3.2 e PHP 7.0. Versões mais recentes do Moodle podem exigir PHP 7.1+ ou 7.2+ — verifique requisitos oficiais antes de migrar.
  • Para migrar: testar em staging, atualizar plugins, executar upgrade de DB via UI.

Mini-FAQ operacional

  • Posso usar Apache em vez de Nginx? Sim; o Moodle funciona com ambos. Ajuste PHP-FPM/Apache mod_proxy ou mod_php conforme necessário.
  • Preciso do moodledata fora do webroot? Sim, por segurança e para evitar que arquivos sejam servidos diretamente.

Modelo de decisão (quando usar o que)

flowchart TD
    A[Servidor único] --> B{Usuários simultâneos}
    B -->|<200| C[Manter DB local e app no mesmo servidor]
    B -->|200-1000| D[DB dedicado, cache Redis]
    B -->|>1000| E[Cluster: balanceador, múltiplos app servers, DB replicado]

Glossário (1 linha cada)

  • PHP-FPM: FastCGI Process Manager para executar PHP via sockets/TCP.
  • moodledata: diretório de dados do Moodle (uploads, cache, arquivos privados).
  • SELinux: mecanismo de controle de acesso obrigatório no CentOS.

Boas práticas de manutenção

  • Teste atualizações em staging antes de aplicar em produção.
  • Faça backups completos antes de upgrades do Moodle.
  • Monitore logs: /var/log/nginx/, /var/log/php-fpm/, /var/log/mysqld.log, e logs do Moodle.

Referências

Resumo final

  • Seguindo esses passos você terá um Moodle 3.2 funcional em CentOS 7 com Nginx, PHP-FPM 7.0 e MariaDB. Ajuste certificados, senhas e parâmetros de performance para sua realidade de produção.

Extras: verifique regularmente atualizações de segurança para o sistema operacional, PHP, Nginx e Moodle.

Autor
Edição

Materiais semelhantes

Instalar e usar Podman no Debian 11
Containers

Instalar e usar Podman no Debian 11

Apt‑pinning no Debian: guia prático
Administração de sistemas

Apt‑pinning no Debian: guia prático

Injete FSR 4 com OptiScaler em qualquer jogo
Tecnologia

Injete FSR 4 com OptiScaler em qualquer jogo

DansGuardian e Squid com NTLM no Debian Etch
Infraestrutura

DansGuardian e Squid com NTLM no Debian Etch

Corrigir erro de instalação no Android
Android

Corrigir erro de instalação no Android

KNetAttach: Pastas de Rede remota no KDE
KDE

KNetAttach: Pastas de Rede remota no KDE