27
ANSIBLE + W ORD P RESS WORD C AMP T ORONTO 2016 ALAN LOK

Ansible + WordPress - WordCamp Toronto 2016

Embed Size (px)

Citation preview

Page 1: Ansible + WordPress - WordCamp Toronto 2016

ANSIBLE + WORDPRESS WORDCAMP TORONTO 2016

ALAN LOK

Page 2: Ansible + WordPress - WordCamp Toronto 2016

FOLLOW ALONG WITHOUT TAKING PICTURES!THE GOODS

• Slides http://www.slideshare.net/alanlok1/ansible-wordpress-wordcamp-toronto-2016

• Code https://github.com/alanlok/wcto2016-ansible-playbook

Page 3: Ansible + WordPress - WordCamp Toronto 2016

BECAUSE YOU NEED THEMGOALS

• Simple* and repeatable installs • Automate your tasks

*Simple ≠ Easy Sorry, everything takes effort

Page 4: Ansible + WordPress - WordCamp Toronto 2016

MASTER (WORDPRESS) BUILDER?

ARE YOU A

CC, Source: Flickr/VGB.Studios

Page 5: Ansible + WordPress - WordCamp Toronto 2016

A TOOL FOR ALL OF USANSIBLE

• Automate machine provisioning and deployments

• Agentless • Configuration management

• Idempotent

Page 6: Ansible + WordPress - WordCamp Toronto 2016

(TELL ME THE MAGIC)HOW DOES ANSIBLE FIT IN?

• An orchestration machine with a usable shell prompt (*NIX)

• Server(s) accessible by SSH to orchestrate changes

SSH

Page 7: Ansible + WordPress - WordCamp Toronto 2016

http://docs.ansible.com/ansible/intro_installation.htmlHOW TO INSTALL ANSIBLE

• CentOS/RH/Amazon Linux: sudo yum install ansible

• Debian: sudo apt-get install ansible

• OS X: sudo easy_install pip; sudo pip install ansible

