Hospedando WordPress no EC2 da Amazon AWS

Share on facebook
Facebook
Share on twitter
Twitter
Share on tumblr
Tumblr
Share on whatsapp
WhatsApp

WordPress na Amazon AWS

A Amazon Web Services é a maior empresa de Cloud Computing do mercado, nela podemos criar diversos tipos de soluções e ambientes para hospedar nossas aplicações e sites. Neste artigo vou te ensinar de modo bem simples, como configurar um servidor EC2 com o LEMP e migrar seu site WordPress para o servidor. 

Esse é um cenário mínimo e de baixo custo, ou seja, tudo irá funcionar em um mesmo servidor apesar de não ser uma das melhores práticas quando falamos em soluções em nuvem. 

Requisitos

Para criar um Servidor de Hospedagem WordPress na  Amazon, precisamos do seguinte cenário.

  • Instância AWS (Usaremos T2 micro)
  • Debian 9
  • 1GB RAM (mínimo)
  • Disco (Recomendo a partir de 10GB)
  • 1 IP Fixo
  • Portas 80 e 443 abertas no Security Group

Como mencionei, estou usando uma instância EC2 do tipo T2.micro. Essa instância pertence a família T2 da Amazon, recentemente fiz um artigo onde comentei um pouco sobre as famílias de instâncias na Amazon. ( O que é Amazon ECE ? ).

Configurando um Servidor Amazon EC2

Também criei um artigo explicando um pouco sobre o processo de criação e configuração de um servidor EC2 na Amazon. No artigo você vai encontrar as principais informações necessárias para configurar um EC2 corretamente. Também irá aprender um pouquinho sobre VPC e Security Groups, fundamental para configurar a rede e abrir as portas do servidor.

O artigo também está localizado no final da página.

 

Instalando Nginx, PHP e MariaDB no EC2 Amazon AWS

Para instalar o WordPress em uma instância EC2 vamos criar nossa própria instalação LEMP que basicamente é composta por Nginx, PHP e MariaDB/MySQL, também iremos configurar o PHPMyAdmin e o SSL Let’s Encrypt. Faremos uma otimização básica para que o WordPress trabalhe com um pouco mais de performance, mesmo sendo em um servidor muito pequeno.

 

Preparando o Ambiente EC2

Antes de qualquer coisa precisamos preparar nosso Servidor EC2. Vamos configurar novos repositórios e instalar alguns pacotes. Todos os repositórios que eu colocar neste projeto, são repositórios confiáveis e oficiais, sempre cito as fontes.

 

Siga os passos abaixo para dar início:

 

Abra o arquivo sources.list com o comando (editor nano), ou editor de sua preferência. 

nano /etc/apt/sources.list

Apague todas as linhas do arquivo e cole o conteúdo abaixo

deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free

deb http://deb.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://deb.debian.org/debian-security/ stretch/updates main contrib non-free

deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-updates main contrib non-free

Salve e saia do arquivo.

 

Ao sair, execute o comando abaixo

apt updade ; apt-get install -y unzip ; clear

 

Perfeito! Repositórios atualizados, podemos partir para a próxima parte do artigo.

 


Instalando e Configurando o MariaDB 10.3 

A primeira coisa que iremos instalar no Servidor EC2 é o MariaDB 10.3 , que inclusive é totalmente compatível com o banco de dados MySQL. Em termos de performance, o MariaDB sai na frente do MySQL, e claro, o WordPress agradece muito.

Para realizar a instalação do MariaDB 10.3 é importante que você tenha seguido todos os requisitos que mencionei lá em cima. Caso contrário algum comando ou todos eles nem funcionam.

A primeira coisa que faremos é configurar o repositório do MariaDB em nossa instância EC2.

 

Para isso siga os passos:

 

01)  Execute os três comandos abaixo, para configurarmos o repositório do MariaDB

apt-get -y install software-properties-common dirmngr

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8

add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.ufscar.br/mariadb/repo/10.3/debian stretch main'

02) Agora vamos configurar um arquivo para o repositório do MariaDB. Para isso, execute os dois comandos abaixo, onde você vai criar o arquivo MariaDB.list e abri-lo em seguida.

# Crie o arquivo
touch /etc/apt/sources.list.d/MariaDB.list 

