Author: Luis Palacios

20 anos e uma vontade enorme de fazer a diferença usando tecnologia. Co-fundador do blog Open DevOps, quer compartilhar conhecimento e aprender com a comunidade
Criando um blog WordPress com Docker

Criando um blog WordPress com Docker

Olá, seja bem vindo novamente!

Em nosso primeiro post nós mostramos como podemos fazer uma receita Ansible responsável por provisionar um servidor rodando um blog WordPress. No post de hoje, mostraremos a mesma tarefa sendo feita, dessa vez usando a tecnologia de contêineres Docker. Esperamos que você goste!

First things first

Primeiramente uma breve introdução do que é o Docker, segundo a AWS:

É uma plataforma de software que permite a criação, o teste e a implantação de aplicações rapidamente. O Docker cria pacotes de software em unidades padronizadas chamadas de contêineres que têm tudo o que o software precisa para ser executado, inclusive bibliotecas, ferramentas de sistema, código e runtime.

Então, o Docker é tido como uma nova forma de virtualização, onde o contêiner compartilha o mesmo kernel do host. O Docker roda como um processo dentro do host e isso permite que o provisionamento do contêiner seja feita de forma quase imediata. Essa tecnologia é uma grande aliada para infra-estrutura em micro-serviços.

Requisitos para o lab

Faremos esse lab na infra-estrutura em nuvem da Amazon, AWS. Vamos precisar do seguinte item:

  • Instância EC2 (pode ser t2.micro) rodando CentOS 6;

Já dentro da instância EC2, vamos instalar o Docker usando o comando:

Com o Docker instalado, inicie o serviço através do comando:

Agora já temos o serviço do Docker rodando em nossa VM!

Criando nosso contêiner

Temos algumas formas de criar contêineres. Nesse artigo disponibilizaremos uma imagem base criada por nós para ajudar nessa tarefa, onde apenas pequenas alterações serão necessárias para fazer o wordpress funcionar!

Os comandos Docker requerem permissões root. Para evitar ter que usar o root ou então usar o comando sudo em cada interação, vamos criar o usuário docker e adicioná-lo ao grupo docker, grupo o qual é criado automaticamente na instalação do Docker.

Feito isso podemos começar a brincadeira. Primeiramente, baixe nossa imagem com o comando docker pull e execute um contêiner a partir dela com os comandos abaixo:

O comando docker run é responsável por criar e executar um contêiner. Usamos os parâmetros -it para permitir um shell interativo, onde podemos rodar comandos dentro do contêiner. WordPress é o nome da imagem que acabamos de baixar, o -p 80:80 faz um redirecionamento da porta 80 do host para a porta 80 do contêiner, permitindo assim que tenhamos uma aplicação web dentro do contêiner e exposta para o mundo externo, e por último, /bin/bash nos permite executar comandos bash dentro do contêiner, do mesmo modo de uma máquina virtual.

Dentro desse contêiner temos 3 serviços fundamentais rodando: nginx (servidor de proxy), MySQL (banco de dados), php-fpm (interpretador de arquivos PHP).

Agora já dentro do contêiner, vamos acessar o banco de dados local e criar o database que o wordpress usará para armazenar seus dados:

Feito isso, vamos alterar as configurações essenciais para o wordpress acessar o banco de dados. Primeiramente, precisamos gerar chaves de segurança para a instalação do wordpress. Rode o comando abaixo:

Você terá retorno com algumas chaves que deverão ser incluídas na configuração do wordpress. Abra o arquivo abaixo e preencha os dados nos campos correspondentes:

Nesse mesmo arquivo, altere as linhas abaixo. Você pode alterar de acordo com os dados utilizados na criação do database.

Feito isso, você poderá acessar o IP do seu servidor através do browser e continuar a instalação com a interface Web! Lembre-se de deixar a porta 80 aberta para que você possa acessá-la!

Para sair do contêiner e manter ele rodando, aperta as teclas CTRL+P e depois CTRL+Q.

Esse foi um post introdutório sobre Docker. Em posts futuros daremos mais detalhes de sua arquitetura e explicaremos outros comandos utilizados. Ficou alguma dúvida? Não deixe de comentar! Até a próxima!

Criando um blog WordPress com Ansible

Criando um blog WordPress com Ansible

Olá pessoal! Sejam todos bem vindos ao primeiro post do nosso blog. Hoje vamos compartilhar com vocês como subir um blog WordPress usando uma receita Ansible, fazendo com que a subida de uma nova máquina para o ambiente seja feita de forma automática e consequentemente muito mais rápida e livre de erros.

Para começar, vou introduzir o que é o Ansible: uma ferramenta de código-livre que automatiza provisionamento de software, gerenciamento de configuração e deploy de aplicações. O Ansible é hoje usado em larga escala por grandes players do mercado para automatizar sua infraestrutura.

Uma grande vantagem do Ansible é que ele permite a configuração de hosts sem um agent local instalado. Tudo pode ser feito através de sua máquina local ou então de um servidor dedicado para rodar o Ansible.

Com isso dito, vamos começar a colocar a mão na massa!

Pré-Requisitos

  • Criação de uma instância EC2 na AWS (pode ser t2.micro para este lab) com a tag Name como meu_blog (explicaremos mais para frente porquê);
  • Criação de uma instância RDS MySQL na AWS (pode ser db.t2.micro para este lab);
  • Pacote do Ansible instalado localmente (siga esse link para instalar em seu SO);
  • Pacote awscli instalado e configurado localmente com Access Key ID e Secret Access Key (o mínimo de permissão necessária é EC2 read-only para fazer a leitura do inventário dinâmico).

Estrutura de diretórios

O Ansible possui uma estrutura de diretórios bem definida que ajuda a segmentar cada role para o deploy de sua configuração. As roles são divididas por serviço/pacote. Elas permitem manter a estrutura organizada para sabermos qual serviço será instalado e configurado em cada etapa. Por exemplo em nosso caso, para termos um WordPress rodando precisamos instalar e configurar o nginx, o banco (MySQL nesse caso), o php-fpm (responsável pela interpretação de códigos PHP), além do próprio WordPress. Cada uma dessas tarefas é dividida em roles, e quando rodamos a receita podemos definir qual será a ordem de execução delas.

Para podermos seguir com o tutorial, baixe ou clone esse repositório, que já contém a receita pronta, sendo apenas necessário a configuração de dados de acesso ao RDS.

Com o repositório baixado, vamos entender o seu conteúdo:

Diretório group_vars: nesse diretório podemos armazenar variáveis que serão utilizadas pelas receitas. No arquivo baixado você encontra as credenciais de acesso ao banco de dados do wordpress. Em um post futuro mostraremos como podemos criptografar esses dados para maior segurança utilizando o ansible-vault;

Diretório inventory: nesse diretório temos o arquivo que contém os hosts onde a receita rodará. É possível especificar os hosts por IP, nome de domínio, ou então através de um inventário dinâmico. Na instância EC2 que foi criada anteriormente, você deve ter incluído a tag Name como meu_blog. Agora, nesse arquivo hosts indicamos que o Ansible deve procurar por hosts que contenham a tag Name como meu_blog, e rodará a receita em todas as máquinas que atendam esse critério;

Diretório roles: contém cada role para cada serviço a ser configurado. Cada role contém sua estrutura de diretórios, que entre outras opções conterá o arquivo que será responsável por executar a receita dessa role e também os templates que serão usados em cada host;

Arquivo site.yml: arquivo responsável pela execução da receita.

Alterações necessárias para rodar a receita

Já com a receita baixada em sua máquina, serão necessárias algumas configurações para que ela rode corretamente. Teremos que mexer em dois arquivos apenas:

./group_vars/all

Esse arquivo contém variáveis que são usadas durante a execução da receita:

db_root: nome do usuário root que foi usado durante a criação do RDS;
db_root_pw: senha do usuário root que foi criado durante a criação do RDS;
db_host: endpoint do RDS
wp_db_name: nome do banco que o wordpress armazenará seus dados;
wp_db_user: usuário wordpress para acessar o banco;
wp_db_password: senha do usuário wordpress para acessar o banco.

./roles/wordpress/templates/wp-config.php

Nas linhas 23, 26, 29 e 32 deve-se alterar, respectivamente, para o conteúdo das variáveis wp_db_name, wp_db_user, wp_db_password db_host. Desse modo, os dados que forem carregados nas variáveis da receita, devem ser os mesmos dados que o arquivo de configuração do wordpress utilizará para acessar o banco posteriormente.

Rodando a receita

Feito isso, podemos rodar a receita. Em sua pasta raiz (isto é, onde temos o arquivo site.yml), rode o comando abaixo, substituindo o caminho da chave PEM usada na criação da instância EC2.

ansible-playbook é responsável pela execução das receitas. O atributo -i indica o arquivo que contém os hosts para rodar a receita e site.yml é o nome do arquivo que contém as chamadas de cada role.

Após o término da execução da receita você deve ter um WordPress rodando ao acessar o host através do browser.

Esse foi um post introdutório para começar a utilizar o Ansible. Há diversas opções que permitem personalizar ainda mais o deploy e tornar o processo adequado as suas necessidades.

Se ficou qualquer dúvida, não hesite em comentar abaixo ou então acessar a documentação.

Grande abraço e até mais!