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 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
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;
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
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
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
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 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
- 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

Restringir permissões de apps Android

Instalar Chef Server no Ubuntu 17.04

Corrigir Erro 500 no Microsoft Teams

Como encontrar um corretor online confiável

Mudar cor do texto no Discord — guia prático
