Ferramentas de Usuário

Ferramentas de Site


pt:blog:2015:09_25_servidor_na_cloud_parte_3_o_servidor_lemp

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:

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.

Referências

pt/blog/2015/09_25_servidor_na_cloud_parte_3_o_servidor_lemp.txt · Última modificação em: 2024-02-15 01:05 por 127.0.0.1