introduction
Ansible est un outil de gestion de la configuration que les administrateurs système utilisent pour automatiser les activités de gestion d'infrastructure.
Ansible utilise uniquement SSH pour exécuter des commandes à distance et n'a donc pas besoin d'un agent sur le serveur distant. Ceci rend Ansible préférable à d’autres outils populaires tels que Puppet ou Chef lorsque vous ne souhaitez pas installer d’agents sur les serveurs gérés.
De plus, il est beaucoup plus facile de démarrer avec Ansible, car il utilise YAML (Yet Another Markup Language), qui est plus simple que les langages de programmation plus puissants utilisés par d’autres outils.
Drupal est un CMS populaire dont l'installation prend du temps, mais qui est facile à automatiser. Dans ce tutoriel, nous allons créer un Playbook Ansible qui automatise l’installation et la configuration de Drupal et de toutes ses dépendances sur les systèmes qui exécutent Ubuntu 14.04.
Conditions préalables
Vous aurez besoin des éléments suivants:
-
Serveur Ubuntu 14.04 (qui est accessible via SSH); ce serveur exécutera Ansible et une copie locale de Drupal
-
Facultatif: serveurs Ubuntu 14.04 supplémentaires sur lesquels vous souhaitez installer Drupal
-
Un utilisateursudo sur chaque serveur; vous devez utiliser lessame username etsame password pour chaque serveur sur lequel vous souhaitez installer Drupal
-
Compréhension de base du fonctionnement d’une installation Drupal. Vous pouvez vous référer àHow To Install Drupal on an Ubuntu 14.04 Server with Apache, bien que vous n'ayez pas besoin de pré-installer Drupal
[[step-1 -—- install-ansible]] == Étape 1 - Installer Ansible
Ansible n'est pas disponible dans les référentiels par défaut utilisés parapt-get
. Par conséquent, ajoutez le référentielppa:rquillo/ansible
.
sudo add-apt-repository ppa:rquillo/ansible
Appuyez sur ENTER lorsque vous y êtes invité.
Mettez à jour les listes de paquets.
sudo apt-get update
Installez Ansible.
sudo apt-get install ansible
[[step-2 -—- create-a-directory-for-the-playbook]] == Étape 2 - Créer un répertoire pour le Playbook
Les jeux d’instructions d’Ansible s’appellent playbooks. C’est une bonne idée de stocker tous vos livres de lecture dans un seul répertoire. Créez un répertoire nomméMyPlaybooks.
mkdir ~/MyPlaybooks
Appelons notre playbookdrupal_setup
. Créez un nouveau répertoire nommédrupal_setup
.
mkdir ~/MyPlaybooks/drupal_setup
[[step-3 -—- create-a-hosts-file]] == Étape 3 - Créer un fichier hosts
Chaque playbook a généralement un fichierhosts
qui contient les noms des serveurs qu'il doit utiliser.
Dans ce tutoriel, nous allons installer Drupal surlocalhost et un autre serveur,drupal_server. Vous êtes libre d'ajouter plus de serveurs à ce fichier. N'oubliez pas que tous les serveurs que vous ajoutez doivent être accessibles via SSH.
Utiliseznano pour créer et modifier un fichier nomméhosts
.
nano ~/MyPlaybooks/drupal_setup/hosts
Laissez-le avoir le contenu suivant:
[drupal_hosts]
localhost
drupal_server_ip
Vous devez remplacerdrupalserverip par l’adresse IP de votre deuxième serveur. Vous pouvez lister ici autant d’adresses IP que vous le souhaitez; vous pouvez utiliser ce manuel pour installer Drupal sur un nombre quelconque de serveurs Ubuntu 14.04.
Note: Le fichier
hosts
est le fichier que vous devez mettre à jour si vous souhaitez réutiliser ce playbook à l'avenir pour configurer d'autres serveurs Drupal. Notez que vous devez supprimer les serveurs déjà configurés de la liste et ajouter vos nouvelles adresses IP de serveur avant de réexécuter le livre de lecture.
Enregistrez et fermez le fichier.
[[step-4 -—- create-a-role-to-apt-get-update]] == Étape 4 - Créer un rôle pour apt-get update
Créez un nouveau répertoire pour stocker tous les rôles du Playbook.
mkdir ~/MyPlaybooks/drupal_setup/roles
Nous devonsapt-get
mettre à jour les serveurs avant de faire quoi que ce soit d'autre, donc créez un répertoire pour le rôleupdate
.
mkdir ~/MyPlaybooks/drupal_setup/roles/update
Chaque rôle a une ou plusieurs tâches. Créez un répertoire nommétasks
pour contenir toutes les tâches associées à ce rôle.
mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks
Utiliseznano
pour créer et modifier un nouveau fichier de tâches nommémain.yml
. C'est le fichier qui indique à Ansible quoi faire quand il exécute ce rôle.
nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml
Dans ce fichier, utilisez le moduleapt
d'Ansible pour mettre à jour le système:
---
- name: apt-get update the server
apt: update_cache=yes
Assurez-vous que votre fichier ne contient pas d’espace supplémentaire; Ansible est pointilleux à ce sujet. Enregistrez et fermez le fichier.
[[step-5 -—- create-a-role-to-set-up-php]] == Étape 5 - Créer un rôle pour configurer PHP
Créez un répertoire pour le rôlephp.
mkdir ~/MyPlaybooks/drupal_setup/roles/php
Créez le répertoiretasks
pour ce rôle:
mkdir ~/MyPlaybooks/drupal_setup/roles/php/tasks
Drupal a besoin d'un serveur Web configuré pour utiliser PHP. Dans ce tutoriel, nous utilisons Apache. Lorsque nous installons PHP, Apache s’installant automatiquement, nous n’avons donc besoin d’aucune commande supplémentaire.
Utiliseznano pour créer et éditer lesmain.yml
pour le rôle php.
nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml
Utilisez le moduleapt
d'Ansible pour installer PHP5 (et les packages dont il dépend) et la bibliothèque PHP5 GD. Ajoutez ce qui suit au fichier:
---
- 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
Apache doit être redémarré après l'installation de la bibliothèque PHP GD. Par conséquent, ce rôle nécessite également un gestionnaire.
Tous les gestionnaires d'un rôle sont stockés dans un répertoire séparé. Créez un répertoire nomméhandlers
pour le rôle actuel.
mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers
Utiliseznano pour créer et modifier le fichiermain.yml
.
nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml
Ajoutez-y le code suivant:
---
- name: Restart Apache
service: name=apache2 state=restarted
Vous avez terminé la configuration de PHP et Apache.
[[step-6 -—- create-a-role-to-set-up-mysql]] == Étape 6 - Créer un rôle pour configurer MySQL
Drupal a besoin d'une base de données pour stocker les paramètres et le contenu. Dans ce tutoriel, nous utilisons MySQL.
Créez des répertoires pour ce rôle et ses tâches.
mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks
La première tâche de ce rôle installe MySQL et ses dépendances. Utiliseznano pour créer et modifier un fichier nommésetup.yml
.
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml
Dans ce fichier, nous dirons à Ansible d'utiliser à nouveau le moduleapt
pour installer:
-
mysql-server
-
libapache2-mod-auth-mysql
-
php5-mysql
Donc, ajoutez ce qui suit au fichier:
---
- 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
Notre rôle comporte un fichier de tâches supplémentaire. Comme Drupal a besoin de sa propre base de données MySQL et de son propre utilisateur, nous allons créer un fichier de tâches distinct pour les créer. Utiliseznano pour créer et modifier un fichier nommécreate_db.yml
.
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml
Ansible a des modules qui vous permettent de gérer MySQL. Dans cette tâche, nous utiliserons les modules suivants:
-
mysql_db
- Pour créer une nouvelle base de données pour Drupal. -
mysql_user
Pour créer un nouvel utilisateur et lui permettre d'accéder à la base de données.
Avant d'utilisermysql_db
oumysql_user
, nous devons nous assurer que le packagePython MySQLdb
est installé sur l'hôte distant. Utilisez le moduleapt
pour l'installer.
Ajoutez le contenu suivant au fichier:
---
- 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
Notez que les chaînes entre \ {\ {}} désignent des variables. Dans cette tâche, nous avons les variables{{ db_user }}
,{{ db_password}}
et{{ db_name }}
. Nous allons définir les valeurs de ces variables dans une étape ultérieure.
Ensuite, nous devons faire savoir à Ansible que ce rôle a deux tâches. Pour ce faire, nous créons un fichiermain.yml
.
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml
Ajoutez le code suivant à ce fichier:
---
- include: setup.yml
- include: create_db.yml
[[step-7 -—- create-a-role-to-install-drupal]] == Étape 7 - Créer un rôle pour installer Drupal
Il est maintenant temps de passer à l’installation de Drupal lui-même.
Créez des répertoires pour ce rôle et ses tâches.
mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks
Utiliseznano pour créer et modifier un fichier de tâches nommémain.yml
.
nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml
Dans cette tâche, nous indiquerons à Ansible d'effectuer les actions suivantes:
-
Installez
git
sur l'hôte distant. Ceci est nécessaire car nous utiliserons le modulegit
d'Ansible -
Utilisez le module
git
d'Ansible pour cloner la dernière version stable de Drupal à partir de son référentiel àhttp://git.drupal.org/project/drupal.git
. Les fichiers téléchargés sont placés dans/var/www/html/drupal
-
Créez les fichiers
settings.php
etservices.yml
à partir des fichiers par défaut -
Mettre à jour les autorisations de
settings.php
,services.yml
etsites/default/files
Ajoutez le code suivant au fichier:
---
- 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
Vous souhaiterez mettre à jour les autorisations pour ces fichiers ultérieurement, une fois les installations du navigateur terminées sur chaque serveur (sur chaque serveur plutôt que via Ansible).
[[step-8 -—- create-a-file-to-use-all-the-roles]] == Étape 8 - Créer un fichier pour utiliser tous les rôles
À ce stade, tous nos rôles sont prêts. Nous devons maintenant les utiliser.
Utiliseznano pour créer un fichier nommésite.yml
. C'est le fichier que nous allons réellement utiliser avec Ansible.
nano ~/MyPlaybooks/drupal_setup/site.yml
Dans ce fichier, nous effectuons les activités suivantes:
-
Spécifiez les hôtes sur lesquels ce Playbook sera exécuté
-
Spécifiez que
sudo
doit être utilisé pour exécuter toutes les tâches de ce Playbook -
Définir des valeurs par défaut pour les variables utilisées dans différents rôles
-
Exécuter tous les rôles
Ajoutez-y le code suivant:
---
- hosts: drupal_hosts
sudo: yes
vars:
- db_name: drupal
- db_user: drupal_user
- db_password: drupal_db_pass
roles:
- update
- php
- mysql
- drupal
Assurez-vous de changer la valeur de la variabledb_password
en autre chose quedrupal_db_pass
. Vous êtes libre de modifier également les valeurs des deux autres variables pour qu'elles correspondent à vos préférences.
[[step-9 -—- Establish-an-ssh-connection]] == Étape 9 - Etablissement d'une connexion SSH
Avant d'exécuter le Playbook, votre fichier~/.ssh/known_hosts
doit avoir une entrée pour chacun des hôtes mentionnés dans le fichierhosts
.
Un moyen simple de le faire est de se connecter une fois à chaque serveur répertorié dans le fichier~/MyPlaybooks/drupal_setup/hosts
de ce serveur, en utilisant SSH.
Connectez-vous àlocalhost
via SSH en utilisant la commande:
ssh localhost
Si c'est la première fois que vous vous connectez au serveur de cette façon, vous recevrez un message avec le message suivant:
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is b1:18:3d:19:15:21:39:5a:f7:9f:3c:37:68:ba:62:01.
Are you sure you want to continue connecting (yes/no)?
Une fois que vous avez dityes
, vous recevrez un message disant:
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Connectez-vous à tous les autres serveurs répertoriés dans le fichierhosts
:
ssh drupal_sudo_user@drupal_server_ip
Assurez-vous de remplacer le nom d'utilisateur et l'adresse IP par les informations réelles pour chaque serveur. Veuillez garder à l'esprit que le nom d'utilisateur sudo (drupal_sudo_user
dans l'exemple) et le mot de passe doivent être les mêmes pour chaque serveur, y comprislocalhost.
Note: Au lieu d'utiliser des mots de passe, vous pouvez copier la clé publique SSH de l'utilisateur sudo deAnsible server’s dans le fichier
drupal_sudo_user's
authorized_keys
sur chaque serveur géré.
Une fois que vous vous êtes connecté à chaque serveur, vous êtes prêt à exécuter le livre de lecture.
[[step-10 -—- run-the-playbook]] == Étape 10 - Exécutez le Playbook
Le Playbook est maintenant prêt à être testé. Lancez-le à l'aide de la commandeansible-playbook
. L'option-k
force Ansible à demander le mot de passe SSH, et n'est pas nécessaire si vous avez configuré l'authentification sans mot de passe. L'option-K
force Ansible à demander le mot de passe desudo
.
cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK
Entrez le mot de passe SSH et attendez que le Playbook s'exécute. Une fois l’exécution terminée, vous aurez une nouvelle installation de Drupal sur votre serveur.
Note: Vous pouvez omettre l'indicateur
-k
si vous avez ajouté la clé SSH de l'utilisateur sudo deAnsible server’s à chaque serveur géré.
Cela prendra quelques minutes et Ansible vous montrera ce qu’il fait à chaque étape.
Important: Si vous souhaitez exécuter ce script pour configurer plus de serveurs à l'avenir, vous devez supprimer les adresses IP des serveurs déjà configurés du fichier
~/MyPlaybooks/drupal_setup/hosts
, sinon Ansible écrasera votre Sites Drupal.
[[step-11 -—- set-up-drupal]] == Étape 11 - Configurer Drupal
Maintenant, vous pourrez utiliser un navigateur pour accéder à Drupal et terminer l'installation basée sur un navigateur, àhttp://your_server_ip/drupal/
.
Si vous avez besoin d'aide pour terminer le programme d'installation du navigateur pour Drupal, suivez les instructions dethis article.
Les paramètres de votre base de données seront les variables que vous définissez dans la sectionvars
du fichier~/MyPlaybooks/drupal_setup/site.yml
.
Vérifiez que chaque serveur a une installation Drupal réussie.
[[step-12 -—- clean-up-the-host-list]] == Étape 12 - Nettoyer la liste d'hôtes
Le moment est venu de supprimer les hôtes du fichier~/MyPlaybooks/drupal_setup/hosts
. Ainsi, si vous exécutez à nouveau le livre de lecture, vous n'écraserez pas accidentellement les hôtes déjà configurés.
Dépannage
Notez que YAML est sensible aux espaces. Si vous rencontrez des problèmes avec votre playbook, vous avez probablement une indentation incorrecte ou des espaces supplémentaires dans vos fichiers.yml
.
Si vous voyez une erreur qui ressemble à:
fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
Cela signifie que vous avez manqué l'ajout d'une entrée pour un ou plusieurs hôtes dans le fichier~/.ssh/known_hosts
.
Vous devrez d'abord établir une connexion SSH manuelle àlocalhost
ou au serveur distant cible. Ensuite, essayez de relancer le playbook.
Conclusion
Avec ce tutoriel, vous avez appris à créer un livre de jeu Ansible qui configure Drupal pour vous, avec Apache et MySQL. Avant d'utiliser ce manuel dans des systèmes de production, vous devrez vous en servir pour rendre l'installation plus sécurisée. Vous pouvez également utiliser les commandes Drush du livre de lecture pour gérer l’installation de Drupal.