Como instalar um servidor web com Nginx + MySQL + PHP5 + APC + Spawn_FastCGI [1ª Parte: Apresentação]

Não faz muito tempo, mencionamos que agora DesdeLinux (todos os seus serviços) estão trabalhando em Servidores GNUTransfer.com. O blog melhorou muito em termos de velocidade, fluidez, mesmo quando vamos de ter (após a fusão do UsemosLinux) mais de 30.000 visitas por dia (quase 200 usuários conectados simultaneamente). Como conseguir um bom desempenho no servidor mesmo com esse volume de tráfego?

Atualmente o Justice (VPS onde se encontra o blog e algum outro serviço) possui 3GB de RAM, porém menos de 500MB é consumido, isso é possível com a escolha correta do software a utilizar e uma configuração adequada dos mesmos. Por exemplo, o Apache é sem dúvida um grande no mundo, o nº 1 quando o assunto é hospedagem, mas justamente por isso o Apache nem sempre é a melhor opção. Quando o tráfego é alto e o hardware do servidor não é realmente grande (Ex: 8 ou 16 GB de RAM), o Apache pode consumir muita RAM, fazendo com que o servidor em certos momentos demore muito para responder, ou pior, porque nosso site está offline por recursos insuficientes. É por isso que muitos de nós escolhemos o Nginx em vez do Apache.

nginx:

Já falamos sobre o Nginx anteriormente neste artigo Nginx: uma alternativa interessante para o Apache, aí falamos que é um servidor web como Apache, LightHttpd ou Cherokee, mas comparado ao Apache ele se destaca pelo desempenho e baixo consumo de hardware, justamente por isso que muitos sites grandes como Facebook, MyOpera.com, DropBox ou mesmo WordPress .com usa Nginx em vez de Apache. No mundo do Linux DesdeLinux Não é o único que usa Nginx, até onde eu sei, emsLinux e MuyLinux também usam :)

Minha experiência pessoal com o Nginx remonta a vários anos, quando por necessidade comecei a procurar alternativas leves para o Apache. Naquela época, o Nginx estava indo para a versão 0.6 e sua compatibilidade com sites de alta demanda feitos em PHP não era das melhores, no entanto, hoje a partir da versão 0.9 (v1.2.1 disponível no Debian Stable, v1.4.2 disponível no ArchLinux) melhorou muito, a tal ponto que com uma configuração adequada e união do Nginx + PHP tudo funcionará perfeitamente.

Nesta série de tutoriais Vou usar o Nginx versão 1.2.1-2.2, disponível nos repositórios Debian Stable (Wheezy).

PHP5:

PHP, aquela linguagem de programação com a qual muitos dos sites (e CMS) trabalham hoje, é, na minha opinião, a ovelha negra da família. Ou seja, na minha experiência pessoal, sites grandes, com grande volume de visitas, com muitas opções, funções, etc., se tal site for feito em PHP vai consumir mais recursos do que um site semelhante feito, por exemplo, em RoR. Minha experiência tem sido que, pessoal, o PHP é um grande dragão de recursos, PHP + Apache é suficiente para engolir centenas e centenas de MB de RAM sem uma necessidade real.

A razão para não usar RoR, Django ou qualquer outra coisa é simplesmente que DesdeLinux (o blog, nosso carro-chefe) trabalha com WordPress, um CMS desenvolvido em PHP que nos oferece tantas comodidades, que simplesmente não planejamos mudá-lo no curto ou médio prazo, sinceramente, WordPress, mesmo quando não é perfeito, nos serve para o que precisamos e talvez mais.

Em relação ao PHP, nesses tutoriais vou usar o PHP versão 5.4.4-14 disponível no Debian Wheezy (estável)

Spawn_FastCGI:

Pode-se dizer que é o que conecta o Nginx com o PHP, ou seja, mesmo que tenham o pacote PHP5 instalado se não tiverem o Spawn_FastCGI instalado e executado ao abrir um site em PHP o navegador fará o download do arquivo, não mostrará nada que o .php foi programado porque o servidor não sabe como processar arquivos .php, por isso é essencial instalar e configurar Spawn_FastCGI.

Se usássemos o Apache, seria algo tão simples quanto instalar o pacote libapache2-mod-php5, mas como usamos o Nginx, teremos que instalar o pacote spawn-fcgi. Além disso, no tutorial, explicarei como criar um script inicial para ele em /etc/init.d/ para que você possa controlá-lo de forma mais confortável.

MySQL:

Este pode ser o grande ponto de interrogação ou talvez, para alguns, a nota discordante. Muitos que conheço me farão a pergunta: por que usar MySQL e não MariaDB?

