introduction
Ce tutoriel est le troisième d’une série sur le déploiement d’applications PHP à l’aide de Ansible sur Ubuntu 14.04. Le first tutorial couvre les étapes de base du déploiement une application; Le https://www.digitalocean.com/community/tutorials/how-to-deploy-an-advanced-php-application-using-ansible-on-ubuntu-14-04 [deuxième tutoriel] couvre des sujets plus avancés tels que bases de données, démons de file d’attente et planificateurs de tâches (crons).
Dans ce didacticiel, nous allons construire sur ce que nous avons appris dans les didacticiels précédents en transformant notre playbook Ansible à application unique en un livret de jeu prenant en charge le déploiement de plusieurs applications PHP sur un ou plusieurs serveurs. C’est la dernière pièce du puzzle en matière d’utilisation d’Ansible pour déployer vos applications avec un minimum d’effort.
Nous allons utiliser quelques applications simples Lumen dans le cadre de nos exemples. Cependant, ces instructions peuvent être facilement modifiées pour prendre en charge d’autres frameworks et applications si vous en possédez déjà. Il est recommandé d’utiliser les exemples d’applications jusqu’à ce que vous soyez prêt à modifier le livret.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de:
-
Deux gouttelettes mises en place en suivant les first et second des tutoriels de cette série.
-
Une nouvelle (troisième) Droplet Ubuntu 14.04 configurée comme la Droplet PHP d’origine dans la https://www.digitalocean.com/community/tutorials/how-to-deploy-a-basic-php-application-using-ansible-on -ubuntu-14-04 [premier tutoriel], avec un utilisateur sudo non root et des clés SSH. Ce droplet sera utilisé pour montrer comment déployer plusieurs applications sur plusieurs serveurs en utilisant un livre de lecture Ansible. Nous ferons référence aux adresses IP du Droplet PHP d’origine et de ce nouveau Droplet PHP en tant que
` et `
. -
Un fichier
+ / etc / hosts +
mis à jour sur votre ordinateur local avec les lignes suivantes ajoutées. Vous pouvez en savoir plus sur ce fichier à l’adresse https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts#step-six- % E2% 80% 94-setup-local-hosts-file- (facultatif) [étape 6 de ce tutoriel].
Lignes à ajouter n’importe où dans / etc / hosts
laravel.example.com one.example.com two.example.com
laravel.example2.com two.example2.com
Les exemples de sites Web que nous allons utiliser dans ce didacticiel sont + laravel.example.com +
, + one.example.com +
et + two.example.com +
. Si vous souhaitez utiliser votre propre domaine, vous devez mettre à jour votre https://www.digitalocean.com/community/tutorials/how-to-set-up-and-test-dns-subdomains-with-digitalocean- s-dns-panel # final-configuration [enregistrements DNS actifs] à la place.
Étape 1 - Définition des variables du livre de lecture
Dans cette étape, nous allons configurer des variables de playbook pour définir nos nouvelles applications.
Dans les tutoriels précédents, nous avons codé en dur toutes les spécificités de la configuration, ce qui est normal pour de nombreux playbooks exécutant des tâches spécifiques pour une application spécifique. Toutefois, lorsque vous souhaitez prendre en charge plusieurs applications ou élargir la portée de votre playbook, il n’a plus de sens de tout coder en dur.
Comme nous l’avons vu précédemment, Ansible fournit des variables que vous pouvez utiliser à la fois dans vos définitions de tâches et dans vos modèles de fichiers. Ce que nous n’avons pas encore vu, c’est comment définir manuellement des variables. Dans la partie supérieure de votre classeur, vous pouvez définir un paramètre + vars +
et définir vos variables à cet endroit.
Si vous ne l’avez pas déjà fait, changez les répertoires en "+ ansible-php +" à partir des tutoriels précédents.
cd ~/ansible-php/
Ouvrez notre livre de jeu existant pour le modifier.
nano php.yml
Le haut du fichier devrait ressembler à ceci:
Haut de php.yml original
---
- hosts: php
sudo: yes
tasks:
. . .
Pour définir des variables, nous pouvons simplement ajouter une section + vars +
dans, à côté de + hôtes +
, + sudo +
et + tâches +
. Pour que les choses restent simples, commençons par une variable très basique pour le nom d’utilisateur + www-data +
, comme suit:
Vars mis à jour dans php.yml
---
- hosts: php
sudo: yes
tasks:
. . .
Ensuite, parcourez et mettez à jour toutes les occurrences de l’utilisateur + www-data
avec la nouvelle variable` + {{www user}} + `. Ce format devrait être familier, car nous l’avons utilisé dans les apparences et pour les recherches.
Pour rechercher et remplacer à l’aide de nano, appuyez sur + CTRL + \ +
. Une invite s’affiche: * Rechercher (à remplacer): *. Tapez * www-data *, puis appuyez sur + ENTER
. L’invite changera en * Remplacer par: *. Ici, tapez * \ {\ {www user}} * et appuyez à nouveau sur + ENTER
. Nano vous guidera à travers chaque instance de + www-data
et demandera * Remplacer cette instance? *. Vous pouvez appuyer sur + y +
pour remplacer chacun par un ou sur + a +
pour tout remplacer.
-
Note *: Assurez-vous que la déclaration de variable que nous venons d’ajouter en haut n’a pas non plus changé. Il devrait y avoir 11 instances de
+ www-data
qui doivent être remplacées.
Avant d’aller plus loin, il convient de faire attention aux variables. Normalement, nous pouvons simplement les ajouter comme ceci, quand ils sont dans une ligne plus longue:
Exemple de tâche dans php.yml
- name: create /var/www/ directory
file: dest=/var/www/ state=directory owner= group= mode=0700
Toutefois, si la variable est la seule valeur de la chaîne, nous devons l’envelopper entre guillemets pour que l’analyseur YAML puisse la comprendre correctement:
Mise à jour de la tâche dans php.yml
- name: Run artisan migrate
shell: php /var/www/laravel/artisan migrate --force
sudo: yes
sudo_user:
when: dbpwd.changed
Dans votre playbook, cela doit se produire chaque fois que vous avez + sudo_user: {{wwwuser}} +
. Vous pouvez utiliser une recherche globale et remplacer de la même manière, en remplaçant * sudo_user: \ {\ {wwwuser}} * par * sudo_user: “\ {\ {wwwuser}}” *. Il devrait y avoir quatre lignes qui ont besoin de ce changement.
Une fois que vous avez changé toutes les occurrences, sauvegardez et lancez le livre de lecture:
ansible-playbook php.yml --ask-sudo-pass
Il ne devrait y avoir aucune tâche modifiée, ce qui signifie que notre variable + wwwuser +
fonctionne correctement.
Étape 2 - Définition des variables imbriquées pour la configuration complexe
Dans cette section, nous examinerons les variables d’imbrication pour les options de configuration complexes.
Dans l’étape précédente, nous avons défini une variable de base. Cependant, il est également possible d’imbriquer des variables et de définir des listes de variables. Ceci fournit la fonctionnalité nécessaire pour définir la liste des sites que nous souhaitons configurer sur notre serveur.
Tout d’abord, considérons le dépôt git existant que nous avons mis en place dans notre playbook:
Tâche git existante dans php.yml
- name: Clone git repository
git: >
dest=/var/www/laravel
repo=https://github.com/do-community/do-ansible-adv-php.git
update=yes
version=example
Nous pouvons extraire les informations utiles suivantes: nom (répertoire), référentiel, branche et domaine. Comme nous configurons plusieurs applications, nous aurons également besoin d’un nom de domaine pour pouvoir répondre. Ici, nous utiliserons + laravel.example.com +
, mais si vous avez votre propre domaine, vous pouvez le remplacer.
Cela donne les quatre variables suivantes que nous pouvons définir pour cette application:
Variables d’application
name: laravel
repository: https://github.com/do-community/do-ansible-adv-php.git
branch: example
domain: laravel.example.com
Maintenant, ouvrez votre livre de jeu pour l’édition:
nano php.yml
Dans la section supérieure + vars
, nous pouvons ajouter dans votre application une nouvelle liste d’applications:
Mise à jour des variables d’applications dans php.yml
---
- hosts: php
sudo: yes
vars:
wwwuser: www-data
...
Si vous lancez votre playbook maintenant (en utilisant + ansible-playbook php.yml --ask-sudo-pass +
), rien ne changera car nous n’avons pas encore configuré nos tâches pour utiliser notre nouvelle variable + applications +
. Toutefois, si vous accédez à «+ http: // laravel.example.com / +» dans votre navigateur, notre application d’origine devrait s’afficher.
Étape 3 - Mise en boucle des variables dans les tâches
Dans cette section, nous allons apprendre à parcourir des listes de variables dans des tâches.
Comme mentionné précédemment, les listes de variables doivent être bouclées dans chaque tâche pour laquelle nous souhaitons les utiliser. Comme nous l’avons vu avec la tâche + install packages +
, nous devons définir une boucle d’éléments, puis appliquer la tâche à chaque élément de la liste.
Ouvrez votre playbook pour le modifier:
nano php.yml
Nous allons commencer par quelques tâches faciles. Au milieu de votre livre de jeu, vous devriez trouver ces deux tâches + env +
:
Tâches env existantes dans php.yml
- name: set APP_DEBUG=false
lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false
- name: set APP_ENV=production
lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production
Vous remarquerez qu’ils sont actuellement codés en dur avec le répertoire + laravel +
. Nous voulons le mettre à jour pour utiliser la propriété + name +
pour chaque application. Pour ce faire, nous ajoutons l’option + with_items +
pour parcourir notre liste + applications +
. Dans la tâche elle-même, nous échangerons la référence + laravel +
pour la variable + {{item.name}} +
, qui devrait être familière des formats que nous avons utilisés auparavant.
Ça devrait ressembler à ça:
Mise à jour des tâches .env dans php.yml
- name: set APP_DEBUG=false
lineinfile: dest=/var/www//.env regexp='^APP_DEBUG=' line=APP_DEBUG=false
- name: set APP_ENV=production
lineinfile: dest=/var/www//.env regexp='^APP_ENV=' line=APP_ENV=production
Ensuite, passez aux deux tâches cron artisanales de Laravel. Elles peuvent être mises à jour exactement comme nous venons de le faire avec les tâches + env +
. Nous ajouterons également les éléments + item.name +
au paramètre + name +
pour les entrées cron, car Ansible utilise ce champ pour identifier chaque entrée cron de manière unique. Si nous les laissions tels quels, nous ne pourrions pas avoir plusieurs sites sur le même serveur, car ils écraseraient constamment chacun d’eux et seul le dernier serait sauvegardé.
Les tâches doivent ressembler à ceci:
Mise à jour des tâches cron dans php.yml
- name: Laravel Scheduler
cron: >
job="run-one php /var/www//artisan schedule:run 1>> /dev/null 2>&1"
state=present
user={{ wwwuser }}
name=" php artisan schedule:run"
- name: Laravel Queue Worker
cron: >
job="run-one php /var/www//artisan queue:work --daemon --sleep=30 --delay=60 --tries=3 1>> /dev/null 2>&1"
state=present
user={{ wwwuser }}
name=" Laravel Queue Worker"
Si vous sauvegardez et lancez le playbook maintenant (en utilisant + ansible-playbook php.yml --ask-sudo-pass +
), vous ne devriez voir que les deux tâches + cron +
mises à jour. Cela est dû au changement du paramètre + name +
. En dehors de cela, il n’y a eu aucun changement, ce qui signifie que notre liste d’applications fonctionne comme prévu et que nous n’avons encore apporté aucune modification à notre serveur à la suite de la refactorisation de notre playbook.
Étape 4 - Application de variables en boucle dans les modèles
Dans cette section, nous verrons comment utiliser les variables en boucle dans les modèles.
La mise en boucle des variables dans les modèles est très simple. Ils peuvent être utilisés exactement de la même manière que dans les tâches, comme toutes les autres variables. La complexité intervient lorsque vous considérez les chemins d’accès aux fichiers ainsi que les variables, comme dans certaines utilisations, nous devons prendre en compte le nom du fichier et même exécuter d’autres commandes en raison du nouveau fichier.
Dans le cas de Nginx, nous devons créer un nouveau fichier de configuration pour chaque application et indiquer à Nginx qu’il doit être activé. Nous souhaitons également supprimer notre fichier de configuration original + / etc / nginx / sites-available / default +
dans le processus.
Commencez par ouvrir votre Playbook pour l’éditer:
nano php.yml
Recherchez la tâche + Configure Nginx
(au milieu du livre de lecture) et mettez-la à jour comme nous l’avons fait avec les autres tâches:
Mise à jour de la tâche nginx dans php.yml
- name: Configure nginx
template: src=nginx.conf dest=/etc/nginx/sites-available/
notify:
- restart php5-fpm
- restart nginx
Pendant que nous sommes ici, nous ajouterons également deux tâches supplémentaires mentionnées ci-dessus. Tout d’abord, nous allons parler à Nginx de notre nouveau fichier de configuration de site. Cela se fait avec un lien symbolique entre les répertoires + sites-available +
et + sites-enabled +
dans + / var / nginx / +
.
Ajoutez cette tâche après la tâche + Configure nginx +
:
Nouvelle tâche de lien symbolique dans php.yml
- name: Configure nginx symlink
file: src=/etc/nginx/sites-available/{{ item.name }} dest=/etc/nginx/sites-enabled/{{ item.name }} state=link
with_items: applications
notify:
- restart php5-fpm
- restart nginx
Ensuite, nous voulons supprimer le fichier de configuration de site activé + default +
afin qu’il ne pose pas de problème avec nos nouveaux fichiers de configuration de site. Cela se fait facilement avec le module + fichier +
:
Nouvelle tâche de fichier php.yml
- name: Remove default nginx site
file: path=/etc/nginx/sites-enabled/default state=absent
notify:
- restart php5-fpm
- restart nginx
Notez que nous n’avions pas besoin de boucler + applications +
, nous recherchions un fichier unique.
Le bloc Nginx dans votre playbook devrait maintenant ressembler à ceci:
Mise à jour des tâches nginx dans php.yml
- name: Configure nginx
template: src=nginx.conf dest=/etc/nginx/sites-available/{{ item.name }}
with_items: applications
notify:
- restart php5-fpm
- restart nginx
- name: Configure nginx symlink
file: src=/etc/nginx/sites-available/{{ item.name }} dest=/etc/nginx/sites-enabled/{{ item.name }} state=link
with_items: applications
notify:
- restart php5-fpm
- restart nginx
- name: Remove default nginx site
file: path=/etc/nginx/sites-enabled/default state=absent
notify:
- restart php5-fpm
- restart nginx
Enregistrez votre playbook et ouvrez le fichier + nginx.conf
pour le modifier:
nano nginx.conf
Mettez à jour le fichier de configuration pour qu’il utilise nos variables:
Mise à jour de nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www//public;
index index.php index.html index.htm;
server_name ;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www//public;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Cependant, nous n’avons pas encore fini. Notez le + default_server +
en haut? Nous voulons uniquement inclure cela pour l’application + laravel
, pour en faire la valeur par défaut. Pour ce faire, nous pouvons utiliser une instruction IF de base pour vérifier si + item.name
est égal à` + laravel` et, le cas échéant, affiche + default_server
.
Il ressemblera à ceci:
Mise à jour de nginx.conf avec les conditions
server {
listen ;
listen [::]:80;
Mettez à jour votre + nginx.conf +
en conséquence et enregistrez-le.
Maintenant il est temps de lancer notre playbook:
ansible-playbook php.yml --ask-sudo-pass
Vous devriez remarquer que les tâches Nginx ont été marquées comme modifiées. Une fois l’exécution terminée, actualisez le site dans votre navigateur. Il devrait afficher la même chose qu’à la fin du dernier tutoriel:
Queue: YES
Cron: YES
Étape 5 - Mise en boucle de plusieurs variables ensemble
Dans cette étape, nous allons boucler plusieurs variables ensemble dans des tâches.
Il est maintenant temps de s’attaquer à un exemple de boucle plus complexe, à savoir les variables enregistrées. Afin de prendre en charge différents états et d’empêcher les tâches de s’exécuter inutilement, vous vous souviendrez que nous avons utilisé + register: cloned +
dans notre tâche Clone git repository pour enregistrer la variable + cloned +
avec l’état de la tâche. Nous avons ensuite utilisé quand: cloné | changé +
dans les tâches suivantes pour déclencher des tâches de manière conditionnelle. Nous devons maintenant mettre à jour ces références pour prendre en charge la boucle d’applications.
Commencez par ouvrir votre Playbook pour l’éditer:
nano php.yml
Recherchez la tâche Clone git repository:
Tâche git existante dans php.yml
- name: Clone git repository
git: >
dest=/var/www/laravel
repo=https://github.com/do-community/do-ansible-adv-php.git
update=yes
version=example
sudo: yes
sudo_user: "{{ wwwuser }}"
register: cloned
Comme nous enregistrons la variable dans cette tâche, nous n’avons pas besoin de faire ce que nous n’avons pas déjà fait:
Mise à jour de la tâche git dans php.yml
- name: Clone git repository
git: >
dest=/var/www/
repo=
update=yes
version=
sudo: yes
sudo_user: "{{ wwwuser }}"
register: cloned
Maintenant, descendez votre playbook jusqu’à trouver la tâche + composer create-project
:
Compositeur original dans php.yml
- name: composer create-project
composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
sudo: yes
sudo_user: "{{ wwwuser }}"
when: cloned|changed
Maintenant, nous devons le mettre à jour pour parcourir * * * + + applications + et + clonées +
. Ceci est fait en utilisant l’option + with_together
et en passant à la fois` + applications` et + cloné
. Comme + with_together
parcourent deux variables, l’accès aux éléments se fait avec` + item. # + , Où
+ # + `est l’index de la variable telle qu’elle est définie. Donc par exemple:
with_together:
- list_one
- list_two
+ item.0 +
fera référence à + list_one +
, et + item.1 +
fera référence à + list_two +
.
Ce qui signifie que pour + applications
, nous pouvons accéder aux propriétés via:` + item.0.name`. Pour + cloned +
, nous devons transmettre les résultats des tâches, accessibles via + cloned.results +
, puis nous pourrons vérifier s’ils ont été modifiés via + item.1.changed +
.
Cela signifie que la tâche devient:
Mise à jour de la tâche de composition dans php.yml
- name: composer create-project
composer: command=create-project working_dir=/var/www/ optimize_autoloader=no
sudo: yes
sudo_user: "{{ wwwuser }}"
when:
Maintenant, enregistrez et lancez votre playbook:
ansible-playbook php.yml --ask-sudo-pass
Il ne devrait y avoir aucun changement de cette exécution. Cependant, nous avons maintenant une variable enregistrée qui fonctionne bien dans une boucle.
Étape 6 - Variables et boucles complexes enregistrées
Dans cette section, nous étudierons des variables et des boucles enregistrées plus complexes.
La partie la plus compliquée de la conversion est la gestion de la variable enregistrée que nous utilisons pour la génération de mots de passe pour notre base de données MySQL. Cela dit, nous n’avons pas grand-chose de plus à faire dans cette étape que nous n’avons pas couverte, il nous suffit de mettre à jour plusieurs tâches à la fois.
Ouvrez votre livre de jeu pour le modifier:
nano php.yml
Trouvez les tâches MySQL, et dans notre premier passage, nous ajouterons simplement les variables de base, comme nous l’avons fait dans les tâches précédentes:
Mise à jour des tâches MySQL dans php.yml
- name: Create MySQL DB
mysql_db: name= state=present
- name: Generate DB password
shell: makepasswd --chars=32
args:
creates: /var/www//.dbpw
register: dbpwd
- name: Create MySQL User
mysql_user: name= password={{ dbpwd.stdout }} priv=.*:ALL state=present
when: dbpwd.changed
- name: set DB_DATABASE
lineinfile: dest=/var/www//.env regexp='^DB_DATABASE=' line=DB_DATABASE=
- name: set DB_USERNAME
lineinfile: dest=/var/www//.env regexp='^DB_USERNAME=' line=DB_USERNAME=
- name: set DB_PASSWORD
lineinfile: dest=/var/www//.env regexp='^DB_PASSWORD=' line=DB_PASSWORD={{ dbpwd.stdout }}
when: dbpwd.changed
- name: Save dbpw file
lineinfile: dest=/var/www//.dbpw line="{{ dbpwd.stdout }}" create=yes state=present
sudo: yes
sudo_user: "{{ wwwuser }}"
when: dbpwd.changed
- name: Run artisan migrate
shell: php /var/www//artisan migrate --force
sudo: yes
sudo_user: "{{ wwwuser }}"
when: dbpwd.changed
Ensuite, nous ajouterons + with_together +
pour pouvoir utiliser notre mot de passe de base de données. Pour notre génération de mot de passe, nous devons boucler sur + db pwd.results
, et nous pourrons accéder au mot de passe à partir de` + item.1.stdout`, puisque + applications
sera accessible via` + item.0 + `.
Nous pouvons mettre à jour notre playbook en conséquence:
Mise à jour des tâches MySQL dans php.yml
- name: Create MySQL DB
mysql_db: name={{ item.name }} state=present
with_items: applications
- name: Generate DB password
shell: makepasswd --chars=32
args:
creates: /var/www/{{ item.name }}/.dbpw
with_items: applications
register: dbpwd
- name: Create MySQL User
mysql_user: name={{ }} password={{ }} priv={{ }}.*:ALL state=present
when:
- name: set DB_DATABASE
lineinfile: dest=/var/www/{{ item.name }}/.env regexp='^DB_DATABASE=' line=DB_DATABASE={{ item.name }}
with_items: applications
- name: set DB_USERNAME
lineinfile: dest=/var/www/{{ item.name }}/.env regexp='^DB_USERNAME=' line=DB_USERNAME={{ item.name }}
with_items: applications
- name: set DB_PASSWORD
lineinfile: dest=/var/www/{{ }}/.env regexp='^DB_PASSWORD=' line=DB_PASSWORD={{ }}
when:
- name: Save dbpw file
lineinfile: dest=/var/www/{{ }}/.dbpw line="{{ }}" create=yes state=present
sudo: yes
sudo_user: "{{ wwwuser }}"
when:
- name: Run artisan migrate
shell: php /var/www/{{ }}/artisan migrate --force
sudo: yes
sudo_user: "{{ wwwuser }}"
when:
Une fois que vous avez mis à jour votre playbook, enregistrez-le et exécutez-le:
ansible-playbook php.yml --ask-sudo-pass
Malgré tous les changements que nous avons apportés à notre livre de jeu, aucune modification ne devrait être apportée aux tâches de la base de données. Avec les modifications apportées à cette étape, nous aurions dû terminer notre conversion d’un livre de lecture à application unique en un livre de lecture à applications multiples.
Étape 7 - Ajout de plus d’applications
Dans cette étape, nous allons configurer deux autres applications dans notre playbook.
Maintenant que nous avons repensé notre playbook pour utiliser des variables pour définir les applications, le processus d’ajout de nouvelles applications sur notre serveur est très simple. Ajoutez-les simplement à la liste de variables + applications +
. C’est là que la puissance des variables Ansible va vraiment briller.
Ouvrez votre livre de jeu pour le modifier:
nano php.yml
En haut, dans la section + vars +
, trouvez le bloc + applications +
:
Variable des applications existantes dans php.yml
applications:
- name: laravel
domain: laravel.example.com
repository: https://github.com/do-community/do-ansible-adv-php.git
branch: example
Ajoutez maintenant deux autres applications:
Mise à jour de la variable d’applications dans php.yml
applications:
- name: laravel
domain: laravel.example.com
repository: https://github.com/do-community/do-ansible-adv-php.git
branch: example
Enregistrez votre playbook.
Maintenant il est temps de lancer votre playbook:
ansible-playbook php.yml --ask-sudo-pass
Cette étape peut prendre un certain temps lorsque le compositeur configure les nouvelles applications. Une fois l’opération terminée, vous remarquerez qu’un certain nombre de tâches ont été modifiées et si vous regardez bien, vous remarquerez que chacun des éléments en boucle sera répertorié. La première, notre application originale devrait dire + ok +
ou + sauté +
, tandis que les deux nouvelles applications devraient dire + changé +
.
Plus important encore, si vous visitez les trois domaines de vos sites configurés dans votre navigateur Web, vous devriez remarquer trois sites Web différents.
Le premier devrait avoir l’air familier. Les deux autres doivent afficher:
This is example app one!
and
This is example app two!
Avec cela, nous venons de déployer deux nouvelles applications Web en mettant simplement à jour notre liste d’applications.
Étape 8 - Utilisation des variables de l’hôte
Dans cette étape, nous allons extraire nos variables pour héberger des variables.
En prenant du recul, les variables de livre de lecture sont bonnes, mais que faire si nous voulons déployer différentes applications sur différents serveurs en utilisant le même livre de lecture? Nous pourrions effectuer des vérifications conditionnelles sur chaque tâche pour déterminer le serveur qui l’exécute, ou nous pouvons utiliser host variables. Les variables hôte ressemblent à ce qu’elles ressemblent: des variables qui s’appliquent à un hôte spécifique, plutôt qu’à tous les hôtes d’un livre de jeu.
Les variables d’hôte peuvent être définies inline, dans le fichier + hosts +
, comme nous l’avons fait avec la variable + ansible_ssh_user +
, ou elles peuvent être définies dans un fichier dédié pour chaque hôte situé dans le répertoire + host_vars +
.
Tout d’abord, créez un nouveau répertoire avec notre fichier + hosts +
et notre playbook. Appelez le répertoire + host_vars +
:
mkdir host_vars
Ensuite, nous devons créer un fichier pour notre hôte. La convention utilisée par Ansible est que le nom du fichier corresponde à celui de l’hôte dans le fichier + hosts +
. Ainsi, par exemple, si votre fichier + hosts +
ressemble à ceci:
Fichier d’hôtes Ansible
[php]
ansible_ssh_user=sammy
Ensuite, vous devriez créer un fichier nommé + host_vars / your_first_server_ip +
. Créons cela maintenant:
nano host_vars/
Comme nos playbooks, les fichiers hôtes utilisent YAML pour leur formatage. Cela signifie que nous pouvons copier votre liste + applications
dans notre nouveau fichier hôte. Elle ressemble donc à ceci:
Nouveau fichier host_vars / your_first_server_ip
---
applications:
- name: laravel
domain: laravel.example.com
repository: https://github.com/do-community/do-ansible-adv-php.git
branch: example
- name: one
domain: one.example.com
repository: https://github.com/do-community/do-ansible-php-example-one.git
branch: master
- name: two
domain: two.example.com
repository: https://github.com/do-community/do-ansible-php-example-two.git
branch: master
Enregistrez votre nouveau fichier hosts et ouvrez votre playbook pour le modifier:
nano php.yml
Mettez à jour le haut pour supprimer toute la section + applications +
:
Haut de la page mis à jour php.yml
---
- hosts: php
sudo: yes
vars:
wwwuser: www-data
tasks:
. . .
Enregistrez le livre de lecture et lancez-le:
ansible-playbook php.yml --ask-sudo-pass
Même si nous avons déplacé nos variables de notre livre de jeu vers notre fichier hôte, le résultat devrait être exactement le même et aucun changement ne devrait être signalé par Ansible. Comme vous pouvez le constater, + host_vars +
fonctionnent exactement de la même manière que + vars +
dans les playbooks; ils sont juste spécifiques à l’hôte.
Les variables définies dans les fichiers + host_vars +
seront également accessibles dans tous les playbooks gérant le serveur, ce qui est utile pour les options et les paramètres courants. Cependant, veillez à ne pas utiliser un nom commun qui pourrait signifier différentes choses selon les playbooks.
Étape 9 - Déploiement d’applications sur un autre serveur
Dans cette étape, nous utiliserons nos nouveaux fichiers hôtes et déploierons des applications sur un second serveur.
Premièrement, nous devons mettre à jour votre fichier + hosts
avec notre nouvel hôte. Ouvrez-le pour l’édition:
nano hosts
Et ajoutez dans votre nouvel hôte:
Fichier d’hôtes Ansible
[php]
your_first_server_ip ansible_ssh_user=sammy
ansible_ssh_user=
Enregistrez et fermez le fichier.
Ensuite, nous devons créer un nouveau fichier hôtes, comme nous l’avons fait avec le premier.
nano host_vars/
Vous pouvez choisir une ou plusieurs de nos applications et les ajouter à votre fichier hôte. Par exemple, si vous souhaitez déployer notre exemple d’origine et les exemples deux sur le nouveau serveur, vous pouvez utiliser:
Nouveau fichier host_vars / your_second_server_ip
---
applications:
- name: laravel
domain: laravel.example2.com
repository: https://github.com/do-community/do-ansible-adv-php.git
branch: example
- name: two
domain: two.example2.com
repository: https://github.com/do-community/do-ansible-php-example-two.git
branch: master
Enregistrez votre playbook.
Enfin, nous pouvons lancer notre playbook:
ansible-playbook php.yml --ask-sudo-pass
Ansible mettra un certain temps à s’exécuter car il configure tout sur votre deuxième serveur. Lorsque cela est terminé, ouvrez les applications de votre choix dans votre navigateur (dans l’exemple, nous avons utilisé + laravel.example2.com +
+ two.example2.com +
) et confirmer qu’elles ont été configurées correctement. Vous devriez voir les applications spécifiques que vous avez choisies pour votre fichier hôte et votre serveur d’origine ne devrait pas être modifié.
Conclusion
Ce tutoriel prenait un livre de jeu entièrement fonctionnel pour une seule application et le convertissait pour prendre en charge plusieurs applications sur plusieurs serveurs. Combiné aux sujets abordés dans les tutoriels précédents, vous devriez avoir tout ce dont vous avez besoin pour écrire un livre de lecture complet pour le déploiement de vos applications. Comme dans les didacticiels précédents, nous ne sommes toujours pas connectés directement aux serveurs à l’aide de SSH.
Vous aurez remarqué à quel point il était simple d’ajouter plus d’applications et un autre serveur, une fois que nous avions défini la structure du livre de jeu. C’est la puissance de Ansible, et c’est ce qui le rend si flexible et facile à utiliser.