# Abra o arquivo
nano /etc/apt/sources.list.d/MariaDB.list 

03) Com o arquivo aberto, basta colar nele o conteúdo abaixo! Salve e feche o arquivo.

# MariaDB 10.3 repository list - created 2019-06-06 11:12 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,i386,ppc64el] http://mirror.ufscar.br/mariadb/repo/10.3/debian stretch main
deb-src http://mirror.ufscar.br/mariadb/repo/10.3/debian stretch main

04) Feito isso, basta executar o comando para a instalação do MariaDB.

apt update; apt-get install -y mariadb-server-10.3

 

Ele irá solicitar uma senha para o administrador, você pode digitar uma senha bem segura, aproximadamente 50 caracteres rs, brincadeira.

Pronto, agora nosso servidor MariaDB tá pronto e instalado.

 

E sem esquecer, temos que configurar um banco e o usuário para nosso site WordPress dentro do shell do MariaDB.

 

Execute os passos abaixo:

 

Logue no banco de dados com o comando abaixo, e insira a senha do administrador configurada.

mysql -uroot -p

A sequencia de comandos abaixo irá criar um usuário e um banco. E lembre-se de alterar os campos padrões que criei.

# para criar uma database
CREATE DATABASE nome-database;

# para criar um usuario e definir uma senha
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'senha';

# para dar todos os privilegios ao usuario no banco
GRANT ALL PRIVILEGES ON nome-database.* TO 'usuario'@'localhost';

# para atualizar as modificacoes
flush privileges;

# para sair do mysql
exit;

 

Perfeito! Até aqui temos nosso MariaDB instalado e nosso banco e usuário para o WordPress ajustados.

 

Se você tentar logar no MariaDB com o usuário criado para o WordPress, verá que já consegue tranquilamente acessar, basta executar o comando: 

mysql -u usuario -p 

 


Instalando o PHP 7.3 e PHP-FPM

Agora podemos dar início a instalação e configuração do PHP 7.3 e o PHP-FPM. E lembrando, também iremos dar uma otimizada no nosso php.ini para que nosso servidor WordPress tenha um pouco mais de performance.

Para iniciar a instalação do PHP 7.3 no nosso Servidor EC2, primeiramente precisamos configurar alguns pacotes e repositório específico para que possamos baixa-lo.

 

Execute os três comandos abaixo:

apt install -y ca-certificates apt-transport-https

wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -

echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list

 

Após ter executado os três comandos acima, precisamos atualizar nossos pacotes e em seguida instalar o PHP 7.3 com algumas extensões que sei que muitos vão precisar em algum momento. Execute os comandos abaixo:

# Atualizando 
apt-get update && apt-get upgrade -y
apt-get -y install php7.3 php7.3-common php7.3-cli php7.3-cgi php7.3-xsl php7.3-fpm php7.3-mysql php7.3-gd php7.3-imap php-pear php7.3-mcrypt php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-zip php7.3-mbstring php7.3-imap php7.3-mcrypt php7.3-snmp php7.3-xmlrpc php7.3-xsl

apt-get -y install php7.3-apc php7.3-bcmath php7.3-bz2 php7.3-dba php7.3-dom php7.3-mysqli php7.3-mysqlnd php7.3-soap

Otimizando o PHP 7.3

Agora que você executou todos esses comandos acima em seu Servidor EC2, podemos realizar algumas configurações básicas de otimização em nosso PHP 7.3 .

Não se esqueça de que todas as otimizações realizadas aqui, foram pensadas em WordPress e também no tipo de Hardware que temos. Isso jamais pode ser generalizado para todo e qualquer tipo de servidor.

 

A primeira coisa que faremos é otimizar nosso PHP.INI , no entanto, já postei algum tempo atrás um arquivo de PHP.INI otimizado, podemos usar ele! Mas primeiramente siga os passos abaixo:

  • Backup do PHP.INI default do Servidor EC2
# vamos ate o diretorio do nosso PHP 7.3
cd /etc/php/7.3/fpm/

# realizamos um backup do php.ini
cp -Rfa php.ini{,.orig}

# agora podemos remover o php.ini e criar um novo
rm -f php.ini && touch php.ini

 

Abra o arquivo php.ini com seu editor de preferência e cole todo o conteúdo do php.ini disponibilizado abaixo.

nano php.ini

Arquivo de Configuração PHP.INI

Após ter colado todo o conteúdo acima no php.ini, salve e feche o arquivo. Para validar as novas configurações, precisamos reiniciar nosso PHP. Execute o comando abaixo:

/etc/init.d/php7.3-fpm restart

Pronto! Nosso PHP tá configurado e minimamente otimizado!

 

 


Instalando o NGINX

Agora chegou o momento de instalar e configurar o Nginx no nosso ambiente EC2. O Nginx é um Web Server totalmente focado em alta performance e dá show em cima do Apache.

 

Para iniciar a instalação do Nginx, execute os comandos abaixo:

# instalando o NGINX
apt-get install -y nginx

# habilitando a inicializaçao do NGINX 
sudo systemctl enable nginx

# iniciando o NGINX
systemctl start nginx

# verificando se o NGINX esta rodando
systemctl status nginx

Tranquilo, nosso NGINX tá instalado e rodando.

 

Otimização NGINX

Agora preste muita atenção, pois é um momento muito importante na configuração do nosso Nginx. Mas lembre-se, nossa otimização é para o escopo deste projeto, levando em consideração a nossa máquina EC2 e ao WordPress. Não existe uma otimização default que serve para tudo, cada caso é um caso!

 

Chega de papo, vamos iniciar nossa otimização.

 

Passo 01 – Otimizar o NGINX.CONF

O primeiro arquivo que devemos ajustar para dar início a otimização do Nginx é o  /etc/nginx/nginx.conf . Nele podemos inserir diretivas e blocos de otimização e configurações personalizadas. Iremos utilizar um arquivo que configurei e otimizei em nossa implementação do Servidor EC2 para WordPress.

 

Siga os passos abaixo:

 

Crie um novo arquivo de configuração do nginx.conf , com o comando abaixo iremos criar uma cópia do arquivo, remove-lo e criar um novo.

cp -Rf /etc/nginx/nginx.conf{,.orig} ; rm -f /etc/nginx/nginx.conf ; nano /etc/nginx/nginx.conf

 

Com o arquivo aberto, cole todo o conteúdo abaixo no arquivo de configuração nginx.conf, salvando e fechando o arquivo.

user www-data;
worker_processes auto;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;

pcre_jit on;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}


http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    log_format traffic '$bytes_sent';

    access_log off;
    aio threads;

    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    disable_symlinks if_not_owner;

    client_body_timeout   20;
    client_header_timeout 20;
    keepalive_timeout  30;
    client_header_buffer_size 128;
    client_max_body_size 100m;

    open_file_cache max=2000 inactive=20s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 5;
    open_file_cache_errors off;

    keepalive_requests 200;
    reset_timedout_connection on;

    server_names_hash_bucket_size 128;

    gzip  on;
    gzip_static on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_proxied any;

    gzip_buffers 16 8k;
    gzip_disable "msie6";

    gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/plain
        text/x-component;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

}

 

Passo 02 – “VHOST” criando um host virtual no Nginx

Para quem conhece o Apache, sabe que quando queremos configurar vários domínios temos que criar vhosts personalizados para cada um. No Nginx também precisamos configurar um arquivo semelhando no formato .conf que chamamos carinhosamente de “vhost”, mas se trata de um host virtual.

 

Primeiramente execute o comando abaixo , com esse único comando você vai entrar na pasta, criar um arquivo e abri-lo.

cd /etc/nginx/sites-available/ ; touch estudosdeti.conf ; nano estudosdeti.conf

 

OBS 1: Estou criando um arquivo estudosdeti.conf , você pode criar um com o seu domínio ex: seusite.conf 

Com o arquivo aberto, cole todo o conteúdo abaixo dentro dele.

OBS 2:

  • server_name : inserir o seu domínio
  • root /var/www/html  : inserir o caminho da pasta do seu site, caso queira criar uma pasta específica execute:  mkdir /var/www/seusite , e insira esse caminho no arquivo.

 

Agora cole o conteúdo abaixo no arquivo .conf criado acima, lembrando de ajustar os nomes corretos da raiz do site e o domínio.