A questão é simplesmente que não tenho tempo suficiente para me dedicar neste momento a fazer uma migração do MySQL para o MariaDB, uma migração que em teoria deveria ser transparente para todos, 100% compatível com tudo, mas que é... como Eu disse, em teoria. Na época comecei a mudar de serviço DesdeLinux de um VPS para outro tive que deixar o Apache para trás e usar o Nginx, isso envolvia diferentes arquivos de configuração, diferentes formas de declarar VHosts, instalação e configuração do zero do servidor e seus serviços, naquele momento não consegui adicionar outra tarefa ao list, também e para ser sincero, troquei o Apache pelo Nginx porque o Apache não atendeu minhas necessidades, porém, o MySQL até o momento atende 100% minhas necessidades, não vejo razão para eu aumentar minha carga de trabalho mudando algo que já estava funcionando tecnicamente bem para mim.

Uma vez explicado porque não instalei o MariaDB, explique também que como a grande maioria dos sites precisa de um banco de dados para seu funcionamento, pois é nele que muitas informações (ou quase todas) serão armazenadas. Há quem goste de Postgre ou outra pessoa, nesta série de tutoriais explicarei como instale o MySQL e configure usuários separados para cada site.

La A versão do MySQL que vou usar é v5.5.31

APCs:

APC é um otimizador para PHP (explicado de forma muito simples). Uma vez devidamente configurado, permite que o processamento do PHP funcione melhor, que as respostas do servidor sejam mais rápidas.

Existem alternativas como o memcache, no entanto, sempre usei o APC e tive resultados muito favoráveis. Recomendo a leitura deste artigo em inglês: Comparando APC e Memcache como cache de conteúdo local

Vou usar no tutorial a versão do php-apc v3.1.13-1 também disponível nos repositórios Debian Stable.

Em resumo:

Esta forma de instalar uma configuração de servidor web não é a mais ideal, longe disso, por exemplo muitos recomendam o Varnish, que pelo que li faz verdadeiros milagres porque tudo ou quase tudo está em cache, mas, no nosso caso não precisamos que 100% do site esteja sempre em cache pois não queremos ou precisamos ir a esse extremo. No entanto, esclareço, como disse acima: "até onde li", pessoalmente não usei o Verniz até hoje, por isso não posso dar-vos uma opinião 100% objetiva.

Esta será uma série de tutoriais nos quais mostrarei como instalar um servidor web como o hospedado neste minuto. DesdeLinux (blog, fórum, colar, etc). O blog tem 30.000 visitas todos os dias, quase 200 usuários acessando simultaneamente, e mesmo assim a RAM não ultrapassa os 500MB consumidos, para alguns isso pode ser um consumo excessivo mas... ei, temos 3GB de RAM, menos de 500MB (que incluem Serviço FTP, SSH, etc.) é muito bom, certo? 🙂

Toda a 'mágica' não é feita apenas por Nginx + Spawn_FastCGI + APC, nosso sistema de cache de blog é muito bem configurado e as regras para Nginx são precisas, isso faz com que o blog mesmo receba muito tráfego processe muito menos PHP do que o que usual, pois já tem muito em cache. Se você tem um site de alta demanda e tem problemas de recursos, recomendo fortemente que você estude para ver qual sistema de cache funcionará melhor para você, qual deles atenderá melhor às suas necessidades.

Espero que você ache esses tutoriais interessantes, em cada um deles tentarei explicar tudo de uma forma abrangente, detalhada e o mais simples possível.

lembranças


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Bruno cascio dito

    Muito bom e claro! Eu te parabenizo!

    1.    KZKG ^ Gaara dito

      Obrigado

  2.   Cristóvão Castro dito

    Muito bom tutorial.

    O que me deixa com dúvidas é como eles configuraram o servidor de e-mail.

    1.    KZKG ^ Gaara dito

      O MailServer é algo à parte, ou seja, não tem nada a ver com o servidor web que você conhece 🙂

      Porém, há muito tempo decidi não me complicar com o MailServer, optei por usar o iRedMail (suporte para MySQL, LDAP e Postgre) e com as devidas configurações e detalhes que adiciono nos arquivos de configuração, tudo funciona bem.

  3.   apodrece87 dito

    Gosto do artigo, estou à espera da série de artigos

    1.    KZKG ^ Gaara dito

      Obrigado, espero trazer o próximo na segunda ou terça, que tratará da instalação e configuração do Nginx.

  4.   aca dito

    Muito bom, a configuração certa, é difícil encontrá-lo, o compromisso entre os fatores às vezes é quase insolúvel, também fui ao nginx há um tempo e depois ao mariadb (recentemente, acho que há um ano).

    // Como mencionei, seria bom se você levantasse a possibilidade de chroot e usasse o proxy_cache_path que também é útil. Também a comparação do socket (nos casos em que for possível) com a porta. e definir bem o número de filhos / ram.

    lembranças

    1.    KZKG ^ Gaara dito

      Obrigado pelo seu comentário 🙂
      Sim, claro, seria muito bom colocar o Nginx na gaiola para mantê-lo separado do resto do sistema, não havia considerado essa possibilidade nesses tutoriais, vou ver o que posso fazer. Sobre o proxy_cache_path, nunca usei, vou ler um pouco para ver no que dá.

      Em relação ao número de threads (mínimo e máximo), na configuração do Nginx está obviamente definido, no post do Nginx falarei muito sobre o arquivo .conf 😉

      Mais uma vez, obrigado por seu comentário.

  5.   msx dito

    Este tipo de HowTos é o que torna a web verdadeiramente poderosa para cientistas da computação, pois nos economiza toneladas de horas de pesquisa e testes até que finalmente decidamos a opção apropriada, muito obrigado!

    Uma pergunta, isso funciona no Debian? Qual versão do sistema operacional e pacotes?

    Saudações!

    1.    KZKG ^ Gaara dito

      Obrigado.
      Na verdade, sites que relatam, que repetem e repetem notícias já são muitos ... o que falta são sites que coloquem tutoriais, é disso que a web precisa!

      Sim, Debian Wheezy (atual Stable), as versões dos pacotes estão ali no post 😉

  6.   eliotime3000 dito

    Excelente comentário. Vamos ver se faço uma espécie de Errata com o ZPanel X, e aliás, faço a instalação manualmente no Debian Wheezy.

  7.   Frederico Antonio Valdés Toujague dito

    Vá em frente KZKG ^ Gaara !!!, que O Melhor Critério da Verdade é a Prática, e você tem experiência sobre o que escreve. Um site profissional e funcional. Liga Principal de Beisebol, cara.

    1.    eliotime3000 dito

      Isso é certo. Além disso, quando comecei a brincar com os servidores web que instalei no Windows, a verdade é que o Apache disparou em termos de consumo de recursos se você usar o WordPress (no Drupal consumia metade dos recursos).

  8.   transporte dito

    Eu acho que para a parte do Nginx, este tutorial vai ser útil. Agora quero instalar um servidor com Nginx, php, Varnish e MariaDB. Mas é claro, você tem que começar, e a preguiça pode fazer muito quando se trata de lutar com servidores e no momento estou feliz com a lâmpada e o memcache típicos que tenho xDD.

    Uma saudação.

  9.   Auros Zx dito

    Ótimo, apenas um desses seria útil 🙂 Outro ansioso por isso.

  10.   Ivan Gabriel Sosa dito

    Nós te seguimos. Atualmente, estamos começando no mundo dos servidores web. Compramos dois da Hostinger e um amigo nos ajudou a configurá-los do zero (PHP, MySQL, Apache). É a única combinação que será usada no Linux, uma plataforma na qual estou desde janeiro.
    Mas eu estava muito interessado neste tópico. Saudações!

  11.   José Manuel dito

    Nunca instalei um servidor web mas se quiser fazer, uma dúvida, será que o nível necessário para entender os tutoriais e fazer a instalação é alto ou com conhecimentos básicos poderia tentar? Desde já, obrigado.

    1.    eliotime3000 dito

      A verdade é que não é preciso muito conhecimento para lidar com um servidor de banco de dados. Alguém que já experimentou essa experiência lhe diz.

  12.   Maurício dito

    Olá, o que você vai fazer com essa série de post é muito bom.

    Recentemente instalei o Nginx + Php Fastcgi + Mariadb. Nginx.

    Tudo isso eu fiz no Archlinux, porque essa distribuição é a única do meu ponto de vista, que não traz tantos guloseimas quanto as outras. Coloquei em um ambiente enjaulado e tive muitos inconvenientes para que funcionasse perfeitamente.

    Agora está funcionando perfeitamente. Embora eu tenha interesse em saber a sua opinião, sobre a dos filhos e dos processos do pai, quanto mais dicas você me der, melhor.

    Tudo isso é apenas para praticar.
    O equipamento possui 4GB de RAM DDR2 e um processador Core 2duo de 2.4Ghz.

    Saudações e estou ansioso pelos próximos posts desta série.

  13.   kas dito

    200 usuários conectados simultaneamente?
    Apenas em determinados horários do dia, certo? Porque caso contrário, ultrapassaria essas 30.000 visitas diárias.

    1.    KZKG ^ Gaara dito

      Sim, claro, nem sempre há 200 pessoas online, neste momento são quase 40 porque ainda é cedo, em algumas horas vão ultrapassar 100.

  14.   caçador dito

    Apenas por diversão, acabei de mudar de lighty para nginx na minha estação de trabalho (Symfony2 agora), peguei a configuração daqui [1], muito simples.

    [1] http://ihaveabackup.net/2012/11/17/nginx-configuration-for-symfony2

  15.   Abril 4xas dito

    Esperando pela continuação deste 😀

    1.    KZKG ^ Gaara dito

      Esta semana devo publicá-lo, obrigado por ler nos

      1.    saúde dito

        Y? falta muito?

  16.   Decano dito

    Boa postagem ...

  17.   NOEL IVAN dito

    BOA TARDE.
    DEVIDO A ESPECIFICAÇÕES DE UM PROJETO ESCOLAR, ELES ME DEIXAM INSTALAR O NGINX NO OPENBSD 5.4 NO ORACLE MV VIRTUALBOX PARA PODER USAR PHP, MYSQL, ENTRE OUTROS, NADAMAS QUE NÃO PODERÁ ENCONTRAR INFORMAÇÕES SOBRE O ACIMA DISSE, ACREDITO NESTE É PROBLEMA PARA MIM ACIMA.