Hospedando WordPress no EC2 da Amazon AWS

Facebook
Twitter
Tumblr
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 você vai aprender a implementar um Servidor EC2 para hospedagem WordPress.

Na Amazon existe inúmeras formas para se instalar o WordPress, mas neste artigo você vai aprender a criar do zero um Servidor LEMP otimizado em sua instância EC2 Amazon.

Requisitos na Amazon

Para criar um Servidor de Hospedagem WordPress na  Amazon iremos usar o 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

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.

Recomendo a leitura:

✅ [ Guia AWS ] O que é o Amazon EC2 ? 2019

Iniciando uma instância Amazon EC2

Criamos um artigo explicando o processo para iniciar uma instância EC2 na Amazon. No artigo ensino a configuração de uma VPC (Virtual Private Computing) juntamente configurada com um Security Group na Amazon. Tudo para que possamos iniciar nossa instância EC2 corretamente. Você não precisa se preocupar, é um artigo super prático e simples:

Recomendo a leitura:

Configurando Servidor EC2 na Amazon Web Services

 


Instalação do LEMP na Amazon

Para instalar o WordPress em uma instância EC2 vamos usar o LEMP que é (NGINX, PHP, MySQL), mas não apenas isso, iremos também configurar o PHPMyAdmin e também o SSL Let’s Encrypt. Vamos realizar uma otimização básica no servidor, mas o suficiente para que nosso WordPress rode tranquilamente.

 

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:

 

Abra o arquivo sources.list com o comando (editor nano)

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

 

Ok, agora vamos para a próxima parte deste artigo.

 


Instalando e Configurando o MariaDB 10.3 

A primeira coisa que iremos instalar no Servidor EC2 é o MariaDB 10.3. O MariaDB é sucessor do MySQL que vocês tanto conhecem. Possui mais performance e estabilidade que o MySQL, então vocês vão gostar bastante do desempenho dele para WordPress. Também vamos deixar configurado um banco e um usuário para o WordPress.

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, aconselho criar algo forte! 

 

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

 

Precisamos também criar nossa base de dados e um usuário para o WordPress, é com esses dados que iremos configurar nossa instalação.

 

Execute os passos abaixo:

 

Logue no banco de dados e insira a senha do administrador:

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;

 

Finalizamos aqui a instalação do MariaDB e criação de nossa database para o WordPress. 

 

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.1 com PHP-FPM

Agora iremos instalar o PHP 7.1 com PHP-FPM, configurar o PHP.INI e alguns outros detalhes. Sem esquecer de otimizar um pouquinho para que nosso Cloud WordPress rode com mais performance.

Para instalar o PHP 7.1 no nosso Servidor EC2 primeiramente precisamos configurar alguns pacotes e o repositório específico para usarmos a versão 7.1.

 

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, precisamos atualizar nossos pacotes e em seguida instalar o PHP 7.1 com algumas extensões que sei que muitos vão precisar. Execute os comandos:

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

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

Otimizando o PHP 7.1

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.1 .. É importante comentar que todas as otimizações aqui feitas, são pensadas com base nas limitações de hardware que estamos usando, e alguns ajustes no PHP e NGINX tem um enfoque maior em WordPress.

 

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.1
cd /etc/php/7.1/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
  • Copiar todo o conteúdo do PHP.INI que disponibilizei e colar no novo arquivo php.ini (necessário conhecer um pouquinho sobre editor nano ou similar). Após copiar, salve o arquivo.
nano php.ini

Arquivo de Configuração PHP.INI

Após ter colado todo o conteúdo no PHP.INI do servidor vamos reiniciar nosso PHP com o comando:

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

 

Pronto, nosso PHP tá configurado e minimamente otimizado!

 


Instalando o NGINX

Agora sim iremos instalar o nosso NGINX. O NGINX é um dos melhores servidores web do mercado. Com ele teremos alta performance, estabilidade e desempenho em nosso servidor EC2 para WordPress.

 

Para instalar, 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

Estamos em uma parte do artigo muito importante e é onde vamos configurar e otimizar o 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.

 

  • NGINX.CONF

O arquivo principal de configuraçã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/*;

}

 

  • “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 .conf que chamamos carinhosamente de “vhost”, mas se trata de um host virtual.

Para isso, vamos configurar um novo arquivo com algumas informações que você deve alterar.

 

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.
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
 
}

 

Pronto, precisamos agora apenas ativar nosso arquivo de configuração, para isso execute o comando abaixo substituindo 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

Nessa parte do artigo iremos instalar o PHPMyAdmin, mas isso não é nenhum requisito. Caso você deseje gerenciar seus bancos via web é uma mão na roda, eu particularmente não uso. Mas que fique registrado o processo O/

 

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.

Hospedando WordPress no EC2 da Amazon AWS 1

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).

Hospedando WordPress no EC2 da Amazon AWS 2

 

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

 

Finalizamos essa parte, vamos configurar nosso SSL, muita atenção nesse momento!

 


Configurando 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 e algum outro. 

 

Você precisa criar um registro tipo (A) apontado para o IP do servidor, ex:

(A) exemplo.com —> (IP) 7.7.7.7

(A) www.exemplo.com —> (IP) 7.7.7.7

 

 

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

Hospedando WordPress no EC2 da Amazon AWS 3

 

 

Após ter feito isso, podemos instalar o SSL em nosso domínio com o comando:

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 email, insira um email válido, quando o SSL tiver vencendo você será notificado, fica a dica!

Hospedando WordPress no EC2 da Amazon AWS 4

 

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).

Hospedando WordPress no EC2 da Amazon AWS 5

 

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

Hospedando WordPress no EC2 da Amazon AWS 6

 

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

 


Instalação do WordPress na AWS

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

 

Execute os passos abaixo para instalar o WordPress na AWS:

 

Execute os  comandos abaixo para realizarmos a última versão do WordPress e deixarmos pré-configurado.

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 dar 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/

 

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:

Hospedando WordPress no EC2 da Amazon AWS 7

 

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.

Hospedando WordPress no EC2 da Amazon AWS 8

Feito isso, basta salvar e fechar o aquivo.

 

Agora você pode dar inicio a instalação pelo seu navegador. Acesse agora seu domínio e instale normalmente.

Hospedando WordPress no EC2 da Amazon AWS 9

 

PRONTO! Nosso Servidor de Hospedagem WordPress na Amazon está configurado! Temos nosso WordPress rodando perfeitamente na nossa instância EC2. Super otimizada e rodando perfeito. 

Hospedando WordPress no EC2 da Amazon AWS 10

 

Realizei um teste te performance no GTMetrix, e tive resultados maravilhosos mesmo que seja a instalação básica do WordPress.

 

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

Hospedando WordPress no EC2 da Amazon AWS 11

 

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. 

 

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.

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