Implantação simplificada do WordPress com Docker e Ansible: Guia passo a passo

Implantação simplificada do WordPress com Docker e Ansible: Guia passo a passo

A implantação do WordPress pode ser uma tarefa um pouco demorada, desde a configuração do servidor web até a instalação do banco de dados, há vários passos envolvidos. Mas e se fosse possível simplificar todo esse processo usando um container Docker e uma ferramenta de automação de TI? É exatamente isso que vamos explorar neste post!

Neste projeto, usaremos o Ansible, uma ferramenta de automação de TI bem popular, para implantar um container Docker com o WordPress e um banco de dados MySQL. Vamos criar uma playbook Ansible que irá automatizar todo o processo de instalação, desde a criação dos diretórios necessários até a execução do container WordPress.

O objetivo deste simples projeto é mostrar como a automação pode ser uma poderosa ferramenta para simplificar a implantação de aplicativos, como o WordPress. Ao final do projeto, você terá um ambiente de desenvolvimento WordPress pronto para uso, com as dependências instaladas em um container Docker e gerenciadas pelo Ansible.

Se você é novo no Ansible ou em Docker, não se preocupe! Este projeto tem como objetivo ser simples e fácil de entender, mesmo para iniciantes.

Então, vamos começar!

Este é um exemplo da estrutura do projeto:
Projeto
├── playbook.yml
└── templates/
└── docker-compose.yml.j2

O arquivo de playbook que vamos criar é um arquivo YAML que contém todas as tarefas necessárias para implantar o WordPress em um container Docker. Ele é executado pelo Ansible, uma ferramenta de automação de TI que simplifica a configuração e gerenciamento de servidores.

Ao executar o arquivo de playbook, o Ansible seguirá todas as tarefas na ordem em que são especificadas. Primeiro, ele irá verificar se todas as dependências necessárias estão instaladas no sistema. Em seguida, criará os diretórios necessários para armazenar os arquivos de configuração do WordPress e do MySQL. Após estes passos, o Ansible irá baixar as imagens Docker para o WordPress e para o banco de dados MySQL, criará um arquivo docker-compose.yml que especifica como o container Docker deve ser executado e, em seguida, iniciará o container.

Uma vez que o container está em execução, o WordPress poderá ser acessado através de um navegador da web, permitindo que você configure e personalize sua instalação do WordPress por meio da interface gráfica.

O arquivo de playbook que criamos é muito útil porque permite que você implante o WordPress em um container Docker de maneira rápida e fácil, eliminando a necessidade de configurar manualmente um servidor web e um banco de dados. Além disso, o uso do Ansible simplifica ainda mais o processo, permitindo que você execute a implantação de maneira consistente e confiável em diferentes servidores e sistemas operacionais.

Aqui está a nossa playbook do projeto:

---
- name: Instalação do WordPress em um container Docker
  hosts: localhost
  become: yes
  vars:
    wordpress_port: 8080
    wordpress_data_dir: /srv/wordpress
    mysql_password: 4labsPassword
  tasks:
    - name: Instalação do Docker
      apt:
        name:
          - docker.io
          - docker-compose
        state: present

    - name: Criação do diretório para dados do WordPress
      file:
        path: "{{ wordpress_data_dir }}"
        state: directory
        mode: '0755'

    - name: Configuração do firewall
      ufw:
        rule: allow
        port: "{{ wordpress_port }}"
        proto: tcp

    - name: Criação do arquivo docker-compose.yml
      template:
        src: templates/docker-compose.yml.j2
        dest: "{{ ansible_env.HOME }}/docker-compose.yml"
        remote_src: yes

    - name: Execução do container WordPress
      docker_compose:
        project_src: "{{ ansible_env.HOME }}"
        project_name: wordpress
        state: present
        recreate: always

Vamos para a explicação:

  • name – é uma descrição do que essa seção do playbook faz.
  • hosts – especifica em quais hosts o playbook deve ser executado. Neste caso, o playbook será executado no localhost.
  • become: yes – indica que a execução das tarefas deve ser realizada com privilégios de root.
  • vars – define as variáveis utilizadas neste playbook. Neste caso, a porta em que o WordPress será executado, o diretório onde os dados do WordPress serão armazenados e a senha do banco de dados MySQL.
  • tasks – define as tarefas que serão executadas pelo playbook.

As tarefas fazem o seguinte:

  • Instalação do Docker – utiliza o módulo apt para instalar o Docker e o Docker Compose no sistema.
  • Criação do diretório para dados do WordPress – utiliza o módulo file para criar um diretório que armazenará os dados do WordPress.
  • Configuração do firewall – utiliza o módulo ufw para abrir a porta do WordPress no firewall.
  • Criação do arquivo docker-compose.yml – utiliza o módulo template para criar o arquivo docker-compose.yml que será utilizado pelo Docker Compose.
  • Execução do container WordPress – utiliza o módulo docker_compose para executar o contêiner do WordPress. O project_src define onde o arquivo docker-compose.yml está localizado e o project_name define o nome do projeto do Docker Compose. O parâmetro state indica que o contêiner deve ser criado, e o parâmetro recreate garante que o contêiner seja recriado sempre que for encerrado.

E o docker-compose?

A etapa do modelo do docker-compose é responsável por criar o arquivo de configuração do Docker Compose que será utilizado para detalhar e gerenciar o container do WordPress.

O módulo utilizado para essa etapa é o template, que recebe como argumentos o arquivo modelo (.j2) que contém as variáveis e configurações do arquivo a ser gerado, o destino onde o arquivo será criado e a opção remote_src: yes, que indica que o arquivo modelo está no host remoto e não no host controlador.

Dentro do arquivo modelo do docker-compose.yml.j2 são definidos os serviços e configurações necessárias para o funcionamento do container do WordPress, como a imagem a ser utilizada, a porta a ser exposta, a configuração do banco de dados MySQL e as variáveis de ambiente do WordPress.

Ao final desta etapa, o arquivo docker-compose.yml será criado na pasta indicada pelo parâmetro dest do módulo template e estará pronto para ser utilizado na etapa seguinte de execução do container do WordPress.

Este código é um modelo de arquivo que segue o padrão YAML, usado pelo Docker Compose para definir e orquestrar os contêineres do Docker que compõem um aplicativo.

Este é o docker-compose.yml.j2:

version: '3'
services:
  db:
    image: mysql:5.7
    volumes:
      - "{{ wordpress_data_dir }}/mysql:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: "{{ mysql_password }}"
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    networks:
      - backend

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - "{{ wordpress_data_dir }}/html:/var/www/html"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: "{{ mysql_password }}"
    ports:
      - "{{ wordpress_port }}:80"
    networks:
      - backend

networks:
  backend:

Explicando:

O arquivo inicia com a versão do Docker Compose que será usada, neste caso, a versão 3. Define um conjunto de serviços, que inclui dois contêineres: um para o banco de dados MySQL e outro para o WordPress.

O serviço de banco de dados é definido com a imagem do MySQL versão 5.7 e possui um volume definido para persistir os dados do MySQL em uma pasta específica. Também são definidas variáveis de ambiente para configurar o MySQL com um nome de banco de dados, usuário e senha.

O serviço do WordPress depende do serviço do banco de dados e é definido com a imagem mais recente do WordPress. Também possui um volume definido para persistir os dados do WordPress em uma pasta específica. Variáveis de ambiente são definidas para configurar o WordPress com o host e as credenciais do banco de dados. Além disso, é definida uma porta para permitir o acesso ao WordPress pela rede.

Por fim, é definida uma rede denominada backend para permitir a comunicação entre os contêineres do aplicativo.

Para executar a nossa playbook utilizamos o seguinte comando:

ansible-playbook playbook.yml

Acessando o WordPress:

Para visualizar a interface do WordPress basta acessar o seu navegador com o seguinte caminho: http://localhost:8080/

Desta forma você terá uma tela semelhante à estas para escolher o idioma e sequencialmente para definir algumas configurações:

Exemplo de configuração para instalação:

Após definir as configurações basta clicar em Instalar WordPress.

E para acessar o painel do WordPress basta clicar em Acessar, na próxima tela, e inserir os dados de login que foram configurados.

 

Conclusão

Neste projeto, criamos um ambiente WordPress executado em um container Docker. Utilizamos o Ansible para automatizar a instalação do Docker, criação do diretório de dados do WordPress, configuração do firewall e execução do container WordPress a partir de um arquivo docker-compose.yml.

A utilização de containers Docker oferece uma série de benefícios, como a facilidade de criação e destruição de ambientes, maior portabilidade de aplicações e maior eficiência na utilização de recursos do servidor. Além disso, a automação com Ansible torna a instalação e configuração mais fácil e rápida, reduzindo a possibilidade de erros humanos e facilitando a manutenção e atualização do ambiente.

Este projeto pode ser uma base para o desenvolvimento de ambientes de desenvolvimento e produção baseados em containers Docker, que podem ser facilmente replicados e escalados de acordo com as necessidades do projeto.

Links das Documentações:

Ansible

Docker

WordPress

Gostaria de aprender mais sobre o assunto?!

Conheça os nossos cursos da Carreira DevOps

 

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

 

Anterior Entenda a Importância e Utilização das Variáveis de Ambiente em Linux
Próxima Avance na carreira com a certificação AWS SysOps: novo curso da 4Linux

About author

Deborah Melo
Deborah Melo 9 posts

Analista de Infraestrutura | Construtora na 4Linux | LPIC 1 | Graduada em Eng. Elétrica | Apaixonada por tecnologia e ideologias Open Source.

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Descubra como o Ansible e o IaC podem revolucionar sua infraestrutura de TI

O termo IaC – Infrastructure as Code – dá nome aos processos de provisionamento de infraestrutura tecnológica (principalmente em Cloud Computing) através de códigos, viabilizando o versionamento e a colaboração

Notícias

Descubra o DevOps: a cultura disruptiva que transforma empresas

Apesar de ser amplamente popular nos dias de hoje, o DevOps ainda é nebuloso para algumas pessoas e empresas que buscam se habituar aos novos conceitos da TI, no entanto

Desenvolvimento

Gerando Dados Aleatórios com Paralelização no Shell: Guia Prático

Gerar dados aleatórios com paralelização no shell. Falando assim parece até alguma coisa muito importante ou difícil, mas vamos entender sua utilidade na prática. Vez ou outra preciso de uma