Cluster Moodle – Servidor de Aplicação

Apache PHP

Introdução

Esse post faz parte de uma série onde descrevo a montagem de um cluster moodle. O primeiro post, explicando todo o projeto pode ser visto aqui.

O Apache é o servidor HTTP que, junto com o PHP, executarão o Moodle do nosso projeto. Existem outras alternativas como o Nginx e até o IIS da Microsoft, no entanto, o mais recomendado e amplamente utilizado é o Apache.

Este artigo visa a instalação e configuração do conjunto apache e php seguindo a documentação oficial do moodle e as melhores práticas. Um outro artigo tratando separadamente dos ajustes de performance ficará para um post futuro.

Instalando o Apache 2

A instalação do apache via gerenciador de pacotes é bem simples.

apt-get install apache2

Neste caso, os servidores web estarão atrás de um balanceador e nosso certificado SSL válido estará nesse balanceador. No entanto, por segurança, é necessário que a comunicação entre o balanceador e cada web server também seja criptografada. Para isso, criaremos um certificado auto assinado na primeira máquina e compartilharemos com as demais.

Habilitando o SSL no apache:

apt-get install openssl
a2enmod ssl
a2ensite default-ssl
systemctl restart apache2

No primeiro servidor, vamos gerar o par de chaves:

openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
/certs/apache-selfsigned.crt
Generating a RSA private key
...........................+++++
.................................................................+++++
writing new private key to '/etc/ssl/private/apache-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Distrito Federal
Locality Name (eg, city) []:Brasilia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nome da Organização
Organizational Unit Name (eg, section) []:SIGLA
Common Name (e.g. server FQDN or YOUR name) []:moodle.exemplo.com
Email Address []:seu-email@gmail.com

Copiando o par de chaves para o outro servidor:

scp /etc/ssl/private/apache-selfsigned.key usuario@10.0.0.12:/home/usuario
scp /etc/ssl/certs/apache-selfsigned.crt usuario@10.0.0.0.12:/home/usuario

No segundo servidor:

mv /home/usuario/apache-selfsigned.key /etc/ssl/private/
mv /home/usuario/apache-selfsigned.crt /etc/ssl/certs/
chmod 400 /etc/ssl/private/apache-selfsigned.key
chmod 400 /etc/ssl/certs/apache-selfsigned.crt

Em ambos os servidores:

vim /etc/apache2/sites-enabled/default-ssl.conf

Adicione ou altere as linhas para adicionarmos o certificado:

SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

Reinicie o Apache:

systemctl restart apache2

Instalando o PHP e extensões necessárias

Extensões exigidas pelo Moodle:

apt-get install libapache2-mod-php php-mbstring php-curl php-tokenizer php-token-stream php-xml php-xmlrpc php-soap php-zip php-gd php-intl php-json

Extensões adicionais para a conexão com o PostgreSQL e Redis:

apt-get install php-pgsql php-redis

Habilitando o Opcache no PHP:

vim /etc/php/7.1/apache2/php.ini
;;;;;;;;;;; Moodle ;;;;;;;;;;;;
;zend_extension = php_opcache.dll
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
opcache.fast_shutdown = 1
opcache.enable_cli = 1
;opcache.load_comments = 0
; May lower memory use, might not be compatible with add-ons and other apps.
;;;;;;;;;;; Moodle ;;;;;;;;;;;;

Verificando as Configurações

Vamos considerar que os arquivos do moodle estarão no diretório /var/www/moodle.

Algumas configurações são recomendadas para aumentar a performance e a segurança do ambiente. As principais estão destacadas abaixo.

vim /etc/apache2/sites-enabled/default-ssl.conf
         DocumentRoot /var/www/moodle
 
         <Directory />
                 Options FollowSymLinks
                 AllowOverride None
                 AcceptPathInfo on
         </Directory>
         <Directory /var/www/moodle/>
                 DirectoryIndex index.php index.html index.htm
                 Options FollowSymLinks MultiViews
                 AllowOverride None
                 AcceptPathInfo on
                 Header Set Access-Control-Allow-Origin "*"
                 <Limit GET POST OPTIONS PROPFIND>
                         Order allow,deny
                         Allow from all
                 </Limit>
                 <LimitExcept GET POST OPTIONS PROPFIND>
                         Order deny,allow
                         Deny from all
                 </LimitExcept>
         </Directory>

Alguns ajustes de memória e upload para o moodle:

vim /etc/php/7.3/apache2/php.ini
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 128M

Alguns ajustes para melhorar a segurança do Apache:

vim /etc/apache2/conf-enabled/security.conf
ServerTokens PROD
ServerSignature Off
TraceEnable Off

Melhorando a proteção contra Cross-site scripting:

a2enmod headers
vim /etc/apache2/mods-enabled/headers.conf
<IfModule mod_headers.c>
Header set X-XSS-Protection: "1; mode=block"
</IfModule>

 

Nos próximos posts, daremos seguimento com todas as instalações e configurações necessárias para montarmos o ambiente descrito no primeiro post.

  • Instalação dos servidores de aplicação Apache + PHP.
  • Instalação do servidor de arquivos NFS.
  • Instalação do servidor de banco de dados PostgreSQL.
  • Instalação do servidor gerenciador de sessão Redis.
  • Backup e migração do Moodle.

Contato

Samuel Teixeira

 

 

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *