Servidor LEMP: Parte 3 - O servidor LEMP
No primeiro artigo desta série vimos como registar um domínio, criar a máquina virtual e configurar a resolução de nomes.
Na segunda parte ficamos a saber como configurar o sistema de uma forma sólida e segura para receber os restantes componentes.
Neste terceiro artigo iremos instalar e configurar o conjunto de pacotes que compõem um servidor LEMP.
Nesta série:
- Parte 6 - Otimizar o desempenho do sistema
- Parte 7 - Instalar outras aplicações
Com habitual o o Fórum Servidor Debian está disponível para todos os comentários, dúvidas e sugestões.
Se achar este artigo interessante não se esqueça de partilhar com os amigos:
Ganhe $10 para alojar a sua máquina virtual!
Use este link para se registar em DigitalOcean e ganhe $10 ou equivalente a dois meses de alojamento grátis para a sua máquina virtual!
Lamp, Lemp, Lamh Lemh, Wamp, ...?
LAMP é uma uma expressão que designa um conjunto de softwares que está na base dos servidores de páginas internet ou web. Tradicionalmente refere-se à iniciais de Linux (sistema operativo), Apache (servidor web), MySQL (base de dados) e PHP (Linguagem de programação). Posteriormente foram surgindo outras siglas reflectido a evolução e as alternativas aos vários componentes. A mais comuns são:
- LAMP: Linux, Apache, MySQL e PHP. Como alternativas, o M pode também significar MariaDB e o P pode referir-se a Perl, Python, etc.
- LEMP: o Apache é substituido pelo Nginx (ler engine-x);
- LAMH ou LEMH: o PHP é substituido pelo HHVM (HipHop Virtual Machine);
- WAMP: O sistema operativo utilizado é um tal Microsoft Windows…;
Porque escolher o LEMP?
A versão anterior do Servidor Debian era baseada numa instalação LAMP. A primeira questão que coloquei a mim mesmo quando evolui o servidor para o Debian 8 'Jessie', foi que conjunto ou stack
usar.
As razões da escolha final foram diversas, mas prendem-se em geral com 2 prioridades: desempenho e segurança.
Porquê Linux?
Porque nem consegui imaginar outra opção!
Porquê nginx?
Simples: pelo desempenho, segurança e facilidade de configuração. Pelos testes que fiz é bastante mais rápido do que o apache a servir o conteúdo do Servidor Debian. Além disso também requer menos recursos, o que é ideal para uma configuração relativamente modesta como a do nosso servidor virtual.
Porquê MariaDB?
As versões anteriores do Debian incluíam o pacote servidor de base de dados MySQL. A versão actual disponibiliza também o MariaDB. Muito provavelmente, as futuras versões do Debian apenas oferecerão uma e, muito provavelmente, será MariaDB.
Porquê PHP?
Quando pensei em atualizar o site, pensei imediatamente em user o HHVM em vez do PHP. Infelizmente, apesar do incrível ganho de desempenho do HHVM, tive que abandonar a ideia devido a duas razões: Primeiro o HHVM consome uma quantidade monstruosa de memória! A máquina virtual de 512Mb parava de responder após apenas alguns pedidos. Segundo, o HHVM não suporta ainda a totalidade de instruções do PHP, pelo que alguns plugins do Dokuwiki simplesmente bloqueavam o HHVM e, por consequência, o servidor.
Sim, o PHP foi a segunda escolha, mas foi a escolha possível. Mas consegui resultados bastante satisfatórios ao optimizar o site e alterar (ou criar de raiz) alguns plugins mais 'leves' para o Dokuwiki.
Instalar o nginx
A instalação do nginx não pode ser mais simples:
fribeiro@servidordebian:~$ sudo apt-get install nginx nginx-doc ssl-cert openssl-blacklist
Para verificar a instalação do nginx abra o browser e escreva o endereço do servidor:
Definir número de workers do nginx
Para um melhor desempenho é aconselhável que o número de workers do nginx seja igual ao número de processadores disponíveis no sistema.
Para verificar o número de processadores do nosso sistema:
fribeiro@servidordebian:~$ grep processor /proc/cpuinfo | wc -l 1
Como é listado apenas um processador, vamos alterar o valor de worker_processes
para 1
no ficheiro de configuração /etc/nginx/nginx.conf:
- /etc/nginx/nginx.conf
# [...] # worker_processes 4; worker_processes 1; # [...]
Por agora é tudo quanto ao nginx. A restante configuração será feita caso a caso para cada site.
Instalar o MariaDB
fribeiro@servidordebian:~$ sudo apt-get install mariadb-client mariadb-server
Durante o processo de instalação é pedida a password de root do MariaDB. Este utilizador root é específico do MariaDB, pelo que deve ter uma password diferente do root do sistema.
E a sua confirmação:
A partir deste momento será possível aceder ao monitor do MariaDB:
fribeiro@servidordebian:~$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 42 Server version: 10.0.20-MariaDB-0+deb8u1 (Debian) Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]> quit; Bye
Após a instalação é conveniente garantir a segurança da instalação MariaDB com o comando mysql_secure_installation
. Este programa permite, entre outras coisas, alterar password da conta root do MariaDB, desligar alguns acessos externos e apagar as bases de dados de testes.
fribeiro@servidordebian:~$ mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we`ll need the current password for the root user. If you`ve just installed MariaDB, and you haven`t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] - Dropping test database... ERROR 1008 (HY000) at line 1: Can`t drop database 'test'; database doesn`t exist ... Failed! Not critical, keep moving... - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] ... Success! Cleaning up... All done! If you`ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Instalar o PHP-FPM
Por último, vamos instalar o PHP-FPM (FastCGI Process Manager) e algumas extensões de utilização comum:
fribeiro@servidordebian:~$ sudo apt-get install php5-fpm php5-mysqlnd php5-mcrypt php5-gd php5-curl php5-cli
Após a instalação é necessário alterar o valor de cgi.fix_pathinfo
de 1
para 0
no ficheiro /etc/php5/fpm/php.ini:
- /etc/php5/fpm/php.ini
# [...] ;cgi.fix_pathinfo=1 cgi.fix_pathinfo=0 # [...]
Reiniciar o LEMP
Por fim reiniciamos todos os serviços associados ao LEMP para activar as alterações que tenham sido efectuadas:
fribeiro@servidordebian:~$ sudo systemctl restart php5-fpm mysql nginx
Testar o suporte PHP no nginx
O nginx não gere diretamente os scripts php. Por isso vamos configurar o nginx para, que quando encontre um ficheiro com a extensão “php”, o envie ao PHP-FPM. Este faz a sua magia e devolve os resultados ao nginx para serem mostrados.
O suporte para php é acrescentado o ficheiro de configuração /etc/nginx/sites-available/default.
No ficheiro /etc/nginx/sites-available/default configuramos o nginx para encaminhar os ficheiros com a extensão php
para o PHP-FPM através do socket unix:/var/run/php5-fpm.sock
:
- /etc/nginx/sites-available/default
# [...] # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include snippets/fastcgi-php.conf; # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; } # [...]
O serviço nginx deverá reler a configuração para ativar as alterações:
fribeiro@servidordebian:~$ sudo systemctl reload nginx
Para testar tudo vamos criar um pequeno script em php:
fribeiro@servidordebian:~$ sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
E o teste definitivo será quando inserir http://servidordebian.org/info.php na barra de endereços do browser:
Nesta página podemos encontrar várias informações acerca do sistema que poderão ser utilizadas para tentar aceder ao sistema de forma maliciosa. Por essa razão devemos eliminar o ficheiro imediatamente:
fribeiro@servidordebian:~$ sudo rm /var/www/html/info.php
A seguir
Neste artigo vimos como instalar um servidor LEMP com uma configuração básica. Nos próximos artigos iremos garantir a segurança e monitorização do sistema antes de, finalmente, instalar e configurar um site baseado no dokuwiki.