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!
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:
About author
Você pode gostar também
Transforme sua TI com Infraestrutura Ágil e práticas DevOps
Os métodos ágeis fizeram a área de desenvolvimento de software evoluir muito, através do desenvolvimento de softwares baseados em testes e garantindo entregas contínuas. Da mesma forma que este processo
Guia Prático: Como Instalar e Configurar o K3D para Kubernetes
Este post tem como objetivo apresentar um guia para instalação e configuração do K3D. A solução independe de sistemas operacionais pois todas as tecnologias serão utlilizadas em containers. Introdução Montar
Guia completo: Aprenda a usar o Gitlab e suas funcionalidades DevOps
O que é o Gitlab? O Gitlab é uma ferramenta que agrega diversas funcionalidades, mas, primordialmente, é um gerenciador de repositório baseado em Git, assim como o Github. Hoje em