Ansible
https://www.ansible.com
https://www.ansiblefordevops.com/
automation, outil de conf de gestion des infra (souvant via ssh, donc ne necessite pas d'avoir un agent qui tourne coté srv). Ansible utilise YAML (Yet Another Markup Language).
Ansible Playbook permet d'automatiser l'install et la conf de Drupal.
install (non testé)
Si pas dans ppa, l'ajouter et l'installer, puis créer un dossier pour le Playbook (par ex: mkdir ~/MyPlaybooks/drupal_setup ).
Créer le fichier ansible hosts (chaque playbook a un fichier hosts qui contient les serveurs à utiliser, tous accessibles via ssh) : vi ~/MyPlaybooks/drupal_setup/hosts
[drupal_hosts]
localhost
drupal_server_ip
création d'un role pour maj apt-get
mkdir ~/MyPlaybooks/drupal_setup/roles
mkdir ~/MyPlaybooks/drupal_setup/roles/update
Chaque role a 1 ou x taches, on crée un dossier pour toutes les taches associées à ce role, on y crée le fichier main.yml (indique à Ansible que faire quand il execute ce role) =>
mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks
nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml
contenu de main.yml (attention, un simple espace mal placé est génant)
---
- name: apt-get update the server
apt: update_cache=yes
Enfin, créer le role pour conf de PHP :
pour le role php: mkdir ~/MyPlaybooks/drupal_setup/roles/php
Ici, install avec apache (en installant php, apache suit)
nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml
---
- name: Install PHP and associated packages
apt: name=php5 state=latest
- name: Install PHP GD library
apt: name=php5-gd state=latest
notify:
- Restart Apache
mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers
nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml
---
- name: Restart Apache
service: name=apache2 state=restarted
Création du role pour conf de MySQL
mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml
---
- name: Install MySQL server
apt: name=mysql-server state=latest
- name: Install Apache module for MySQL authentication
apt: name=libapache2-mod-auth-mysql state=latest
- name: Install MySQL module for PHP
apt: name=php5-mysql state=latest
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml
---
- name: Install Python MySQLdb
apt: name=python-mysqldb state=latest
- name: Create the Drupal database
mysql_db: db={{ db_name }} state=present
- name: Create the Drupal user
mysql_user: >
name={{ db_user }}
password={{ db_password }}
priv={{ db_name }}.*:ALL
host=localhost
les chaines dans {{ }} sont des variables. Ici, on a 3 var: {{ db_user }}, {{ db_password}}
et {{ db_name }}
qu'on va définir plus loin.
ce role a 2 taches.
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml
---
- include: setup.yml
- include: create_db.yml
création du role pour installer drupal
On va installer git sur l'hote distant (necessaire car on va utiliser le module git d'ansible, pour cloner la dernière version stable de drupal), créer les fichiers settings.php et services.yml
et enfin modifier les perms.
mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks
nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml
---
- name: Install git
apt: name=git state=latest
- name: Clone Drupal
git: >
repo=http://git.drupal.org/project/drupal.git
dest=/var/www/html/drupal/
update=no
- name: Create settings.php
command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php
- name: Create services.yml
command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml
- name: Update permissions of settings.php
file: path=/var/www/html/drupal/sites/default/settings.php mode=777
- name: Update permissions of services.yml
file: path=/var/www/html/drupal/sites/default/services.yml mode=777
- name: Update permissions of files directory
file: >
path=/var/www/html/drupal/sites/default/files
mode=777
state=directory
recurse=yes
Créer un fichier pour utiliser tous les roles
On y indique les hotes qui vont lancer ce playbook, que sudo doit etre utilisé pour lancer toutes les taches du playbook, initialiser les variables par défaut, lancer tous les roles
nano ~/MyPlaybooks/drupal_setup/site.yml
---
- hosts: drupal_hosts
sudo: yes
vars:
- db_name: drupal
- db_user: drupal_user
- db_password: drupal_db_pass
roles:
- update
- php
- mysql
- drupal
connexion ssh
avant de lancer le playbook, ajouter les entrées des hotes dans ~/.ssh/known_hosts en lancant kk ssh (listés dans ~/MyPlaybooks/drupal_setup/hosts):
ssh localhost
ssh drupal_sudo_user@drupal_server_ip
drupal_sudo_user et pw doivent etre les meme sur tous les srv (localhost compris).
Ou encore, au lieu d'utiliser des pw, copier la clé publique ssh de l'utilisateur sudo du srv ansible vers le fichier authorized_keys des srv, de l'utilisateurs sudo drupal
note: ci dessous, utiliser alors ansible-playbook -i hosts site.yml -K
lancer le playbook
avec -k on demande le pw ssh ; -K pour le pw sudo
cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK
Avant de lancer ce script pour une nouvelle install (new srv), retirer les IP des srv déja installé dans ~/MyPlaybooks/drupal_setup/hosts - ou on écrase son install drupal :)
install drupal
la conf db se trouve dans la section "vars" du fichier ~/MyPlaybooks/drupal_setup/site.yml
http://your_server_ip/drupal
bien vérifier l'install sur les srv
nettoyage de la liste des hosts
par précaution (ne pas effacer les drupal), retirer les hosts de ~/MyPlaybooks/drupal_setup/hosts
un soucis ?
YAML n'aime pas les espaces, tab...
si erreur "fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking " -> il manque une entrée dans ~/.ssh/known_hosts