Pesquisa de site

Como instalar a plataforma Moodle eLearning no Rocky Linux 8


Nesta página

  1. Pré-requisitos
  2. Etapa 1 - Configurar o Firewall
  3. Etapa 2 - Instalar o Git
  4. Etapa 3 - Instalar e configurar o PHP
  5. Etapa 4 - Instalar e configurar o MySQL
  6. Etapa 5 - Instalar o Nginx
  7. Etapa 6 - Instalar o Moodle
  8. Etapa 7 - Configurar o Moodle
  9. Etapa 8 - Instalar o SSL
  10. Etapa 9 - Configurar o Nginx
  11. Etapa 10 - Configurar o SELinux
  12. Etapa 11 - Concluindo a instalação do Moodle
  13. Conclusão

O Moodle é um Sistema de Gerenciamento de Aprendizagem (LMS) online gratuito e de código aberto. Ele permite que os educadores criem um site totalmente funcional para cursos educacionais completos com uma experiência de sala de aula online. Está escrito em PHP. Ele fornece um rico conjunto de recursos, incluindo wiki, avaliação, envio de tarefas, questionários on-line, painéis de discussão e muito mais.

Este guia explica como instalar o Moodle em um servidor Rocky Linux 8.

Pré-requisitos

  • A server running Rocky Linux 8.

  • A domain name pointing to the server. For our tutorial, we will use the moodle.example.com domain.

  • A non-root user with sudo privileges.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Passo 1 - Configurar o Firewall

O primeiro passo é configurar o firewall. Rocky Linux usa Firewalld Firewall. Verifique o status dos firewalls.

$ sudo firewall-cmd --state
running

O firewall funciona com diferentes zonas, e a zona pública é a padrão que usaremos. Liste todos os serviços e portas ativas no firewall.

$ sudo firewall-cmd --permanent --list-services

Ele deve mostrar a seguinte saída.

cockpit dhcpv6-client ssh

Moodle precisa de portas HTTP e HTTPS para funcionar. Abri-los.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Recarregue o firewall para aplicar as alterações.

$ sudo firewall-cmd --reload

Etapa 2 - Instalar o Git

O Git é exigido pelo Moodle para obter os arquivos do aplicativo. Instale o Git.

$ sudo dnf install git

Etapa 3 - Instalar e configurar o PHP

Precisamos instalar o PHP 8.0 para que o Moodle funcione para o nosso tutorial. O primeiro passo é pegar o repositório Epel.

$ sudo dnf install epel-release

Em seguida, instale o repositório Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Verifique os fluxos de PHP disponíveis.

$ dnf module list php -y
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language
php                 8.0                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

A versão padrão é 7.2. Ative o repositório Remis PHP 8.0.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Instale o PHP e as extensões exigidas pelo Moodle.

$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcache

Verifique a instalação.

$ php --version
PHP 8.0.21 (cli) (built: Jul  6 2022 10:13:53) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.21, Copyright (c), by Zend Technologies

Abra o arquivo php.ini para edição.

$ sudo nano /etc/php.ini

Altere os valores das variáveis a seguir para definir o tamanho do anexo de email para 25 MB.

upload_max_filesize = 25M
post_max_size = 25M

Em seguida, remova o comentário da variável max_input_vars removendo o ponto e vírgula na frente dela e alterando seu valor para 5000.

max_input_vars = 5000

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Abra o arquivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Localize as linhas user=apache e group=apache no arquivo e altere-as conforme a seguir.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Em seguida, remova o comentário do proprietário do arquivo de soquete, do grupo e da linha de permissão padrão e altere-os conforme mostrado abaixo.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Em seguida, comente a linha a seguir, conforme mostrado, colocando um ponto e vírgula na frente dela.

;listen.acl_users = apache,nginx

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Dê as permissões adequadas ao diretório de sessão do PHP.

$ chown -R nginx:nginx /var/lib/php/session/

Habilite e inicie o serviço PHP-FPM.

