Introdução
Sempre há momentos em que precisamos configurar novos servidores. Isso pode ser para distribuir a carga de trabalho ou se simplesmente precisarmos de mais servidores. Ao configurar novos servidores, os usuários precisam utilizar a automação de servidores para configurá-los. Isso é feito para minimizar a intervenção manual. Ansible é uma das ferramentas de gerenciamento de configuração que podem ser usadas para configurar automaticamente um novo servidor, reduzindo as chances de erro humano ao configurar o servidor manualmente.
O Ansible é uma ferramenta rica em recursos e, ao mesmo tempo, simples em sua arquitetura. Ele facilita a configuração de servidores por meio de scripts. Devido à sua arquitetura concisa, o Ansible não requer a instalação de nenhum outro software nos nós.
Neste tutorial, mostraremos como usar o Ansible para automatizar a instalação do WordPress com a pilha LAMP em execução em um servidor Ubuntu. WordPress é um CMS usado para criar blogs e sites utilizando PHP como linguagem de programação e o banco de dados MySQL para armazenar dados. Assim que o WordPress estiver instalado, os usuários poderão administrar o site usando a interface web.
Pré-requisitos
- Como este tutorial é baseado no Ubuntu, você precisará ter a versão mais recente do Ubuntu instalada com permissões de sudo. Se você não tiver o Ubuntu instalado, poderá seguir o nosso Como configurar seu servidor Ubuntu.
- Também precisaremos ter um nó de controle do Ansible. Ele deve ter um nó de controle com permissões de sudo e firewall ativado. Instalando e Configurando o Ansible no Ubuntu 20.04 contém um guia detalhado sobre como configurar o Ansible.
- Também precisamos de hosts remotos do Ansible executando o Ubuntu mais recente. Os hosts são essencialmente os nós gerenciados no Ansible.
Resumo das Ações do Ansible Playbook
Nesta seção, veremos o que o nosso Ansible Playbook faz quando o executamos. Este procedimento é uma alternativa à configuração manual fornecida aqui: Como Instalar o WordPress com LAMP no Ubuntu 20.04.
Quando executamos o Playbook, o Ansible irá:
- Instalar aptitude que é o gerenciador de pacotes preferido do Ansible.
- Instalar e configurar extensões PHP e pacotes LAMP.
- Criar um novo Apache VirtualHost para o site do WordPress.
- Habilitar o mod_rewrite e desabilitar o site padrão oferecido pelo Apache.
- Definir a senha para o usuário root do MySQL.
- Remover as contas anônimas do MySQL e o banco de dados de teste.
- Criar um novo usuário e um novo banco de dados. Estes serão usados pelo site do WordPress.
- Configurar o UFW para permitir tráfego HTTP na porta configurada ( 80 por padrão).
- Baixar e descompactar o WordPress.
- Configurar as permissões e proprietários dos diretórios.
- Configurar um novo arquivo wp-config.php usando seu modelo.
Guia do Ansible Playbook para WordPress no LAMP
Primeiro, teremos que obter o playbook do WordPress no LAMP e suas dependências do repositório do-community/ansible-playbooks. Nós clonaremos este repositório dentro do Nó de Controle do Ansible.
Você pode executar o comando git pull conforme mencionado abaixo:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Certifique-se de ter o pull atualizado do repositório mencionado acima. Isso caso você já tenha clonado o repositório antes. Abaixo está como você pode obter a atualização:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Agora temos que localizar os arquivos dentro da pasta wordpress-lamp_ubuntu . O nome desta pasta pode ser diferente dependendo da versão do Ubuntu que você está usando. À primeira vista, você verá a seguinte estrutura neste diretório:

Vamos resumir o propósito desses arquivos abaixo:
- files/apache.conf.j2: O Apache usa VirtualHost. Este arquivo é usado para especificar as configurações do VirtualHost.
- files/wp-config.php.j2: Este arquivo contém configurações para configurar o WordPress.
- vars/default.yml: Ele configura as definições do playbook.
- playbook.yml: Se houver tarefas que precisam ser executadas em um servidor remoto, este arquivo é usado para configurá-las.
- readme.md: Guia para usar o playbook.
Temos que editar o arquivo de variáveis do playbook para personalizar a instalação. Primeiro, abra o vars/default.yaml arquivo que está localizado dentro do diretório mencionado acima:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Este arquivo é bastante longo. Ele possui uma série de configurações para nos ajudar com a nossa instalação:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #Configurações do Sistema php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Configurações do MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Configurações de HTTP http_host: "seu_dominio" http_conf: "seu_dominio.conf" http_port: "80" |
Aqui estamos interessados nas seguintes variáveis:
- php_modules: Um array contendo extensões PHP que devem ser instaladas para suportar a sua configuração do WordPress. Se você quiser instalar mais módulos, pode especificar isso aqui.
- mysql_root_password: A senha para a conta root do MySQL.
- mysql_db: Isso especifica o nome do banco de dados MySQL que o WordPress usará.
- mysql_user: O nome do usuário MySQL que deve ser criado para o WordPress.
- mysql_password: A senha para o novo usuário MySQL.
- http_host: Nome de domínio ou o IP do servidor.
- http_conf: O nome do arquivo de configuração que será criado no Apache.
- http_port: Porta HTTP para este host virtual. Esta porta é usada para acessar o site. O valor padrão é 80.
Next, enter the values in the above file and save and close. For the users using the nano editor, press CTRL+X, Y, e pressione ENTER.
Agora você está pronto para executar este playbook. Você pode executar este playbook em um ou mais servidores. Se você quiser executar este playbook em algum servidor específico, você pode usar a -l flag. Além disso, se você precisar especificar o usuário para se conectar ao servidor remoto, especifique o usuário usando a -u flag.
Suponha que queiramos executar nosso playbook em um servidor qualquer, srvr1 usando o usuário u1, podemos executar o comando abaixo:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
Depois de executar o comando acima, você obterá uma saída como a seguinte:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Coletando Fatos] ******************************************************************************** ok: [server1] TASK [Instalar pré-requisitos] ******************************************************************************** ok: [server1] |
Aguarde até que a execução do playbook seja concluída. Em seguida, navegue até o server_name no seu navegador web:
|
1 |
http://server_host_or_ip/ |
Você verá a tela:

Em seguida, selecione o idioma de sua preferência e pressione Continuar. Você verá a próxima tela solicitando alguns detalhes para concluir a instalação:

Depois disso, insira as informações e pressione Instalar WordPress. Isso levará algum tempo e então você verá uma tela como a abaixo:

Selecione Login para fazer login no seu site e definir as configurações:

Conteúdo do Ansible Playbook
Lembre-se da pasta wordpress-lamp_ubuntu . Ela contém alguns arquivos dentro dela. Então, vamos analisá-los um de cada vez:
● vars/default.yml
Este arquivo contém valores que são usados para definir as configurações do seu site WordPress:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Configurações do Sistema php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Configurações do MySQL mysql_root_password: "senha_root_mysql" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "senha" #Configurações de HTTP http_host: "seu_dominio" http_conf: "seu_dominio.conf" http_port: "80" |
● files/apache.conf.j2
Este arquivo é usado para configurar o VirtualHost do Apache:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
Este arquivo é usado para configurar o WordPress. Ele contém chaves e salts exclusivos gerados por funções de hash:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * A configuração básica do WordPress * * O script de criação do wp-config.php usa este arquivo durante a * instalação. Você não precisa usar o site, você pode * copiar este arquivo para "wp-config.php" e preencher os valores. * * Este arquivo contém as seguintes configurações: * * * Configurações do MySQL * * Chaves secretas * * Prefixo da tabela do banco de dados * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** Configurações do MySQL - Você pode obter essas informações do seu provedor de hospedagem ** // /** O nome do banco de dados do WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** Usuário do banco de dados MySQL */ define( 'DB_USER', '{{ mysql_user }}' ); /** Senha do banco de dados MySQL */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** Nome do host MySQL */ define( 'DB_HOST', 'localhost' ); /** Conjunto de caracteres do banco de dados a ser usado na criação de tabelas. */ define( 'DB_CHARSET', 'utf8' ); /** O tipo de Collate do banco de dados. Não altere isso em caso de dúvida. */ define( 'DB_COLLATE', '' ); /** Acesso ao sistema de arquivos **/ define('FS_METHOD', 'direct'); /**#@+ * Chaves Únicas de Autenticação e Salts. * * Altere estas para frases únicas diferentes! * Você pode gerar estas chaves usando o {@link https://api.wordpress.org/secret-key/1.1/salt/ serviço de chaves secretas do WordPress.org} * Você pode alterar estas chaves a qualquer momento para invalidar todos os cookies existentes. Isso forçará todos os usuários a fazerem login novamente. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * Prefixo das tabelas do banco de dados do WordPress. * * Você pode ter várias instalações em um único banco de dados se atribuir a cada uma * um prefixo exclusivo. Apenas números, letras e sublinhados, por favor! */ $table_prefix = 'wp_'; /** * Para desenvolvedores: modo de depuração do WordPress. * * Altere isso para true para ativar a exibição de avisos durante o desenvolvimento. * É altamente recomendável que desenvolvedores de plugins e temas usem WP_DEBUG * em seus ambientes de desenvolvimento. * * Para obter informações sobre outras constantes que podem ser usadas para depuração, * visite o Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* Isso é tudo, pare de editar! Boa publicação. */ /** Caminho absoluto para o diretório do WordPress. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Configura as variáveis do WordPress e arquivos inclusos. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Este arquivo contém todas as tarefas definidas a partir desta configuração. Ele começa listando um grupo de servidores que são o alvo desta configuração. Ele inclui o vars/default.yml arquivo de variáveis para carregar as opções de configuração:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Instalar pré-requisitos apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Instalar Pacotes LAMP apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Instalar Extensões PHP apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Configuração do Apache - name: Criar diretório raiz file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Configurar o VirtualHost do Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Recarregar Apache tags: [ apache ] - name: Habilitar módulo rewrite shell: /usr/sbin/a2enmod rewrite notify: Recarregar Apache tags: [ apache ] - name: Habilitar novo site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Recarregar Apache tags: [ apache ] - name: Desabilitar o site padrão do Apache shell: /usr/sbin/a2dissite 000-default.conf notify: Reiniciar Apache tags: [ apache ] # Configuração do MySQL - name: Definir a senha do root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Remover todas as contas de usuário anônimo mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Remover o banco de dados de teste do MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Cria banco de dados para o WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Criar MySQL usuário para WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # Configuração do UFW - name: "UFW - Permitir HTTP na porta {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # Configuração do WordPress - name: Baixar e descompactar o mais recente WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Definir propriedade file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Definir permissões para diretórios shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Definir permissões para arquivos shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Configurar o wp-config template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Recarregar Apache service: name: apache2 state: reloaded - name: Reiniciar Apache service: name: apache2 state: restarted |
Você pode modificar esses arquivos conforme necessário para atender às suas necessidades específicas para o site que está construindo.
Conclusão
Neste tutorial, demonstramos como você pode automatizar a instalação e configuração de um site WordPress rodando na pilha LAMP no sistema operacional Ubuntu mais recente com o Ansible.
Para mais guias sobre como trabalhar com o Ansible, você pode conferir os seguintes tutoriais em nosso blog:
- Usando o Ansible com a CloudSigma
- Automatizando a Configuração do Servidor usando Ansible e Ubuntu 20.04
- Instalando e Configurando LAMP no Ubuntu 20.04 com Ansible
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.