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