Instalar Moodle 3.2 no CentOS 7 com Nginx, PHP-FPM 7.0 e MariaDB
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
- Instalar Nginx
- Instalar e configurar PHP-FPM 7.0
- Instalar e configurar MariaDB
- Baixar e configurar o Moodle
- Configurar SSL e virtual host Nginx
- Ajustar SELinux e Firewalld
- Instalar via instalador web do Moodle
- 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 nginxInicie e habilite o serviço:
systemctl start nginx
systemctl enable nginxVerifique portas abertas (netstat pode não estar instalado):
netstat -plntuCaso não tenha netstat:
yum -y install net-tools
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.rpmInstale 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-soapEdite /etc/php.ini e ajuste:
vim /etc/php.ini
# alterar:
cgi.fix_pathinfo=0Edite o pool do PHP-FPM (/etc/php-fpm.d/www.conf):
cd /etc/php-fpm.d/
vim www.confAltere 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 = .phpDescomente 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] = /tmpCrie 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-fpmVerifique socket:
netstat -lx | grep php-fpm.sockImportante: 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 mariadbAjuste 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 = BarracudaInicie e habilite MariaDB:
systemctl start mariadb
systemctl enable mariadbProteja a instalação e defina senha root:
mysql_secure_installationSiga 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;
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 -aTroque para a branch estável MOODLE_32_STABLE:
git branch --track MOODLE_32_STABLE origin/MOODLE_32_STABLE
git checkout MOODLE_32_STABLE
git statusCrie 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
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.keyCrie /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
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.comPasso 6 — SELinux e Firewalld
Verifique estado do SELinux:
sestatusSe 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
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):

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:
- Página inicial: https://moodle.hakase-labs.com
- Login: https://moodle.hakase-labs.com/login/
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):

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)
- Banco de dados (dump full):
mysqldump -u root -p --single-transaction --quick --routines --events moodledb > /root/backup/moodledb-$(date +%F).sql- Dados do Moodle (arquivos):
rsync -av --delete /var/moodledata/ /root/backup/moodledata-$(date +%F)/- 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 seguroAgende 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
- Documentação oficial do Moodle: https://docs.moodle.org/32/en/RedHat_Linux_installation
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.
Materiais semelhantes
Instalar e usar Podman no Debian 11
Apt‑pinning no Debian: guia prático
Injete FSR 4 com OptiScaler em qualquer jogo
DansGuardian e Squid com NTLM no Debian Etch
Corrigir erro de instalação no Android