$ sudo systemctl enable php-fpm --now

Etapa 4 - Instalar e configurar o MySQL

Instale o servidor MySQL.

$ sudo dnf install mysql-server

Confirme a instalação verificando a versão.

$ mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Habilite e inicie o serviço MySQL.

$ sudo systemctl enable mysqld --now

Execute o script de instalação segura.

$ sudo mysql_secure_installation

Você receberá vários prompts. O primeiro prompt perguntará se você deseja instalar o plug-in de validação de senha. Pressione Y para instalar o plug-in. Escolha 2 como nível de segurança, o que exigirá que sua senha tenha pelo menos 8 caracteres e inclua uma combinação de letras maiúsculas, minúsculas, numéricas e especiais.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: (Press Y)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: (Type 2)

Em seguida, você será solicitado a criar uma senha de root forte. Certifique-se de que sua senha corresponda aos requisitos do plugin Validate.

Please set the password for root here.

New password:

Re-enter new password:

Em seguida, serão feitas várias solicitações relacionadas ao aumento da segurança do banco de dados. Pressione Y em cada prompt.

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : (Press Y)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : (Press Y)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : (Press Y)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (Press Y)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : (Press Y)
Success.

All done!

Efetue login no shell do MariaDB.

$ sudo mysql

Crie um banco de dados para o Moodle.

mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Crie um usuário SQL para acessar o banco de dados. Substitua YourPassword23! por uma senha de sua escolha.

mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Conceda acesso moodleuser ao banco de dados.

mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';

Recarregue a tabela de privilégios.

mysql > FLUSH PRIVILEGES;

Saia da casca.

mysql > exit

Passo 5 - Instale o Nginx

O Rocky Linux vem com uma versão mais antiga do Nginx. Você precisa baixar o repositório Nginx oficial para instalar a versão mais recente.

Crie e abra o arquivo /etc/yum.repos.d/nginx.repo para criar o repositório Nginx oficial.

$ sudo nano /etc/yum.repos.d/nginx.repo

Cole o seguinte código nele.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Instale o servidor Nginx.

$ sudo dnf install nginx

Verifique a instalação.

$ nginx -v
nginx version: nginx/1.22.0

Passo 6 - Instale o Moodle

Crie o diretório público para o Moodle.

$ sudo mkdir /var/www/html/moodle

Dê permissão ao usuário conectado para acessar o diretório.

$ sudo chown -R $USER:$USER /var/www/html/moodle

Alterne para o diretório público.

$ cd /var/www/html/moodle

Clone o repositório Moodle Github.

$ git clone https://github.com/moodle/moodle.git .

Confira a lista de agências disponíveis.

$ git branch -a

Por enquanto, MOODLE_400_STABLE é a última versão disponível. Crie uma ramificação local chamada MOODLE_400_STABLE e configure-a para rastrear a ramificação remota.

$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE

Alterne para a ramificação local recém-criada.

$ git checkout MOODLE_400_STABLE

Crie um diretório de dados para o Moodle.

$ sudo mkdir /var/moodledata

Dê as permissões adequadas ao diretório de dados do Moodle.

$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata

Dê permissões de gravação no diretório Moodle.

$ sudo chmod -R 755 /var/www/html/moodle

Passo 7 - Configurar o Moodle

Alterne para o diretório Moodle.

$ cd /var/www/html/moodle

Copie o arquivo de configuração de amostra para criar o arquivo de configuração do Moodle.

$ cp config-dist.php config.php

Abra o arquivo de configuração para edição.

$ nano config.php

Procure a seção de configuração do banco de dados e, em seguida, configure o banco de dados onde todos os dados do Moodle serão armazenados, conforme mostrado abaixo.

$CFG->dbtype    = 'mysqli';      // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleuser';   // your database username
$CFG->dbpass    = 'YourPassword23!';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

Além disso, configure a localização do nome de domínio Moodle e o diretório de dados.

