Comment déployer une application PHP avancée en utilisant Ansible sur Ubuntu 14.04

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:

  1. Activez UFW et refusez tout le trafic entrant par défaut.

  2. Ouvrez le port SSH mais limitez-le pour empêcher les attaques par force brute.

  3. 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.

Related