server {
## Your website name goes here.
 
    server_name estudosdeti.site www.estudosdeti.site;
 
## Your only path reference.
 
    root /var/www/html/;
 
## This should be in your http block and if it is, it's not needed here.
 
    index index.php index.html;
 
location = /favicon.ico {
    log_not_found off;
    access_log off;
}
 
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}
 
location / {
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break when using query string
    try_files $uri $uri/ /index.php?$args;
}
 
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  unix:/run/php/php7.1-fpm.sock;
}
 
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}


#coleaquiPHPMyAdmin
 
}

Salve e feche o arquivo.

 

Perfeito. Agora só precisamos ativar nosso arquivo de configuração para que ele seja validado. Execute o comando abaixo e substitua pelo nome do arquivo que você criou.

ln -s /etc/nginx/sites-available/estudosdeti.conf /etc/nginx/sites-enabled/

 

Feito isso, basta reiniciar o seu Nginx e passar para a próxima parte. Caso tenha configurado algo errado no EC2 o Nginx irá dar um erro. Então revise novamente os passos acima.

/etc/init.d/nginx restart

 


Instalando o phpMyAdmin

Se você quer “fechar” essa possibilidade e trabalhar com o banco de dados através de algum Client como o MySQL Workbanch, HeidiSQL ou via SSH mesmo, não tem problema. Mas se quer um leitinho no café, beleza! Vamos lá!

 

Para instalar é bem simples, basta executar os passos abaixo:

apt-get install -y phpmyadmin

 

Nesse momento ele deseja que você informe qual webserver está utilizando pois deseja configurar automaticamente, tecle a tecla (tab) para que não marque nenhuma opção, tecle (enter) para confirmar.

Na próxima tela você pode configurar uma senha para o banco do PHPMyAdmin, mas eu prefiro deixar que ele gere uma senha automática e configure sozinho, até hoje nunca precisei me preocupar com isso. Quando chegar nesse ponto, confirme em (No).

 

Feito isso, ele vai terminar as configurações da instalação do PHPMyAdmin. Você terá que voltar novamente no arquivo de configuração do Nginx para configurarmos o bloco que fará com que você possa acessar o PHPMyAdmin pelo seu domínio.

 

Siga os passos abaixo:

1 ) Abra o arquivo de configuração, lembre de trocar para o nome do arquivo que você criou.

nano /etc/nginx/sites-available/estudosdeti.conf

 

2) Desça até final do aquivo, abaixo da tag #coleaquiPHPMyAdmin você vai colar todo o código abaixo:

location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  unix:/run/php/php7.1-fpm.sock;
}
 
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}

 

3) Reiniciamos nosso Nginx, se tudo tiver certo você já poderá acessar o PHPMyAdmin pelo navegador.

/etc/init.d/nginx restart

 

Nginx instalado e configurado! Até aqui já temos o MariaDB PHP e Nginx prontos. Agora iremos configurar e instalar nosso SSL Let’s Encrypt. Simbora!

 


 

Instalando o SSL Let’s Encrypt no EC2

Nosso Servidor EC2 tá praticamente pronto, precisamos apenas instalar e configurar o certificado SSL do Let’s Encrypt nele. 

Para instalar o SSL do Let’s Encrypt no nosso EC2 siga os passos abaixo:

 

Adicionamos o repositório oficial do Certbot , tecle enter quando solicitado.

add-apt-repository ppa:certbot/certbot

Realizamos agora um update nos repositórios e instalamos o Certbot em um único comando

apt-get update ; apt-get install -y python-certbot-nginx

 

Pronto, os pacotes necessários para que o Let’s Encrypt possa ser usado em nossa instância EC2 está pronta. Agora vem um passo importante, você precisa configurar seu DNS de modo que seu domínio esteja apontado para o IP do servidor, caso contrário o Let’s Encrypt irá falhar. 

Estou usando o Route53 para gerenciar o DNS do meu domínio, isso vale para qualquer outro gerenciador como CloudFlare , DNS da Digital Ocean, DNS do Google etc. 

Se você configurou seu domínio ex: seusite.com.br , altere o registro do tipo (A) com o respectivo IP do servidor EC2.

Se você está configurando um subdomínio ex: blog.exemplo.com.br , crie um registro do tipo (A) e configure o IP do respectivo servidor EC2.

 

Se você estiver usando o CloudFlare certifique-se que a nuvem laranja não esteja ativada!

 