• Windows: sorry :(

Page 8: Ansible + WordPress - WordCamp Toronto 2016

BASICSANSIBLE

Page 9: Ansible + WordPress - WordCamp Toronto 2016

THE THING YOU DOTASK AND HANDLER

• A task is the most granular “thing” you do. For example:

• Copy a file • Start a process • Create a file using Jinja2 syntax

• Tasks are linear, whereas handlers are invoked by task completion (similar to WordPress hooks)

• Tasks can loop, and may contain conditional evaluation

Page 10: Ansible + WordPress - WordCamp Toronto 2016

A CONTAINER FOR TASKS AND HANDLERSROLES

• Roles are sets of tasks and handlers that Ansible executes • Think shell script, but better organized and easier to read

• Roles can have default variables, and be overridden by a play

Page 11: Ansible + WordPress - WordCamp Toronto 2016

HOW ANSIBLE STITCHES IT TOGETHERPLAYBOOK

• A playbook is a collection of plays • A play is a collection of roles

• One can assign plays to a host or host group

http://docs.ansible.com/ansible/playbooks.html

Page 12: Ansible + WordPress - WordCamp Toronto 2016

CONFIGURATION MANAGEMENT’S BEST FRIENDVARIABLES

• Variables can be specified at 3 levels • Global (config / env /

command line) • Play • Host

• Don’t hard code configuration, leverage variables and set defaults for overriding

{x}http://docs.ansible.com/ansible/playbooks_variables.html

Page 13: Ansible + WordPress - WordCamp Toronto 2016

DEFINING WHO WE AREHOSTS

• A play can target a host or a group of hosts

• Inventory may be static or dynamic (eg. AWS)

• Specific host-related information to access server

• User must have sudo privileges to perform system tasks

Page 14: Ansible + WordPress - WordCamp Toronto 2016

TOGETHERPUTTING IT ALL

Page 15: Ansible + WordPress - WordCamp Toronto 2016

CONFIGURE A HOST

1.Make a SSH key pair ssh-keygen -t ecdsa -f deploy

2.Copy your key file to the host (deploy.pub) and append the file contents to ~/.ssh/authorized_keys

3.Ansible user needs sudo access (or “become” won’t work)

4. Install python modules python-httplib2 and libselinux-python

Page 16: Ansible + WordPress - WordCamp Toronto 2016

http://docs.ansible.com/ansible/intro_inventory.htmlCREATE YOUR HOST FILE

[wordpress] 172.16.12.146 ansible_user=alan ansible_ssh_private_key_file=deploy

Host Group

IP or FQDN Ansible options

Page 17: Ansible + WordPress - WordCamp Toronto 2016

YOU DON’T HAVE TO WRITE EVERY ROLEDOWNLOAD SOME ROLES

ansible-galaxy install sbaerlocher.wp-cli ansible-galaxy install linuxhq.ius ansible-galaxy install geerlingguy.apache ansible-galaxy install geerlingguy.php ansible-galaxy install geerlingguy.mysql ansible-galaxy install geerlingguy.php-mysql ansible-galaxy install geerlingguy.firewall

Page 18: Ansible + WordPress - WordCamp Toronto 2016

BECAUSE NOT ALL ROLES WORK OUT OF THE BOXMODIFING GALAXY ROLES

• Let’s check out 2 roles I modified https://github.com/alanlok/ansible-role-wordpress.git https://github.com/alanlok/ansible-role-wordpress-apache.git

• Modified from ansible-galaxy author darthwade’s roles

• Made more variables available for customization

• Made roles RedHat Linux friendly

• You can write your own roles too!

Page 19: Ansible + WordPress - WordCamp Toronto 2016

FILES IN YOUR STRUCTURECREATING YOUR OWN PLAYBOOK

•vault •wordpress-simple.yml

•group_vars •wordpress

•config

•roles •ansible-role-wordpress •ansible-role-wordpress-apache

•hosts

•wordpress-simple.yml

YAML file containing yourhost group’s variables

Your custom rolesin the roles directory

Which hosts should Ansible act onYour playbook

Where I like to keep my secrets

Page 20: Ansible + WordPress - WordCamp Toronto 2016

SECRET SAUCE TO MAKE IT UNIQUETHE GROUP VARIABLES

--- apache_user: "apache" apache_group: "apache" wp_version: 4.5 wp_site_name: 'site1' wp_install_dir: '/var/www/html/{{ wp_site_name }}' wp_db_name: '{{ wp_site_name }}' wp_db_user: '{{ wp_site_name }}_user' wp_db_host: 'localhost' wp_apache_hostname: '{{ wp_site_name }}.vm'

Yup, how else can I give a demo!

Page 21: Ansible + WordPress - WordCamp Toronto 2016

SECURE YOUR SECRETSANSIBLE-VAULT

• Create your own password variables by running ansible-vault create vault/wordpress-simple.yml

• This ansible file is encrypted once you save: --- wp_db_password: 'password' admin_db_password: 'root'

Page 22: Ansible + WordPress - WordCamp Toronto 2016

THE PLAYBOOK- hosts: wordpress

become: yes

vars_files:

- vault/wordpress-simple.yml

roles:

- geerlingguy.apache

- role: linuxhq.ius

ius_repos:

ius: True

- geerlingguy.php

- geerlingguy.mysql

- geerlingguy.firewall

- geerlingguy.php-mysql

- ansible-role-wordpress

- ansible-role-wordpress-apache

- sbaerlocher.wp-cli

Page 23: Ansible + WordPress - WordCamp Toronto 2016

LET’S RUN THIS…ansible-playbook --ask-vault-pass -i hosts wordpress-simple.yml

Page 24: Ansible + WordPress - WordCamp Toronto 2016

SORTA?IT’S DEPLOYED…

Page 25: Ansible + WordPress - WordCamp Toronto 2016

THE REAL VOODOOLET’S RUN SOME AD-HOC COMMANDS

• Configure WordPress for the first time ansible -i hosts wordpress --become -a "sudo -u apache wp core install --url\=site1.vm --title\=\"Yet another demo\" --admin_user\=alan --admin_password\=alan --admin_email\=\"[email protected]\" --path\=/var/www/html/site1"

• Update WordPress ansible -i hosts wordpress --become -a "sudo -u apache wp core update —path\=/var/www/html/site1"

• Update server: ansible -i hosts wordpress --become -a "yum update -y"

• Reboot server: ansible -i hosts wordpress --become -a "reboot"

Page 26: Ansible + WordPress - WordCamp Toronto 2016

— The LEGO® Movie

EVERYTHING IS AWESOME!!!

Page 27: Ansible + WordPress - WordCamp Toronto 2016

THANKS@alan_lok