Gastei um bom tempo pra fazer a instalação do Wordpress porque a última release do Wordpress é incompatível com a versão de PHP do pacote usado pela imagem do Ubuntu 14. O pacote php5 já está obsoleto, porque PHP 5.6, 7.0 e 7.1 já não tem mais suporte.
Eu tentei primeiro usar o Ubuntu 16, modificando o nome dos pacotes no provisioning.yml pelos pacotes compatíveis com essa versão. Aí ocorreu problema com a criação e conexão do banco MySQL. A partir do Ubuntu 14, o usuário root não vem configurado sem senha, é necessário configurar uma senha. Então tive que fazer isso por fora. Mas mesmo assim, não deu certo, mesmo criando a senha, a conexão não ocorria. Tentei atualizar para o Ubuntu 18, para ver se o comportamento do MySQL se mantinha, e se manteve. Essas mudanças tomaram tempo considerável pelo download da VM. Após muitas leituras, resolvi o problema da conexão criando um arquivo .my.cnf em /home/vagrant na VM, usando a task copy. Mas antes tive de definir uma senha para o usuário root do MySQL manualmente.
Abaixo compartilho o conteúdo do arquivo provisioning.yml com o qual consegui instalar o Wordpress no Ubuntu 18 com php 7.
---
- hosts: all
handlers:
- name: restart apache
service:
name: apache2
state: restarted
become: yes
tasks:
- name: 'Instala pacotes de dependência do sistema operacional'
apt:
name: "{{ item }}"
state: latest
become: yes
with_items:
- php
- apache2
- libapache2-mod-php
- php-gd
- libssh2-1
- php-ssh2
- mysql-server
- mysql-client
- python-mysqldb
- php-mysql
- name: 'Escreve as credencias de login'
copy:
dest: /home/vagrant/.my.cnf
owner: root
group: root
mode: 0600
content: |
[client]
user=root
password=12345
become: yes
- name: 'Cria o banco do MySQL'
mysql_db:
name: wordpress_db
login_user: root
login_password: 12345
state: present
- name: 'Cria o usuário do MySQL'
mysql_user:
login_user: root
login_password: 12345
name: wordpress_user
password: 12345
priv: 'wordpress_db.*:ALL'
state: present
- name: 'Baixa o arquivo de instalacao do Wordpress'
get_url:
url: https://wordpress.org/latest.tar.gz'
dest: '/tmp/wordpress.tar.gz'
- name: 'Descompacta o wordpress'
unarchive:
src: '/tmp/wordpress.tar.gz'
dest: /var/www/
remote_src: yes
become: yes
- copy:
src: '/var/www/wordpress/wp-config-sample.php'
dest: '/var/www/wordpress/wp-config.php'
remote_src: yes
become: yes
- name: 'Configura o wp-config com as entradas do banco de dados'
replace:
path: '/var/www/wordpress/wp-config.php'
regexp: "{{ item.regex }}"
replace: "{{ item.value }}"
backup: yes
with_items:
- { regex: 'database_name_here', value: 'wordpress_db'}
- { regex: 'username_here', value: 'wordpress_user'}
- { regex: 'password_here', value: '12345'}
become: yes
- name: 'Configura Apache para servir o Wordpress'
copy:
src: 'files/000-default.conf'
dest: '/etc/apache2/sites-available/000-default.conf'
become: yes
notify:
- restart apache
O que eu precisava, pra tornar o arquivo completo, era saber como mandar o Ansible alterar a senha do usuário do MySQL. Manualmente, os passos são estes:
sudo service mysql stop
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
mysql
# No MySQL:
FLUSH PRIVILEGES;
USE mysql;
UPDATE user SET authentication_string=PASSWORD("12345") WHERE User='root';
UPDATE user SET plugin="mysql_native_password" WHERE User='root';
quit
sudo pkill mysqld
sudo service mysql start