Instalando Wordpress con Ansible y Ubuntu 16.04
September 04, 2016
Instalando Wordpress con Ansible y Ubuntu 16.04
Este tutorial está basado en este tutorial de Digital Ocean
Como pre requisito está tener instalado Ansible
Primero adecuamos el sistema de carpetas
mkdir wordpress
cd wordpress
touch hosts
touch playbook.yml
mkdir roles
cd rolesDespués inicializamos los roles que usaremos
ansible-galaxy init apache2
ansible-galaxy init mysql
ansible-galaxy init php
ansible-galaxy init wordpressAhora, definimos las tareas para apache dos
en roles/apache2/tasks/main.yml escribimos
---
- name: Update apt cache
apt: update_cache=yes cache_valid_time=3600
sudo: yes
- name: Install required software
apt: name={{ item }} state=present
sudo: yes
with_items:
- apache2en roles/mysql/tasks/main.yml escribimos
---
- name: Update apt cache
apt: update_cache=yes cache_valid_time=3600
sudo: yes
- name: Install required software
apt: name={{ item }} state=present
sudo: yes
with_items:
- mysql-server
- python-mysqldb
- libmysqlclient-dev
- name: Create mysql database
mysql_db: name={{ wp_mysql_db }} state=present
- name: Create mysql user
mysql_user:
name={{ wp_mysql_user }}
password={{ wp_mysql_password }}
priv={{ wp_mysql_db }}.*:ALLCon esto se instalará Mysql Server y se creará una base de datos con los nombres definidos en roles/mysql/vars/main.yml
Un ejemplo del archivo roles/mysql/vars/main.yml
---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password: $upp3rP4$$en roles/php/tasks/main.yml escribimos
---
- name: Update apt cache
apt: update_cache=yes cache_valid_time=3600
sudo: yes
- name: Install required software
apt: name={{ item }} state=present
sudo: yes
with_items:
- php7.0-mysql
- php7.0
- libapache2-mod-php7.0
- php7.0-mcrypt
- python-mysqldben roles/wordpress/tasks/main.yml
---
---
# tasks file for wordpress
- name: Download WordPress
get_url:
url=https://wordpress.org/latest.tar.gz
dest=/tmp/wordpress.tar.gz
validate_certs=no
- name: Extract WordPress
unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/html/{{ wordpress_site_name }} copy=no
sudo: yes
- name: Update default Apache site
sudo: yes
template: src=wordpress.conf dest="/etc/apache2/sites-aviable/{{SITE_NAME}}.conf"
- name: Copy sample config file
command: mv /var/www/html/{{ wordpress_site_name }}/wp-config-sample.php /var/www/html/{{ wordpress_site_name }}/wp-config.php creates=/var/www/html/{{ wordpress_site_name }}/wp-config.php
sudo: yes
- name: Update WordPress config file
lineinfile:
dest=/var/www/html/{{ wordpress_site_name }}/wp-config.php
regexp="{{ item.regexp }}"
line="{{ item.line }}"
with_items:
- {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}
- {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}
- {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
sudo: yesComo estamos creando un notify para reiniciar apache, debemos añadir esto a roles/wordpress/handlers/main.yml
---
- name: restart apache
service: name=apache2 state=restarted
sudo: yesApache necesita un archivo de configuración, así que lo incluiremos, usando este template que colocaremos en roles/wordpress/templates/wordpress.conf
<VirtualHost *:80>
ServerName {{ wordpress_site_name }}
ServerAdmin ma0@contraslash.com
DocumentRoot /var/www/html/{{ wordpress_site_name }}
<Directory /var/www/html/{{ wordpress_site_name }}/>
Options -Indexes
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>También necesitamos algunas variables para que se rendericen en los archivos de configuración de apache, así que escribirmos en roles/wordpress/vars/main.yml
---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password: $upp3rP4$$
wordpress_site_name: wordpress.example.comAsegúrese de que las contraseñas de este archivo coincidan con las del rol de mysql
Para terminar, modificaremos los archivos creados al inicio del tutorial.
En hosts
[webserver]
webserver.example.com
[dbserver]
dbserver.example.comEn este archivo puede colocar las direcciones ip de sus servidores web y de bases de datos, recuerde que pueden ser el mismo
y en playbook.yml
- hosts: webserver
roles:
- server
- php
- wordpress
- hosts: dbserver
roles:
- mysqlPor último para aprovisionar nuestros servidores ejecutamos el siguiente comando
ansible-playbook -i hosts -u nombreUsuario -s -k playbook.yml Recuerde modificar el nombreUsuario en el comando anterior