Caso já tenha esses registros, basta alterar para o IP do servidor.

 

E antes de ativarmos nosso SSL devemos configurar nosso arquivo /etc/hosts, abra o arquivo hosts e crie os registros conforme a imagem abaixo, substituindo pelo seu domínio e IP.

nano /etc/hosts

 

 

Após ter revisado e configurado conforme descrito acima, instale o SSL com o comando abaixo:

certbot --nginx -d exemplo.com -d www.exemplo.com

 

Nesse momento inicia-se a instalação do SSL Let’s Encrypt no seu EC2. 

 

Assim que te solicitar um e-mail, insira um e-mail válido, quando o SSL estiver vencendo você será notificado, fica a dica!

 

Confirme todas as opções que ele te sinalizar, quando chegar nessa parte você pode escolher configurar seu servidor para trabalhar com HTTP e HTTPS, ou redirecionar tudo para HTTPS. Eu sempre prefiro trabalhar com https, então selecionei a opção (2).

 

Se tudo deu certo, você verá uma mensagem (Congratulations), e já poderá acessar seu domínio com o certificado SSL Let’s Encrypt ativo!

 

Finalmente terminamos a configuração no servidor EC2. Agora vamos instalar o WordPress.

 


Instalação do WordPress na AWS

Enfim, chegamos na parte final deste artigo. Agora vamos de fato instalar o nosso WordPress no Servidor EC2 da AWS. Já temos tudo pronto, só basta instalarmos o WordPres.

 

Execute os passos abaixo para instalar o WordPress na AWS:

 

Os comandos abaixo servirá para realizarmos o download da última versão do WordPress e deixa-lo pré pronto. 

cd /tmp

curl -LO https://wordpress.org/latest.tar.gz

tar xzvf latest.tar.gz

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

 

Agora precisamos enviar os arquivos para a pasta do nosso site. Lembre de trocar o nome da pasta /var/www/html para a que você configurou.

cp -a /tmp/wordpress/. /var/www/html

Precisamos também definir as permissões necessárias para o Nginx

chown -R www-data:www-data /var/www/html

Agora configuramos as chaves secretas, que serão configuradas no wp-config.php

curl -s https://api.wordpress.org/secret-key/1.1/salt/

 

Ajustando arquivo wp-config.php

Quando executado esse comando, ele gera uma lista de chaves, você vai copiar e colar todo o conteúdo no arquivo wp-config.php  exatamente como no exemplo abaixo:

 

Após ter inserido o conteúdo gerado, vamos configurar os campos relacionados ao banco para que o WordPress se conecte a ele. Faça como no exemplo abaixo, usando o usuário e senha que você criou para o banco do WordPress.

Feito isso, basta salvar e fechar o aquivo.

 

Você já pode acessar o seu site, verá que seu domínio está com o SSL ativo e também irá iniciar a instalação do WordPress.

Sucesso hein ? Você configurou seu primeiro servidor na Amazon AWS.

Site instalado.

 

Realizei um teste te performance no GTMetrix, e tive resultados maravilhosos mesmo que seja a instalação básica do WordPress e com uma configuração bem mínima em termos de otimização, já coloca muitos hosting no bolso. 

 

https://gtmetrix.com/reports/estudosdeti.site/ac1fpRO7

 

Conclusão: WordPress AWS

Finalizamos aqui a implementação do nosso servidor EC2 para hospedagem de sites WordPress. Ao longo do tempo iremos abordar diversas formas de implementar o WordPress, pois existe inúmeras soluções. Mas aqui, ensinamos de forma prática como implementar um Cloud para WordPress otimizado de uma forma rápida. 

 

Consultoria Amazon AWS

Se você precisa de um Especialista em Amazon para cuidar de seus serviços na nuvem, entre em contato comigo para um orçamento personalizado.

 

Leituras Recomendadas

 

0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Sobre Mim

Trabalho desde 2014 com servidores linux com foco em hospedagem e aplicações web. Realizo consultoria para diversas agências web, jornais e e-commerce como também em algumas empresas de hosting brasileiras. 

Canais de Atendimento

Você pode entrar em contato comigo para um orçamento ou suporte através dos meios de contato: 

Mail: contato@alexfreelancer.com.br   

WhatsApp: (38)99914-1219

Abrir chat
Olá, vamos conversar?