introduction
Ansible est un moyen simple et sans agent d’automatiser votre infrastructure. Si vous vous retrouvez constamment à déployer WordPress, Ansible pourrait vous faire gagner beaucoup de temps.
Avec quelques lignes de YAML (un langage de balisage simple), nous allons automatiser le processus généralement fastidieux de configuration de WordPress sur un nouveau serveur Ubuntu 14.04. Nous installerons WordPress plus ou moins selon le processus décrit dans his tutorial, mais automatiquement.
Nous allons utiliser deux serveurs: un serveur de compilation exécutant Ansible et un serveur cible sur lequel nous installerons WordPress avec Ansible.
Conditions préalables
Pour compléter ce didacticiel, vous devez disposer des éléments suivants:
-
Un serveur de compilation exécutant Ubuntu 14.04. Nous allons installer Ansible sur ce serveur (appelé dans ce tutoriel le * build-server *). Nous allons nous connecter à ce serveur et tous les fichiers et commandes de ce tutoriel seront exécutés sur ce serveur.
-
Un serveur cible exécutant Ubuntu 14.04. Nous allons installer WordPress (via Ansible) sur ce serveur (appelé dans ce tutoriel le * wordpress-server *)
-
Sudo utilisateurs non root configurés pour les deux serveurs
-
Ajoutez la clé SSH de votre utilisateur sudo * build-server * à la commande sud_keys de votre utilisateur * wordpress-server *. Vous pouvez le configurer en suivant this tutorial. Vous devriez lancer le tutoriel à partir de votre * build-server * et télécharger la clé sur votre * wordpress-server *
(Facultatif) Accès sudo sans mot de passe
Il est * plus rapide * mais * moins sécurisé * d’utiliser un accès sudo sans mot de passe sur votre * wordpress-server *.
Pour donner ce privilège à notre utilisateur sudo sur * wordpress-server *, nous devrons éditer le fichier sudoers. Tapez + visudo +
pour éditer le fichier sudoers:
visudo
Ajoutez cette ligne à la fin:
ALL=(ALL) NOPASSWD: ALL
Ce doit être la * dernière ligne * du fichier. Il est important que ce soit la dernière ligne, sinon elle sera remplacée.
-
NB: * Editez toujours le fichier sudoers en utilisant la commande
+ visudo +
. Cela vérifiera vos modifications avant de sauvegarder le fichier - cela vous évitera de vous verrouiller accidentellement en dehors de la machine.
Ceci fait, vous devriez pouvoir exécuter la commande suivante sur le * wordpress-server * sans fournir de mot de passe:
sudo echo "Hello"
Maintenant, tout au long de ce tutoriel, vous pouvez exécuter les commandes + ansible-playbook +
sans l’indicateur + -K +
, de sorte que vous n’avez pas à entrer le mot de passe sudo manuellement.
ansible-playbook playbook.yml -i hosts -u
Étape 1 - Installation de Ansible
Dans cette section, nous installerons Ansible sur votre * build-server *.
SSH dans votre * build-server * et exécutez cette commande pour installer Ansible:
sudo apt-get install ansible -y
Vous pouvez vous assurer que Ansible est installé en exécutant:
ansible --version
Vous devriez voir en sortie quelque chose comme:
Outputansible 1.5.4
Étape 2 - Configuration de la structure de fichier
Maintenant que nous avons installé Ansible, préparons la structure de fichier de notre Playbook.
Créez un répertoire pour notre playbook.
cd ~
mkdir wordpress-ansible && cd wordpress-ansible
+ cd +
dans ce répertoire et créez deux fichiers: l’un appelé + playbook.yml +
(c’est ici que nous allons écrire les commandes pour installer WordPress) et l’autre appelé + hôtes +
(cela indique à Ansible sur quels serveurs s’exécuter les commandes):
touch playbook.yml
touch hosts
Il est recommandé de séparer nos livres de lecture en rôles. Vous pouvez considérer les rôles comme des modules réutilisables. Pour ce projet, nous allons créer quatre rôles:
-
serveur
-
php
-
mysql
-
wordpress
À partir du dossier racine du projet (+ ~ / wordpress-ansible
), créez-y un répertoire appelé` + roles` et + cd
:
mkdir roles && cd roles
Nous pouvons amorcer nos rôles avec un outil Ansible appelé + ansible-galaxy
. Pour chaque rôle que nous voulons créer, nous lancerons + ansible-galaxy init +
:
ansible-galaxy init server
ansible-galaxy init php
ansible-galaxy init mysql
ansible-galaxy init wordpress
Vous remarquerez que cela crée une structure de fichier complète pour chacun de nos rôles. Ceci est conforme aux meilleures pratiques d’Ansible. Pour la plupart, nous nous intéresserons au fichier + tasks / main.yml +
de chaque rôle.
À ce stade, nous devrions avoir la structure de fichier suivante:
[.]
|_ playbook.yml
|_ hosts
|_ [roles]
|_ [server]
|_ ...
|_ [php]
|_ ...
|_ [mysql]
|_ ...
|_ [wordpress]
|_ ...
Étape 3 - Rédaction du livre de jeu
Dans cette section, nous allons écrire les commandes pour installer WordPress sur notre serveur distant.
Inventaire (fichier hôtes)
Un inventaire Ansible informe Ansible des serveurs sur lesquels nous souhaitons installer WordPress. Nous pouvons exécuter nos playbooks pour les serveurs ou groupes de serveurs définis dans notre fichier d’inventaire (+ hôtes +
). Notre inventaire est très simple.
Éditer + hôtes +
:
nano ~/wordpress-ansible/hosts
Ajoutez la ligne pour + [wordpress] +
, et en dessous, l’adresse IP de votre * wordpress-server *:
les hôtes
[wordpress]
Playbook
Nous pouvons penser à un livre de jeu comme la définition de votre application WordPress. Notre playbook combinera les rôles que nous avons créés pour configurer une application utile (dans ce cas, un site WordPress).
Éditez le fichier de playbook:
nano ~/wordpress-ansible/playbook.yml
Ajoutez ce contenu, qui indique à Ansible sur quels hôtes exécuter les rôles (ceux du groupe + wordpress
dans le fichier` + hosts`), et quels rôles exécuter:
playbook.yml
- hosts: wordpress
roles:
- server
- php
- mysql
- wordpress
Déplacez-vous dans votre répertoire playbook:
cd ~/wordpress-ansible/
Assurez-vous que notre connexion de base du * build-server * au * wordpress-server * fonctionne en exécutant le playbook. Il ne fera encore rien; ça va juste tester la connexion:
ansible-playbook playbook.yml -i hosts -u -K
Entrez le mot de passe sudo de votre utilisateur sudo sur * wordpress-server * lorsque vous y êtes invité.
Vous devriez voir en sortie quelque chose comme:
Outputansible-playbook playbook.yml -i hosts -u -K
PLAY [wordpress] **************************************************************
GATHERING FACTS ***************************************************************
ok: [188.166.68.134]
PLAY RECAP ********************************************************************
188.166.68.134 : ok=1 changed=0 unreachable=0 failed=0
Cela indique que nous avons pu nous connecter au serveur. Cependant, nous n’avons pas encore défini de jeux, donc rien n’a été exécuté sur notre * wordpress-server *. Corrigeons cela en complétant les détails de nos quatre rôles.
Si cela échoue, vérifiez que vous pouvez SSH du * build-server * au * wordpress-server * en utilisant une clé SSH.
Étape 3 - Création de rôles
Serveur
Tout d’abord; configurons notre serveur. Pour cela, nous allons éditer le rôle + server
.
Le rôle serveur installera tous les logiciels dont nous avons besoin sur le serveur cible. Editer ce fichier:
nano roles/server/tasks/main.yml`
Ajoutez le contenu suivant. assurez-vous qu’il n’ya qu’une seule ligne avec + --- +
(il devrait y en avoir une par défaut):
rôles / serveur / tâches / main.yml
---
- 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:
- apache2
- mysql-server
- php5-mysql
- php5
- libapache2-mod-php5
- php5-mcrypt
- python-mysqldb
Cela fait ce qui suit:
-
Mettre à jour apt-cache (
+ apt-get update
) -
+ apt-get install
Apache, MySQL, PHP et les logiciels associés
Si vous êtes intéressé par les détails de ce que nous installons, vous pouvez consulter https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php- lamp-stack-on-ubuntu-14-04 [le tutoriel sur l’installation manuelle de LAMP sur Ubuntu 14.04].
Nous pouvons maintenant lancer notre playbook comme ceci:
ansible-playbook playbook.yml -i hosts -u -K
Vous devriez voir une sortie ressemblant à ceci:
Outputansible-playbook playbook.yml -i hosts -u -K
PLAY [wordpress] **************************************************************
GATHERING FACTS ***************************************************************
ok: [188.166.68.134]
TASK: [server | Update apt cache] *********************************************
ok: [188.166.68.134]
TASK: [server | Install required software] ************************************
[188.166.68.134] => (item=apache2,mysql-server,php5-mysql,php5,libapache2-mod-php5,php5-mcrypt,python-mysqldb)
PLAY RECAP ********************************************************************
Après avoir exécuté ceci, vous devriez pouvoir accéder à la page Apache par défaut à + http: /// +
. Impressionnant. Apache est maintenant installé et en cours d’exécution sur le * wordpress-server *.
Si votre construction se bloque indéfiniment au point de `+ TASK: [serveur | Update apt cache] + `, cela peut indiquer un manque d’autorisations sur le serveur cible. Assurez-vous que l’accès sudo est correctement configuré sur * wordpress-server *.
PHP
Réglons nos besoins en PHP. Nous le ferons dans le rôle PHP. Editez le fichier des tâches principales pour PHP:
nano roles/php/tasks/main.yml
Ajoutez ce qui suit (encore une fois, la ligne + --- +
devrait déjà être là):
roles / php / tasks / main.yml
---
- name: Install php extensions
apt: name={{ item }} state=present
sudo: yes
with_items:
- php5-gd
- libssh2-php
Cela installera les extensions PHP requises.
MySQL
Nous devons également configurer une base de données MySQL pour notre site WordPress. Nous ferons cela dans le rôle + mysql
.
Nous allons avoir besoin de quelques variables pour celui-ci. Pour un rôle, vous pouvez spécifier les valeurs par défaut de toutes les variables dans le fichier + defaults / main.yml +
.
nano roles/mysql/defaults/main.yml
Ajoutez le nom de votre base de données, votre nom d’utilisateur et votre mot de passe (que vous souhaitez créer), dans cet ordre. Assurez-vous de choisir un ++
sécurisé.
roles / mysql / defaults / main.yml
---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password:
Ajoutez les tâches pour créer notre base de données et un utilisateur pour y accéder.
nano roles/mysql/tasks/main.yml
Ajoutez le contenu suivant:
roles / mysql / tasks / main.yml
---
- 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=*.*:ALL
Ce rôle a les effets suivants:
-
Créer une base de données MySQL
-
Créer un utilisateur MySQL
-
Donner à cet utilisateur l’accès à notre base de données
Les variables sont automatiquement extraites de notre fichier précédent, vous n’avez donc rien à changer ici.
WordPress
Et maintenant, le moment que nous attendions tous… WordPress!
Une fois les exigences du serveur installées, nous pouvons configurer WordPress. Nous allons éditer le rôle + wordpress
.
Nous ajoutons quelques tâches différentes au fichier + roles / wordpress / tasks / main.yml +
, laissez-le donc ouvert pour cette section.
nano roles/wordpress/tasks/main.yml
Nous devons d’abord télécharger WordPress dans le répertoire + / tmp +
(les plus soucieux de la sécurité noteront que nous avons désactivé la validation des certificats, ce qui interromprait le téléchargement):
roles / wordpress / tasks / main.yml
---
- name: Download WordPress get_url:
url=https://wordpress.org/latest.tar.gz
dest=/tmp/wordpress.tar.gz
validate_certs=no
sudo: yes
Une fois téléchargé, nous extrayons le fichier gzip dans + / var / www +
, l’emplacement qu’Apache utilise pour stocker le contenu Web:
roles / wordpress / tasks / main.yml
- name: Extract WordPress unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
sudo: yes
Avec les fichiers extraits, mettons à jour la racine du document de site par défaut d’Apache pour qu’elle pointe vers notre site WordPress:
roles / wordpress / tasks / main.yml
- name: Update default Apache site
sudo: yes
lineinfile:
dest=/etc/apache2/sites-enabled/000-default.conf
regexp="(.)+DocumentRoot /var/www/html"
line="DocumentRoot /var/www/wordpress"
sudo: yes
Ceci mettra à jour le + DocumentRoot +
pour le site par défaut d’Apache pour pointer vers les fichiers WordPress que nous avons téléchargés à + / var / www / wordpress +
Vous remarquerez ici que nous avons ajouté un bloc + notify +
. Ceci est utilisé lorsque vous devez effectuer des tâches telles que le redémarrage de services après qu’une tâche s’est terminée avec succès. Les gestionnaires + notify +
ne seront notified que si notre tâche est changed.
Nous devons ajouter notre gestionnaire pour + restart apache
. Enregistrez ce que vous avez jusqu’à présent et ouvrez + roles / wordpress / handlers / main.yml +
pour le modifier:
nano roles/wordpress/handlers/main.yml
Ajoutez ce contenu:
roles / wordpress / handlers / main.yml
---
- name: restart apache
service: name=apache2 state=restarted
sudo: yes
Ce gestionnaire sera appelé lorsqu’une tâche spécifiant + notify: restart apache +
sera modifiée, ce qui obligera le serveur à redémarrer Apache.
-
Configuration de WordPress *
Retour à + roles / wordpress / tasks / main.yml +
.
Enfin, nous devons faire une configuration pour votre site WordPress:
Tout d’abord, nous copions le fichier de configuration exemple:
roles / wordpress / tasks / main.yml
- name: Copy sample config file
command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
sudo: yes
Mettez à jour certaines des constantes de ce fichier pour qu’elles correspondent aux informations de notre base de données:
roles / wordpress / tasks / main.yml
- name: Update WordPress config file
lineinfile:
dest=/var/www/wordpress/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: yes
Cette tâche trouvera les lignes contenant: + DB_NAME +
, + DB_USER +
, et + DB_PASSWORD +
dans notre fichier de configuration et les remplaceront par les variables de notre playbook.
Après avoir réussi les étapes ci-dessus, notre rôle dans wordpress contiendra deux fichiers d’intérêt.
Voici le fichier de tâches complet pour WordPress:
roles / wordpress / tasks / main.yml
---
- 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/ copy=no
sudo: yes
- name: Update default Apache site
sudo: yes
lineinfile:
dest=/etc/apache2/sites-enabled/000-default.conf
regexp="(.)+DocumentRoot /var/www/html"
line="DocumentRoot /var/www/wordpress"
notify:
- restart apache
- name: Copy sample config file
command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
sudo: yes
- name: Update WordPress config file
lineinfile:
dest=/var/www/wordpress/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: yes
Voici le fichier de redémarrage d’Apache (que vous auriez déjà créé):
roles / wordpress / handlers / main.yml
---
- name: restart apache
service: name=apache2 state=restarted
sudo: yes
Avaient fini! Exécutez le livre de lecture une dernière fois pour installer et configurer WordPress:
ansible-playbook playbook.yml -i hosts -u -K
Vous devriez pouvoir visualiser votre site WordPress en ligne à l’adresse suivante: + http: // your_server_ip +
.
image: https: //assets.digitalocean.com/articles/wordpress_1404/initial_config.png [Formulaire d’installation WordPress]
Vous pouvez compléter la configuration manuelle du site WordPress à partir d’ici.
Conclusion
Toutes nos félicitations! Vous pouvez maintenant installer un site WordPress sur n’importe quel serveur Ubuntu 14.04 en une seule commande:
ansible-playbook playbook.yml -i hosts -u -K
Tout ce que vous avez à faire est d’ajouter l’adresse IP de votre serveur cible à votre fichier + hosts +
et de vous assurer que vos autorisations sont définies correctement.
Prochaines étapes
Ce fut une introduction très rapide pour vous aider à démarrer avec Ansible et WordPress. Vous pourriez être intéressé par les améliorations suivantes:
-
Explorez le Ansible Galaxy et découvrez comment vous pouvez héberger vos propres rôles sur le Galaxy
-
Automatisez le processus d’installation de sorte qu’aucune configuration manuelle de votre site WordPress ne soit requise