Pesquisa de site

Como automatizar implantações simultâneas de WordPress em vários servidores Linux usando Ansible - Parte 3


Nos dois artigos anteriores desta série Ansible, explicamos como instalar e configurar o Ansible para executar comandos e realizar tarefas complexas em vários servidores remotos simultaneamente.

No tutorial atual explicaremos como configurar o WordPress nos mesmos servidores remotos:

node1: 192.168.0.29
node2: 192.168.0.30

onde instalamos, habilitamos e iniciamos o Apache (você provavelmente já sabe por que escolhemos trabalhar com um servidor web como exemplo inicial no último tutorial).

Eu recomendo fortemente que você leia a Parte 1 e a Parte 2 antes de prosseguir para ter certeza de que está familiarizado com os conceitos associados ao Ansible.

Como instalar e configurar a ferramenta de automação ‘Ansible’ para gerenciamento de TI – Parte 1

Como usar playbooks do Anisble para automatizar tarefas complexas em vários servidores remotos – Parte 2

Etapa 1: Apresentando funções Ansible

À medida que você começa a adicionar mais e mais tarefas às peças, seus Manuais podem se tornar cada vez mais difíceis de manusear. Por esse motivo, a abordagem recomendada nessas situações (na verdade, em todos os casos) é utilizar uma estrutura de diretórios que contenha as diretivas para cada grupo de tarefas em arquivos distintos.

Essa abordagem nos permite reutilizar esses arquivos de configuração em projetos separados no futuro. Cada um desses arquivos define o que é chamado de função no ecossistema Ansible.

No nosso caso, criaremos duas funções. Um deles (chamado wp-dependencies) será usado para instalar as dependências do WordPress (PHP e MariaDB – não há necessidade de instalar Apache pois já está instalado).

A outra função (denominada wp-install-config) incluirá todas as tarefas necessárias associadas à instalação e configuração do WordPress.

Etapa 2: Criando funções Ansible

Ansible vem com um utilitário chamado ansible-galaxy que nos ajudará a criar a estrutura de diretórios para nossas funções. Faremos isso em /etc/ansible/playbooks (que criamos na Parte 2), mas em teoria você pode configurá-lo em outro diretório, se desejar.

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

Em seguida, confirma as funções recém-criadas.

ls -R /etc/ansible/playbooks

Na imagem acima podemos ver que ansible-galaxy criou dois diretórios com o mesmo nome de nossos papéis, e outros subdiretórios (defaults, files , manipuladores, meta, tarefas, modelos e vars) e um README.md dentro de cada um deles.

Além disso, um arquivo YAML chamado main.yml foi criado dentro de todos os diretórios listados anteriormente, com exceção de arquivos e modelos.

Começaremos editando os seguintes arquivos de configuração conforme indicado:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Observe que estamos incluindo httpd caso você não tenha seguido os tutoriais anteriores desta série.

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependencies/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. wp-config-sample.php (fornecido neste Pastebin) como segue e salve-o em sua máquina controladora Ansible (como você pode ver na última diretiva de cópia acima , baixei-o para o diretório inicial do superusuário (/root/wp-config-sample.php).

Importante: observe que o valor das variáveis DB_NAME, DB_USER e DB_PASSWORD são iguais a /etc/ansible/playbooks/wp-dependencies/defaults/main.yml:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5. Para novas instalações de servidores de banco de dados onde a senha root está vazia, como neste caso, infelizmente precisamos configurar a senha do usuário root individualmente em cada máquina através de mysql_secure_installation .

Até onde eu sei, não há nenhuma solução alternativa disponível que permita configurar a senha root via Ansible na mesma etapa em que você cria a conta de banco de dados administrativo para WordPress.

Certifique-se de usar a mesma senha em todos os hosts e copie as credenciais em /root/.my.cnf (a localização real pode ser diferente no seu caso, mas em todos os casos ela precisa corresponder ao valor do parâmetro src para a tarefa Copy ~/.my.cnf para nós em /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

Nesse arquivo (veja acima), presumimos que a senha do root é YourMariaDBRootPassword.

6. A seguir, nosso manual (/etc/ansible/playbooks/playbook.yml) parecerá muito mais organizado e simples quando comparado ao tutorial anterior:

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Finalmente, é hora de executar essas tarefas invocando nosso manual:

ansible-playbook playbook.yml

Agora vamos verificar se podemos acessar a página de administração do WordPress usando os endereços IP de node1 192.168.0.29 e node2 192.168.0.30:

Você pode ver as duas últimas etapas no seguinte screencast:

Como você pode ver, você pode configurar múltiplas instalações do WordPress com pouco ou nenhum esforço usando o Ansible. Em seguida, você pode usar a respectiva interface de usuário Admin para configurar cada site separadamente.

Considerações finais

Se você estiver usando outra distribuição para implantar o WordPress, o nome dos pacotes pode variar, mas tudo se resume à instalação do servidor web Apache, do servidor de banco de dados MariaDB e do módulo Python MySQL. Se for esse o caso, use o sistema de gerenciamento de software da sua distribuição para procurar o nome exato do pacote que você precisa instalar.

Resumo

Nesta série explicamos como usar o Ansible para executar comandos e executar tarefas complexas em várias máquinas Linux simultaneamente.

Um desses exemplos é a configuração do WordPress, conforme discutimos neste guia. Quer você seja um administrador de sistema ou um blogueiro, espero que tenha achado úteis os conceitos e exemplos deste tutorial.

Boa sorte e não hesite em nos contactar se precisar de ajuda ou tiver algum comentário ou sugestão!