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

Restringir permissões de apps Android
Segurança Android

Restringir permissões de apps Android

Instalar Chef Server no Ubuntu 17.04
DevOps

Instalar Chef Server no Ubuntu 17.04

Corrigir Erro 500 no Microsoft Teams
Suporte Técnico

Corrigir Erro 500 no Microsoft Teams

Como encontrar um corretor online confiável
Investimentos

Como encontrar um corretor online confiável

Mudar cor do texto no Discord — guia prático
Tutoriais

Mudar cor do texto no Discord — guia prático

Instalar Moodle 3.2 no CentOS 7
Educação/TI

Instalar Moodle 3.2 no CentOS 7