introduction
Ce tutoriel est le deuxième d’une série sur le déploiement d’applications PHP à l’aide d’Ansible sur Ubuntu 14.04. Le first tutorial couvre les étapes de base du déploiement une application et constitue un point de départ pour les étapes décrites dans ce didacticiel.
Dans ce didacticiel, nous verrons comment configurer les clés SSH pour prendre en charge les outils de déploiement / publication de code, configurer le pare-feu du système, provisionner et configurer la base de données (y compris le mot de passe!) Et configurer les planificateurs de tâches (crons) et les démons de file d’attente. L’objectif à la fin de ce didacticiel est de disposer d’un serveur d’applications PHP entièrement fonctionnel doté de la configuration avancée susmentionnée.
Comme dans le dernier tutoriel, nous utiliserons le framework Laravel comme exemple d’application PHP. Cependant, ces instructions peuvent être facilement modifiées pour prendre en charge d’autres frameworks et applications si vous en possédez déjà.
Conditions préalables
Ce tutoriel fait suite à la fin de the premier tutoriel de la série, et toutes les configurations et tous les fichiers générés pour ce tutoriel sont requis. Si vous n’avez pas encore terminé ce didacticiel, veuillez le faire avant de poursuivre avec ce didacticiel.
Étape 1 - Changement de référentiel d’applications
Dans cette étape, nous mettrons à jour le référentiel Git vers un exemple de référentiel légèrement personnalisé.
Étant donné que l’installation par défaut de Laravel ne nécessite pas les fonctionnalités avancées que nous allons configurer dans ce didacticiel, nous allons basculer le référentiel existant du référentiel standard vers un exemple de référentiel avec du code de débogage ajouté, juste pour indiquer que tout fonctionne correctement. . Le référentiel que nous allons utiliser se trouve à + https: // github.com / do-community / do-ansible-adv-php +
.
Si vous ne l’avez pas déjà fait, changez les répertoires en «+ ansible-php +» à partir du tutoriel précédent.
cd ~/ansible-php/
Ouvrez notre livre de jeu existant pour le modifier.
nano php.yml
Recherchez et mettez à jour la tâche «Cloner le référentiel git» afin qu’elle ressemble à ceci.
Mise à jour de la tâche Ansible
- name: Clone git repository
git: >
dest=/var/www/laravel
repo=
update=
sudo: yes
sudo_user: www-data
register: cloned
Enregistrez et lancez le livre de lecture.
ansible-playbook php.yml --ask-sudo-pass
Une fois l’exécution terminée, visitez votre serveur dans votre navigateur Web (c.-à-d. + http: /// +
). Vous devriez voir un message qui dit * "Impossible de trouver le pilote" *.
Cela signifie que nous avons échangé avec succès le référentiel par défaut de notre exemple de référentiel, mais que l’application ne peut pas se connecter à la base de données. C’est ce que nous nous attendons à voir ici et nous installerons et configurerons la base de données plus tard dans le tutoriel.
Étape 2 - Configuration des clés SSH pour le déploiement
Dans cette étape, nous allons configurer des clés SSH pouvant être utilisées pour les scripts de déploiement de code d’application.
Bien que Ansible soit idéal pour la maintenance et la configuration des serveurs et des applications, des outils tels que Envoy et Rocketeer sont souvent utilisés pour transmettre les modifications de code sur votre serveur et exécuter les commandes de l’application à distance. La plupart de ces outils nécessitent une connexion SSH permettant d’accéder directement à l’installation de l’application. Dans notre cas, cela signifie que nous devons configurer des clés SSH pour l’utilisateur + www-data
.
Nous aurons besoin du fichier de clé publique de l’utilisateur à partir duquel vous souhaitez envoyer votre code. Ce fichier se trouve généralement dans + ~ / .ssh / id_rsa.pub +
. Copiez ce fichier dans le répertoire + ansible-php +
.
cp ~/.ssh/id_rsa.pub ~/ansible-php/deploykey.pub
Nous pouvons utiliser le module Ansible + registered_key +
pour installer notre clé publique dans + / var / www / .ssh / illustrated_keys +
, ce qui permettra aux outils de déploiement de se connecter et d’accéder à notre application. La configuration doit uniquement connaître l’emplacement de la clé, à l’aide d’une recherche, et l’utilisateur pour lequel la clé doit être installée (+ www-data +
dans notre cas).
Nouvelle tâche Ansible
- name: Copy public key into /var/www
authorized_key: user=www-data key="{{ lookup('file', 'deploykey.pub') }}"
Nous devons également définir le shell utilisateur + www-data
afin de pouvoir nous connecter. Sinon, SSH autorisera la connexion, mais aucun shell ne sera présenté à l’utilisateur. Cela peut être fait en utilisant le module + user
, et en configurant le shell sur` + / bin / bash` (ou votre shell préféré).
Nouvelle tâche Ansible
- name: Set www-data user shell
user: name=www-data shell=/bin/bash
Maintenant, ouvrez le livre de jeu pour l’éditer afin d’ajouter les nouvelles tâches.
nano php.yml
Ajoutez les tâches ci-dessus à votre playbook + php.yml +
; la fin du fichier doit correspondre à la suivante. Les ajouts sont surlignés en rouge.
Php.yml mis à jour
. . .
- name: Configure nginx
template: src=nginx.conf dest=/etc/nginx/sites-available/default
notify:
- restart php5-fpm
- restart nginx
handlers:
. . .
Enregistrez et lancez le livre de lecture.
ansible-playbook php.yml --ask-sudo-pass
Lorsque Ansible a terminé, vous devriez pouvoir utiliser SSH en utilisant l’utilisateur + www-data
.
ssh www-data@
Si vous vous connectez avec succès, cela fonctionne! Vous pouvez maintenant vous déconnecter en tapant + logout +
ou en appuyant sur * CTRL + D *.
Nous n’aurons pas besoin d’utiliser cette connexion pour les autres étapes de ce didacticiel, mais cela vous sera utile si vous configurez d’autres outils, comme indiqué ci-dessus, ou pour le débogage général et la maintenance des applications, le cas échéant.
Étape 3 - Configuration du pare-feu
Dans cette étape, nous allons configurer le pare-feu sur le serveur pour n’autoriser que les connexions pour HTTP et SSH.
Ubuntu 14.04 est livré avec UFW (Uncomplicated Firewall) installé par défaut, et Ansible le prend en charge avec le module + ufw +
. Il possède un certain nombre de fonctionnalités puissantes et a été conçu pour être aussi simple que possible. Il est parfaitement adapté aux serveurs Web autonomes qui n’ont besoin que de quelques ports ouverts. Dans notre cas, nous voulons que le port 80 (HTTP) et le port 22 (SSH) soient ouverts. Vous pouvez également vouloir le port 443 pour HTTPS.
Le module + ufw +
propose différentes options permettant d’effectuer différentes tâches. Les différentes tâches que nous devons accomplir sont:
-
Activez UFW et refusez tout le trafic entrant par défaut.
-
Ouvrez le port SSH mais limitez-le pour empêcher les attaques par force brute.
-
Ouvrez le port HTTP.
Cela peut être fait avec les tâches suivantes, respectivement.
Nouveau tâches Ansible
- name: Enable UFW
ufw: direction=incoming policy=deny state=enabled
- name: UFW limit SSH
ufw: rule=limit port=ssh
- name: UFW open HTTP
ufw: rule=allow port=http
Comme auparavant, ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Ajoutez les tâches ci-dessus au playbook; la fin du fichier doit correspondre à la suivante.
Php.yml mis à jour
. . .
- name: Copy public key into /var/www
authorized_key: user=www-data key="{{ lookup('file', 'deploykey.pub') }}"
- name: Set www-data user shell
user: name=www-data shell=/bin/bash
handlers:
. . .
Enregistrez et lancez le livre de lecture.
ansible-playbook php.yml --ask-sudo-pass
Une fois cette opération terminée, vous devriez toujours pouvoir vous connecter via SSH (à l’aide de Ansible) ou HTTP à votre serveur. les autres ports seront maintenant bloqués.
Vous pouvez vérifier le statut de UFW à tout moment en exécutant cette commande:
ansible php --sudo --ask-sudo-pass -m shell -a "ufw status verbose"
Décomposer la commande Ansible ci-dessus:
-
+ ansible +
: Exécute une tâche Ansible brute, sans playbook. -
+ php
: Exécuter la tâche sur les hôtes de ce groupe. -
+ - sudo +
: Exécutez la commande en tant que+ sudo +
. -
+ - ask-sudo-pass +
: demande le mot de passe+ sudo +
. -
+ -m shell
: Exécutez le module` + shell`. -
+ -a" ufw status verbose "+
: Les options à transmettre au module. Comme il s’agit d’une commande+ shell +
, nous passons la commande brute (i.e.+ ufw status verbose
) directement sans aucune option` + key = value`.
Il devrait retourner quelque chose comme ça.
Sortie d’état UFW
| success | rc=0 >>
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22 LIMIT IN Anywhere
80 ALLOW IN Anywhere
22 (v6) LIMIT IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
Étape 4 - Installation des packages MySQL
Dans cette étape, nous allons configurer une base de données MySQL pour notre application.
La première étape consiste à s’assurer que MySQL est installé sur notre serveur en ajoutant simplement les packages nécessaires à la tâche d’installation des packages située en haut de notre manuel. Les paquets dont nous avons besoin sont + mysql-server +
, + mysql-client +
et + php5-mysql +
. Nous aurons aussi besoin de + python-mysqldb +
pour qu’Ansible puisse communiquer avec MySQL.
Alors que nous ajoutons des paquets, nous devons redémarrer + nginx +
et + php5-fpm +
pour nous assurer que les nouveaux paquets sont utilisables par l’application. Dans ce cas, nous avons besoin que MySQL soit disponible pour PHP afin qu’il puisse se connecter à la base de données.
Une des choses fantastiques à propos de Ansible est que vous pouvez modifier n’importe laquelle des tâches et relancer votre Playbook et les modifications seront appliquées. Cela inclut des listes d’options, comme avec la tâche + apt +
.
Comme auparavant, ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Recherchez la tâche + install packages +
et mettez-la à jour pour inclure les packages ci-dessus:
Php.yml mis à jour
. . .
- name: install packages
apt: name={{ item }} update_cache=yes state=latest
with_items:
- git
- mcrypt
- nginx
- php5-cli
- php5-curl
- php5-fpm
- php5-intl
- php5-json
- php5-mcrypt
- php5-sqlite
- sqlite3
. . .
Enregistrez et lancez le playbook:
ansible-playbook php.yml --ask-sudo-pass
Étape 5 - Configuration de la base de données MySQL
Dans cette étape, nous allons créer une base de données MySQL pour notre application.
Ansible peut parler directement à MySQL en utilisant les modules + mysql_ +
-fréfiés (par exemple, + mysql_db +
, + mysql_user +
). Le module + mysql_db +
fournit un moyen de s’assurer qu’une base de données portant un nom spécifique existe, afin que nous puissions utiliser une tâche comme celle-ci pour créer la base de données.
Nouvelle tâche Ansible
- name: Create MySQL DB
mysql_db: name=laravel state=present
Nous avons également besoin d’un compte utilisateur valide avec un mot de passe connu pour permettre à notre application de se connecter à la base de données. Une approche consiste à générer un mot de passe localement et à le sauvegarder dans notre manuel Ansible, mais cela n’est pas sûr et il existe un meilleur moyen.
Nous allons générer le mot de passe en utilisant Ansible sur le serveur lui-même et l’utiliser directement là où il est nécessaire. Pour générer un mot de passe, nous allons utiliser l’outil de ligne de commande + makepasswd +
et demander un mot de passe de 32 caractères. Etant donné que + makepasswd +
n’est pas utilisé par défaut sur Ubuntu, nous devrons également l’ajouter à la liste des paquets.
Nous dirons également à Ansible de se souvenir du résultat de la commande (c.-à-d. le mot de passe), afin que nous puissions l’utiliser plus tard dans notre livre de jeu. Cependant, comme Ansible ne sait pas s’il a déjà exécuté une commande + shell +
, nous créerons également un fichier lors de l’exécution de cette commande. Ansible vérifiera si le fichier existe et si c’est le cas, il supposera que la commande a déjà été exécutée et ne l’exécutera plus.
La tâche ressemble à ceci:
Nouvelle tâche Ansible
- name: Generate DB password
shell: makepasswd --chars=32
args:
creates: /var/www/laravel/.dbpw
register: dbpwd
Ensuite, nous devons créer l’utilisateur de base de données MySQL avec le mot de passe que nous avons spécifié. Ceci est fait en utilisant le module + mysql_user +
, et nous pouvons utiliser l’option + stdout +
sur la variable que nous avons définie lors de la tâche de génération de mot de passe pour obtenir le résultat brut de la commande shell, comme ceci: + dbpwd.stdout +
.
La commande + mysql_user +
accepte le nom de l’utilisateur et les privilèges requis. Dans notre cas, nous voulons créer un utilisateur nommé + laravel +
et lui donner tous les privilèges sur la table + laravel +
. Nous devons également indiquer à la tâche de ne s’exécuter que lorsque la variable + dbpwd +
a changed, ce qui ne le sera que lorsque la tâche de génération de mot de passe sera exécutée.
La tâche devrait ressembler à ceci:
Nouvelle tâche Ansible
- name: Create MySQL User
mysql_user: name=laravel password={{ dbpwd.stdout }} priv=laravel.*:ALL state=present
when: dbpwd.changed
En résumé, ouvrez le fichier + php.yml +
pour le modifier, afin que nous puissions ajouter les tâches ci-dessus.
nano php.yml
Premièrement, recherchez la tâche + install packages +
et mettez-la à jour pour inclure le paquet + makepasswd +
.
Php.yml mis à jour
. . .
- name: install packages
apt: name={{ item }} update_cache=yes state=latest
with_items:
- git
- mcrypt
- nginx
- php5-cli
- php5-curl
- php5-fpm
- php5-intl
- php5-json
- php5-mcrypt
- php5-sqlite
- sqlite3
- mysql-server
- mysql-client
- php5-mysql
- python-mysqldb
notify:
- restart php5-fpm
- restart nginx
. . .
Ajoutez ensuite la génération du mot de passe, la création de la base de données MySQL et les tâches de création d’utilisateur en bas.
Php.yml mis à jour
. . .
- name: UFW limit SSH
ufw: rule=limit port=ssh
- name: UFW open HTTP
ufw: rule=allow port=http
handlers:
. . .
-
Ne lancez pas encore le livret! * Vous avez peut-être remarqué que, bien que nous ayons créé l’utilisateur et la base de données MySQL, nous n’avons rien fait avec le mot de passe. Nous allons couvrir cela dans la prochaine étape. Lors de l’utilisation de tâches
+ shell +
dans Ansible, il est toujours important de ne pas oublier de terminer l’intégralité du workflow traitant de la sortie / des résultats de la tâche avant de l’exécuter afin d’éviter d’avoir à vous connecter manuellement et à réinitialiser l’état.
Étape 6 - Configuration de l’application PHP pour la base de données
Dans cette étape, nous enregistrerons le mot de passe de la base de données MySQL dans le fichier + .env +
de l’application.
Comme nous l’avons fait dans le dernier tutoriel, nous mettrons à jour le fichier + .env +
pour inclure les informations d’identification de la base de données que nous venons de créer. Par défaut, le fichier + .env +
de Laravel contient les lignes suivantes:
Fichier Laravel .env
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Nous pouvons laisser la ligne + DB_HOST +
telle quelle, mais nous mettrons à jour les trois autres en utilisant les tâches suivantes, qui sont très similaires aux tâches utilisées dans le tutoriel précédent pour définir + APP_ENV +
et + APP_DEBUG +
.
Nouveau tâches Ansible
- name: set DB_DATABASE
lineinfile: dest=/var/www/laravel/.env regexp='^DB_DATABASE=' line=DB_DATABASE=laravel
- name: set DB_USERNAME
lineinfile: dest=/var/www/laravel/.env regexp='^DB_USERNAME=' line=DB_USERNAME=laravel
- name: set DB_PASSWORD
lineinfile: dest=/var/www/laravel/.env regexp='^DB_PASSWORD=' line=DB_PASSWORD={{ dbpwd.stdout }}
when: dbpwd.changed
Comme nous l’avons fait avec la tâche de création d’utilisateur MySQL, nous avons utilisé la variable de mot de passe générée (+ dbpwd.stdout +
) pour renseigner le fichier avec le mot de passe et avons ajouté l’option + when +
pour s’assurer qu’il n’est exécuté que lorsque ` + dbpwd + `a changé.
Maintenant, comme le fichier + .env +
existait déjà avant l’ajout de notre tâche de génération de mot de passe, nous devrons enregistrer le mot de passe dans un autre fichier. La tâche de génération peut rechercher l’existence de ce fichier (que nous avons déjà configuré dans la tâche). Nous allons également utiliser les options + sudo +
et + + sudo_user +
pour indiquer à Ansible de créer le fichier en tant qu’utilisateur + www-data +
.
Nouvelle tâche Ansible
- name: Save dbpw file
lineinfile: dest=/var/www/laravel/.dbpw line="{{ dbpwd.stdout }}" create=yes state=present
sudo: yes
sudo_user: www-data
when: dbpwd.changed
Ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Ajoutez les tâches ci-dessus au playbook; la fin du fichier doit correspondre à la suivante.
Php.yml mis à jour
. . .
- name: Create MySQL User
mysql_user: name=laravel password={{ dbpwd.stdout }} priv=laravel.*:ALL state=present
when: dbpwd.changed
handlers:
. . .
-
Encore une fois, ne lancez pas encore le playbook! * Nous avons encore une étape à franchir avant de pouvoir lancer le playbook.
Étape 7 - Migration de la base de données
Dans cette étape, nous allons exécuter les migrations de base de données pour configurer les tables de base de données.
Dans Laravel, cela se fait en exécutant la commande + migrate +
(c’est-à-dire + php artisan migrate --force +
) dans le répertoire Laravel. Notez que nous avons ajouté le drapeau + - force
car l’environnement` + production` le requiert.
La tâche Ansible pour effectuer cela ressemble à ceci.
Nouvelle tâche Ansible
- name: Run artisan migrate
shell: php /var/www/laravel/artisan migrate --force
sudo: yes
sudo_user: www-data
when: dbpwd.changed
Il est maintenant temps de mettre à jour notre playbook. Ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Ajoutez les tâches ci-dessus au playbook; la fin du fichier doit correspondre à la suivante.
Php.yml mis à jour
. . .
- name: Save dbpw file
lineinfile: dest=/var/www/laravel/.dbpw line="{{ dbpwd.stdout }}" create=yes state=present
sudo: yes
sudo_user: www-data
when: dbpwd.changed
handlers:
. . .
Enfin, nous pouvons sauvegarder et exécuter le playbook.
ansible-playbook php.yml --ask-sudo-pass
Lorsque l’exécution est terminée, actualisez la page de votre navigateur et vous devriez voir un message disant:
your_server_ip / ’> http: ///
Queue: NO
Cron: NO
Cela signifie que la base de données est configurée correctement et fonctionne comme prévu, mais nous n’avons pas encore configuré de tâches cron ni de démon de file d’attente.
Étape 8 - Configuration des tâches cron
Dans cette étape, nous allons configurer toutes les tâches périodiques qui doivent être configurées.
Les tâches périodiques sont des commandes qui s’exécutent selon une planification définie et peuvent être utilisées pour effectuer un nombre quelconque de tâches pour votre application, telles que des tâches de maintenance ou l’envoi de mises à jour d’activité de courrier électronique - essentiellement tout ce qui doit être effectué périodiquement sans intervention manuelle de l’utilisateur. Les tâches périodiques peuvent être exécutées aussi souvent que vous le souhaitez, ou aussi rarement que vous le souhaitez.
Laravel est livré avec une commande Artisan appelée + schedule: run +
par défaut, qui est conçue pour être exécutée toutes les minutes et exécute les tâches planifiées définies dans l’application. Cela signifie que nous n’avons besoin d’ajouter qu’une seule tâche cron, si notre application tire parti de cette fonctionnalité.
Ansible a un module + cron +
avec un certain nombre d’options différentes qui traduisent directement les différentes options que vous pouvez configurer via cron:
-
+ job +
: La commande à exécuter. Obligatoire si état = présent. -
+ minute
,` + heure`,+ jour
,` + mois` et+ jour de la semaine +
: minute, heure, jour, mois ou jour de la semaine où le travail doit être exécuté, respectivement. -
+ special_time +
('+ reboot +,
+ annual +,' + annual +
,+ mensuel +
,+ hebdomadaire +
,+ daily +
,+ hourly +
): pseudonyme de spécification d’heure spéciale.
Par défaut, une tâche sera exécutée toutes les minutes, comme nous le souhaitons. Cela signifie que la tâche que nous voulons ressemble à ceci:
Nouvelle tâche Ansible
- name: Laravel Scheduler
cron: >
job="run-one php /var/www/laravel/artisan schedule:run 1>> /dev/null 2>&1"
state=present
user=www-data
name="php artisan schedule:run"
La commande + run-one +
est un petit assistant dans Ubuntu qui garantit que la commande n’est exécutée qu’une seule fois. Cela signifie que si une commande précédente + schedule: run +
est toujours en cours d’exécution, elle ne sera pas exécutée à nouveau. Cela est utile pour éviter le blocage d’une boucle dans une tâche périodique et, avec le temps, un nombre croissant d’instances de la même tâche sont démarrées jusqu’à ce que le serveur manque de ressources.
Comme auparavant, ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Ajoutez la tâche ci-dessus au playbook; la fin du fichier doit correspondre à la suivante.
Php.yml mis à jour
. . .
- name: Run artisan migrate
shell: php /var/www/laravel/artisan migrate --force
sudo: yes
sudo_user: www-data
when: dbpwd.changed
handlers:
. . .
Enregistrez et lancez le playbook:
ansible-playbook php.yml --ask-sudo-pass
Maintenant, actualisez la page dans votre navigateur. Dans une minute, il se mettra à jour pour ressembler à ceci.
your_server_ip / ’> http: ///
Queue: NO
Cron:
Cela signifie que le cron fonctionne correctement en arrière-plan. Dans le cadre de l’exemple d’application, un travail cron est exécuté toutes les minutes et met à jour une entrée d’état dans la base de données afin que l’application sache qu’elle est en cours d’exécution.
Étape 9 - Configuration du démon de file d’attente
A l’instar de la commande + schedule: run +
Artisan à l’étape 8, Laravel est également fournie avec un programme de traitement de file d’attente pouvant être démarré à l’aide de la commande queue: work - daemon +
Artisan. Dans cette étape, nous allons configurer le travailleur de démon de file d’attente pour Laravel.
Les travailleurs de la file d’attente sont similaires aux tâches périodiques en ce sens qu’ils exécutent des tâches en arrière-plan. La différence est que l’application place les travaux dans la file d’attente, soit via des actions effectuées par l’utilisateur, soit à partir de tâches planifiées via un travail périodique. Les tâches de file d’attente sont exécutées par le travailleur une à la fois et sont traitées à la demande lorsqu’elles se trouvent dans la file d’attente. Les tâches de file d’attente sont généralement utilisées pour des tâches qui prennent du temps, telles que l’envoi d’e-mails ou la création d’appels d’API vers des services externes.
Contrairement à la commande + schedule: run +
, ce n’est pas une commande qui doit être exécutée toutes les minutes. Au lieu de cela, il doit s’exécuter en permanence en tant que démon. Une méthode courante consiste à utiliser un package tiers, tel que supervisord, mais cette méthode nécessite de comprendre comment configurer et gérer ledit système. Il existe un moyen beaucoup plus simple de l’implémenter en utilisant cron et la commande + run-one +
.
Nous allons créer une entrée cron pour démarrer le démon travailleur de file d’attente et utiliser + run-one +
pour l’exécuter. Cela signifie que cron démarrera le processus lors de sa première exécution et que les exécutions ultérieures seront ignorées par + run-one +
pendant l’exécution du programme de travail. Dès que le travailleur s’arrête, + run-one +
permet à la commande de s’exécuter à nouveau et le travailleur de la file d’attente redémarre. C’est une méthode incroyablement simple et facile à utiliser qui vous évite d’avoir à apprendre à configurer et à utiliser un autre outil.
Avec tout cela à l’esprit, nous allons créer une autre tâche périodique pour exécuter notre programme de traitement des files d’attente.
Nouvelle tâche Ansible
- name: Laravel Queue Worker
cron: >
job="run-one php /var/www/laravel/artisan queue:work --daemon --sleep=30 --delay=60 --tries=3 1>> /dev/null 2>&1"
state=present
user=www-data
name="Laravel Queue Worker"
Comme auparavant, ouvrez le fichier + php.yml +
pour le modifier.
nano php.yml
Ajoutez la tâche ci-dessus au playbook; la fin du fichier doit correspondre à ce qui suit:
Php.yml mis à jour
. . .
- name: Laravel Scheduler
cron: >
job="run-one php /var/www/laravel/artisan schedule:run 1>> /dev/null 2>&1"
state=present
user=www-data
name="php artisan schedule:run"
handlers:
. . .
Enregistrez et lancez le playbook:
ansible-playbook php.yml --ask-sudo-pass
Comme auparavant, actualisez la page dans votre navigateur. Après une minute, la mise à jour ressemblera à ceci:
your_server_ip / ’> http: ///
Queue:
Cron: YES
Cela signifie que le travailleur de file d’attente travaille correctement en arrière-plan. Le travail cron que nous avons lancé à la dernière étape place un travail dans la file d’attente. Ce travail met à jour la base de données lorsqu’elle est exécutée pour montrer qu’elle fonctionne.
Nous avons maintenant un exemple d’application Laravel qui comprend des travaux cron et des travailleurs en file d’attente.
Conclusion
Ce didacticiel a abordé les sujets les plus avancés lors de l’utilisation de Ansible pour le déploiement d’applications PHP. Toutes les tâches utilisées peuvent être facilement modifiées pour convenir à la plupart des applications PHP (en fonction de leurs exigences spécifiques), et cela devrait vous donner un bon point de départ pour configurer vos propres playbooks pour vos applications.
Nous n’avons pas utilisé une seule commande SSH dans le cadre de ce didacticiel (mis à part la vérification du nom de l’utilisateur + www-data +
), et tout - y compris le mot de passe de l’utilisateur MySQL - a été configuré automatiquement. Après avoir suivi ce didacticiel, votre application est prête à fonctionner et prend en charge des outils permettant d’envoyer des mises à jour de code.