$CFG->wwwroot   = 'https://moodle.example.com';
$CFG->dataroot  = '/var/moodledata';

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Etapa 8 - Instale o SSL

A ferramenta Certbot gera certificados SSL usando a API Lets Encrypt. Requer o repositório EPEL, mas como o temos instalado, podemos prosseguir diretamente. Emita o seguinte comando para instalá-lo.

$ sudo dnf install certbot

Gere o certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d moodle.example.com

O comando acima irá baixar um certificado para o diretório /etc/letsencrypt/live/moodle.example.com em seu servidor.

Gere um certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Crie um diretório raiz da Web de desafio para a renovação automática do Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crie um Cron Job para renovar o SSL. Ele será executado todos os dias para verificar o certificado e renová-lo, se necessário. Para isso, primeiro crie o arquivo /etc/cron.daily/certbot-renew e abra-o para edição.

$ sudo nano /etc/cron.daily/certbot-renew

Cole o seguinte código.

#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Altere as permissões no arquivo de tarefa para torná-lo executável.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Etapa 9 - Configurar o Nginx

Crie e abra o arquivo /etc/nginx/conf.d/moodle.conf para edição.

$ sudo nano /etc/nginx/conf.d/moodle.conf

Cole o seguinte código nele.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name moodle.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name moodle.example.com;
    root   /var/www/html/moodle;
    index  index.php;

    ssl_certificate     /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/moodle.access.log main;
    error_log  /var/log/nginx/moodle.error.log;
    
    client_max_body_size 25M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include /etc/nginx/mime.types;
        include fastcgi_params;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Hide all dot files but allow "Well-Known URIs" as per RFC 5785
	location ~ /\.(?!well-known).* {
    	return 404;
	}
 
	# This should be after the php fpm rule and very close to the last nginx ruleset.
	# Don't allow direct access to various internal files. See MDL-69333
	location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
     	deny all;
	    return 404;
	}
}

Quando terminar, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Abra o arquivo /etc/nginx/nginx.conf para edição.

$ sudo nano /etc/nginx/nginx.conf

Adicione a seguinte linha antes da linha include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Verifique a sintaxe do arquivo de configuração do Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Habilite e inicie o serviço Nginx para habilitar a nova configuração.

$ sudo systemctl enable nginx --now

Se você receber o seguinte erro, provavelmente é devido às restrições do SELinux.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Para corrigir o erro, execute os seguintes comandos.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Inicie o serviço Nginx novamente.

$ sudo systemctl start nginx

Etapa 10 - Configurar o SELinux

Altere o contexto de segurança do arquivo para web Moodles e diretório de dados.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'

Configure o SELinux para permitir conexões de rede do Moodle.

$ sudo setsebool -P httpd_can_network_connect on

Passo 11 - Concluindo a instalação do Moodle

Abra a URL https://moodle.example.com em seu navegador e você verá a seguinte tela de boas-vindas.

Pressione o botão Continuar para continuar. Em seguida, o instalador verificará os requisitos do sistema.

Se tudo estiver ok, role para baixo e clique no botão Continuar para prosseguir com a instalação dos arquivos e configuração do banco de dados.

Clique no botão Continuar quando a instalação estiver concluída. Em seguida, crie uma conta de administrador preenchendo os detalhes da conta conforme solicitado.

Quando terminar, role para baixo até a página e clique em Atualizar perfil para continuar.

Em seguida, você será solicitado a definir as configurações da página inicial do Moodles.

Configure-o de acordo com os requisitos e clique em Salvar alterações para prosseguir para o painel do Moodle. Em seguida, clique no link Ignorar na parte inferior se não quiser registrar seu site Moodle na empresa.

Agora, você pode começar a usar a plataforma de aprendizagem.

Conclusão

Isso conclui nosso tutorial sobre a instalação da plataforma de aprendizado Moodle em um servidor Rocky Linux 8. Se você tiver alguma dúvida, poste-a nos comentários abaixo.

Artigos relacionados: