Configurando um blog Wordpress para receber 1.000.000 visitas mensais

Gastando apenas $5 dólares ao mês


Hoje em dia ter um blog é algo comum. Eu mesmo já criei alguns mas nunca dei continuidade ao trabalho, acho que não tenho a disciplina/inspiração para criar posts com muita frequência. Mas para quem tem "vocação" é uma ótima maneira de ganhar visibilidade e dinheiro na internet, o grande problema é conseguir visitas.

Mas neste post não vou te ensinar como conseguir visitas, mas sim como fazer com que o seu servidor consiga administrar uma grande quantidade de acessos por segundo sem precisar gastar muita grana para mante-lo.

Vou mostrar como preparar um Blog em Wordpress para suportar 1.000.000 de visitas ao mês gastando apenas $5 dólares.

É necessário que você já tenha um blog em Wordpress funcionando em um VPS.

Recomendo a Digital Ocean (Cupom de $10 dólares caso você ainda não tenha).

Caso você ja tenha um servidor em outra empresa não tem problema. Mas o que eu realmente preciso é que o seu blog esteja hospedado em um VPS e que você tenha total controle sobre o Sistema operacional para instalar e configurar outros softwares.

Neste post vamos usar o VPS 1 da DigitalOcean que tem 1 Core, 512MB de ram e 20GB SSD

TABELA DE PREÇOS DA DIGITAL OCEAN. SELECIONE A PRIMEIRA OPÇÃO

Começando

Como ja disse anteriormente, o blog foi criado em Wordpress, e neste experimento utilizei um tema que eu mesmo criei.

RECOMENDADO: Não utilize temas prontos que você compra no ThemeForest por exemplo, porque eles já vem com muitos plugins que geralmente vão deixar sem blog mais lento. Caso já tenha adquirido o tema tente remover o maximo de plugins que puder sem comprometer a funcionalidade do seu blog

O primeiro passo será instalar o New Relic para analisar o funcionamento do blog. Clique aqui e siga o tutorial para realizar a instalação do New Relic no seu VPS.

Com este software é possível saber o tempo de resposta das páginas, saber o que está deixando o site lento (PHP, MySQL, JS, etc) e muito mais.

Apache & MySQL

Antes de tudo recomendo alterar algumas configurações do Apache & MySQL.

Faça um backup dos seus arquivos de configuração do Apache & MySQL antes de continuar!

Como vamos instalar diversas alternativas de cache, podemos diminuir as configurações default do MySQL e do Apache para consumir menos memória, afinal, estamos um pouco restritos aqui com 512MB de ram.

MySQL

Primeiro vamos alterar algumas configurações do MySQL. Abra seu arquivo de configuração (geralmente fica em /etc/my.cnf ) e faça com que o arquivo fique mais ou menos assim:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

# For low memory, Berkeley DB should not be used so keep skip-bdb uncommented unless required
skip-bdb

# For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required
skip-innodb

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50


[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

Salve o arquivo e reinicie o mysql: service mysql restart

Apache

Agora é a vez do apache. Abre o arquivo de configurações do apache (geralmente /etc/httpd/conf/httpd.conf) e altere as seguintes configurações:

StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 5000

Salve o arquivo e reinicie o apache: service apache2 restart

Fonte: http://wiki.vpslink.com/Low_memory_MySQL_/_Apache_configurations

Cache

Para conseguirmos chegar a 1.000.000 visitas sem comprometer o servidor sera necessário utilizar algumas técnicas de cache, siga os passos abaixo para instalar e configurar o Vanish, W3 Total Cache e a CloudFlare.

Varnish

Caso você não conheça, o varnish é um acelerador HTTP que faz o cache de recursos estáticos como páginas HTML para reduzir o numero de requisições ao banco de dados por exemplo.

Este Software vai te ajudar nas piores horas, aquelas em que tem muitas visitas simultaneas e o servidor começa a ficar lento.

Veja este tutorial de como instalar o Varnish no seu VPS [ É bem simples e não leva nem 15 minutos ]

W3 Total Cache

Depois de instalado o Varnish vamos instalar um plugin que irá trabalhar junto com este software, o famoso W3 Total Cache.

Com este plugin poderemos suportar um número muito maior de requisições por segundo devido a suas diversas opções de cache como Browser Cache, Page Cache, Object Cache e até Database Cache.

Depois de instalado o W3 Total Cache habilite todos os seus tipos de cache, inclusive o Minify para diminuir o número de requisições.

Veja este tutorial de como configurar o W3 total cache para trabalhar com o Varnish.

CloudFlare CDN

Vamos instalar agora a CloudFlare. Este serviço irá adicionar mais uma camada de "cache" a nossa aplicação.

Com este serviço será possível diminuir o número de requisições que chegam até o servidor, consequentemente serão utilizados menos recursos da máquina.

Um recurso interessante da CloudFlare é o Rocket, que faz com que os scripts do site trabalhem de forma asíncrona, e o melhor, sem que você precise alterar 1 linha de código.

TABELA DE PREÇOS DA CLOUDFLARE. ESCOLHA A PRIMEIRA OPÇÃO.
Clique aqui para criar uma conta na CloudFlare e siga o tutorial que eles disponibilizam para realizar a instalação [Você vai precisar alterar o DNS durante a instalação]
Configure o W3 Total cache com suas credenciais da CloudFlare para poder administrar sua conta através do admin do wordpress

Armazenamento

Caso utilize muitas imagens e vídeos no blog recomendo fortemente que você configure um serviço externo para armazenar as mídias.

— Porquê?

Bom, como disse anteriormente, o VPS 1 da DigitalOcean tem 20GB de espaço e em menos de 1 ano você já vai precisar fazer um upgrade na máquina

Amazon

Para diminuir o tempo de troca de servidor vamos utilizar a Amazon S3 para armazenar as fotos daqui para frente, e como ela tem uma free-tier não precisamos pagar nada por isso por enquanto.

Caso você ultrapasse os 5GB da free tier, a Amazon S3 cobra apenas $0.0408 por GB por mês, ou seja, vale muito mais a pena pagar à medida que o blog for crescendo do que fazer um upgrade no VPS.

Para fazer a Amazon funcionar com o Wordpress você vai precisar instalar esse plugin aqui.
É bem simples, basta ativar o plugin e informar suas chaves de API juntamente com o bucket que você deseja utilizar para armazenar as mídias.

Email

Com 1.000.000 de visitas ao mês você provavelmente receberá muito comentários no blog, talvez centenas por semana.

Para não encher sua caixa de e-mail e deixar o blog mais profissional vamos contratar um servidor de e-mails [Calma, este também é de graça]

Para o e-mail "corporativo" vamos utilizar o Zoho Mail que disponibiliza 5GB para a conta. Para criar uma conta acesse esse link aqui. [Lembre de selecionar a opção FREE]

TABELA DE PREÇOS DO ZOHO MAIL. ESCOLHA A ULTIMA OPÇÃO. "FREE"

Depois de adquirir este serviço faltava o mais importante — O serviço de SMTP que iria entregar este e-mails do blog.

Para resolver este problema vamos utilizar o Mandrill que disponibiliza 12.000 envios por mês sem precisar gastar nenhum centavo!

TABELA DE PREÇOS DO MANDRILL. ATÉ 12MIL ENVIOS VOCÊ NÃO PAGA NADA!

Crie sua conta no Mandrill e deixe tudo configurado!

Você vai precisar instalar esse plugin aqui para fazer com que o Wordpress envie os e-mails utilizando o Mandrill.

Resultados

Utilizando esta configuração consegui realizar testes consistentes em que o servidor aguentou 27 requisições por segundo sem que houvesse um aumento significativo no consumo de recursos do VPS.

Para chegar a este número utilizei o Blitz.io [Infelizmente este não é de graça]

É claro que este número não será igual para todos os blogs, vai depender do seu Front-end como scripts,css, imagens, etc…

É claro que não espero que este servidor vá aguentar 24h nesta quantidade de visitas por dia (que chegaria a nada menos que 69,984,000 por mês ou 2,332,800 por dia)

O importante é: Utilizando as dicas deste post é possível sim chegar a 1.000.000 de visitas por mês sem problema algum, e é claro, gastando apenas $5 dólares por mês, nada mal não é?

Recapitulando

Serviços utilizados

  • VPS $5 Digital Ocean — 1 Core, 512MB ram, 20GB SSD (Cupom de $10 dólares aqui)
  • New Relic — Free
  • Zoho Mail — Free
  • Amazon S3 — Free [Depende da quantidade de mídias]
  • Mandrill — Free
  • CloudFlare CDN — Free

Tecnologias e Plugins